实验四循环结构和转移语句 一,实验目的 L.熟悉用while语句,do-while语句和for语句实现循环的方法。 .掌握循环嵌套的用法 3. 掌握在程序设计中用循环的方法实现各种算法(如迭代,递推,穷举等) 4.掌握goto,break和continue语句的用法。 二.实验要点 在C语言中主要用以下方法实现循环: l.while语句 格式:hile(表达式) 语句 3. 般格 for(表达式1:表达式2:表达式3)语句 for(初值表达式:条件表达式:增值表达式)语句 4.goto语句 格式:goto语句标号 三. 实验要求 1。上机前编写好以下程序。(15为填空,6白已编程) 2. 上机 入和调试自己所编的程序并存在自己的软盘上。 3.检查实验结果是否正确。 4.上机结束后,整理实验报告。 四.实验内容 上机调试运行以下程序 下面的程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环 请填空. #include"stdio.h" main(){ int n=0; char c c=getchar(); while(【c!=\n' 】 {if(【c>=0'&c<=9 】)n+: c=getchar(); 1 printf(n=%d,”,n):》
实验四 循环结构和转移语句 一. 实验目的 1. 熟悉用 while 语句,do-while 语句和 for 语句实现循环的方法。 2. 掌握循环嵌套的用法。 3. 掌握在程序设计中用循环的方法实现各种算法(如迭代,递推,穷举等)。 4. 掌握 go to,break 和 continue 语句的用法。 二. 实验要点 在 C 语言中主要用以下方法实现循环: 1. while 语句 格式:while (表达式) 语句 2. do- while 语句 格式:do 语句 while (表达式); 3. for 语句 for 语句的一般格式: for (表达式 1;表达式 2;表达式 3) 语句 for (初值表达式;条件表达式;增值表达式) 语句 4. goto 语句 格式:goto 语句标号 三. 实验要求 1. 上机前编写好以下程序。(1-5 为填空,6 自己编程) 2. 上机输入和调试自己所编的程序并存在自己的软盘上。 3. 检查实验结果是否正确。 4. 上机结束后,整理实验报告。 四. 实验内容 上机调试运行以下程序。 1.下面的程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环. 请填空. #include”stdio.h” main(){ int n=0; char c; c=getchar(); while (【c!=’\n’ 】 ) { if ( 【 c>=’0’&&c<=’9’ 】 ) n++; c=getchar(); } printf(“n=%d,”,n);}
键盘输入:abcdef12345k<CR>(<CR>表示回车】 输出结果:n=5 2.下面程序的功能是用”辗转相除法”求两个正整数的最大公约数.请填空 辗转相除法:如果有二个数皿,将大数M作为被除数,小数N作为除数,相 除后余数为R。如果R<◇0,则将N一M,将R一N,再进行新的一次除法运算(以新 的M作被除数,N作除数),得到新的R。如果R仍不等于O,重复上面过程,直 到R=O为止。此时N为最大公约数。 #include <stdio.h> main() int r.m.n: scanf(%d%d”.&m,&n): if (m<n) 【{r=m;m=n;n=r;}】 r=mn while (r) {m=n;n=r;r=【m%n】;} printf(%dn”,n): 键盘输入:128<CR>(<CR>表示回车) 输出结果:」 4 3.当运行下面程序时,从键盘输入12345-1<CR>(<CR>表示回车)时,输出结 果:k=14n=1 main() int k=0,n; do (scanf("%d",&n);k+=n;) while(nl=-1) printf("k=%d n=%dn".k.n). 4.下列程序是求水仙花数的程序,所谓水仙花数是指一个三位数,其各位数字 立方和等于该数。例如,153是一个水仙花数。 main() int ij.k.n printf("The number is:") for(【n=100;n<1000】,n+) =【n/100】 1 if(*100+j净10+k=**+j*j*j什k*k*k) printf("%d\" 【n】方
键盘输入:abcdef12345k<CR>(<CR>表示回车) 输出结果: n=5 2.下面程序的功能是用”辗转相除法”求两个正整数的最大公约数.请填空. 辗转相除法: 如果有二个数 m,n,将大数 M 作为被除数,小数 N 作为除数,相 除后余数为 R。如果 R<>0,则将 N→M,将 R→N,再进行新的一次除法运算(以新 的 M 作被除数,N 作除数),得到新的 R。如果 R 仍不等于 0,重复上面过程,直 到 R=0 为止。此时 N 为最大公约数。 #include <stdio.h> main() { int r,m,n; scanf(“%d%d”,&m, &n); if (m<n) 【{ r=m;m=n;n=r;} 】 r=m%n; while (r) { m=n; n=r; r=【 m%n 】;} printf(“%d\n”,n); } 键盘输入:12 8<CR>(<CR>表示回车) 输出结果: 4 3. 当运行下面程序时,从键盘输入 1 2 3 4 5 –1<CR>(<CR>表示回车)时,输出结 果: k=14 n=-1 main() { int k=0,n; do {scanf(“%d”,&n); k+=n;} while(n!=-1); printf("k=%d n=%d\n",k,n); } 4. 下列程序是求水仙花数的程序,所谓水仙花数是指一个三位数,其各位数字 立方和等于该数。例如,153 是一个水仙花数。 main() { int i,j,k,n; printf(" The number is: "); for(【n=100;n<1000 】;n++) { i= 【 n/100 】; j=n/10-i*10; k=【 n%10 】; if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%d\t", 【 n 】);
程序输出结果:The number is:153370371407 5.下面程序完成把100120之间的不能被3整除的数输出,并求其和,请填空。 main( { int n, sum-0 for(【n=100:n<120;nt+】)) {if(n%3=0) 【continue 】: sum+=n: printf(%d”,n): printf("\n sum=%d",sum); 程序输出结果: 100,101,103,104.106,107,109,110,112,113,115,116,118,119, 6.循环嵌套 下面程序实现逐行打印*号的功能:第一行打印1个*,第二行打印2个*, 第十行打印10个*。 #include <stdio.h> #define N 10 main ( int i.i: for (i=1;i<=N:i++){ for (j1: j<=i;j++)printf(*") printf ("In"); 参照以上程序,自己编写程序,程序输出以下图形。 幸来本来布衣布布木率 家本本本串率市 本李米***寄 客李家车米米 黎染华率率
} } } 程序输出结果: The number is: 153 370 371 407 5.下面程序完成把 100~120 之间的不能被 3 整除的数输出,并求其和,请填空。 main( ) { int n,sum=0; for (【 n=100;n<120;n++ 】) { if (n % 3 == 0) 【 continue 】; sum+=n; printf(“%d”, n); } printf(“\n sum=%d”, sum); } 程序输出结果: 100,101,103,104,106,107,109,110,112,113,115,116,118,119, sum=1533 6.循环嵌套 下面程序实现逐行打印*号的功能:第一行打印 1 个*,第二行打印 2 个*, 第十行打印 10 个*。 #include <stdio.h> #define N 10 main ( ) { int i,j; for (i=1; i<=N; i++) { for (j=1; j<=i; j++) printf(“*”); printf (“\n”); } } 参照以上程序,自己编写程序,程序输出以下图形。 ********** ********* ******** ******* ****** ***** **** *** ** *
答案: #include <stdio.h> #define N main ( int ii for (i=I;i<=N;it+) for (j=0 j<=N-i;j++)printf("*"); printf ("\n"): 作业题: 一,选择题 1.设有程序段 int k=10 while (k=0) k=k-1: 下面描述正确的是(C ) A.Whi1e循环执行10次 B.循环是无限循环 C.循环体语句 次也不执行 D.循环体语句执行一次 2.下面程序的执行结果是(A) main() int x=10: do {x-;)while(-x): printf("%dn".x-). A)0 B).1 C)1 D)8 3.若j为整型变量,则以下循环执行次数是B C)1次 D)2次 4.执行语句for心=l+<4,方后变量j的值是 A)3 B)4 C)5 D)不定 5.以下是死循环的程序段是 0 A)for(j=1;:) {if(++j%2=0)continue; if(++1%3==0)break: B)-32767, do(if)break)while(+j) C)for(j=1;)if(++j<10)continue:
答案: #include <stdio.h> #define N 10 main ( ) { int i,j; for (i=1; i<=N; i++) { for (j=0; j<=N-i; j++) printf("*"); printf ("\n"); } } 作业题: 一. 选择题 1.设有程序段 int k=10; while (k=0) k=k-1; 下面描述正确的是( C ) A.While 循环执行 10 次 B.循环是无限循环 C.循环体语句一次也不执行 D.循环体语句执行一次 2.下面程序的执行结果是( A ) main() { int x=10; do {x-;} while( -x); printf("%d\n",x-); } A) 0 B) -1 C) 1 D) 8 3.若 j 为整型变量,则以下循环执行次数是 B 。 for(j=2;j==0;) printf(“%d”,j-) A)无限次 B)0 次 C)1 次 D)2 次 4.执行语句 for(j=1;j++<4; );后变量 j 的值是 C 。 A)3 B) 4 C)5 D)不定 5.以下是死循环的程序段是 C 。 A)for(j=1; ; ) { if(++j%2==0) continue ; if(++j%3==0) break; } B)j=32767; do {if(j<0) break;} while(++j); C)for(j=1; ;) if(++j<10) continue;
D)jFl,while(-方 二.填空题 1.执行下面程序段后,k的值是36 k=1:n=263: do{k*=n%10,n/=10;}while(n吵: 2.下面程序段中循环体的执行次数是3 a-l0, b=0 do(b+=2:a-=2+b;)while(a>=0), 3.若for循环用以下形式表示: for(表达式1:表达式2:表达式3)语句 则执行语句for(j0:j3;j计+)printf(*):时,表达式1执行1次, 表达式3执行 4.以下程序的功能是打印100以内个位数为6且能被3整除的数。填空。 #include”stdio.h” main( int i.k for0-0:【j=9】:jt+) (k=j*10+6 if(【k3!=0】)continue: printf(%d",k) 5.以下程序是计算1-3+5-7+.-99+101的值。请填空。 #include"stdio.h" mainO int it=ls=0: fore1:i101:i+=2) {【t=t*j s+t;【te-t/j】:} printf(%d小n",s): 三. 编程题 1.输入两个正整数,求其最大公约数和最小公倍数。(谭浩强书6-1) 2.输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数 (谭浩强书6-2) #include "stdio.h"main() (int letter,digit,others;char c; letter=digit=others=0; while((c-getchar(!="n') if(e>=a'&&c<=zc>=A'&&e<=Z letter++; else if(c>=0'&&c<=9
D)j=1;while(j-); 二. 填空题 1.执行下面程序段后,k 的值是 36 。 k=1;n=263; do{k*=n%10; n/=10;} while(n); 2.下面程序段中循环体的执行次数是 3 。 a=10; b=0; do{b+=2;a-=2+b;} while(a>=0); 3.若 for 循环用以下形式表示: for(表达式 1;表达式 2;表达式 3) 语句 则执行语句 for(j=0;j<3;j++) printf(“*”);时,表达式 1 执行 1 次, 表达式 3 执行 3 次。 4.以下程序的功能是打印 100 以内个位数为 6 且能被 3 整除的数。填空。 #include”stdio.h” main(){ int j,k; for(j=0; 【 j<=9 】;j++) { k=j*10+6; if(【 k%3!=0 】) continue; printf(“%d”,k); } } 5.以下程序是计算 1-3+5-7+ ┅ -99+101 的值。请填空。 #include”stdio.h” main(){ int j,t=1,s=0; for(j=1;j<=101;j+=2) { 【t=t*j 】;s=s+t; 【 t=-t/j 】;} printf(“%d\n”,s);} 三. 编程题 1.输入两个正整数,求其最大公约数和最小公倍数。(谭浩强书 6-1) 2.输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。 (谭浩强书 6-2) #include “stdio.h”main( ) { int letter, digit, others; char c; letter=digit=others=0; while((c=getchar( ))!=‘\n’) if(c>=‘a’&&c<=‘z’||c>=‘A’&&c<=‘Z’) letter++; else if(c>=‘0’ && c<=‘9’)