巧用c语言中数组部分元素初始化

我们学会了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
#include
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的特点的小程序,今天帮别人解决一个小问题时发觉这个特点还真的很好用,所以博主就想和大家分享一下,希望我们大家都能从基础中学好并利用好最简单最基础的知识。在此,还是要谢谢大家的阅览。

你可能感兴趣的:(c语言基础)