使用工具:
Dev-C++ 5.11
解题思路:
定义一个num3[21]的数组,用于存放两个数组相加的结果,之所以长度为21,是因为要考虑进位的情况;数组num3[21]的每一位数的存放应是从尾放到头,因此在写循环的的时候,循环变量(作为数组的下标)应是递减的。最后还要注意num3[21]应被定义一个初始值0,其原因如下(摘自一位热心网友给我的解答):
-
就是num3没有初始化的原因,申请的内存还有残存的值,并不是0
-
C语言的变量分为全局变量跟局部变量,全局变量是不用初始化的,它的值即是自身类型的默认值(其实就是全部为0)。但是局部变量的值是不确定的,除非你自己用程序给它手动写一个值,而初始化就是手动写值的这一步。
-
也就是说你申请的这个num3如果不初始化,没人能确定它的值是什么,每一次程序运行都会不一样。这里的区别就好比私人车位跟公共车位的区别,全局变量是私人车位,局部变量是公共车位。全局变量什么时候都是停的那一种车,而局部变量随着时间点的不同停的车辆是完全不确定的。
参考代码:
#include<stdio.h>
int main()
{
int num1[20],num2[20],num3[21]={0},i,t;
printf("Please input num1[]:\n");
for(i=0;i<20;i++)
{
scanf("%d",&num1[i]);
}
printf("Please input num2[]:\n");
for(i=0;i<20;i++)
{
scanf("%d",&num2[i]);
}
for(i=19;i>=0;i--)
{
t=num1[i]+num2[i]+num3[i+1] ;
if(t<10)
{num3[i+1]=t;}
else
{
num3[i+1]=t%10;
num3[i]=1;
}
}
printf("array num3 is:\n");
for(i=0;i<=20;i++)
printf("%d",num3[i]);
return 0;
}
运行结果: