我们学会了c语言编程语法基础,还要学会活学活用里面的c语法规定。让我们回想一下当初学习c语言的数组模块:数组(array)由一些类型相同的元素构成。当我们只是声明数组(int a[10];//声明了含有10个int类型元素的数组)没有初始化时,其实就和声明普通变量(int a;)一样,存储的是无用的值;但是,如果部分初始化数组,未初始化的元素则被设置为0。
正好我们可以用这个规定实现求两个整数相加时进位的总次数,我们知道,如果一个整数的值为58,则它的百位、千位、万位、至以上都是0,所以我们利用这个特点和数组的初始化规定结合使用,当两个整数位数不一样时,位数较少的我们可以用0补充,我们初始化数组时只需初始化第一个元素设置为0,其余元素则也变为0,这样就可以按照位数较大的整数的位数来统计进位次数了。下面的c程序程序代码就是用来输入两个整数,而且求它们相加时的进位次数(下面的代码是在vs2015上编译运行的):
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<math.h>
int cal(int x);
int main(void)
{
int n1, n2, x, y;
int i, j;
int a[10] = { 0 };//用来存储一个整数的每一位数字值
int b[10] = { 0 };//用来存储一个整数的每一位数字值
printf("Please enter two number:");
scanf("%d %d", &n1, &n2);
int max, count = 0;//max记录输入的两个整数中的最大位数,count用来统计两个整数相加时总共进位的次数
x = n1;
y = n2;
for (i = cal(x); i >= 1; i--)
{
a[i] = x / (int)pow(10, i - 1);
x = x % (int)pow(10, i - 1);
}
for (j = cal(y); j >= 1; j--)
{
b[j] = y / (int)pow(10, j - 1);
y = y % (int)pow(10, j - 1);
}
printf("n1bit = %d,n2bit = %d\n",cal(n1),cal(n2));
if (n1 >= n2)
{
max = cal(n1);
}
else
{
max = cal(n2);
}
for (i = 1; i <= max; i++)
{
if ((a[i] + b[i]) >= 10)
{
a[i + 1] += 1;
count++;
}
}
printf("相加时进位次数为:%d\n", count);
system("pause");
return 0;
}
//用来返回一个整数的位数
int cal(int x)
{
int temp = 10, wei = 1;
while (x >= temp)
{
temp *= 10;
wei++;
}
return wei;
}
这是博主以前学习c语言基础时遇到过几个利用数组部分元素初始化,其余元素是0的特点的小程序,今天帮别人解决一个小问题时发觉这个特点还真的很好用,所以博主就想和大家分享一下,希望我们大家都能从基础中学好并利用好最简单最基础的知识。在此,还是要谢谢大家的阅览。