实验4 循环结构——参考答案

  • 格式:txt
  • 大小:5.84 KB
  • 文档页数:2

实验四 循环结构程序设计参考程序
一、程序调试方法实验
上机题目:编写程序利用公式:求的近似值。找出并改正以下源程序中错误,得出正确的运行结果。
#include
void main()
{
int i;
float a,e,x;
printf("请输入x的值:");
scanf("%d",&x); //改为 scanf("%f",&x);
e=0; //改为 e=1;
i=0; //改为 i=1;
a=1;
while(a>1e-6); //去掉尾部的分号
{
a=a*x/i;
e=e+a;
i++;
}
printf("循环次数为:%d次,e的%d次方为:%f\n",i,x,e);
//改为printf("循环次数为:%d次,e的%.2f次方为:%f\n",i,x,e);
}
程序正确的运行结果为:
请输入x的值:1.0
循环次数为:11次,e的1.00次方为:2.718282
Press any key to continue

二、编写程序
1、分别利用三种循环语句编程,求1+2+3+…50之和。参照例子4-12
(1)while循环
#include
void main()
{
int sum=0,i=1;
while(i<=50)
{
sum=sum+i;
i++;
}
printf("1+2+3+...50=%d\n",sum);
}
(2)do~while循环
#include
void main()
{
int sum=0,i=1;
do
{
sum=sum+i;
i++;
}
while(i<=50);
printf("1=2+3+...50=%d\n",sum);
}
(3)for循环
#include
void main()
{
int sum=0,i;
for(i=1;i<=50;i++)
sum=sum+i;
printf("1+2+3+...50=%d\n",sum);
}
2、编程,输入10个整数,求其中正数的个数及其平均值(精确到小数点后两位)。
#include
void main()
{
float sum=0;
int i,a,count=0;
printf("请输入10个整数:");
for(i=1;i<=10;i++)
{
scanf("%d",&a);
if(a>0)
{
count++;
sum=sum+a;
}
}
printf("整数个数为%d 平均值为%.2f\n",count,sum/count);
}
3、编程实现:输入一个不多于5位的整数,要求按逆序输出各位数字,如原数为321,则应输出123。参照例子4-6
#include
void main(void)
{
int number, count = 0;

printf(" Please enter a number: ");
scanf("%d", &number);
if (number<0) number = -number;
do
{
printf("%d",number%10);
count++;
number = number/10;
}while( number!=0 );
printf("\nIt contains %d digits. \n", count);
}
4、编写一个程序,求两个整数的最小公倍数。参照例子4-4
提示:可以参考“最大公约数”的求法,从两个数中较大的一个出发,找到的第一个能被这两个数整除的数,就是最小公倍数。
#include
void main()
{
int k, m, n;

printf("请输入2个整数: ");
scanf("%d%d", &m, &n);
k = m>n? m : n;
while(k%m!=0 || k%n!=0)
k++;

printf("最小公倍数: %d\n", k);
}
5、统计输入的一串字符中每个元音字母(a,e,i,o,u)出现的次数,当输入#时结束。参照例子5-3
#include
void main()
{
char c;
int a=0,e=0,i=0,o=0,u=0;

printf

("请输入一串字符以#结束:");
c=getchar();
while(c!='#')
{
switch(c)
{
case 'a': a++; break;
case 'e': e++; break;
case 'i': i++; break;
case 'o': o++; break;
case 'u': u++; break;
}
c=getchar();
}
printf("元音字母a的个数为%d\n",a);
printf("元音字母e的个数为%d\n",e);
printf("元音字母i的个数为%d\n",i);
printf("元音字母o的个数为%d\n",o);
printf("元音字母u的个数为%d\n",u);
}

也可以将while循环改写(对比两种方法的异同):
#include
void main()
{
char c;
int a=0,e=0,i=0,o=0,u=0;

printf("请输入一串字符以#结束:");
while((c=getchar())!='#')
{
switch(c)
{
case 'a': a++; break;
case 'e': e++; break;
case 'i': i++; break;
case 'o': o++; break;
case 'u': u++; break;
}
}
printf("元音字母a的个数为%d\n",a);
printf("元音字母e的个数为%d\n",e);
printf("元音字母i的个数为%d\n",i);
printf("元音字母o的个数为%d\n",o);
printf("元音字母u的个数为%d\n",u);
}

6、输出100~200间的全部素数。参照例子4-16
#include
void main()
{
int n,i;
for(n=100;n<=200;n++)
{
for(i=2;i<=n-1;i++)
if(n%i==0)break;
if(i>n-1)
printf("%8d",n);
}
printf("\n");
}
7、求n!,其中,n为用户输入的任何整数。(n<=50,具体值由用户输入)。
#include
void main()
{
int i,n;
double fac=1.0; /* 计算阶乘是一个很大的数,可能超出int范围*/
printf("请输入一个不大于50的整数N:");
scanf("%d",&n);
for(i=1;i<=n;i++)
fac=fac*i;
printf("N的阶乘为%.0f\n",fac); /* 输出结果无小数*/
}
8、求,即求1!+2!+…+19!+20!
#include
void main()
{
int i;
double sum=0, jc=1;
for(i=1;i<=20;i++)
{
jc=jc*i;
sum=sum+jc;
}
printf("1!+2!+3!+...20!=%.0f\n",sum);
}

9、编写程序,找出1~999之间的全部同构数。同构数是这样的数,它出现在它的平方数的右边,例如:5是25的右边的数,25是625右边的数,5和25都是同构数。
提示:如何验证m是n右边的数,
若m是个位数,则判断若n-m能整除10,则m是n右边的数;
若m是十位数,则判断若n-m能整除100,则m是n右边的数;
若m是百位数,则判断若n-m能整除1000,则m是n右边的数;
#include
main()
{
int m, n;

printf("1~1000间的同构数包括:");
for( m=1; m<1000; m++)
{
n = m*m;
if (m < 10 && (n-m)%10 == 0)
printf("%d ", m);
else if (m<100 && (n-m)%100 == 0)
printf("%d ", m);
else if((n-m)%1000 == 0)
printf("%d ", m);
}
printf("\n");
}
10、输出所有大于1000小于10000的4位偶数,且该偶数的各位数字两两不相同。
提示:对数n将其分别获得它的个位、十位、百位和千位,然后判断它们是否两

两不相同。
#include
main()
{
int i, m, n, p, q;

for(i=1000; i<10000; i=i+2)
{
m = i/1000;
n = i%1000/100;
p = i%100/10;
q = i%10;
if ( m!=n && m!=p && m!=q && n!=p && n!=q && p!=q)
printf("%d ", i);
}
printf("\n");
}
11、分别编程输出如图所示的结果:









(1)
#include
void main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
printf("%5d",i*j);
printf("\n");
}
}
(2)
#include
void main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf(" *");
printf("\n");
}
}
(3)
#include
void main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=10-i;j++)
printf(" *");
printf("\n");
}
}

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。