1.今天最大的成就感来自于鏖战两天,终于调好了一个小程序:判断阿姆斯壮数。模块化是C语言很重要的一个特性,运用函数,写出模块化的特征,使程序更有条理。函数调用时要注意参量的对应与变量的重复与否。
# include <stdio.h>
int weishu(int n);
int swap(int n);
int main(void)
{
int number;
scanf("%d", &number);
if(swap(number)==1)
printf("%d是阿姆斯壮数", number);
else
printf("%d不是阿姆斯壮数", number);
return 0;
}
int weishu(int n)
{
int i = 1;
while (n/10 != 0)
{
i++;
n /= 10;//要注意/10,不然会陷入死循环
}
return i;
}
int swap(int n)//将各位数字从各位开始输出,然后进行阿姆斯壮特性,求值与原数比较从而进行判断
{
int original, m, sum1, sum2, i;
m = weishu(n);
original = n;
sum1 = 1;
sum2 = 0;
while (n/10 != 0)
{
for (i=1; i<=m; i++)//阿姆斯壮数特性
sum1 *= (n%10);
sum2 += sum1;
sum1 = 1;
n /= 10;
}
for (i=1; i<=m; i++)//要注意上面程序没有对最后一位数字进行处理,要另外计算
sum1 *= (n%10);
sum2 += sum1;
if(original == sum2)
return 1;
else
return 0;
在调用一个数字的数位上的各个数值时,可以采用先求出其位数,然后用while循环将其从个位到最高位 一次调用出来,需要注意的是,使用while时对最高位无法进行处理,需要另写语句执行操作。
2.今天的另一个收获时练习了各种三角型图案的输出,使用for循环的嵌套,来实现一些小算法。
# include <stdio.h>
int main(void)
{
int i, j, k, number, row;
scanf("%d", &row);
for (i=1; i<=row; i++)
{
number = i;
for (j=row; j>i; j--)
printf(" ");
for (k=1; k<i; k++, number++)
printf("%d", number);
while (k>=1)
{
printf("%d", number);
number--,k--;
}
printf("\n");
}
return 0;
}
# include <stdio.h>
int main(void)
{
int i, j, row, number;
scanf("%d", &row);
number = 1;
for (i=1; i<=row; i++)
{
for (j=row; j>=i; j--, number++)
printf("%d", number);
printf("\n");
number = 1;
}
return 0;
}
# include <stdio.h>
int main(void)
{
int i, j, k, number, row;
scanf("%d", &row);
for (i=1; i<=row; i++)
{
number = i;
for (j=row; j>i; j--)
printf(" ");
for (k=1; k<i; k++, number++)
printf("%d", number);
while (k>=1)
{
printf("%d", number);
number--,k--;
}
printf("\n");
}
return 0;
}
3.最后收获了杨辉三角的一个小算法。
for (j=1;j<=i;j++)
{
if(i==1 || j==1)
coef = 1;
else
coef = coef * (i-j+1)/(j-1);//巧妙的算法printf("%4d", coef);
}
虽然没有仍是没有想明白它的原理, 但代数检验发现皆成立,巧妙。
除此之外,杨辉三角还可以用二维数组来写。a【n】【n】= a【n-1】【n-1】 + a【n-1】【n】。