数组:实际上是一种批量定义变量的方法
定义:类型+数组名[数量] 比如 int num[20];
初始化:数组的初始化还是蛮重要的,如果不进行初始化的话数组中的内容将会是随机值
int num[5] = {1,2,3,4,5,6,7};
这样初始化会出现警告 最后只会显示前五个元素
int num[5] = {1,2}
这样初始化会在最后自动补0
由于C语言中是没有批量显示数组的语句,所以要打印整个数组要配合for循环一起使用 并通过循环变量i来当做数组的下标
注意:计算数组的长度 如下所示 是将整个数组的大小除以第一个元素的大小 类似于求一张纸的厚度
int len = sizeof(arr)/sizeof(arr[0]);
二维数组:二维数组将变量排成一个矩阵
定义: 类型+数组名[行数][列数]
批量显示需要双层for循环 外层for循环负责行号,内层for循环负责列号。
变长数组:
普通数组的长度在编译时就确定了,因为编译器会对数组进行初始化,变长数组的长度在编译期间不能确定,在程序运行期间可以变化,但是一旦执行了定义数组的语句其长度就被固定了。变长数组涉及与结构体一起搭配使用 还是在结构体那章详细捋一捋好了。
课后作业:将两个正大数相加
要求:两个数都是连续输入的 以回车分隔两个数
#include <stdio.h> #define N 100 int main(int argc, char const *argv[]) { char arr[N]; gets(arr); char brr[N]; gets(brr); int len1=0; int len2=0; int i=0; int j=0; while(arr[i]!='\0') { len1++; i++; } while(brr[j]!='\0') { len2++; j++; } int num1[len1]; //将字符串转换成翻转的整型数组 int num2[len2]; for (i = 0; i < len1; i++) { num1[i] = arr[len1-i-1]-'0'; } for (j = 0; j < len2; j++) { num2[j] = brr[len2-j-1]-'0'; } int len = len1>len2?len1:len2; int sum[len]; //定义和数组 int flag=0; //设进位符 for (i = 0; i < len; i++) { sum[len-1-i] = (num1[i]+num2[i]+flag)%10; flag = (num1[i]+num2[i]+flag)/10; } if (flag) printf("1"); //如果最高位有进位 则输出一个1 for (i = 0; i < len; i++) { printf("%d",sum[i]); } printf("\n"); return 0; }写这道题时在这个地方犯了错:求数组长度len1,len2时,我一开始使用了sizeof(arr)/sizeof(arr[0])来求,结果得到len1和len2都为100 ,这个结果不是我要的,这个只是数组定义时的长度,而不算是数组中有效元素的长度,在不知道长度的情况下故应该用while循环来求len。