1.打印如图所示的杨辉三角,要求打印出 n 行,n 由键盘输入。
思路:在网上查了杨辉三角的定义后,想到了老师上课讲的兔子数列,但仔细查看了杨辉三角的概况发现百度百科给出了相应的公式,在草稿本上了大概构思了整体框架,写出如下代码:
#include <stdio.h>
#include <strings.h>
int main ()
{
int n,i,s,k;
char m[n]; //m控制每行几个数
char j[n]; //j数组辅助m数组运算
s=1;
printf ("请输入要打印的行数:\n");
scanf ("%d",&n);
for (i=0;i<n;i++) //i为行数
{
printf ("%d",s); //输出开头的1
for (k=1;k<n;k++) //k为每行对应的个数编号
{
//j为m上一行
m[k]=j[k-1]+j[k]; //m数组的运算 (上一行两数相加)
printf ("%-4d",m[n]); //输出m数组
}
printf ("%d",s); //输出结尾的1,使中间的循环数输出在两个1之间
printf ("\n"); //每完成一次循环自动换行
}
return 0;
}
但是j数组也就是上一行的数组代码不知如何表示,这串代码运行出来也只是一个无效代码,然而转头一想,这个n行n和数,应该有操作空间,故我在开头增加了一个判断语句,奇数行执行j数组,偶数行执行m数组,敲下如下代码
#include <stdio.h>
#include <strings.h>
int main ()
{
int n,i,s,k;
char m[n]; //m控制每行几个数
char j[n]; //j数组辅助m数组运算
s=1;
printf ("请输入要打印的行数:\n");
scanf ("%d",&n);
if (n%2!=0)
{
for (i=0;i<n;i++) //i为行数
{
printf ("%d",s); //输出开头的1
for (k=1;k<n;k++) //k为每行对应的个数编号
{
j[k]=m[k-1]+m[k]; //j数组的运算 (上一行两数相加)
printf ("%-4d",m[n]); //输出j数组
}
printf ("%d",s); //输出结尾的1,使中间的循环数输出在两个1之间
printf ("\n"); //每完成一次循环自动换行
}
}
else
{
printf ("%d",s); //输出开头的1
for (k=1;k<n;k++) //k为每行对应的个数编号
{
m[k]=j[k-1]+j[k]; //m数组的运算 (上一行两数相加)
printf ("%-4d",m[n]); //输出m数组
}
printf ("%d",s); //输出结尾的1,使中间的循环数输出在两个1之间
printf ("\n"); //每完成一次循环自动换行
}
return 0;
}
但经过实际操作发现,这串代码陷入了和初始代码一样的问题中,就是开头那几行的代码问题始终无法输出。故深感学习不到位,csdn上的代码套用也不明白,今决定日后应抓紧时间多看网课,尽快掌握相关知识。日后再对此代码进行修改。
2.请编程实现:输入几个整数,判断其中奇数的个数,并输出奇数的累加和。 (要求:数据的个数及原始数据由键盘输入)
我高看我自己了,数组没学到位,数组定义出了问题,输入几个整数这里出了问题,到底怎么让输入的几个数在数组里面,数组的变量定义没到位,主要是数组具体不同的定义方式出了问题,不管怎么定义,打出的代码都是无效代码,现已放弃,下次改进。
3.打印出 100~999 之间的所有水仙花数。
首先查到了水仙花数的定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
从百度上找到的个十百位怎么表达(设一个数为n,则在C语言中其个位、十位、百位、千位依次这样计算:n/1%10,n/10%10,n/100%10,n/1000%10)
敲出以下代码:
#include <stdio.h>
int main ()
{
int i,j,k,m;
for (i=100;i<=999;i++)
{
j=i/1%10; //个位数
k=i/10%10; //十位数
m=i/100%10; //百位数
if (i=j^(3)+k^(3)+m^(3)) //水仙花定义
printf ("%d\n",i);
}
return 0;
}
结果emmmm,显然易见的错了
更改水仙花数定义后
#include <stdio.h>
int main ()
{
int i,j,k,m;
for (i=100;i<=999;i++)
{
j=i/1%10; //个位数
k=i/10%10; //十位数
m=i/100%10; //百位数
if (i=j*j*j+k*k*k+m*m*m) //水仙花定义
printf ("%d\n",i);
}
return 0;
}
得到结果:
。。。。。。。。。哎
4.写一个判断素数的函数,在主函数中调用素数的判断函数,求出 2 到 1000 之间的素数的累加和,将结果输出。
首先搞一个把2~1000的素数弄出来,再相加
#include <stdio.h>
int main ()
{
int n,i,j;
int sum;
sum=0;
for (n=2;n<=1000;n++)
{
for (i=2;i<n;i++)
{
if (n%i == 0)break; //被整除,不是素数。
}
if (i>=n)
{
sum=sum+n;
}
}
printf ("%d\n",sum);
return 0;
}
输出结果为76127
不足:关于数组的运用还是过于生疏,对特有数字的代码定义解释不到位
改进:先将数组的内容看明白,结合一些题目进一步理解运用,在看到一个专有名词后,应先将其定义看透,在草稿本上进行初步构造,如还有不理解,在网络上查找他人思路,将其理解,与自己的思路对比,学习他人的想法,改进自己的思路
学习路还漫长,同志仍需努力。