c语言循环结构上机习题
- 格式:doc
- 大小:91.50 KB
- 文档页数:12
第4章循环结构一、选择题1、有以下程序段int k=0;while(k=1)k++;while 循环执行的次数是(A)A)无限次B)有语法错,不能执行C) 一次也不执行D)执行1次2、t为int类型,进入下面的循环之前,t的值为0while(t=1){ …… }则以下叙述中正确的是(B)A) 循环控制表达式的值为0B)循环控制表达式的值为1C) 循环控制表达式不合法D)以上说法都不对3、在C程序中,与while(m)中表达式m完全等价的是(B )A) m==0 B) m!=0 C) m==1 D)m!=14、有以下程序,程序运行后的输出结果是(C).main(){int i=1,sum=0;while(i<=4){sum=sum+i;i=i+1;}printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环5、有以下程序,程序运行后的输出结果是(D ).main(){int i=1,sum=0;while(i<=4)sum=sum+i;i=i+1;printf(“%d\n”,sum);}A)4 B)5 C)10 D)死循环6、有如下程序main(){int n=9;while(n>6){n-—;printf(“%d",n);}}该程序段的输出结果是(B)A)987 B) 876 C) 8765 D) 98767、以下程序的输出结果是(B)main(){int num= 0;while(num<=2){num++;printf(“%d\n”,num);}}A) 1 B) 1 C)1 D)l2 2 23 348、有以下程序,若运行时输入3.6 2.4<回车〉,则输出的结果是( B)。
main(){float x,y,z;scanf(“%f%f”,&x,&y);z=x/y;while(1){if(fabs(z)>1。
0){x=y;y=z;z=x/y;}elsebreak;}printf(“%f\n”,y);}A)1.500000 B)1.600000 C)2。
题目、描述、输入、输出、输入样例、输出样例、测试输入、测试输出循环01:最大数写一个程序,可以输入一批正数,输入0时结束循环,并且输出最大的正数。
输入39 28 5 63 18 27 0输出63测试:输入153 26 963 28 75 90 156 0输出963#include<iostream>using namespace std;int main(){int i,max=0;cin>>i;while(i!=0){if(i>max)max=i;cin>>i;}cout<<max<<endl;return 0;}循环02:素数输入正数n,判断n是否为素数。
若为素数则输出1,否则输出0。
(提示:素数是指只可以被1和其本身整除的正数(1除外))输入10输出0输入7输出1测试:输入9输出0#include<iostream>using namespace std;int main(){int n,i,d;cin>>n;for(i=2;i<n;i++){d=n%i;if(n%i==0)break;}if(n==i)cout<<"1"<<endl;elsecout<<"0"<<endl;return 0;}循环03:数列求和输入一个正整数n,计算前n项之和:1+1/4+1/7+1/10..+1/(3*n-2)。
输入5输出1.56978输入4输出1.49286#include<iostream>using namespace std;int main(){int i,n;double s=0;cin>>n;for(i=1;i<=n;i++)s+=1.0/(3*i-2);cout<<s<<endl;return 0;}循环04:西瓜卖几天n个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?说明:当西瓜个数为奇数时,卖一半为一半的整数,如当西瓜个数为5时,卖一半为卖2个。
难度(*)--考点:基本概念、判断循环次数1、C语言中下列叙述正确的是(D)A)不能使用do…while语句构成的循环B)do…while语句构成的循环,必须用break语句才能退出C)do…while语句构成的循环,当while语句中的表达式值为非零时结束循环D)do…while语句构成的循环,当while语句中的表达式值为零时结束循环2、对于下列程序片断,(A)int k=0;while(k=1) k++;则while循环的执行次数是A. 无限次B. 有语法错误,不能执行C. 一次也不执行D. 执行一次3、下面程序段(C)int k=2;while (k=0) {printf(“%d”,k);k--;}则下面描述中正确的是。
A )while 循环执行10 次B )循环是无限循环C )循环题语句一次也不执行D )循环体语句执行一次4、当执行以下程序段时(A)x=-1;do { x=x*x;} while(!x);A)循环体将执行一次B)循环体将执行两次C)循环体将执行无限次D)系统将提示有语法错误5、若i为整型变量,则以下循环执行次数是(B):for( i = 2; i ==0;) printf(“%d”, i);A) 无限次B) 0次c) 1次D) 2次6、对for(表达式1; ; 表达式3)可理解为(B)A) for(表达式1; 0 ; 表达式3)B) for(表达式1; 1 ; 表达式3)C) for(表达式1;表达式1; 表达式3)D) for(表达式1;表达式3; 表达式3)7、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择填空。
(A)main ( ){ int m=0,n=0;char c;while (( ) ! '\n'){if (c>='A' && c<='Z') m++;if (c>='a' && c<='z') n++;}}A)c=getchar( ) B)getchar( ) C)c==getchar( ) D)scanf(“%c”,&c)8、下面for 循环语句。
一、选择题1. 设有如下程序段,则下面描述正确的是int k=10;while (k=0) k=k-1;A.while循环执行10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次2. 下面程序段的运行结果是a=1; b=2; c=2;while(a<b<c) { t=a; a=b; b=t; c--;}pirntf(“%d, %d, %d”,a,b,c);A.1,2,0 B.2,1,0 C.1,2,1 D.2,1,13. 下面程序段的运行结果是。
int n=0;while(n<=2) n++; printf(“%d”,n);A.2 B.3 C.4 D.有语法错误4. 设有如下程序段,则描述正确的是。
t=0;while (printf(“*”)){t++; if(t<3) break;}A.其中循环控制表达式与0等价B.其中循环控制表达式与‘0’等价C.其中循环控制表达式是不合法的D.以上说法都不对5. 下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对等数时结束循环,请选择填空。
#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=b6. 下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空。
#include<stdio.h>int main(){int m=0,n=0;char c;while(( )!='\n'){if(c>='a' && c<='z') n++;if(c>='A' && c<='Z') m++;}printf("%d\n",m<n? );return 0;}A.c= =getchar( ) B.getchar( ) C.c=getchar( ) D.scanf(“%c”,c)A.n:m B.m:n C.m:m D.n:n7. 下面程序的功能是将小写字母变成对应大写字母后的第二个字母。
c语言第5章练习题--循环结构程序设计难度(*)--考点:基本概念、判断循环次数1、C语言中下列叙述正确的是(D)A)不能使用do…while语句构成的循环B)do…while语句构成的循环,必须用break语句才能退出C)do…while语句构成的循环,当while语句中的表达式值为非零时结束循环D)do…while语句构成的循环,当while语句中的表达式值为零时结束循环2、对于下列程序片断,(A)int k=0;while(k=1) k++;则while循环的执行次数是A. 无限次B. 有语法错误,不能执行C. 一次也不执行D. 执行一次3、下面程序段(C)int k=2;while (k=0) {printf(“%d”,k);k--;}则下面描述中正确的是。
A )while 循环执行10 次B )循环是无限循环C )循环题语句一次也不执行D )循环体语句执行一次4、当执行以下程序段时(A)x=-1;do { x=x*x;} while(!x);A)循环体将执行一次B)循环体将执行两次C)循环体将执行无限次D)系统将提示有语法错误5、若i为整型变量,则以下循环执行次数是(B):for( i = 2; i ==0;) printf(“%d”, i);A) 无限次B) 0次c) 1次D) 2次6、对for(表达式1; ; 表达式3)可理解为(B)A) for(表达式1; 0 ; 表达式3)B) for(表达式1; 1 ; 表达式3)C) for(表达式1;表达式1; 表达式3)D) for(表达式1;表达式3; 表达式3)7、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择填空。
(A)main ( ){ int m=0,n=0;char c;while (( ) ! '\n'){if (c>='A' && c<='Z') m++;if (c>='a' && c<='z') n++;}}A)c=getchar( ) B)getchar( ) C)c==getchar( ) D)scanf(“%c”,&c)8、下面for 循环语句。
c语言循环试题及答案C语言循环试题及答案1. 以下哪个选项是C语言中实现循环的关键字?A. switchB. caseC. whileD. do答案:C2. 写出一个使用for循环的程序段,计算1到100之间所有奇数的和。
```cint sum = 0;for(int i = 1; i <= 100; i += 2) {sum += i;}printf("The sum of odd numbers from 1 to 100 is %d", sum);```3. 以下哪个语句是正确的while循环的语法?A. while (condition) statementB. do statement while (condition)C. for (initialization; condition; iteration)D. if (condition) statement答案:A4. 假设有一个数组arr[10],以下哪个循环可以用来遍历这个数组?```cint i;for(i = 0; i < 10; i++) {// 遍历数组}```5. 如果要使用do-while循环打印出1到5的数字,以下哪个程序段是正确的?```cint i = 1;do {printf("%d ", i);i++;} while (i <= 5);```6. 以下哪个选项是break语句的正确用法?A. 用于跳出switch语句B. 用于跳出循环C. 用于进入循环D. 用于结束程序答案:B7. 写出一个使用while循环的程序段,计算1到10的乘积。
int product = 1;int i = 1;while(i <= 10) {product *= i;i++;}printf("The product of numbers from 1 to 10 is %d", product); ```8. 以下哪个选项是continue语句的正确用法?A. 跳过当前循环的剩余部分,开始下一次循环B. 用于跳出循环C. 用于进入循环D. 用于结束程序答案:A9. 假设有一个字符串str,以下哪个循环可以用来遍历这个字符串?```cchar str[] = "Hello";int i = 0;while(str[i] != '\0') {// 遍历字符串i++;}```10. 以下哪个程序段将打印出2到10之间的所有偶数?for(int i = 2; i <= 10; i += 2) { printf("%d ", i);}```。
第5章循环结构习题第6章数组习题一、选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。
A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式2.若有声明:int a[ 10];,则对a数组元素的正确引用是( )。
A)a[ 10]B)a[3.5]C)a(5)D)a[10-10]3.已知int a[10]={6,7,8,9,10};,以下对上述说明语句的正确理解是( )。
A)将5个初值依次赋给a[1]至a[5]B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[ 10]D)因为数组长度与初值的个数不相同,所以此语句不正确4.以下对二维数组a的正确声明是( ) 。
A)int a[3][];B)float a(3,4);C)double a[1][4];D)float a(3)(4);5.若有声明:int a[3][4];,则对a数组元素的非法引用是( )A)a[0][2* 1] B)a[1][3]C)a[4-2][0] D)a[0][4]二、填空题1.下面程序的输出结果是________。
#include <stdio. h>int main( ){int i,j=90,a[]={3,5,8,9,10};for(i= 1;i<3;i++)j-=a[i];printf("%d\n" ,j-50);return 0;}2.下面程序的输出结果是________。
#include <stdio. h>int main( ){int a[]={2,3,5,4},i;for(i=0;i<4;i++)switch( i%2){case 0:switch(a[i]%2){case 0:a[i]++ ; break;case 1:a[i]--;}break;case l:a[i]=O;for(i=0;i<4;i++)prinf(" %d" ,a[1);printf("\n");return 0;}3.下面程序的输出结果是________。
循环(13题)第1题:#include <stdio.h>void main(){因a,b都只能取0到9中的一个值,故用嵌套的for循环枚举下a,b取值的各种情况,根据每种情况计算出AB*BA的值即a*a*10+a*b+(b*b+b*a*10)*10将其与403比较,若相等则当前a b 的取值符合要求,打印出来int a,b,k;int plu = /**/ 403 /**/;由下面的if(k==plu)可知此处存放403for(a=1; a<10; a++)for(b=1; b<10; b++){k = /**/ a*a*10+a*b+(b*b+b*a*10)*10 /**/ ;k存放AB*BA的值if(k==plu) printf("A = %d, B = %d\n",a,b);打印符合条件的a b的值}}第2题:牛顿迭代:设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y- f(x0)= f'(x0)*(x-x0),求出L与x轴交点的横坐标 x1=x0-f(x0)/f'(x0),称x1为r的一次近似值,过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标x2=x1-f(x1)/f'(x1)称x2为r的二次近似值,重复以上过程,得r的近似值序列{Xn},其中Xn1 =Xn-f(Xn)/f'(Xn),称为r的n1次近似值,当相邻两次的根差值极小时,则找到f(x)=0的根。
#include <stdio.h>#include <math.h>/**/ void main() /**/{ float x,x0,f,f1;x=1.5;do{ x0=x; x0存放上次求得的近似值f=((2*x0-4)*x0+3)*x0-6; f存入函数值即f(x0)f1=(6*x0-8)*x0+3; f1存入f’(x0)即导数值x=x0-f/f1; 求出下一个近似值}/**/ while /**/(fabs(x-x0)>=1e-6); do while语句的结构,判断当前近似值与上一个近似值差值是否极小,若是则找到所要的根,退出循环,否则再次执行循环体,计算下一个近似值printf("the root is: %.2f\n",x);}第3题:#include <stdio.h>void main(){ double pi=0;long i, sign=1;因累加项有正负号的变换,用乘以sign来进行控制for(i=1;i<=10001;i+=2){pi+=1.0*sign/i;sign=/**/ -sign /**/;使sign在正负1之间间替变化}pi*=/**/ 4 /**/;前面for循环算出的是1-1/3+1/5…再乘以4即得到pi printf("%f\n",pi);}第4题:#include <stdio.h>void main(){int n,a,b;/**/ 由下面while循环分析可知a,b为用来计数的变量,故需初始化为0 a=0;b=0;/**/scanf("%d",&n); 先输入一个值给nwhile(/**/ n!=0 /**/) 若n不为0则执行循环体,否则退出{if(n>0) a++; a记录n>0的个数else /**/ b++; /**/ 相应的b记录n<0的个数scanf("%d",&n); 让用户输入下一个数}printf("Positive integer: %d, negative integer: %d\n",a,b);getch();}第5题:#include <stdio.h>#include <conio.h>int prime(int n) 该函数判断n是否为素数,若是返回1否则返回0{ int k,flag=1; 从上下文判断 flag为1代表n为素数,为0不是素数for(k=2; k<=n/2+1; k++)if (n%k==0) { flag=/**/ 0 /**/ ; break;} 找到一个在k和n/2+1之间的数能被n 整除,则说明n不是素数,将flag置为0,退出循环return flag;}void main(){ int num, a;clrscr();do{ printf("Please input an even number:");scanf("%d", &num);}while(num<=6||num%2==1);该while循环确保用户输入的n值是大于6的偶数要证明的是一个偶数num是两个质数之和,故假设其中一个数是a,则另外一个数就是num-a了,接着只要调用prime函数,看看prime(a)和prime(num-a)是否都为1即a和num-a是否都为质数,若是则得证,将结果输出for(a=2;a<=num/2+1;a++)if(prime(a) && prime(/**/ num-a /**/))printf("\n %d = %d + %d ", num, a, num-a);}第6题:判断点是否在已知的圆内补充程序Ccon 063.c,使其中的fun( )函数判断输入的一个点{x,y}是否位于坐标在原点,半径为r{r>0}的圆内.#include <stdio.h>#include <math.h>int fun(/**/ float r /**/,float x,float y)观察函数体,可知r为被定义,故此处应写上对形参r的声明{int bIn;bIn = /**/ sqrt(x*x+y*y) /**/ < r ; 若点在圆内则bIn的值为1,否则为0return bIn;}main(){float r=-1,x,y;int bIn;while(r<0)该while循环确保用户输入的值为大于0的数值{ printf("Please input radius r (r>0):\n");scanf("%f", &r);}printf("Please input the dot(x,y):\n"); scanf("%f%f",&x,&y); bIn = fun(r,x,y); if(bIn == 1)printf("in the circle!\n"); elseprintf("out of the Circle!\n"); getch();} 第7题:补充程序ccon072.c ,计算()!!!m P n m n =-,其中m,n 为整数且m>n>=0。
一、选择题1.以下叙述正确的是A: do-while 语句构成的循环不能用其它语句构成的循环来代替。
B: do-while 语句构成的循环只能用break 语句退出。
C: 用do-while 语句构成的循环,在while 后的表达式为非零时结束循环。
D: 用do-while 语句构成的循环,在while 后的表达式为零时结束循环。
2.下面有关for 循环的正确描述是A: for 循环只能用于循环次数已经确定的情况B: for 循环是先执行循环体语句,后判定表达式C: 在for 循环中,不能用break 语句跳出循环体D: for 循环体语句中,可以包含多条语句,但要用花括号括起来3.C 语言中while 和do-while 循环的主要区别是A: do-while 的循环体至少无条件执行一次B: while 的循环控制条件比do-while 的循环控制条件严格C: do-while 允许从外部转到循环体内;D: do-while 的循环体不能是复合语句;4.下列关于switch 语句和break 语句的结论中,正确的是A: break 语句是switch 语句中的一部分B: 在switch 语句中可以根据需要使用或不使用break 语句C: 在switch 语句中必须使用break 语句D: switch 语句是break 语句的一部分5..以下正确的描述是A: continue 语句的作用是结束整个循环的执行;B: 只能在循环体内和switch 语句体内使用break 语句;C: 在循环体内使用break 语句或continue 语句的作用相同;D: 从多层循环嵌套中退出时,只能使用goto 语句;6.语句while(!e);中的条件!e 等价于A: e==0B: e!=0C: e!=1D: ~e7.在以下给出的表达式中,与while(E)中的E不等价的表达式是A: !E=0B: E>0||E<0C: E==0D: E!=08.在C 语言中,当do-while 语句中的条件为()时,结束该循环。
1、计算n的阶乘(n!),n的取值在1~10之间。
分别使用while、do…while和for 语句实现。
(三个程序)
给循环变量赋初值
循环条件
循环体
循环变量的增值
2、输入一行字符,分别统计输入了多少个字母、数字、空格和其他字符。
3、假设函数f(x)=3x2+2x+1,试利用for循环语句分别求出1<=x<=9的f(1)~f(9)各函数值。
4、有分数序列2/1,3/2,5/3,8/5,13/8,21/13…求这个数列的前20项和。
(分析提示:每个分子等于前一个数据分子与分母的和,每个分母等于前一个数据的分子)
5、输出显示1~100之间可以被n整除的所有整数,运行时n由键盘输入。
要求每一行显示5个数,并且统计一共有多少个整数能被n整除。
6、下面程序的功能是从键盘上输入若干学
生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。
main()
{ float x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while( ①)
{ if(x>amax) amax=x;
if( ②) amin=x;
scanf("%f",&x);
}
printf("\namax=%f\namin=%f\n",amax,a min);
}
7、使用循环语句输出以下图形
8、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。
8、一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问
一百只鸡中公鸡、母鸡、小鸡各多少)。
分析:
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
100=x*5+y*3+z/3
100=x+y+z
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围:
1) x的取值范围为1~20
2) y的取值范围为1~33
3) z的取值范围为3~99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。
数据要求
问题中的常量:无
问题的输入:无
问题的输出:
int x,y,z /*公鸡、母鸡、小鸡的只数*/ 初始算法
1.初始化为1;
2.计算x循环,找到公鸡的只数;
3.计算y循环,找到母鸡的只数;
4.计算z循环,找到小鸡的只数;
5.结束,程序输出结果后退出。
算法细化
算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
步骤4的细化
4.1 z=1
4.2 是否满足百钱,百鸡
4.2.1 满足,输出最终百钱买到的百鸡的结果
4.2.2 不满足,不做处理4.3 变量增加,这里注意步长为3 程序代码如下
#include "stdio.h"
main()
{
int x,y,z;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z+=3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/ printf("cock=%d,hen=%d,chicken=%d\n ",x,y,z);
}
}
}
}
分析
程序运行结果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即。
请同学们自己分析二重
循环和三重循环的运行次数,做为练习自己调试这一方法。
程序修改:
1、统计使用三重循环的循环次数
2、使用二重循环完成,并统计循环次数
#include <stdio.h>
int main()
{
int i1,i2,j1,j2,a,b,c,d;
for(i1=11;i1<=99;i1++)
for(j1=i1+1;j1<=99;j1++)
{a=i1/10;
b=i1%10;
c=j1/10;
d=j1%10;
if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&& c!=d)
{ i2=b*10+a;
j2=d*10+c;}
if(i1*j1==i2*j2)
{
printf("%d*%d=%d*%d\t",i1,j1,i2,j2);
} }
return 0;
}
#include <stdio.h>
void main()
{
int a,b,c,d;
for(a=1; a<=9; a++)
for(b=1; b<=9; b++)
for(c=a+1; c<=9; c++)
for(d=1; d<=9; d++)
d{if((a*10+b)*(c*10+d)==(10*b+a)*(10*d+ c))
if((a!=b)&&(a!=c)&&(a!=d)&&(b!=c)&& (b!=d)&&(c!=d))
printf("%d%d*%d%d=%d%d*%d%d\t" ,a,b,c,d,b,a,d,c);
}
}
#include<stdio.h>
main()
{
int i, n,j=0;
printf("请输入一个整数n:");
scanf("%d" ,&n);
if(n>=1&&n<=100)
{
printf("1~100间可以被%d整除的数是:\n",n);
for(i=n;i<=100;i+=n)
{ printf("%-3d",i);
j++;
if(j%5==0)putchar('\n');
}}
else
printf("输入错误!");
}
#include<stdio.h>
int main()
{int x,y;
for(x=1;x<=9;x++)
{y=3*x*x+2*x+1;
printf("f(%d)=%d\n",x,y);}
}
#include<stdio.h>
int main()。