循环结构程序设计典型例题
循环结构程序设计课后习题及答案
循环结构程序设计习题与答案1、循环语句的三要素分别是、、.2、for语句括号内的3个表达式的作用分别是、、.3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环.4、在循环结构中,break语句的作用是;continue语句的作用是.5、当循环条件一开始就为假时,对于while语句、do…while语句、for语句,分别执行循环体次、次、次.6、下面程序段的执行次数:int a=0;while<a=0>{ printf<"good\n">;a--;}7、下面程序段的执行次数:int a=0;while<a==0>{ printf<"good\n">;a--;}8、下面程序段的执行次数:int a=1;while<a=1>{ printf<"good\n">;a++;}9、下面程序段的执行次数:int a=1;while<a==1>{ printf<"good\n">;a++;}10、下列程序段的运行结果是.for<i=5;i>=0;i-->printf<"%d ",i>;11、下列程序段的运行结果是.for<n=1;n<20;n=n+3>printf<"%d ",n>;12、下列程序段的运行结果是.for<ch='a' ;ch<='e' ;ch++>printf<"%d",ch-97>;13、下列程序段的运行结果是.for<i=1,j=5 ; i<j ; i++,j-->printf<"i=%d j=%d\n",i,j>;14、下列程序段的运行结果是.for<n=1 ; n*n<20 ; n++>printf<"%d \n",n+n>;二、选择题1、下列程序段中,死循环的是〔〕A、for <i=1; ;>B、i=32767;{ if<++i%2==0> continue; doif<++i%3==0> break; { if<i<0> break;} }while<++i>;C、i=1;D、for<i=1; ; >while<i-->; if<++i<10> break;2、下列程序段中,不是死循环的是〔〕A、inti=10;B、for< ; 1;>while<1>{ i=i%100+1;if<i>100> break;}C、int a=0;D、int x=21;do while<x>{ ++a; --x;}while<a>=0>;三、阅读程序,写出程序运行结果.1、#include"stdio.h"main<>{inti=0,sum=1;do{sum+=i;i++;}while<i<5>;printf<"%d\n",sum>;}程序运行结果:2、#include"stdio.h"main<>{inta,b;b=10;a=1;while<a<=b>a*=2;printf<"%d\n",a>;}程序运行结果:3、#include"stdio.h"main<>{int x=2;while<x-->;printf<"%d\n",x>;}程序运行结果:4、#include"stdio.h"main<>{int x=3;do{printf<"%d\n",x-=2>;}while<!x>;}程序运行结果:5、#include"stdio.h"main<>{inti;for<i=1;i<=5;i++>switch<i%5>{case 0:printf<"*">;break; case 1:printf<"#">;break; case 2:printf<"&">;break; default:printf<"\n">;}}程序运行结果:6、#include"stdio.h"main<>{charch;while<<ch=getchar<>>!='!'>putchar<++ch>;}程序运行结果:7、#include"stdio.h"main<>{inti,j;for<i=0;i<=5;i++>{for<j=1;j<10;j++>if<j==5> break;if<i<2> continue;if<i>2> break;printf<"j=%d\n",j>;}printf<"i=%d\n",i>;}程序运行结果:8、#include"stdio.h"main<>{int x ,y;x=37,y=13;while<x!=y>{if<x>y>x=x-y;if<y>x>y=y-x;}printf<"x=%d\n",x>;}程序运行结果:四、编程题1、输出下列图案12 43 6 94 8 12 165 10 15 20 252、输出下列图案*********3、编程求2-4+6-8+…-100+102的值.4、输出公元1500年至2500年所有的闰年的年号.5、从键盘上输入若干学生的C语言成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入.循环结构程序设计〔参考答案〕一、填空题、1.循环条件循环体循环控制变量2.循环变量赋初值循环测试条件循环变量更新3.执行整个周期外层循环条件为假4.提前结束包含它的循环语句的执行提前结束本次循环周期开始执行下一次循环周期5.0 1 06.07. 18.无数9. 110.5432111.1 4 7 10 13 16 1912.0123413.I=1,j=5I=2,j=414.14916二、选择题1. B2. D三、程序运行结果1.112.163.-14.15.#&*6.bgufsoppo7.i=5J=38.x=1四、编程题1.#include"stdio.h"main<>{inti,j;for<i=1;i<=5;i++>{for<j=1;j<=i;j++>printf<"%d ",i*j>;printf<"\n">;}}2.#include"stdio.h"main<>{inti,j;for<i=5;i>=1;i-=2>{for<j=1;j<=i;j++>printf<"*">;printf<"\n">;}}3.#include"stdio.h"main<>{inti,y=1,s=0;for<i=2;i<=102;i+=2>{ s=s+y*i;y*=-1; 〔y=-y>; } printf<"2-4+6+...-100+102=%d",y>;}4.#include"stdio.h"main<>{inti;for<i=1500;i<=2500;i++>if<i%4==0&&i%100!=0||i%400==0> printf<"%d ",i>;}5.#include"stdio.h"main<>{floatcj,min,max=0;printf<"请输入学生成绩,输入负数时结束:\n">; scanf<"%f",&cj>;min=cj;while<cj>=0>{if<cj>max>max=cj;if<cj<min>min=cj;scanf<"%f",&cj>;}printf<"max=%f\nmin=%f",max,min>;}。
C语言循环结构练习题带答案
第5章循环结构程序设计5.1基本知识点✍while语句的使用格式和注意事项✍do-while语句的使用格式和注意事项✍for语句的使用格式和注意事项✍break和continue语句在循环语句中的应用✍循环结构的嵌套✍使用goto语句实现循环结构✍穷举法程序设计方法✍迭代程序设计方法5.2练习题51.单项选择题(1)语句while(!e);中的条件!e等价于A。
A.e==0B.e!=1C.e!=0D.~e(2)下面有关for循环的正确描述是D。
A.for循环只能用于循环次数已经确定的情况B.for循环是先执行循环体语句,后判定表达式C.在for循环中,不能用break语句跳出循环体D.for循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中D。
A.不能使用do-while语句构成的循环B.do-while语句构成的循环必须用break语句才能退出C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环(4)C语言中while和do-while循环的主要区别是A。
A.do-while的循环体至少无条件执行一次B.while的循环控制条件比do-while的循环控制条件严格C.do-while允许从外部转到循环体内D.do-while的循环体不能是复合语句(5)以下程序段C。
intx=-1;do{x=x*x;}while(!x);A.是死循环B.循环执行二次C.循环执行一次D.有语法错误(6)下列语句段中不是死循环的是__C__。
A.i=100;while(1){i=i%100+1;if(i==20)break;}B.for(i=1;;i++)sum=sum+1;C.k=0;do{++k;}while(k<=0);D.s=3379;while(s++%2+3%2)s++;(7)与以下程序段等价的是__A__。
(完整版)C语言循环结构练习题集带答案解析
第5章循环结构程序设计5.1 基本知识点while语句的使用格式和注意事项do-while语句的使用格式和注意事项for语句的使用格式和注意事项break和continue语句在循环语句中的应用循环结构的嵌套使用goto语句实现循环结构穷举法程序设计方法迭代程序设计方法5.2 练习题51. 单项选择题(1)语句while (!e);中的条件!e等价于 A 。
A. e==0B. e!=1C. e!=0D. ~e(2)下面有关for循环的正确描述是 D 。
A. for循环只能用于循环次数已经确定的情况B. for循环是先执行循环体语句,后判定表达式C. 在for循环中,不能用break语句跳出循环体D. for循环体语句中,可以包含多条语句,但要用花括号括起来(3)C语言中 D 。
A. 不能使用do-while语句构成的循环B. do-while语句构成的循环必须用break语句才能退出C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环(4)C语言中while和do-while循环的主要区别是 A 。
A. do-while的循环体至少无条件执行一次B. while的循环控制条件比do-while的循环控制条件严格C. do-while允许从外部转到循环体内D. do-while的循环体不能是复合语句(5)以下程序段 C 。
int x=-1;do{x=x*x;}while (!x);A. 是死循环B. 循环执行二次C. 循环执行一次D. 有语法错误(6)下列语句段中不是死循环的是__C__。
A. i=100;while (1){i=i%100+1;if (i==20) break;}B. for (i=1;;i++)sum=sum+1;C. k=0;do{++k;} while (k<=0);D. s=3379;while (s++%2+3%2)s++;(7)与以下程序段等价的是__A__。
C 循环结构23道题[含答案解析]
题目、描述、输入、输出、输入样例、输出样例、测试输入、测试输出循环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个。
循环结构(50题) - 副本
固定循环1.画出打印前10个偶数乘积的流程图2.画出流程图:接受50个数,还显示奇数和偶数的总个数3.画出显示键入的任何10个数中最大者的流程图4.绘制流程图以生成前10奇数,并显示这些数值的平均值?5.绘制流程图以显示前100个自然数的平方根6.绘制流程图生成Fibonacci数列。
前两个数应是0和1,最后一个数应是89。
提示:Fibonacci数列的数为:01 1 2 3 5 8 13 21 34 55 89。
除了前两个数0和1,数列中的每个数是前两个数之和。
7.办公室电话都有两个分机,分机号为1和2。
在任何时间点,只有一个分机忙。
以下给出的序列显示了分机1和分机2接收来电的顺序。
1、1、1、1、2、2、2、1、2、1、2、1、2、2、2、1、2具体某一天接收来电的总数为200。
绘制流程图以显示分机1和分机2接收来电的总数。
8.对以下情形绘制流程图:接受的100本书包括了书数、书名、书类和销售价。
显示以下详细信息:序列号No书数BookNo书名BookName销售价NetPrice类别Cat折扣SP净价(净价=销售价-折扣)Discount根据书的类别给出书的折扣,如下表所示:9.一个班级有20名学生。
每个学生参加5个测验。
每测验满分为100分。
计算并显示每个学生的平均分。
提示:创建模块计算平均得分。
10.求100~150之间和400~500之间能被9整除的数,将结果输出到屏幕上11.任意输入10个数,对这10个数按从小到大排列显示。
画出流程图12.已知XYZ+YZZ=532,其中X,Y,Z为0~9的数字,求出X,Y,Z,且显示出来。
画出流程图13.设有计算阶乘的函数f(n)=n!,试设计一个计算阶乘的方法和相应的类,并利用这个类计算f(5)和f(17)的值!画出流程图14.从键盘逐个输入字符,直到输入‘!’时结束,输出字符的个数(不包括‘!’)。
15.输出所有在正整数200和300之间能被6整除、但不能被4整除的数。
循环结构程序设计练习题内含答案
第三单元循环结构练习题选择题:1、有以下程序执行后的输出结果是( D )。
main( ){ int i,s=0; for(i=1;i<10;i+=2)s+=i+1;printf("%d\n",s);}A.自然数 1~9的累加和B.自然数 1~10 的累加和C.自然数 1~9中的奇数之和D.自然数 1~10 中的偶数之和2、以下关于 for 语句的说法不正确的是( A )。
A. for循环只能用于循环次数已经确定的情况B. for循环是先判断表达式,后执行循环体语句C. for循环中,可以用 break 跳出循环体D. for循环体语句中,可以保含多条语句,但要用花括号括起来3、若 i和 k 都是 int 类型变量,有以下 for语句for(i=0,k=-1;k=1;k++) printf("*****\n");下面关于语句执行情况的叙述中正确的是(d)。
A. 循环体执行两次B.循环体执行一次C.循环体一次也不执行D. 构成无限循环4、以下程序程序的执行后的输出结果是(c)。
main(){int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf(“%d”,t[2 -i][i]);}A.753B.357C.369D.7515、以下程序运行后的输出结果是( A )。
void fun(char*s){ while(*s){ if(*s%2==0)printf(“%c”,*s);s++;}}main(){ char a[]={“good”};fun( a) ;printf(“ n”);}注意:字母 a 的 ASCⅡ码值为 97A.dB.goC.godD.good6、已知 int t=0 ; while ( t=1 ){...}则以下叙述正确的是( B)。
A)循环控制表达式的值为 0B)循环控制表达式的值为 1C)循环控制表达式不合法D)以上说法都不对7、设有以下程序段 Bint x=0,s=0;while (!x!=0 ) s+=++x;printf ( "%d",s );则A)运行程序段后输出0B)运行程序段后输出 1C)程序段中的控制表达式是非法的D)程序段执行无限次8、设 i ,j ,k 均为 int型变量,则执行完下面的 for 语句后, k 的值为( C)。
程序设计_循环结构(附带答案)
计算机程序设计基础_循环结构班级学号姓名成绩一、单选题(18*4=72)1.以下叙述正确的是▁D▁▁▁A)do-while 语句构成的循环不能用其它语句构成的循环来代替B)do-while 语句构成的循环只能用break 语句退出C)用do-while 语句构成的循环,在while后的表达式为非零时结束循环D)用do-while 语句构成的循环,在while后的表达式为零时结束循环2.设int a,b;则执行以下语句后b的值为▁D▁▁▁a=1; b=10;do{ b-=a;a++;}while (b--<0);A)9 B) –2 C) –1 D) 83.以下程序段的执行结果是▁D▁▁▁int a, y;a=10; y=0;do{ a+=2; y+=a;cout<<“a=”<<a<<”,y=”<<y<<endl;if (y>20) break;}while (a=14);A)a=12,y=12 B) a=12,y=12a=14,y=16 a=14,y=26C) a=12,y=12 D) a=12,y=12a=14,y=44 a=16,y=284. 设int i;执行语句: for (i=1;i++<4;);后,变量i 的值是▁C▁▁A) 3 B) 4 C) 5 D)不定值5.以下循环体的执行次数是▁▁C▁▁#include <iostream.h>void main(){ int i, j;for (i=0,j=1; i<=j+1; i+=2, j--)cout<<i<<endl; }A) 3 B) 2 C) 1 D) 06. 当执行以下程序段时▁C▁▁▁int y=-1 ;do {y--;} while(--y);cout<<y--<<endl;A) 循环体将执行一次 B)循环体将执行两次C) 循环体将执行无限次 D)系统将提示有语法错误7.在下列选项中,没有构成死循环的程序是▁C▁▁▁A) int i =100; B) for (;;);while(1){ i=i%100+1;if (i>100) break; }C) int k=1000; D) int s=36;do {++k;} while(k<=1000); while (s); --s;8. 设int x,y;则执行下的循环后,y值为▁C▁▁▁for(y=1,x=1;y<=50;y++){ if(x>=10) break;if (x%2==1){ x+=5; continue;}x-=3; }A) 2 B) 4 C) 6 D) 89.设int j;,则下面for循环语句的执行结果是▁B▁▁for( j=10;j>3;j--){ if(j%3) j--;--j; --j;cout<<j;}A) 6 3 B) 7 4 C) 6 2 D) 7 310.以下程序的输出结果是▁B▁▁▁#include <iostream.h>void main( ){ int i, j;for(j=10;j<11;j++)for(i=9;i<=j-1;i++)cout<<j;}A) 11 B) 10 C) 9 D) 10 1111. 以下程序的执行结果是▁C▁▁▁#include <iostream.h>void main( ){ int i,sum;for(i=1;i<=3;sum++)sum+=i;cout<<sum<<endl;}A) 6 B) 3 C) 死循环 D) 012. 以下程序的执行结果是▁B▁▁▁#include <iostream.h>void main( ){ int x=23;do { cout<<x--<<endl;} while(!x);}A) 22 B) 23C) 24 D) 陷入死循环13.有如下程序, 该程序段的输出结果是▁B▁▁▁1#include <iostream.h>void main( ){ int n=9;while(n>6){ n--; cout<<n;} }A) 987 B) 876 C) 8765 D) 987614.以下程序的输出结果是▁D▁▁▁#include <iostream.h>void main( ){ int x=10,y=10,i;for(i=0;x>8;y=++i)cout<<x--<<" "<<y<<" ";cout<<endl; }A)10 1 9 2 B)9 8 7 6C)10 9 9 0 D)10 10 9 115.以下程序的输出结果是▁A▁▁▁#include <iostream.h>void main( ){ int n=4;while(n--) cout<<--n;}A)2 0 B)3 1 C)3 2 1 D)2 1 016.以下程序的输出结果是▁▁A▁▁#include <iostream.h>void main( ){ int i;for(i=1;i<6;i++){ if(i%2) { cout<<"#";continue;} cout<<"*";}cout<<"\n";}A)#*#*# B)##### C)***** D)*#*#*17.以下程序的输出结果是▁▁B▁▁#include <iostream.h>void main( ){ char i;for(i='A';i<'I';i++,i++) cout<<i;cout<< "\n";}A)编译不通过,无输出 B)ACEGC)ACEGI D)ABCDEFG18.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为▁▁C▁▁#include <iostream.h>#include <stdio.h>void main( ){ int v1=0,v2=0; char ch ;while ((ch=getchar())!='#')switch (ch ){ case 'a':case 'h':default: v1++;case '0':v2++; }cout<<v1<<”,”<<v2<<endl;}A)2,0 B)5,0 C) 5,5 D)2,5二、填空题(3+3+2=8)设i, j, k 均为int型变量,则执行完下面的for循环后,i的值为___6___; j的值为__4____;k 的值为 ___10____。
C语言各章节单元测试题及答案——循环结构程序设计
第3章循环结构程序设计3.1 典型考试题剖析3.1.1 选择题【例1】若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c 均已赋值(c大于0)s=a;for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是_______。
A)s=a+b; B)s=a+c; C)s=s+c; D)s=b+c;✧考点:本例考查for循环。
✧分析:初始赋值时s=a,那么s的值一定与a有关,C、D答案中不含a所以排除掉。
只用清楚for循环的次数,不管b以前的值为多少,第一次循环时b=1,当b>c时循环结束,那么显然s要加c次1。
所以s的值为a与c的和。
✧答案:B【例2】设x和y均为int型变量,则执行下面的循环后,y值为。
for(y=1,x=1;y<=50;y++){if(x>=10) break;if(x%2==1){x+=5;continue;}x-=3;}A) 2 B) 4 C) 6 D) 8✧考点:本例考查for循环中break和continue的用法,以及区别。
✧分析:break用在循环中,只能退出一层循环。
尤其是在嵌套循环中,只能退出它所在的那一层循环。
不能期望用break从最内层循环一下子退出最外层循环(可以用goto实现)。
continue语句只能用在循环中,它的作用是跳过其后面的语句,直接将控制转移到下一轮循环条件的测试。
语句“if(x>=10) break;”中的break只有当x>=10时,才会执行,并且跳出for循环;语句“x+=5;continue;”是每次执行完一次跳过其后面的语句,直接将控制转移到下一轮循环条件的测试for(y=1,x=1;y<=50;y++)中。
✧答案:C【例3】以下程序中,while循环的循环次数是_______。
main(){ int i=0;while(i<10){ if(i<1) continue;if(i==5) break;i++;}......}A) 1 B) 10 C) 6 D) 死循环,不能确定次数✧考点:本例考查while循环的用法,以及continue和break的分别。
循环结构程序设计习题及答案
第6章循环结构程序设计6-1.比较while语句、do–while语句和for语句的异同。
答:(1)while语句、do-while语句用于条件循环,for语句用于计数循环。
(2)while语句、for语句是先判断循环条件,后执行循环体,如果循环条件一开始就不成立,则循环体一次也不被执行;而do-while语句是是先执行循环体,后判断循环条件,所以循环体至少被执行一次。
(3)知道循环的次数可选用for语句实现循环,不知道循环的次数可选用while语句或do-while语句实现循环.(4)一般而言,三种循环语句可等价实现.6-2 仔细阅读下面的程序,指出程序的运行结果.#include<>void main(){ int i;for(i=0;++i;i<5){ if(i==3){printf("%d\n",++i);break;}printf("%d\n",++i);}}答:24思考:语句“for(“i=0;++i;i<5”)在编译时为何会给出语法警告错误当将其改为“for(i=0;i<5;++i)”时,运行结果又将如何6-3 仔细阅读下面的语的程序,指出程序的运行结果。
#include""void main(){ int i, a=0;for(i=1;i<=5;i++){do{i++;a++;} while(i<3);}i++;printf("a=%d,i=%d",a,i);}答:a=3,i=7思考:在for循环中嵌套着do-while循环,那么do-while循环中对i的修改会对for循环产生影响吗6-4编写程序,用1000个单词”computer”填充屏幕,每行60个.解:#include<>void main(){ int i;for(i=1;i<=1000;i++){ printf("computer.");if(i%60==0)printf("\n");}}思考:在for循环中,”if(i%60==0)printf(“\n”);”语句的作用是什么没有此语句将会是什么状况6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。
java-循环结构的例题
java-循环结构的例题1.从键盘输⼊个数不确定的整数,并判断输⼊的正数和负数的个数,输⼊为0时结束程序。
提⽰:最简单“⽆限”循环格式:while(true),for(;;),⽆限循环存在的原因是因为并不知道要循环多少次,需要根据循环体内部的某些条件,来控制循环的结束。
代码实现:import java.util.Scanner;class ex{public static void main(String[] args){int count1=0;int count2=0;while(true){System.out.println("请输⼊⼀个整数:");Scanner scan=new Scanner(System.in);int n=scan.nextInt();if(n>0){count1++;}else if(n<0){count2++;}elsebreak;}System.out.println("正数的个数为"+count1);System.out.println("负数的个数为"+count2);}} 运⾏结果:2.打印九九乘法表代码实现:class ex{public static void main(String[] args){for(int i=1;i<=9;i++){for(int j=1;j<=i;j++){System.out.print(i+"*"+j+"="+(i*j)+" ");}System.out.println();}}}运⾏结果:3.100000以内的所有质数的输出质数:素数,只能被1和它本⾝整除的⾃然数。
==> 从2开始到n-1结束,都不能被这个数整除。
最⼩的质数:2注意:(1既不是质数也不是合数)代码:实现⽅法⼀代码:(效率差)class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();for(int i=2;i<=100000;i++){//遍历10000以内的⾃然数for(int j=2;j<i;j++){if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环isFlag=false;//标识设为false}}if(isFlag==true){//如果为true,说明都不能除尽System.out.println(i);}//重置isFlagisFlag=true;}long end=System.currentTimeMillis();System.out.println("所花费的时间为:"+(end-start)+"s");}}运⾏截图:算法优化⼀代码:class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();for(int i=2;i<=100000;i++){//遍历100000以内的⾃然数for(int j=2;j<i;j++){//被i去除if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环isFlag=false;//标识设为falsebreak;//优化1 遇到了能除尽的,就退出⾥边的循环:只对本⾝⾮质数的⾃然数有效 }}if(isFlag==true){//如果为true,说明都不能除尽System.out.println(i);}//重置isFlagisFlag=true;}long end=System.currentTimeMillis();System.out.println("所花费的时间为:"+(end-start)+"s");}}运⾏截图:算法优化⼆代码:class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();for(int i=2;i<=100000;i++){//遍历100000以内的⾃然数for(int j=2;j<=Math.sqrt(i);j++){if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环isFlag=false;//标识设为falsebreak;//优化1 遇到了能除尽的,就退出⾥边的循环:只对本⾝⾮质数的⾃然数有效 }}if(isFlag==true){//如果为true,说明都不能除尽System.out.println(i);}//重置isFlagisFlag=true;}long end=System.currentTimeMillis();System.out.println("所花费的时间为:"+(end-start)+"s");}}运⾏截图:算法优化三:代码:class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();for(int i=2;i<=100000;i++){//遍历100000以内的⾃然数for(int j=2;j<=Math.sqrt(i);j++){if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环isFlag=false;//标识设为falsebreak;//优化1 遇到了能除尽的,就退出⾥边的循环:只对本⾝⾮质数的⾃然数有效}}if(isFlag==true){//如果为true,说明都不能除尽System.out.println(i);//如果不想显⽰,可以统计⼀下质数的个数,在这⾥count++(记得在开头要初始化为0) }//重置isFlagisFlag=true;}long end=System.currentTimeMillis();System.out.println("所花费的时间为:"+(end-start)+"s");}} 运⾏截图:优化⽅法四:(这个⽅法相⽐之前的只是输出的数据少了—注释了⼀条语句,添了⼀条语句,如果你把之前的三种优化⽅法都照着这种改⼀下,都会变快很多)代码:class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识int count=0;//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();for(int i=2;i<=100000;i++){//遍历10000以内的⾃然数for(int j=2;j<=Math.sqrt(i);j++){if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环isFlag=false;//标识设为falsebreak;//优化1 遇到了能除尽的,就退出⾥边的循环:只对本⾝⾮质数的⾃然数有效}}if(isFlag==true){//如果为true,说明都不能除尽//System.out.println(i);count++;}//重置isFlagisFlag=true;}long end=System.currentTimeMillis();System.out.println("所花费的时间为:"+(end-start)+"s");}}实现⽅式⼆:(运⽤到了continue关键字)class ex{public static void main(String[] args){boolean isFlag=true;//定义⼀个标识int count=0;//获取当前时间距离1970-01-01 00:00:00的毫秒数long start=System.currentTimeMillis();label:for(int i=2;i<=100000;i++){//遍历10000以内的⾃然数for(int j=2;j<=Math.sqrt(i);j++){if(i%j==0){//能除尽——但这⾥不能⽤break,因为会退出当前循环continue label;//优化2 遇到了能除尽的,就退出⾥边的循环:只对本⾝⾮质数的⾃然数有效}}count++;//能执⾏到此步骤的都是质数}long end=System.currentTimeMillis();System.out.println("质数的个数为:"+count);System.out.println("所花费的时间为:"+(end-start)+"s"); }} 运⾏截图:。
顺序结构、选择结构和循环结构的程序设计典型例题分析与解答
顺序结构、选择结构和循环结构的程序设计典型例题分析与解答1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。
【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。
【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。
次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。
只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。
【答案】直到型3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。
【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。
系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。
【答案】#include"stdio.h"或#include<stdio.h>4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( )①'A'/②A/③x=A/ ④x=A,y=12/12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符,在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。
顺序结构、选择结构和循环结构的程序设计典型例题分析与解答
顺序结构、选择结构和循环结构的程序设计典型例题分析与解答1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。
【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。
【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。
次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。
只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。
【答案】直到型3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。
【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。
系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。
【答案】#include"stdio.h"或#include<stdio.h>4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( )①'A'/②A/③x=A/ ④x=A,y=12/12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符,在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。
循环结构例题和习题
循环结构用于执行一些重复的操作。
常见的重复操作有,(1)累加、累积:重复累积一批可以有规律地计算出来的数据。
(2)递推:反复地从一个中间结果计算出来下一个中间结果。
(3)对一系列类似的数据进行同样的加工处理。
如果重复操作的次数比较多,或者需要重复的次数无法事先确定,就需要通过循环结构实现。
在循环结构程序中,各个语句是按照位置的先后顺序执行的,且顺序结构中的每个语句都会被执行到。
【例1】编写程序,输入n,求1! + 2! + ... + 20!的值。
该问题中有一个重复的累加,累加的次数由变量n的值确定,应当考虑用循环实现。
/*程序功能:计算平方和*/int main ( ){long i, j;long prod;long sum = 0;for ( i = 1; i <= 20; i = i + 1 ){prod = 1;for ( j = 1; j <= i; j = j + 1 ){prod = prod * j;}sum = sum + prod;}printf ( "sum = %ld\n", sum );return 0;}程序的运行情况:sum = 268040729例7.1、例7.2、例7.3的功能都是重复累计一批可以有规律地计算出来的数据。
【例2】编写程序,输出1-200之间的完全平方数。
判断一个整数n是否为完全平方数,可以从1开始,逐个检查小于不超过n的整数,看其平方是否等于n。
如果存在某个数的平方等于n,则说明n是完全平方数。
否则,n不是完全平方数。
第一个完全平方数为a1=12;一般地,设第i个完全平方数为a i=i2,则第i+1个完全平方数应该是a i+1=(i+1)2 =i2+2i+1=a i+2i+1。
由于计算a i+1的值需要a i的值,所以可以使用循环。
/*程序功能:输出1-200之间的完全平方数*/int main ( ){int i = 0;int num;for ( num = 1; num <= 200; num = num + 2 * i + 1 ){i = i + 1;printf ( "No.%d complete square number is: %ld\n", i, num );}return 0;}程序运行结果:No.1 complete square number is:1No.2 complete square number is:4No.3 complete square number is:9No.4 complete square number is:16No.5 complete square number is:25No.6 complete square number is:36No.7 complete square number is:49No.8 complete square number is:64No.9 complete square number is:81No.10 complete square number is:11No.11 complete square number is:121No.12 complete square number is:144No.13 complete square number is:169No.14 complete square number is:196【例3】某人上楼梯,他一步可以迈一个台阶,也可以一步迈两个台阶。
while循环结构例题
引子#include "stdio.h"main(){ int i=1;for(i=1;i<=10000;i++)printf(“%d\t”,i);}题型1 输入输出多个数据eg1、输出1~10000之间所有的整数#include "stdio.h"main(){ int i=1;while(i<=1000){printf(“%d\t”,i);i++;}}拓展:1、换成所有的奇数2、换成所有的偶数题型2 有限个数连加和连乘eg2.1、求1+2+3+4+………+100的值#include "stdio.h"main(){ int i=1,s=0;while(i<=100){s=s+i;i++;}printf(“%d\n”,s);}拓展:1、求1+2+3+4+………+n的值2、求12+22+32+………+n2的值3、求1+1/2+1/3+………+1/n的值eg2.2、求n!的值#include "stdio.h"main(){ int i=1,n,p=1;scanf(“%d”,&n);while(i<=n){p=p*i;i++;}printf(“%d\n”,p);}拓展:求1!+2!+3!+………+n!的值#include "stdio.h"main(){ int i=1,n,p=1,s;scanf(“%d”,&n);while(i<=n){p=p*i;s=s+p;i++;}printf(“%d\n”,s);}题型3 无限个数连加eg3、求1-1/3+1/5-1/7+………的近似值,要求精度要达到10-4#include "stdio.h"#include "math.h"main(){ float n=1,s=0,f=1,t=1;while(fabs(t)>=1e-4){t=f/(2*n-1);s=s+t;f=-f;n++;}printf(“%f\n”,s);}拓展:求1-1/2+1/4-1/6+………的近似值,要求精度要达到10-4题型4 统计eg4.1、输入20个数,统计其中正数、负数和零的个数。
循环结构程序设计练习题__内含答案概要
第三单元循环结构练习题选择题:(有答案)1、有以下程序执行后的输出结果是()。
main( ){ int i,s=0;for(i=1;i<10;i+=2) s+=i+1;printf("%d\n",s);}A.自然数1~9的累加和 B.自然数1~10的累加和C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和2、以下关于for语句的说法不正确的是()。
A. for循环只能用于循环次数已经确定的情况B. for循环是先判断表达式,后执行循环体语句C. for循环中,可以用break跳出循环体D. for循环体语句中,可以保含多条语句,但要用花括号括起来3、若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++) printf("*****\n");下面关于语句执行情况的叙述中正确的是()。
A.循环体执行两次B.循环体执行一次C.循环体一次也不执行D.构成无限循环4、若运行以下程序时,输入2473↙,则程序的运行结果是:()main ( ){ int c;while ((c=getchar( )) ! =’\n’)switch (c-‘2’) {case 0 :case 1 : putchar (c+4) ;case 2 : putchar (c+4) ; break ;case 3 : putchar (c+3) ;default : putchar (c+2) ; break ;}pr intf(“\n”);}A)668977 B)668966 C)66778777 D)66887665、以下for循环的执行次数是:()。
for (x=0,y=0; (y=123) && (x<4) ; x++) ;A)无限循环 B)循环次数不定 C)4次 D)3次6、已知 int t=0; while(t=1){...} 则以下叙述正确的是()。
循环结构程序设计典型例题
例2 要求输出100~200之间的不能被 3整除的数。 编程思路:
对100到200之间的每一个整数进行检查
如果不能被3整除,输出,否则不输出
无论是否输出此数,都要接着检查下一个 数(直到200为止)。
9
n=100 n≤200 Y n能被3整除 N 输出n n=n+1
for(n=100;n<=200;n++) { if (n%3==0) continue; printf("%d ",n); } N Y
6
#include <stdio.h> #define SUM 100000 void main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total= total+amount; if (total>=SUM) break; } 实际捐款人数 aver=total / i ; printf(“num=%d\naver=%10.2f\n“ ,i,aver); }
printf("%12d\n",f3);
f1=f2;
f2=f3; 代码可改进
} }
…
32
#include <stdio.h>
2
编程思路:
变量amount,用来存放捐款数 变量total,用来存放累加后的总捐款数
变量aver,用来存放人均捐款数
定义符号常量SUM代表100000
c语言循环结构 高阶例题
c语言循环结构高阶例题
编写一个C程序,实现一个计算斐波那契数列的函数。
斐波那契数列是一个常见的数列,其中每个数字是前两个数字的和。
例如,斐波那契数列的前10个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34。
代码如下:
c复制代码
#include <stdio.h>
int fibonacci(int n) {
int i, t, a = 0, b = 1;
for (i = 2; i <= n; i++) {
t = a + b;
a = b;
b = t;
}
return b;
}
int main() {
int n = 10;
printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
return 0;
}
在上面的代码中,我们定义了一个名为fibonacci的函数,该函数使用循环结构计算斐波那契数列的第n个数字。
具体来说,我们使用两个变量a和b来存储前两个斐波那契数字,并使用一个循环结构来计算下一个数字。
在每次循环中,我们将a和b的值更新为下一个斐波那契数字。
最后,函数返回第n个斐波那契数字。
在主函数中,我们调用fibonacci函数来计算第10个斐波那契数字,并输出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例5 求费波那西(Fibonacci)数列的前 40个数。这个数列有如下特点:第1、2 两个数为1、1。从第3个数开始,该数是 其前面两个数之和。即:
F1 1 F2 1 F F F n 1 n2 n
(n 1) ( n 2) (n 3)
28
这是一个有趣的古典数学问题:
void main()
{ int i,j,n=0;
for (i=1;i<=4;i++)
累计输出数据的个数
for (j=1;j<=5;j++,n++)
{ if (n%5==0) printf (“\n”);
printf ("%d\t",i*j);
}
printf("\n"); }
控制一行内输 出5个数据
30
f1=1,f2=1 输出f1,f2 For i=1 to 38 f3=f1+f2 输出f3 f1=f2 f2=f3
31
#include <stdio.h>
void main()
{ int f1=1,f2=1,f3; int i; printf("%12d\n%12d\n",f1,f2); for(i=1; i<=38; i++) { f3=f1+f2;
4
#include <stdio.h> #define SUM 100000 void main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); 应该执行1000次 total= total+amount; if (total>=SUM) break; } aver=total / i ; printf(“num=%d\naver=%10.2f\n“ ,i,aver); }
24
2
22 7
1 1 1 1 4 3 5 7
每项的分子都是1
后一项的分母是前一项的分母加2
第1项的符号为正,从第2项起,每一项的符 号与前一项的符号相反
1 n
1 n2
25
#include <stdio.h> #include <math.h> void main() { int sign=1; double pi=0,n=1,term=1; while(fabs(term)>=1e-6) { pi=pi+term; 求绝对值的函数 n=n+2; sign=-sign; term=sign/n; } 只保证前5位小数是准确的 pi=pi*4; printf("pi=%10.8f\n",pi); }
16
#include <stdio.h>
void main()
{ int i,j,n=0; for (i=1;i<=4;i++)
控制输出4行
for (j=1;j<=5;j++,n++) { if (n%5==0) printf (“\n”);
printf ("%d\t",i*j);
} printf("\n"); }
26
#include <stdio.h> #include <math.h> void main() { int sign=1; double pi=0,n=1,term=1; while(fabs(term)>=1e-6) 改为1e-8 { pi=pi+term; n=n+2; sign=-sign; term=sign/n; } pi=pi*4; printf("pi=%10.8f\n",pi); }
printf("%12d\n",f3);
f1=f2;
f2=f3; 代码可改进
} }
…
32
#include <stdio.h>
5
#include <stdio.h> #define SUM 100000 void main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total= total+amount; if (total>=SUM) break; } 达到10万,提前结束循环 aver=total / i ; printf(“num=%d\naver=%10.2f\n“ ,i,aver); }
2
编程思路:
变量amount,用来存放捐款数 变量total,用来存放累加后的总捐款数
变量aver,用来存放人均捐款数
定义符号常量SUM代表100000
3
#include <stdio.h> #define SUM 100000 指定符号常量SUM代表100000 void main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total= total+amount; if (total>=SUM) break; } aver=total / i ; printf(“num=%d\naver=%10.2f\n“ ,i,aver); }
18
#include <stdio.h>
void main()
{ int i,j,n=0;
for (i=1;i<=4;i++)
i=1时
for (j=1;j<=5;j++,n++)
{ if (n%5==0) printf (“\n”);
printf ("%d\t",i*j); j由1变到5 } i*j的值是1,2,3,4,5 printf("\n"); }
if (i==3 && j==1) continue;
printf ("%d\t",i*j);
} printf("\n");
}
22
1 1 1 例4 用 4 1 3 5 7 公式求 的近似值 ,直到发现某一项的绝对值小于10-6 为止(该 项不累计加)。
(教材P96 例 4.21 )
循环结构程序设计典型例题
例1 在全系1000学生中,征集慈善募 捐,当总数达到10万元时就结束,统 计此时捐款的人数,以及平均每人捐 款的数目。
1
编程思路:
循环次数不确定,但最多循环1000次 在循环体中累计捐款总数
用if语句检查是否达到10万元
如果达到就不再继续执行循环,终止累加
计算人均捐款数
8
例2 要求输出100~200之间的不能被 3整除的数。 编程思路:
对100到200之间的每一个整数进行检查
如果不能被3整除,输出,否则不输出
无论是否输出此数,都要接着检查下一个 数(直到200为止)。
9
n=100 n≤200 Y n能被3整除 N 输出n n=n+1
for(n=100;n<=200;n++) { if (n%3==0) continue; printf("%d ",n); } N Y
7
#include <stdio.h> #define SUM 100000 void main() { float amount,aver,total; int i; for (i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total= total+amount; if (total>=SUM) break; } 只能用于循环语句和switch aver=total / i ;语句之中,而不能单独使用 printf(“num=%d\naver=%10.2f\n“ ,i,aver); }
有一对兔子,从出生后第3个月起每个月都生 一对兔子。 小兔子长到第3个月后每个月又生一对兔子。 假设所有兔子都不死,问每个月的兔子总数为 多少?
29
第几 小兔子 中兔子 老兔子 兔子 个月 对数 对数 对数 总数 1 1 0 0 1 2 0 1 0 1 3 1 0 1 2 4 1 1 1 3 5 2 1 2 5 6 3 2 3 8 7 5 3 5 13 ┇ ┇ ┇ ┇ ┇
Y
Y
强行退出循环
只结束本次循环
12
例3 输出以下4*5的矩阵。
1 2 3 4 5
2
3
4
6
6
8 10
9 12 15
4
8 12 16 20
13
解题思路: 可以用循环的嵌套来处理此问题 用外循环来输出一行数据 用内循环来输出一列数据 按矩阵的格式(每行5个数据)输出