C语言基础篇(四)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//函数的声明
void changeSalar(int x);
void changeArray(int arr[5]);



int main(int argc, const char * argv[])
{
    
    
    /*
     C语言的数组:
     1.数组的概念及定义
     
     2.访问数组
     
     3.操作数组
     
     4.字符数组 和 字符串数组
     
     5.数组作为函数参数
     
     6.二位数组
     
     7.结构体的定义及使用
     
     
     */
    
    /*
     数组的概念
        数组是一个集合,它在计算机内存空间中是一串连续的地址空间,它可以存储多个同类型的 变量
     
     数组是一个存储多个 同类型 变量 连续的 集合
     
     数组的定义:
         数组的类型  数组名[长度] = {元素1,元素2,...};
     
     */
    
    //基本数据类型数组
    int array1[4] = {1,4,5,7};
    int array2[] = {1,5};
    int array3[10] = {1,3,6,7};//剩下的6个是零
    float array6[] = {3.9,45};
    float array5[] = {3.4,4,5};
    
    //字符数组
    char str[] = {'b','o','k','a','n'};
    
    //字符串数组
   char str1[] = "bokan";
    
    /*
     访问数组的元素,下标访问
     
     在C语言中,下标是从0开始的,因为数组的元素是顺序存储的,所以后面的元素下标依次累甲一,数组最后一个元素的下标为数组个数减去一
     
     
     */
   
    int element = array1[2];
    printf("element = %d\n",element);
    
    //求数组元素的个数  sizeof
    int count = sizeof(array1)/sizeof(int);
    printf("count = %d\n",count);
    for (int i = 0; i<count; i++)
    {
        printf("array1[%d] = %d\n",i,array1[i]);
    }
    
    //操作数组
    int array[] = {1,5,6,8,9,10};
    int a = sizeof(array)/sizeof(int);
    printf("a = %d\n",a);
    
    //求数组里面元素的和
    int array[] = {1,5,6,8,9,10};
    int a = sizeof(array)/sizeof(int);
    printf("a = %d\n",a);
    int sum = 0;
    for (int i = 0; i<a; i++)
    {
        sum += array[i];
   
   }
    printf("sum = %d\n",sum);
    
    //将数组倒序排序
    int tmp;
    for (int i = 0; i<count/2; i++)
    {
        tmp = array1[i];
        array1[i] = array1[count-1 - i];
        array1[count -1-i] = tmp;
    }
    for (int i = 0; i < count; i++)
    {
        printf("array1[%d] = %d\n",i,array1[i]);
    }
    /*
     注意:
     1.数组的定义必须要由大小
     2.数组只能存放同一类型的变量
     3.数组的元素是用下标访问,且下标从0开始
     4.数组的长度 = sizeof(数组变量名)/sizeof(数组的类型)
     */
    
    
    /*练习
     
     随机产生20个在[1,100]的数,且此20个数不相同,存放到数组中,求和,求最大值,求最小值,求平均数
     arc4random()  //随机产生数
     #include<stdlib.h>
     
     */
    int arrayNum[20];
    int i = 0;
    do {
        int num = arc4random()%100+1;
        if (i == 0)
        {
            arrayNum[0] = num;
            i++;
        }
        int j =0;
        for (j = 0; j<i; j++)
        {
            if (arrayNum[j] == num)
            {
                break;
            }
        }
        if (j == i)
        {
            arrayNum[i] = num;
            i++;
        }
        
    } while (i<20);
    for(int i = 0; i<20; i++)
    {
        printf("arrayNum[%d] = %d\n",i,arrayNum[i]);
    }
    
      //求和   求最大值    求最小值   求平均值
    int Sum = 0,Max,Min,par;
    for (i = 0; i < 20; i++)
     {
         Sum += arrayNum[i];
    }
    printf("Sum = %d\n",Sum);
    Max = arrayNum[0];
    for (i = 1; i<20; i++)
    {
        if (Max<arrayNum[i])
        {
            Max = arrayNum[i];
        }
    }
    printf("Max = %d\n",Max);
    Min = arrayNum[0];
    for (i = 1; i<20; i++)
    {
        if (Min>arrayNum[i])
        {
            Min = arrayNum[i];
        }
    }
    printf("Min = %d\n",Min);
    par = Sum/20;
    printf("par = %d\n",par);
    



    //冒泡排序算法
   
    int array1[] = {1,11,4,3,2,9,10,15,5,6,7,8};
    int count = sizeof(array1)/sizeof(int);
    printf("排序前的顺序:");
    for (int i = 0; i<count; i++)
    {
        printf("%d ",array1[i]);
    }
    printf("\n");
    //排序开始,外层循环为趟数,比数组元素个数少一
    for (int i = 0; i<count-1; i++)
    {
        //每趟排序所用循环
        for (int j = 0; j<count-1-i; j++)
        {
            if (array1[j]>array1[j+1])
            {
               int temp = array1[j];
                array1[j] = array1[j+1];
                array1[j+1] = temp;
            }
        }
        printf("第%d趟循环排序的结果为: ",i+1);
        for (int k = 0; k<count; k++)
        {
           printf("%d ",array1[k]);
        }
        printf("\n");
  
   }
    printf("冒泡排序后的值为:\n");
    for (int i = 0; i<count; i++)
    {
        printf("array1[%d] = %d\n",i,array1[i]);
    }
    
    //字符数组 和 字符串数组
    char c1[] = {'i','b','k','a','n'};
    char c2[] = {'w','i','s','d','o','m'};
    
    /*
     字符数组:
     如果花括号提供的字符个数大于数组长度,按语法错误处理;
     如果小于数组长度,则只将这些字符数组中前面那些元素算上,其余的元素自动定位为空字符(即'\0')
     */
    
    //字符数组初始化的另一种方式--既可以用字符串常量来初始化字符数组
    char newC1[] = "ibokan"; //长度为7,末端有个'\0';
    
    /*
     什么是字符串?
     字符串是一组字符的组合,可以用来描述文本信息.但是,在C语言中,无法将一个字符串作为一个整体存储到一个变量中.所以,将字符串拆分为多个字符,然后存储到一个字符数组中.
     
     注意:
     1.在C语言中,使用双引号引起来的字符序列为字符串.字符串也为字符常量,在存储字符串的时候,结尾加上一个末端字符'\0'作为结束标志.
     2.上述这种字符数组的整体赋值只能在字符数组 初始化时 使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素--赋值,
     */
    
    char st1[13] = "Hello world!";
    //等价于
    char st2[13] = {'H','e','l','l','o',' ','w','o','r','l','d','!','\0'};
    
    //注意:数组名就是我们的数组元素首地址,所以在scanf()函数中,只需要使用数组名即可
    
    char st3[10];
    scanf("%s",st3);
    printf("%s\n",st3);
    
    //gets 与 puts函数(书p142)
    gets(st3);
    puts(st3);
    
    /*
     字符串的一些函数,包含在 #include<string.h>头文件中
     strcpy(str1,str2);  //str1复制变成str2,str1的长度要长过str2
     strcat(str1,str2);  //把str1末端字符'\0'去掉,str2再拼接到str1,str1长度要足够长
     strlen(str1);       //读取字符长度   ,  不包括末端字符
     */
    char st5[100] = "ibokan";
    char st6[] = "wisdom";
    strcpy(st5, st6);
    puts(st5);
    
    strcat(st5, st6);
    puts(st5);
    
    //strlen返回的是无符号整型,所以需要强制转换
    int length = (int)strlen(st5);
    printf("length = %d\n",length);
    
    
    //数组作为函数参数与基本数据类型作为函数参数的区别
    
    //基本数据类型作为函数参数时
    int x = 10;
    printf("调用函数前x的值是:%d\n",x);
    changeSalar(x);
    printf("调用函数后x的值是:%d\n",x);
    
    
    
    //数组作为函数参数
    int myArray[] = {1,2,3,4,5};
    printf("调用函数之前的myArray数组中各个元素的值为:\n");
    int count1 = sizeof(myArray)/sizeof(int);
    for (int i = 0; i<count1; i++)
    {
        printf("myArray[%d] = %d\n",i,myArray[i]);
    }
    //函数的调用
    changeArray(myArray);
    for (int i = 0; i<count1; i++)
    {
        printf("myArray[%d] = %d\n",i,myArray[i]);
    }
    
    /*
     注意:C语言中将数组作为参数进行数据传递时,无论数据量大小,不将数组进行复制,而是将该数组本身传入函数内部.而函数内部所操作的数据就是函数外部所定义的那个数组.
     */
    
    //数组里面的元素能否是数组?
    int theArray1[] = {1,2,3};
    int theArray2[] = {4,5,6};
   
    int resultArray1[][3] = {{1,2,3},{4,5,6}};   //二维数组
    
    /*
     对于 int  float  double
     int 数组名[][n] = {{},{},...};
     
     */
    int arr1[][3] = {1,4,5,1,5,7};
    //等价于
    //int arr1[2][3] = {{1,4,5},{1,5,7}};
    
    int arr2[][3] = {1};
    //等价于
    //int arr2[1][3]= {1,0,0};
    
    //访问二维数组的所有元素
    for (int i = 0; i<2; i++)
    {
        for (int j = 0; j<3; j++)
        {
           int r =arr1[i][j];
            printf("%d ",r);
        }
    }
    
    char R[][2] = {{'s','s'},{'x','x'}};
//    puts(R);
    for (int i = 0; i<2; i++)
    {
        for (int j = 0; j<2; j++)
        {
            char a = R[i][j];
            printf("%c ",a);
        }
    }
    
    
    
    return 0;
}


void changeSalar(int x)
{
   //实现函数
    x = 1000;
}

void changeArray(int arr[5])
{  //函数实现
    for (int i = 0; i<5; i++)
    {
        arr[i] +=10;
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值