C语言练习


[例5.10] 输入5个成绩数据求平均成绩。对非法成绩(不在[0,100]之间)数据要求重新输入。
main()
{
float x,s=0;
int i=1;
while(i<=5)
{ printf("输入第%d个成绩:",i);
scanf("%f",&x);
if(x<0 || x>100)continue;
s+=x;
i++;
}
printf("平均成绩为 %5.1f\n",s/5);
}

[例5.11] 用双重循环改写例5.3求1!+2!+……+5!之和的程序
main()
{ int i,j,p,s=0;
for(i=1;i<=5;i++) /* 外循环 */
{ p=1;
for(j=1;j<=i;j++) /* 内循环 */
p=p*i;
s=s+p;
}
printf("Sum=%d\n",s);
}

[例5.12] 打印所示的三角形图案。
*
***
*****
*******
*********
main()
{ int i,j;
for(i=1;i<=5;i++)
{ for(j=1;j<=i;j++) printf(" ");
for(j=1;j<=i;j++) printf("*");
printf("\n");
}
}

[例5.13] 人口增长问题。按年2%的增长速度,现有12亿人,多少年后人口将达到或超过14亿。
main()
{
int n=0;
float m=12;
do{
m=m*1.02;
n++;
}while(m<14);
printf("%d年后人口将超过14亿\n",n);
}

[例5.14] 验证素数。
main()
{ int m,n;
printf("输入一个正整数:");
scanf("%d",&m);
for(n=2;n<=m-1;n++) /* n<=m-1可以写成n<m */
if(m%n==0)break;
if(n<m)
printf("%d不是素数\n",m);
else
printf("%d是素数\n",m);
}
更高效的算法:
#include <math.h>
main()
{ int m,n;
printf("输入一个正整数:");
scanf("%d",&m);
for(n=2;n<=sqrt(m);n++)
if(m%n==0)break;
if(n<=sqrt(m))
printf("%d不是素数\n",m);
else
printf("%d是素数\n",m);
}

[例5.15] 打印100~200之间的全部素数,每行10数据。
#include <math.h>
main()
{ int m,n,k,i=0;
for(m=100;m<=200;m++)
{ k=sqrt(m);
for(n=2;n<=k;n++)
if(m%n==0)break;
if(n>k)
{ printf("%4d",m);
i++;
if(i%10==0)printf("\n");
}
}
printf("\n");
}

[例5.16] 百钱买百鸡。
这是《算经》中的一题:
鸡翁一值钱五,
鸡母一值钱三,
鸡雏三值钱一。
百钱买百鸡,问鸡翁、母、雏各几何?
main()
{ int cocks,hens,chicks;
printf("Cocks\tHens\tChicks\n");
for(cocks=1;cocks<=18;cocks++)
for(hens=1;hens<=32;hens++)
{ chicks=100-cocks-hens;
if(5.0*cocks+3.0*hens+chicks/3.0==100)
printf("%d\t%d\t%d\n",cocks,hens,chicks);
}
}

