【学习ios之路:C语言】一维数组,数组排序,字符数组

1.数组

数组,快速定义多个变量.

数组定义: 数据类型 数组名[数组元素的个数] = {值1, 值2, 值 3};

数组所占存储空间大小 = 数组元素个数 * 每个元素所占的存储空间大小.

 %lu  unsigned long 无符号的长整型. 无符号 >=0
 sizeof 存储大小值  //用来计算一个变量,类型,以及数组所占存储空间的大小.
 int a[5] = { 2, 7, 4, 3, 6 };
 printf("%lu\n", sizeof(arr)); //5
 int b[5] = { 2, 7, 4 }; printf("%lu\n", sizeof(arr)); //5
 int c[5] = { 0 }; printf("%lu\n", sizeof(arr)); //5,因为定义的空间大小为5
 int d[] = { 2, 7, 4, 3, 6 }; printf("%lu\n", sizeof(arr)); //5
</pre><pre>

获取数组中的元素:通过数组名 + 下标.  c语言不会检测数组下标越界.

    arr[5] = 20;
    printf("%d",arr[5]);//角标越界

1.字符串所占的空间?少要比字符串?度大1,因为字符串以‘\0’表?示结束。系统提供的字符串处理函数都是根据‘\0’来判断字符串是否结束。

     char arr[] = "ipho";
     printf("%lu\n", sizeof(arr)); //存储空间大小为 5,因为有默认的\0   <pre name="code" class="cpp"><pre name="code" class="cpp">     printf("%lu\n", strlen(arr)); //字符串长度为 4


例子:

1.讲数组中的每一个元素输出

   int arr[5] = {1, 3, 5, 6, 7};
    for (int i = 0; i < 5 ; i++) {
        printf("%d\n", arr[i]);
    }

2.给数组中的每一个元素赋值 [20, 40]

  int a[10] = {0};
    for (int i = 0 ; i < 10; i++) {
        a[i] = arc4random() % (40 - 20 + 1) + 20;
        printf("a[%d] is %d\n", i, a[i]);
    }

3.求数组中的最小值,给数组中的每一个元素赋值 [20 , 40].

    int a[10] ={0};</span>
     <span style="color:#000000;">for (int i = 0 ; i < 10; i++) {
        a[i] = arc4random() % (40 - 20 + 1) + 20;
        printf("a[%d] is %d\n", i, a[i]);
    }

    int  min = 0;
    for (int i = 0; i < 10; i++) {
        if (i == 0) {
            min =a[0];
        } else {
            if (min > a[i]) {
                min = a[i];
            }
        }
    }
    printf("最大值为:%d\n", min);

4.定义 一个10位数组,数组中的元素取值范围为[30,50],求所有元素的和.

    int arr[10] = {0};
    for (int i = 0 ; i < 10 ; i++) {
        arr[i] = arc4random() % ( 50 - 30 + 1 ) + 30;
        printf("%d\n",arr[i]);
    }
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += arr[i];
    }
    printf("所有元素之和为:%d\n", sum);

2.数组排序

冒泡排序:

涉及到双循环:

外层循环控制趟数,外层减一, 可减可不减,-1目的是提供程序的执行效率.

内层循环控制比较次数. 内层减一,必须减,防止比较时越界.

内层 - i ,可以不减, -i目的是缩小无序区的范围,提高程序的执行效率.

代码如下:

    int  a[10] = {0};
    for (int i = 0; i < 10; i++) {
        a[i] = arc4random() % (15 - 10 + 1 ) + 10;
        printf("%d  ", a[i]);
    }
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 10 - 1 - i ; j++) {
            if (a[j] < a[j+1]) { //降序排列
                int  temp  =a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
    printf("\n");
    for (int  i = 0; i < 10 ; i++) {
        printf("%d  " ,a[i]);
    }

3.字符数组

char str[4]= {‘F‘, ‘R‘,‘‘,‘L‘,‘N‘};

printf("%lu\n",sizeof(str5));

char str[] = "phone"; //字符串

字符串隐藏字符 \0,作为字符串结束标志.

如果不指定元素个数,则系统开辟空间,会自动识别初始值的元素个数开辟空间.

    char str5[]= {'F', 'R', 'L', 'N','d'};//如果定义空间大小[6],sizeof为6,长度为5
    char str6[]="frln";
    printf("str5 = %lu\n",sizeof(str5));  //空间大小为5
    printf("str6 = %lu\n",sizeof(str6)); // 空间大小为5,隐藏\0
    printf("str5 =%lu\n",strlen(str5)); // 长度5
    printf("str33 =%s\n",str5); // FRLND
    printf("str44 =%s\n",str6); // frln
    printf("str6 =%lu\n",strlen(str6)); // 长度4

如何输出字符串?

数组名:能够代表数组的首地址,是一个常量.不能改变,不能赋值.

char str[] = "iphone";

printf("%s\n", &str[4]);//取出 ne,从第四个开始,取出以后的内容

printf("%c\n",str[4]);

3.字符串处理

    char str[10] = "language";
    //字符串的长度.
    printf("%lu\n", strlen(str)); //8
    
    //字符串拷贝
    strcpy(str ,"aa");
    printf("%s\n",str); //因为有隐藏字符 \0,所以只能打印出aa.
    //字符串 拼接
    strcat(str,"bb");
    printf("%s\n",str);//因为有隐藏字符 \0,所以只能打印出aabb.但是后面还存在值,如下
    printf("%c\n",str[6]); // 结果为g
    
    //字符串比较
    printf("%d\n",strcmp("aa","bb"));        //  b - a = -1
    printf("%d\n",strcmp("da","bb"));       //  (d -b) + (b - a ) =2
    printf("%d\n",strcmp("bba","bb"));     //如上 97
时间: 2024-08-14 10:32:03

【学习ios之路:C语言】一维数组,数组排序,字符数组的相关文章

【学习ios之路:C语言】数组.循环.语句总和运用试题练习

1).求一个数组中的第二大值.数组中的值范围10 - 30 ,存储空间大小为10. 代码如下: int a[10] = {0}; int max = 0, secMax = 0; //定义第一大值,第二大值. for (int i = 0; i< 10; i++) { a[i] = arc4random() %(30 - 10 + 1) + 10;//随机值 10-30 printf("a[%d] = %d\n" ,i ,a[i]); } for (int i = 0 ; i &

【学习ios之路:C语言】指针

指针 1.指针定义,即简单用法. <span style="font-size:14px;"> //指针变量:专门用来存储地址的变量. int *p = NULL;//NULL == 0 /** * 变量定义时: * (int *):指针类型 * p: 变量名 NULL:初始值. * NULL(指向了一个无效的区域) * *的作用: 告诉编译器,后面变量是指针变量,用来存储地址. * int作用: 1.当通过指针变量取数据时,一次性读取几个字节的数据. 2.当指针变量+1时

【学习ios之路:C语言】②高级指针应用

1.指针与字符数组 <span style="font-size:14px;"> /** 定义字符串的2种方式 * 1.利用数组 * char name[] = "itcast" * *特点:字符串里面的字符是可以修改的 * *使用场合:字符串的内容需要经常修改. * 2.利用指针 * char *name = "itcast"; * *特点:字符串其实是一个常量字符串,里面的字符是不能修改的; * *使用场合:字符串内容不需要修改,

【学习ios之路:C语言】进制.位运算.栈

1.进制转换 1).10进制转为N进制.方法:(连除倒取余). 2).N进制转换为10进制.方法:(按权求和法):当前位上的数乘以基数的位数减1次方. 例: 0b1111 ---- 1* 2^3 + 1*2^2 +1 * 2^1 +1*2^0 = 15; 038 ----- 3*16^1 +8*16^0 = 56; 3).N进制转换N进制. 例如: 二进制 --- 16进制 1010   0011  ----  A 3 1111   0011  ----  F 3 int a = 010;//8

【学习ios之路:C语言】总结整理:学好Object-C---C语言必备知识点

一.基本数据类型.常量.变量.运算符 1.数据类型 int. short.char.long.float.double. 2.常量的分类.(1).整型常量 (2)浮点型常量 (3)字符常量 (4)字符串常量. 3.常量的特性:常量存储在常量区,常量区的内容不可被更改. 4.变量的定义与本质.数据类型 变量名 = 初值 . 本质变量就是一个容器. 5.变量名的命名规范 6.运算符. (1)赋值运算符 = (2)算数运算符 +  -  *  /  %  ++  -- (3)复合运算符  +=  -+

【学习ios之路:C语言】存储区内存划分

一. 内存存储区的划分: 1.栈区:栈区主要存放函数内部定义的变量,数组.函数调用时,开辟空间,函数执行完毕,回收空间,空间的开辟与回收有系统管理. 2.堆区:堆区最大的特点:空间的开辟与释放有开发人员手动管理. 3.全局区静态区:主要存放函数外部定义的全局变量以及静态变量,空间一旦开辟,就不会回收.直到应用程序执行结束. 4.常量区:存储常量.1.整形常量.2.浮点型常量.3,字符串常量.4.字符串常量. 5.代码区:存放程序编译之后生成的cpu指令. 二.malloc,在堆区开辟空间. //

【学习ios之路:C语言】小程序:实现类似ATM取款机功能.

小程序:模拟ATM机取款的过程 1).定义两个能保存5个整形数的数组,一个用于保存5个人的卡号,一个用于保存对应卡号的密码 2).判断输入的卡号是否在数组中. 3).如果在数组中就让输入密码,判断是否和卡号对应的密码匹配. 4).判断密码,24小时内只允许输入3次错误的密码.输入错误应该提示还剩下的输入次数,3次都输入错误提示24小时内不允许操作该卡. 5).密码正确就让用户对该账户进行相应的操作. 6).注意取款的限制. 7).述功能对于一个ATM机是循环的过程,也就是说每个客户都会按照上面的

【学习ios之路:C语言】函数及递归的简单应用

函数定义: 返回值类型 函数名(形参列表){函数体(函数的实现内容)}; 函数定义的四种形式: //函数定义第一种形式: 无参数, 无返回值 void byMilk() { //如果没有参数,小括号必不可少. printf("没钱\n"); } //函数名的命名规范:由多个英文单词组成,除了第一个单词的首字母小写,其余单词首字母大写. //函数定义第二种形式,有返回值,无参数 float salary() { printf("同志们辛苦了\n"); return 0

【学习ios之路:C语言】指针函数

指针函数int max(int a, int b); *   函数指针:指向一个函数的指针变量.' *   函数的类型:返回值类型+参数 *   函数指针变量类型: int (*)(int x, int y) *   指针变量的名字:max *   初始值:NULL *   max 可以指向一个返回值是int型并且有两个int型的参数的函数. 应用:学生结构体按照姓名,年龄,分数升序排序 1.函数的声明 typedef struct student{ char name[20]; int age