C语言学习日记 week2 day1

  好了,新的一周开始了,今天学的主要是数组,顾名思义就是一组数据;

一、数组的意义和写法规范

  类似于变量,数组同样需要进行定义,根据定义的不同在内存中分配不同的空间,一个数组中的数据会被连续的存储在内存中;

  一般定义数组的格式为:

  ArrayType ArrayName[值1][值2][值3][值4].....;

  ArrayType代表要声明的数组类型比如:int,float,char等等,值得注意的是同一个数组中的数据类型必须相同;

  ArrayName代表定义数组的标识符;

  [值1][值2][值3]...代表了定义的数组的数量,值1代表第一个纬度,值2代表第二个纬度....根据需求的不同可以定义不同纬度的数组,每个纬度的值代表了这个纬度的数量,从0开始计数;容易得出数组中数据的个数=值1*值2*值3....;

  数组中的元素进行引用一般直接直接列出需要引用元素的坐标:arrayName[i][j][k]...其中(i<值1,j<值2...)

    例如:a[2][3]指的是数组a中第一维的第3个中第二维的第4个

  在对数组定义的时候要注意以下几点:

  1、[]中的值一定是一个可以确定的正整数;除非在定义的时候进行初始化,系统会根据要初始化的数据个数来自动分配数组的大小如:int arr[]={1,2,3};(表示定义了一个含有3个整形数据的一维数组,并依次赋值1,2,3)和 int arr[3];  arr[0]=1; arr[1]=2; arr[2]=3; 是等价的;

  2、可以在声明的时候对数组初始化,比如:

    int arr[3] = {10, 9, 6};    int arr[2][2]={(1,2),(3,4)}; int arr[2][2]={1,2,3,4};跟前者是等价的;

    int arr[3] = {10,9};     int arr[][2]={(1,2)(3,4)};跟上面同样等价(我总结为第一维的值可以缺省

    int arr[] = {11, 7, 6};

  3、常见的错误:

    int a[];     int[4] a;    int a[b];    a={10, 11};    a[4]={10,9,8,5};

二、数组应用

  示例一:

  简单应用

#include<stdio.h>
void main()
{
//声明数组: 数据类型 数组名[数组长度] ;
    int scores[5];
   
        //为数组赋值: 数组名[下标]=值; --->下标从0开始
    scores[0]=10;
    scores[1]=20;
    scores[2]=30;
    scores[3]=40;
    scores[4]=50;
        //获取数组中的元素: 数组名[下标];
    printf("%d,%d,%d,%d,%d\n",scores[0],scores[1],
             scores[2],scores[3],scores[4]); 
     //声明赋值一步完成: 数据类型 数组名[长度]={值1,值2....};注意:对应的值的个数应该与长度对应
     int nums[5]={1,2,3,4,5};
     
    printf("%d,%d,%d,%d,%d\n",nums[0],nums[1],
             nums[2],nums[3],nums[4]); 
}

 

  示例2:

  让用户输入5个成绩,根据用户输入的成绩计算最高分,最低分和平均分

  

#include <stdio.h>
void main()
{  
   int scores[5];//声明一个数组用于存储用户输入的成绩 
   int sum=0,avg;//总成绩和平均成绩 
   int max;//最高分 
   int min;//最低分 
   int i;
   //循环获取用户输入的成绩,并将其输入成绩保持到数组中 
   for(i=0;i<5;i++){
       printf("请输入第%d个人成绩:",i+1);
       scanf("%d",&scores[i]);     
      sum+=scores[i]; //计算总成绩 
   }
   avg=sum/5;//计算平均成绩 
   min=max=scores[0];//假设第一个人的成绩是最高分,最低分
   for(i=1;i<5;i++){
        if(scores[i]>max){//获取最高分 
          max=scores[i];      
     }
     if(scores[i]<min){//获取最低分 
          min=scores[i];      
     }
   } 
   printf("平均分为:%d,最高分是%d,最低分%d\n",avg,max,min);   
}

  示例3:

  冒泡排序的应用

#include <stdio.h>
void main()
{
   int nums[]={10,3,8,1,6};
   int i,j,temp;
   
  //外层控制比较的轮数(5个数字比较4轮) for(i=0;i<4;i++){ //内层循环控制每轮比较的次数 for(j=0;j<4-i;j++){ if(nums[j]>nums[j+1]){//每次对前后两个数字进行比较通过交换位置将大者后移一位 temp=nums[j]; nums[j]=nums[j+1]; nums[j+1]=temp; } } //在此行插入 printf("%d\t",num[4-i]);可得到降序结果 } printf("排序后的数字为:"); //利用循环遍历输出 for(i=0;i<5;i++){ printf("%d\t",nums[i]); }

  示例4:

  另一种数组排序方法(根据老师留的作业自己写得)

#include <stdio.h>
void main()
{
    int nums[5],i,j,temp;
    
    for(i=0;i<5;i++){
        printf("请输入需要进行排序的第%d个数字:",i+1);
        scanf("%d",&nums[i]);
    }
    
    for(i=0;i<5;i++){
        for(j=i;j<5;j++){//每一轮内循环得出一个最大数置于循环内的第一位
            if(nums[j]>nums[i]){ //每个数跟循环内的第一个值比较,如果大的交换位置置于第一位
                temp=nums[j];
                nums[j]=nums[i];
                nums[i]=temp;
            }
        }
        printf(" %d :",nums[i]);
    } 
    printf("即为数组中由高到低顺序\n"); 
} 

 

  示例5:

  二维数组应用

  打印杨辉三角(这个也是今天老师留的作业之一,稍微润色了一点直接拿了,还没经过老师批改)

#include <stdio.h>
void main()
//zhaoyi 3.20 test4 
//打印杨辉三角 
{
    int size;
    
    printf("请输入你要打印的杨辉三角的高度:");
    scanf("%d",&size);
    
    int arr[size+1][size+1];       //假设杨辉三角为一个正方形其空白处均为0 
    int i,j;                       //在杨辉三角外围加一行一列方便计算 
    
    for(i=0;i<size+1;i++){
        for(j=0;j<size+1;j++){
            if(i==0||j==0){        // 将最外围的一行和一列赋值为0 
                arr[i][j]=0;
            }
            else if(i==1&&j==1){   //将第一个基数1定位在第二行第二列开始依次根据公式计算 
                arr[i][j]=1;
            }else{
                arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
            }
            
            if(arr[i][j]!=0){
                printf("%d\t",arr[i][j]);        
            }else{
                continue;            //打印出数组中计算所得的数字如果为0则不打印 
            }
        }
        printf("\n\n");        //换行 
    }
}

   3.21日修改杨辉三角: 仔细斟酌后发现上面的有很多赘余的部分,经过精简如下:

#include <stdio.h>
void main()
//zhaoyi 3.20 test4 
//打印杨辉三角 
{
    int size;
    
    printf("请输入你要打印的杨辉三角的高度:");
    scanf("%d",&size);
    
    int arr[size][size];       
    int i,j;                       
    
    for(i=0;i<size;i++){
        for(j=0;j<i+1;j++){
            if(i==j||j==0){   //定义第一列和对角线均为1 
                arr[i][j]=1;
            }else{
                arr[i][j]=arr[i-1][j]+arr[i-1][j-1];//杨辉三角内卜元素算法 
            }
                printf("%d\t",arr[i][j]);        
        }
        printf("\n\n");        //换行 
    }
}

 

至此结束。

 

posted @ 2017-03-20 22:14  Z-o-Y  阅读(207)  评论(0编辑  收藏  举报