湖北理工学院c语言程序设计实验3答案.docx
《湖北理工学院c语言程序设计实验3答案.docx》由会员分享,可在线阅读,更多相关《湖北理工学院c语言程序设计实验3答案.docx(20页珍藏版)》请在冰豆网上搜索。
湖北理工学院c语言程序设计实验3答案
实验三循环结构程序设计
实验课程名:
C语言程序设计
专业班级:
学号:
:
实验时间:
实验地点:
指导教师:
一、实验目的和要求
1.熟悉掌握用for语句,while语句和do_while语句实现循环的方法。
2.掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
二、实验内容
1、编写程序,随机输入15个整数,可以是正数、负数和零,计算它们的和、所有正数之和及所有负数之和,分类统计正数、负数以及零的个数,并分别打印出来。
解答:
(1)源代码:
#include
intmain()
{
inta[14],i,sum1=0,sum2=0,sum3=0,x=0,y=0,z=0;
printf("请输入十五个整数:
");
for(i=0;i<15;i++)
{
scanf("%d",&a[i]);
sum1=sum1+a[i];
if(a[i]>0)
{
sum2=sum2+a[i];
x=x+1;
}
if(a[i]==0)
z=z+1;
if(a[i]<0)
{
sum3=sum3+a[i];
y=y+1;
}
}
printf("所有数的和为%d\n",sum1);
printf("所有正数的和为%d\n",sum2);
printf("所有负数的和为%d\n",sum3);
printf("其中有%d个正数\n",x);
printf("其中有%d个0\n",z);
printf("其中有%d个负数\n",y);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功。
2、有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…。
求出这个数列的前20项之和。
解答:
(1)源代码:
#include
intmain()
{
floata=1,b=2,c,sum=0;
inti;
printf("2/1,3/2,5/3,8/5,13/8,21/13,…前二十项的和为");
for(i=1;i<21;i++)
{
sum=sum+b/a;
c=a+b;
a=b;
b=c;
}
printf("%.2f\n",sum);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
3、编写程序,求1!
+2!
+3!
+…+N!
的值,N的值由键盘输入。
解答:
(1)源代码:
#include
intmain()
{
inta,c,i,s,sum;
s=1;
sum=0;
printf("1!
+2!
+3!
+…+N!
\n");
printf("请输入N的值\n");
scanf("%d",&c);
for(i=1;i<=c;i++)
{
for(a=1;a<=i;a++)
{
s=s*a;
}
sum=sum+s;
s=1;
}
printf("其结果为%d\n",sum);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功。
4、编程序按下列公式计算e的值(精度为1e-6):
e=1+1/1!
+1/2!
+1/3!
+…+1/n!
解答:
(1)源代码:
#include
intmain()
{
inta,c,i;
floatsum,s;
s=1;
sum=0;
for(c=1;1/s>=1e-6;c++)
{
s=s*c;
}
s=1;
for(i=1;i<=c;i++)
{
for(a=1;a
{
s=s*a;
}
sum=sum+1/s;
s=1;
}
printf("e=%f\n",sum);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
5、输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
解答:
(1)源代码:
#include
intmain()
{
chars;
inta=0,b=0,c=0,d=0;
printf("请输入一行字符");
while((s=getchar())!
='\n')
{
if((s>='a'&&s<='z')||(s>='A'&&s<='Z'))
a++;
if(s=='')
b++;
if(s>='0'&&s<='9')
c++;
if(!
(s>='a'&&s<='z')&&!
(s>='A'&&s<='Z')&&(s!
='')&&!
(s>='0'&&s<='9'))
d++;
}
printf("其中字母有%d个\n",a);
printf("其中空格有%d个\n",b);
printf("其中数字有%d个\n",c);
printf("其中其他字符有%d个\n",d);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
6、编程求1000以内所有的水仙花数。
谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。
例,153是水仙花数,因为153=13+53+33。
解答:
(1)源代码:
#include
intmain()
{
inta,b,c,d,i;
printf("1000以内的水仙花数为");
for(i=100;i<1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
d=a*a*a+b*b*b+c*c*c;
if(i==d)
printf("%d",i);
}
printf("\n");
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
7、编程:
素数是除了1和其本身以外,不能被其他自然数整除的自然数。
从键盘输入一个数,判断该数是不是素数?
解答:
(1)源代码:
#include
intmain()
{
inta,b,x,i;
x=1;
printf("请输入一个自然数");
scanf("%d",&a);
if(a==1)
printf("该数不是素数\n");
else
{
for(i=2;i{
b=a%i;
if(b==0)
x=0;
}
if(x==0)
printf("该数不是素数\n");
if(x==1)
printf("该数是素数\n");
}
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
8、编写程序输入某班C语言考试的考试分数,该班人数未知,用-1作为结束标志,若输入大于100分,则提示重新输入,然后计算全班的最高分、最低分与平均分。
解答:
(1)源代码:
include
intmain()
{
inta,b,i=0,max=0,min=100,sum=0;
printf("请输入班上各个学生C语言的考试分数\n");
while
(1)
{
scanf("%d",&a);
if(a>100)
{
printf("分数格式不对,请重新输入\n");
continue;
}
if(a==-1)
break;
sum=sum+a;
i++;
if(max>=a)
max=max;
else
max=a;
if(min<=a)
min=min;
else
min=a;
}
b=sum/i;
printf("全班的最高分为%d\n",max);
printf("全班的最低分为%d\n",min);
printf("全班的平均分为%d\n",b);
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
9、有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
解答:
(1)源代码:
#include
intmain()
{
intx=1,y=1,i=1;
for(i;i<=20;i++)
{
printf("%d%d",x,y);
if(i%4==0)
{
printf("\n");
}
x=x+y;
y=x+y;
}
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
10、公鸡五元一只,母鸡三元一只,小鸡一元三只,一百元要买一百只鸡,且须包含公鸡、母鸡和小鸡。
请编写程序,输出所有可能的方案。
解答:
(1)源代码:
#include
intmain()
{
intx,y,z;
for(x=1;x<=100;x++)
{
for(y=1;y<=100;y++)
{
for(z=1;z<=100;z++)
{
if((15*x+9*y+z==300)&&(x+y+z==100))
printf("公鸡有%d,母鸡有%d,小鸡有%d\n",x,y,z);
}
}
}
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
11、编写程序,打印以下图形:
*******
*******
*******
*******
*******
解答:
(1)源代码:
#include
intmain()
{
inti,j;
for(i=1;i<6;i++)
{
for(j=1;j
printf("");
printf("*******\n");
}
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
12、编写程序,打印以下图形:
*
***
*****
*******
*****
***
*
解答:
(1)源代码:
#include
intmain()
{
inti,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=3-i;j++)
printf("");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i+1;j++)
printf("");
for(k=0;k<=2*(2-i);k++)
printf("*");
printf("\n");
}
return0;
}
(2)运行结果:
(3)运行结果分析:
运行成功
三、结论
四、教师评语