实验项目,循环嵌套 ( 写实验报告 )
实验内容,程序 (一 ) 功能, 编程实现正三角型星号的
打印
参考程序,
main()
{int i,j,k,n; 设 n=6,图形如下
scanf("%d",&n); *
for(i=1;i<=n;i++) ***
{for(j=1;j<=n-i;j++) *****
printf(" "); *******
for(k=1;k<=2*i-1;k++) *********
printf("*"); ***********
printf("\n");
}
}
程序 (二 ) 功能,编程实现打印 3~ 100之间的所有素数。
参考程序,
#include <math.h>
main()
{int n,m,t,k=0;
for( n=3 ; n<=100; n=n+2)
{k=sqrt(_____); /* n */
t=1;
for(m=2; m<=_______; m++) /* k */
if(________) {t=0; break;} /* n%m==0 */
if(t) {printf("%d",n);k++;}
if(k%10= =0) printf("\n");
}
}
程序 (三 ) 功能,编程实现一个小球从 100高度自由落下,每次
落地后反弹回原来的高度的一半,再落下。求它在第 10次落地
时,共经过多少米?第 10次反弹多高?
提示:画图分析。设变量 p表示每次落地后经过的米数,设变量
h表示每次落地前小球离地面的高度,变量 s表示前 i次小球经过
的米数之和。循环体可以表示为,(初值 h=100,s=0)
p=h+h/2;
s=s+p;
h=h/2;
注意:最后一次不包括反弹米数,所以结果中的 s
应该减去 h米,即应该经过 s-h米。
100 50
25
1 2 3 4 ………,
程序,
main()
{float s=0,p,h=100;
int n;
for(n=1;n<=10;n++)
{p=h+h/2;
s=s+p;
h=h/2;
}
printf(,第十次落地时共经过的 %f m.”,s-h);
printf(,第十次反弹 %f m.”,h);
}
问题
1.去掉程序一内层的花括号 { }程序会输出什么图形?为什么?
2.去掉程序一中 printf("\n");语句,程序会输出什么结果?为什么
3.如果想把程序一中的三角形倒过来,如何修改程序?
4.补充程序二。
5.程序二中变量 t的作用是什么?如果不用变量 t应如何修改程序?
6.程序二中语句 if(k%10==0) printf("\n"); 起什么作用?
7.编程实现程序三的功能。
120 页 6.1 程序,(假设 m>n)
main() 例如求 m 与 n 的最大公约数
{int m,n,r ; m=q1 n + r1
scanf(“%d,%d”,&m,&n); n=q2 r 1+ r2
r =m% n ; r 1=q3 r2 +r3
while(r!=0) ………
{m = n ; n= r ; rn-2=qn rn-1 +rn (rn=0)
r = m% n ;
} 比如 28 与 6
printf(,%d \n,,r); 28=4× 6 + 4
} 6=1× 4 + 2
4=2× 2 + 0
实验内容,程序 (一 ) 功能, 编程实现正三角型星号的
打印
参考程序,
main()
{int i,j,k,n; 设 n=6,图形如下
scanf("%d",&n); *
for(i=1;i<=n;i++) ***
{for(j=1;j<=n-i;j++) *****
printf(" "); *******
for(k=1;k<=2*i-1;k++) *********
printf("*"); ***********
printf("\n");
}
}
程序 (二 ) 功能,编程实现打印 3~ 100之间的所有素数。
参考程序,
#include <math.h>
main()
{int n,m,t,k=0;
for( n=3 ; n<=100; n=n+2)
{k=sqrt(_____); /* n */
t=1;
for(m=2; m<=_______; m++) /* k */
if(________) {t=0; break;} /* n%m==0 */
if(t) {printf("%d",n);k++;}
if(k%10= =0) printf("\n");
}
}
程序 (三 ) 功能,编程实现一个小球从 100高度自由落下,每次
落地后反弹回原来的高度的一半,再落下。求它在第 10次落地
时,共经过多少米?第 10次反弹多高?
提示:画图分析。设变量 p表示每次落地后经过的米数,设变量
h表示每次落地前小球离地面的高度,变量 s表示前 i次小球经过
的米数之和。循环体可以表示为,(初值 h=100,s=0)
p=h+h/2;
s=s+p;
h=h/2;
注意:最后一次不包括反弹米数,所以结果中的 s
应该减去 h米,即应该经过 s-h米。
100 50
25
1 2 3 4 ………,
程序,
main()
{float s=0,p,h=100;
int n;
for(n=1;n<=10;n++)
{p=h+h/2;
s=s+p;
h=h/2;
}
printf(,第十次落地时共经过的 %f m.”,s-h);
printf(,第十次反弹 %f m.”,h);
}
问题
1.去掉程序一内层的花括号 { }程序会输出什么图形?为什么?
2.去掉程序一中 printf("\n");语句,程序会输出什么结果?为什么
3.如果想把程序一中的三角形倒过来,如何修改程序?
4.补充程序二。
5.程序二中变量 t的作用是什么?如果不用变量 t应如何修改程序?
6.程序二中语句 if(k%10==0) printf("\n"); 起什么作用?
7.编程实现程序三的功能。
120 页 6.1 程序,(假设 m>n)
main() 例如求 m 与 n 的最大公约数
{int m,n,r ; m=q1 n + r1
scanf(“%d,%d”,&m,&n); n=q2 r 1+ r2
r =m% n ; r 1=q3 r2 +r3
while(r!=0) ………
{m = n ; n= r ; rn-2=qn rn-1 +rn (rn=0)
r = m% n ;
} 比如 28 与 6
printf(,%d \n,,r); 28=4× 6 + 4
} 6=1× 4 + 2
4=2× 2 + 0