c/c++从入门到入土(6)
开始时间2023-04-20 19:23:57
结束时间2023-04-22 11:06:28
前言:在解决实际问题中,我们会需要重复执行一些已知的操作,如级数求和、穷举或迭代求和。无论次数已知或未知,这都是选择结构和顺序结构难以解决的,这时,我们便引入循环控制结构,其中包括次数已知的计数控制循环和次数未知由已知条件控制的条件控制循环,下面我们一起来看看吧!以下是自制思维导图参考于苏小红C语言程序设计(第四版):
作业六 循环结构
【C0114】有以下程序段 int k = 10 ; while( k = 0 ) k = k - 1 ; 则下面描述中正确的是_______。 A.while循环执行10次 B.循环是无限循环 C.循环体语句一句也不执行 D.循环体语句执行一次
答案:C
体会:while语句中的控制表达式是在执行循环体之前执行的。其执行过程如下:(1)计算循环控制表达式;(2)如果循环控制表达式为真,那么就执行循环体中的语句,并返回步骤(1);(3)如果循环控制表达式为假,就退出循环,执行循环体后面的语句。为了使程序易于维护,建议即使循环体内只有一条语句,也将其用花括号括起来。这是因为当需要在循环体中增加语句是,如果忘记加上花括号,那么仅while后面的第一条语句会被当做循环体中的语句来处理,从而导致逻辑错误。
C0115】有以下程序段 int x = 0 , s = 0 ; while( !x != 0 ) s += ++x ; printf( "%d" , s ) ; 则_______。 A.运行程序段输出0 B.运行程序段输出1 C.程序段中的控制表达式是非法的 D.程序段执行无限次
答案:B
体会:首先本题中x=0,s=0,在循环控制表达式中x!=0为0,加!为1,则进入语句序列,s要加上一个++x,++x先加后用为1,则最后输出s的基本整型为1.
【C0116】下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。 #include<stdio.h> int main( ){ int a , b , t ; scanf( "%d%d" , &a , &b ); while(_______){ if( a > b ){ t = a ; a = b ; b = t ; } printf( "%d,%d\n" , a , b ) ; scanf( "%d%d" , &a , &b ) ; } return 0 ; } A.!a = b B.a != b C.a == b D.a = b
答案:B
体会:很明显if语句为控制数从小到大排序输出,那么while的作用是找出那一对相对数结束循环,即当a与b不相等时循环进行,a与b相等时结束循环。
【C0117】下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。 #include<stdio.h> int main( ){ int a , max = 0 ; scanf( "%d" , &a ) ; while(_______){ if( max < a ) max = a ; scanf( "%d" , &a ) ; } printf( "%d" , max ) ; return 0 ; } A.a == 0 B.a C.!a == 1 D.!a
答案:B
体会:程序功能是输出一批正整数中最大值,并且题面明显给出输出0结束循环,while循环内为找最大值的过程,循环内有scanf()输入函数,当我们输入0时,下一个循环的控制表达式就会结束, 即循环表达式为0结束,即表达式内为a结束。
【C0118】C语言中while和do-while循环的主要区别是_______。 A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while允许从外部转到循环体内 D.do-while的循环体不能是复合语句
答案:A
体会:do-while语句中的循环控制表达式是在执行循环体之后测试的。do-while语句的执行过程如下:(1)执行循环体中的语句;(2)计算循环控制表达式中的值;(3)如果循环控制表达式的值为真,那么返回步骤(1);如果循环控制表达式为假,就退出循环,执行循环体后面的语句。可见,对do-while语句来说,由于是先执行循环体后计算并判定循环控制条件,所以循环体内的语句将至少被执行一次。
【C0119】下面程序的运行结果是_______。 #include<stdio.h> int main( ){ int a = 1, b = 10 ; do{ b -= a ; a++ ; } while( b-- < 0 ) ; printf( "a=%d,b=%d\n" , a , b ) ; return 0 ; } A.a=3, b=11 B.a=2, b=8 C.a=1, b=-1 D.a=4,b=9
答案:B
体会:首先看循环控制表达式,b--<0先用后减,在b若小于零便继续循环,若b大于零退出循环,在第一次循环执行后a=2,b=9,很明显b大于零退出循环,但进行b--操作b此时的值为8.
【C0120】若i为整型变量,则以下循环执行次数是_______。 for( i = 2 ; i == 0 ; ) printf( "%d" , i-- ) ; A.无限次 B.0次 C.1次 D.2次
答案:B
体会:for语句使用灵活频率最好的语句,一般形式为for(初始化表达式;循环控制表达式;增值表达式){语句序列},初始化表达式的作用是为循环控制变量初始化,即赋初值,它决定了循环起始条件;循环控制表达式是循环控制条件,准确地说是控制循环继续执行的条件,当这个表达式的值为真(非0)时继续重复执行循环,否则结束循环,执行循环体后面的语句,因此它也决定了循环何时才能结束;增值表达式的作用是每执行一次循环后将循环控制变量增值,即定义每执行一次循环后循环控制变量如何变化。在每次(包括第一次)循环体被执行之前,都要对循环控制条件执行一次。每次循环体执行完以后,都要执行一次增值表达式。注意!如何对循环变量进行增值,决定了循环的执行次数,如果在循环体内再次改变这个变量的值,将改变循环正常执行的次数。
【C0122】有以下程序 #include<stdio.h> int main( ){ int i ; for( i = 1 ; ; i++ ) ; printf( "%d\n" , i ) ; return 0 ; } 则下面描述中正确的是_______。 A.输出1 B.输出2 C.输出3 D.死循环
答案:D
体会:没有循环控制表达式会陷入死循环。
【C0123】for循环语句:for( 表达式1 ; 表达式2 ; 表达式3 )语句,以下叙述正确的是_______。 A.for语句中的3个表达式一个都不能少 B.for语句中的循环体至少要执行一次 C.for语句中的循环体可以是一个复合语句 D.for语句只能用于循环次数已经确定的情况
答案:C
【C0124】关于break和continue,以下说法正确的是_______。 A.break语句只应用在循环体中 B.continue语句只应用在循环体中 C.break是无条件跳转语句,continue不是 D.break和continue语句的跳转范围不够明确,容易产生错误
答案:B
体会:continue语句和break语句都可用于对循环进行内部控制,但二者对流程的控制效果不同。当执行循环体遇到break语句时,循环将立即终止,从循环语句后的第一条语句开始继续执行;当循环体中遇到continue语句时,程序将跳过continue语句后面尚未执行的语句,开始下一次循环,即只结束本次循环的执行,并不终止整个循环的执行。注意!在嵌套循环的情况下,break语句和continue语句只对包含它们最内层的循环语句起作用,不能用break语句跳出多重循环。
【C0121】下面程序的功能是计算1到10之间的奇数之和及偶数之和,请完善程序。 #include<stdio.h> int main(){ int a,b,c,i; a=c=0; for(i=0;i<=10;i+=2){ a+=i; b=i+1; c+=b ; } printf("sum of the even = %d\n",a) ; printf("sum of the odd = %d\n",c-11) ; return 0 ; }
【C0125】下面程序的运行结果是1,2,0。 #include<stdio.h> #include<math.h> int main( ){ int a = 1 , b = 2 , c = 2 , t ; while( a < b < c ){ t = a ; a = b ; b = t ; c -- ; } printf( "%d,%d,%d\n" , a , b , c ) ; return 0 ; }
【C0126】有以下程序 #include<stdio.h> int main( ){ int a , b , m , n ; m = n = 1 ; scanf( "%d%d" , &a , &b ) ; do{ if( a > 0 ){ m = 2 * n ; b++ ; } else{ n = m + n ; a += 2 ; b++ ; } } while( a == b ) ; printf( "m=%dn=%d" , m , n ) ; return 0 ; } 若输入输入-1 0↙。程序的运行结果是m=4n=2。
【C0127】下面程序的运行结果是A2C4E6。 #include<stdio.h> int main( ){ char c1 , c2 ; int a ; c1 = '1' ; c2 = 'A' ; for( a = 0 ; a < 6 ; a++ ){ if( a % 2 ) putchar( c1 + a ) ; else putchar( c2 + a ) ; } return 0 ; }
【C0128】下面程序的运行结果是132。 #include<stdio.h> int main( ){ int i , m = 0 , n = 0 , k = 0 ; for( i = 9 ; i <= 11 ; i++ ){ switch( i / 10 ){ case 0 : m++ ; n++ ; break ; case 10 : n++ ; break ; default : k++ ; n++ ; } } printf( "%d%d%d\n" , m , n , k ) ; return 0 ; }
【C0129】下面程序的运行结果是4。 #include<stdio.h> int main( ){ int a = 1 , b ; for( b = 1 ; b <= 10 ; b++ ) { if( a >= 8 ) break ; if( a % 2 == 1 ){ a += 5 ; continue ; } a = a - 3 ; } printf( "%d\n" , b ) ; return 0 ; }
【C0130】下面程序的运行结果是k=0,m=5。 #include<stdio.h> int main( ){ int m = 0 , k = 0 , i , j ; for( i = 0 ; i < 2 ; i++ ){ for( j = 0 ; j < 3 ; j++ ) k++ ; k = k - j ; } m = i + j ; printf( "k=%d,m=%d\n" , k , m ) ; return 0 ; }
【C0131】下面程序的运行结果是x=8。 #include<stdio.h> int main( ){ int i , j , x = 0 ; for( i = 0 ; i < 2 ; i++ ){ x++ ; for( j = 0 ; j <= 3 ; j++ ){ if( j % 2 ) continue ; x++ ; } x++ ; } printf( "x=%d\n" , x ) ; return 0 ; }
【C0132】有以下程序 #include<stdio.h> #include<math.h> int main( ){ float x , y , z ; scanf( "%f,%f" , &x , &y ) ; z = x / y ; while( 1 ){ /* fabs( )是计算绝对值的函数,包含在math.h文件中,此时计算|Z| */ if( fabs( z ) > 1.0 ){ x = y ; y = z ; z = x / y ; } else break ; } printf( "%3.1f\n" , y ) ; return 0 ; } 若输入数据3.6,2.4↙。程序的运行结果是1.6。
【C0133】有以下程序 #include<stdio.h> int main( ){ char c ; c = getchar( ); while ( c != '\n' ){ switch ( c - '2' ){ case 0 : case 1: putchar( c + 4 ) ; case 2: putchar( c + 4 ) ; break; case 3: putchar( c + 3 ) ; case 4: putchar( c + 2 ) ; break; } c = getchar( ); } printf( "\n" ) ; return 0 ; } 若输入数据7654↙。程序的运行结果是8878。
【C0134】下面程序的功能是:按规律将电文变成密码,即将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D;非字母字符保持原状不变。如“boy”转换为“fsc”。从键盘输入一行字符,用换行符结束输入,输出其相应的密码。请填空。 #include<stdio.h> int main() { char ch; printf( " please enter:\n" ); ch=getchar(); while(ch!='\n'){ if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){ ch=ch+4 ; if((ch>'Z'&&ch<='Z'+4)||(ch>'z')) ch=ch-26; } printf("%c",ch); ch=getchar(); } printf("\n") ; return 0; }
【C0135】下面程序的功能是:计算100至1000之间有多少个数其各位数字之和是5。请填空。 #include<stdio.h> int main(){ int i,s,k,count=0; for(i=100;i<=1000;i++){ s=0; k=i; while(k){ s=s+k%10; k=k/10; } if(s!=5) continue ; else count++; } printf("%d",count) ; return 0; }
【C0136】下面程序的功能是计算:s=1+12+123+1234+12345。请填空。 #include<stdio.h> int main(){ int t=0,s=0,i; for(i=1;i<=5;i++){ t=i+t*10; s=s+t; } printf("s=%d\n",s); return 0 ; }
【C0137】下面程序的功能是:用公式
![](/i/l/?n=23&i=blog/3170694/202304/3170694-20230422102409345-336617954.png)
求
![](/i/l/?n=23&i=blog/3170694/202304/3170694-20230422102433645-18397499.png)
的近似值,直到发现某一项的绝对值小于
![](/i/l/?n=23&i=blog/3170694/202304/3170694-20230422102555991-2100094137.png)
为止(该项不累加)。请填空。
#include<stdio.h> #include<math.h> int main(){ int f=1; float pi=0.0,n=1,t=1; while(fabs(t)>=1e-6){ pi=pi+t; n=n+2; f=-f; t=f/n; } pi=pi*4; printf("pi=%8.6f\n",pi) ; return 0; }
【C0138】下面程序的功能是:计算100以内能被3整除,且个位数为4的所有整数。请填空。 #include<stdio.h> int main(){ int i,j; for(i=0;i<10;i++){ j=i*10+4; if(j%3!=0) continue; printf("%d\n",j); } return 0; }
编程题!!
第一题
7-1 【C0139】输出所有的水仙花数 分数 10 作者 C语言程序设计,沈国荣,浙江大学出版社 单位 石家庄铁道大学 若一个三位数等于其各位上数字的立方和,则称这个三位数为水仙花数。编写一个程序,输出所有的水仙花数。 输入格式: 无输入 输出格式: 按照从小到大的顺序输出所有水仙花数,一行输出一个数。 输入样例: 在这里给出一组输入。例如: 输出样例: 在这里给出相应的输出。例如: 153 370 371 407 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
#include<stdio.h> int main() { int n,g,s,b; for(n=100;n<1000;n++) { g=n%10; s=n%100/10; b=n/100; if(n==g*g*g+s*s*s+b*b*b) printf("%d\n",n); } return 0; }
----------分割线----------
第二题
7-2 【C0140】输入两个整数,用辗转相除法计算其最大公约数和最小公倍数 分数 10 作者 C语言程序设计,沈国荣,浙江大学出版社 单位 石家庄铁道大学 编写一个程序,输入两个整数,用辗转相除法计算其最大公约数和最小公倍数。。 输入格式: 在一行中输入两个以逗号为间隔的整数。 输出格式: 以逗号为间隔输出这两个整数的最大公约数和最小公倍数。 输入样例: 在这里给出一组输入。例如: 24,36 输出样例: 在这里给出相应的输出。例如: 12,72 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
#include<stdio.h> int main() { int m,n,gbs,t,j,i; scanf("%d,%d",&m,&n); if(m<n) { t=n; n=m; n=t; } j=m*n; while(n!=0) { i=m%n; m=n; n=i; } gbs=j/m; printf("%d,%d",m,gbs); return 0; }
----------分割线----------
第三题
7-3 【C0141】计算阶乘和 分数 10 作者 C语言程序设计,沈国荣,浙江大学出版社 单位 石家庄铁道大学 编写一个程序,计算s=1!+2!+3!+…+n!。其中!为阶乘运算,n由输入决定。 输入格式: 输入正整数n。 输出格式: 输出1!+2!+3!+…+n!的值。 输入样例: 在这里给出一组输入。例如: 3 输出样例: 在这里给出相应的输出。例如: 9 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
#include<stdio.h> int main() { int n,x=0,y=1,sum; scanf("%d",&n); for(x=1;x<=n;x=x+1) { y=y*x; sum=sum+y; } printf("%d",sum); return 0; }
----------分割线----------
第四题
7-4 【C0142】计算数列和 分数 10 作者 C语言程序设计,沈国荣,浙江大学出版社 单位 石家庄铁道大学 编写一个程序,计算
其中m由输出决定。 输入格式: 输入正整数m。 输出格式: 计算
并输出。 输入样例: 在这里给出一组输入。例如: 3 输出样例: 在这里给出相应的输出。例如: 0.833333 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB
#include<stdio.h> int main() { int i,m; double sum=0,t=1; scanf("%d",&m); for(i=1;i<=m;i++) { sum=sum+t/i; t=-t; } printf("%f\n",sum); return 0; }
总结:1966年,C.Bohm和G.Jacopini首先证明了只用顺序、选择和循环三种基本控制结构就能实现任何“单入口、单出口”的程序,这给结构化程序设计奠定了理论基础。结构化程序设计的基本思想归纳起来有以下三个要点:(1)采用顺序、选择和循环三种基本结构作为程序设计的基本单元,具有a.只有一个入口b.只有一个出口c.无不可达语句,即不存在永远都执行不到的语句d.无死循环,即不存在永远都执行不完的循环(2)尽量避免使用goto语句,因为它破坏了结构化设计风格,并且容易带来错误的隐患(3)采用自顶而下、逐步求精的模块化程序设计方法。
每日一mo:原来我已经见过好多人最后一面了.......
标签:语句,循环体,int,c++,坐牢,第六天,while,循环,include From: https://www.cnblogs.com/R-f-12/p/17342637.html