第五章循环程序设计(陈)
C语言 第五章-循环结构程序设计
执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
高树芳C语言程序设计--第五章
VC程序代码
21
5.4
for循环结构
相关知识:
求解表达式1
1.for语句 见执行过程图。 2. for语句的说明 三个表达式均可省略, 但两个分号不可省略。
假 计算表达式2 真 循环体语句
求解表达式3
for语句的后续语句
22
5.2
while(当型)循环结构
[课堂训练5-4] 用for循环编程实现倒计时效果。即在屏幕上 固定位置显示10,然后清除之,再显示9,之后 是8……,至到1。
是成绩非-1等。
10
5.2
while(当型)循环结构
相关知识:
1.while语句的一般形式 2.while语句的说明 3.循环结构的构造方法 4.if语句与循环语句的区别
11
5.2
while(当型)循环结构
[课堂训练5-2] 计算s=1+1/2+1/3+1/4+„„+1/n,直到s大于或等 于3为止,输出n的值。 提示: 这是“标志”型循环。设置实型变量s并设初值为 0.0,设置整型变量i并设初值为1,循环条件是 s<=3,重复内容是s=s+1.0/i,注意要使用1.0实型 常量,或者将1或i作强制类型转换,将其转换为 实数,否则运算结果为0。
20
5.4 for循环结构 案例5-6 跳动的“O”
[案例任务]
编程实现字符“O”从屏幕的左端移动到右端。每一 秒种移动一下,形成跳动的效果。运算结果大致如 下。
[解决方案]首先显示一个O,延时片刻,然后光标
后退(用转义字符),再显示一个空格和一个O。循 环以上功能直到光标到屏幕最右端。
WIN-TC程序代码
[解决方案]该循环至少执行1次,使用do„while
[工学]第05章 循环结构程序设计 (2)
22
i=i+c
2019/2/17
例:#include<stdio.h> 例:#include<stdio.h> main( ) main( ) { int i=0; { int i=0; for(;i<10;i++) for(i=0;i<10;i++) putchar(‘a’+i); putchar(‘a’+i); } } 运行结果:abcdefghij
2019/2/17
21
(7)表达式2一般是关系表达式(如 for语句说明4 i<=100)或逻辑 表达式(如a<b&&x<y),但也可以是数值表达式 或字符表达式,只要其值为非零,就执行循环体。分 析下面两个例子: ①for ( i=0;(c=getchar( ))!=‘\n’;i+ =c); i=0 此 for语句的执行过程见图 ,它的作 用是不断输入字符,将它们的ASCII 取一个字 码相加,直到输入一个“换行”符为 符=>c 止。 F ② for( ;(c=getchar( ))!=‘ \ n’;) C≠换行符 printf(“%c”,c);
15
思考:该程序是什么功能?
2019/2/17
5.3 for语句
for循环语句是C语言中功能最强的循环语句,它有
多个变化形式,并且可以很方便的代替其它的循环语
16
句。 for语句的一般形式
for(表达式1;表达式2;表达式3)循环体语句
2019/2/17
17
for执行流程
①先计算初值表达式1,它主要 用于循环开始前设置变量初值; ②接着计算循环控制逻辑表达式 2,它控制循环条件,决定循环 次数; ③如果表达式2为真,则执行循 环体语句,否则结束for循环; ④求解表达式3,它主要是对循 环控制变量进行修改。 ⑤转步骤②执行。
C语言程序设计:第5章 循环结构
12
do...while语句(cont...)
课堂练习: 1.输出1---n之间的数,其中n从键盘输入。
int main(void) {
//1.定义变量i和n //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:输出i的值 return 0; }
} 相当于 while(1) {
}
26
小结
❖for(i=m;i<n;i++)//循环次数:n-m次 ❖for(i=m;i<=n;i++)//循环次数:n-m+1次
27
循环语句的练习
课堂练习: 1.输出n---1之间的数,其中n>1且n从键盘输入。 2.计算1*2*3*...*n的值(n的阶乘n!), 其中n从键盘输入。 3.计算10- 1/2 - 1/3 -....1/n的值 以上练习分别以while、do...while、for语句实现
int main(void) {
//1.定义变量i,n,sum //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:累加i的值 //7.输出计算结果 return 0; }
24
for语句(cont...)
{
sum = sum + i;
if(sum > 100)break;
循环数据结构设计
循环 问题
while循环
循环条件: 余数r不为0 循环体:ba, rb 计算 a和b 的余数r ; 算法:
读入a、b a%b r r<>0 b a r b a%b r 输出b
#include <stdio.h> void main() {int a,b,r; scanf("%d%d",&a,&b); r=a%b; while(r) {a=b; b=r; r=a%b; } printf("%d\n",b); }
#include <stdio.h> void main() {int n,k,s=0; scanf("%d",&n); for( ;n!=0; ) { k=n%10; s=s+k; n=n/10; } printf(“%d\n",s);
几种循环的比较
#include "stdio.h" void main() {int s=0,i; for(i=1;i<=100;i++) s=s+i; printf("%d",s); }
分析程序运行结果
循环的嵌套
输出100 ~200间的所有素数。 “素数”:只能被1和自身整除的数。 如何判断一个数(n)是否是素数? 用2 ~n/2之间的数i除n, 都除不尽:n是素数; 有一个可以除尽:不是素数。 是一个循环过程,用什么循环? 循环条件:i<=n/2且n%i!=0 循环体: i++
0s,0n i=1,15 读入成绩g s+gs g>=60 n++ 输入s/15,n/15
C程序设计第五章课后习题答案
循环结构程序设计P115 5.1 用while计算1至100的合.#include<stdio.h>int main(){int i=1,sum=0;while(i<=100) //对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.{sum=sum+i;i++;}printf("The sum is %d .\n",sum);return 0;}P117 5.2 用do-while来做1至100的合.#include<stdio.h>int main(){int i=1,sum=0;do// do-while可以做的事,用while都可以做到.{ //do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.sum=sum+i;i++;}while(i<=100);printf("The sum is %d .\n",sum);return 0;}P118 5.3 比较do-while与while的差别.#include<stdio.h>{int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,正常,11的话,则sum仍然是0.while(i<=10){sum=sum+i;i++;}printf("The sum of 1-10 is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,结果一样.输入11的话,先做操作,所以sum=11.do{sum=sum+i;i++;}while(i<=10); //此重点在于理解二者的差别.printf("The sum of 1-10 is %d .\n",sum);return 0;}P126 5.4 break的例子.#include<stdio.h>int main(){int i,b=0,a,c;for(i=0;i<=1000;i++){printf("Please input amount :"); //循环体内套有输出语句以及跳出语句.scanf("%d",&a);b=b+a;if(b>=100)break; //break是用于跳出循环,对if无效,对while for switch 这一类.}}c=b/i;printf("conut is %d , aver is %d ",i+1,c); //注意%号后的形式,否则可能输出错误.return 0;}P127 5.5 continue的例子.#include<stdio.h>int main(){int i;for(i=1;i<20;i++){if(i%3!=0){continue; //跳过本次I,执行下一个i.}printf("%d ",i);}printf("\n");return 0;}P128 5.6 形成一个4*5的矩阵.#include<stdio.h>int main(){int i,j,a=0; //没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;i<=4;i++){for(j=1;j<=5;j++,a++) // a用来控制换行.{if(a%5==0){printf("\n");}printf("%d\t",i*j);}}printf("\n");return 0;}P131 5.7 用一个交错的式子求哌的近似值.#include<stdio.h>#include<math.h>int main() //四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).{float s=1,n=1,m,sum=0,t;for(m=1;;m=m+2) //不确定哪项才会小于等于十的负六次方,所以不指定,无限下去.{ //不指定第二项,执行语句中应该有控制跳出的句子,否则死循环.t=(s)*(n/m); //这是第一项,s是符号,if(fabs(t)<=1e-6) //应该写在这里,题目要求这一项不累加进去.{break;}sum=sum+t; //因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); //变号一次.}printf("四分之一哌的值是%f.\n",sum);printf("一个完整哌的值是%f.\n",sum*4);return 0;}//下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行.//如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题.//#include <stdio.h> //这是关于int float double三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白来.////int main() //在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告 1 warning C4305: “=”: 从“double”到“float”截断.//{// float m,a,b,c; //一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的m=1,其实得到的是m=1.0.// int d,e,f;// m=1;// a=1.0/3;// b=1/3;// c=m/3;// d=1.0;// e=1/4;// f=1.0/4;// printf("%lf(float用double的%lf来输出是可以的.)\n%f\n%f\n%f\n",m,a,b,c); //不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出.// printf("%d\n%d\n%d\n",d,e,f); //但是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!!!!// return 0;//}#include<stdio.h>int main() //这个就是著名的Fibonacci(费波那契数列问题){int f1=1,f2=1,f3,i;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++) //注意,这是个基础问题,(i=1;i<=5;i++)这里其实进行了次运算,因为有f1,f2,要求有个,所以要有个.要么写<=38,要么写<39,边界问题一定要注意,不可以太随意!!!!{f3=f1+f2;printf("%12d\n",f3); //这个问题同样适用于"一对兔子一个月生一对"的问题.,f1=f2; //f1=f1+f2;此时它们各是,所以,现在的f1是.f2=f3; //f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3.}return 0;}#include<stdio.h>#include<math.h>int main(){double num;int i;printf("Please input a number :");scanf("%lf",&num); //因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;i<=sqrt(num);i++) //这边是<=号没错.{if((int)num%i==0) //如果在这期间有任何一个可以为零的话,则不是素数.{break; //当然跳出.}} //执行到这里的时候,i=5,已经变成了!!if(i<=sqrt(num)){printf("Not %d",(int)num);}else//如上所述,i=5,超出了求根的值,所以是素数.{printf("Yes %d",(int)num);}return 0;}P137 5.10 求100至200间的素数.#include<stdio.h>//不解释,HOHO>>>>...#include<math.h>int main(){double j;int i,k=0;for(j=100;j<=200;j++){for(i=2;i<=sqrt(j);i++){if((int)j%i==0){break;}}k=k+1; //这里是布局的开头.学习一下,有助逻辑.if(i<=sqrt(j)){printf("Not %d ",(int)j);if(k%5==0) //5个换一次行.{printf("\n");}}else{printf("Yes %d ",(int)j);if(k%5==0){printf("\n");}}}return 0;}P139 5.11 密码转换.#include<stdio.h>int main(){char c;c=getchar();while(c!='\n') //这也可以用数组来实现.{if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){if((c>='w'&&c<='z')||(c>='W'&&c<='Z')){c=c-22;}else{c=c+4;}printf("%c",c);c=getchar(); //套在循环里,依次得到字母,而while中判断回车为结束.}}printf("\n"); //这是布局问题.return 0;}P140 0.3 最大公约数和最小公倍数.#include<stdio.h>//最大公约数用累除法,除到无余数时的被除数是最大公约数.main (){int m, n, c, d;int gcd(); //这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); //这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf("Please input two number :\n");scanf("%d %d",&m,&n);c=gcd(m,n); //c获取最大公约数d=lcm(m,n); //d获取最小公倍数printf("The GCD of %d and %d is : %d !\n", m, n, c);printf("The LCM of %d and %d is : %d !\n", m, n, d);return 0;}int gcd(int x, int y) //最大公约数Greatest Common Divisor{int temp;while(x%y!=0){temp=y; //y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.y=x%y; //x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; //刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.}return y; //这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. }int lcm(int x, int y) //最小公倍数Lowest Common Multiple{int i, temp;if(x<y) //此段代码结果是保证二者大的数在X上,小的数在Y上.即小于号降序.{ //以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;}for(i=1; i<=y; i++) //设定一个区间,从1至大的数之间的循环.{if(!((x*i)%y)) //此式子如有余数,加上"!"号,会是假,则不返回,进行下一轮.{ //如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.return x*i;}}}P140 0.4 判断一串输入的字符.#include<stdio.h>int main(){char ch;int a=0,b=0,c=0,d=0,e=0;printf("Please input the string\n");while((ch=getchar())!='\n') //直到回车.{if(ch<='z'&&ch>='a'){a++;}else if(ch==' '){c++;}else if(ch<58&&ch>47){d++;}else if(ch<='Z'&&ch>='A'){b++;}else{e++;}}printf("大写%d 小写%d 空格%d 数字%d 其它%d\n",a,b,c,d,e);}#include<stdio.h>//不理解时可以百度或是谷歌更多的信息.int main() //想办法既快速做完,又要消化理解!!!{int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.temp=a; //先把第一阶的值存起来.for(i=0;i<n;i++){sum=sum+a;printf("%d + ",a); //事关布局.a=a*10+temp; //重点是每次乘,然后加上上一个数.}printf("= %d .",sum);return 0;}P140 0.6 1!+2!+3!+4!.....的值. #include<stdio.h>int main() //1!+2!+3!+4!.....{int i,j,k,sum=0,m=1;scanf("%d",&k); //比如设定为,值为.for(i=1;i<=k;i++) //第一层循环,指定到.{for(j=1;j<=i;j++) //第二层循环,指定至当前数.{m=m*j;} //到此是阶乘的结构.sum=sum+m;m=1;}printf("%d",sum); //完全不理解时,搜索并参考.return 0; //尝试自己做,第一次做出来就是自己的东西了. }#include<stdio.h>int main(){int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a<=100;a++) //三个块分别注释验证结果.{asum=asum+a;}for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言.{bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c.}for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中.{csum=csum+1/c;}printf("%lf",asum+bsum+csum);return 0;}PP#include<stdio.h>#include<math.h>int main(){int j,k,s[6],x=100,y,sum=0;for(j=153;j<=154;j++){for(k=2;k>=0;k--){s[k]=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(s[k],3);sum+=y;printf("%d-%d--%d\t",k,s[k],j);}printf("%d\n",sum);}return 0;}P140 0.8 水仙花数.//#include <stdio.h> //一步步的发现问题.////int main() //在%和/号之间,以前pow.以后再做.//{// int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了.// for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟.// {// for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑. // {// for(k=0;k<=i;k++)// {// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);// }// if(sum==j)// {// printf("%d 是水仙花数!\n",j);// }// sum=0;// }// }// return 0;//} //为什么还是无法实现?!#include<stdio.h>#include<math.h>int main(){int a,b,c,i,sum=0; //这里只计算三位数的.for(i=100;i<1000;i++){a=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum==i){printf("%d 是水仙花数.\n",i);}sum=0;}return 0;}P141 0.9 完数.#include<stdio.h>int main(){int i,j,r;for(i=1;i<=1000;i++) //零是个临界值,不能包括它.{r=0; //每次清零重来.类似水仙中的sum.for(j=1;j<i;j++){if(i%j==0) //除得尽即是因子.{r=r+j; //然后累加进去.}}if(r==i) //若相等.{printf("%d 是完数.\n",i);}}return 0;}P141 0.10 2/1+3/2+5/3+8/5+13/8…#include<stdio.h>int main() //10.007051{double i,a=2,b=1,c,s=0; //a是分子,b是分母.for(i=0;i<6;i++) //二十可以用户指定.{s+=a/b; //中间储值变量.c=a+b;b=a;a=c;}printf("%lf\n",s);return 0;}#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{double sum=100,high=100,up,donw,i;for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百.{up=high/2;donw=up;high=donw; //自咬尾巴问题.sum+=donw*2;}printf("%lf %lf\n",donw,sum);return 0;}P141 0.12 猴子吃桃子.#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{int i,sum=1;for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配.{printf("倒数第%d天还剩有%d个桃子.\n",i,sum);sum=(sum+1)*2;}//printf("%d\n",sum);return 0;}#include<stdio.h>#include<conio.h>main() //只关注左半部分.右半部分无视空格.{int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶.for(i=1;i<=m;i++) //上半部分.其实也是正三角.{for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格.printf(" ");for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五... printf("*");printf("\n");}for(i=m-1;i>0;i--) //下半部分.其实也是倒三角.{ //减一是因为行数问题.这是中心行以下的.for(j=m-1;j>=i;j--)printf(" ");for(k=1;k<2*i;k++)printf("*");printf("\n");}getch(); //用户反应后结束.但,没必要.}。
C语言第5章循环结构程序设计1
(2)在循环体中应有使循环趋向于结束的语句。 比如上例中,循环结束的条件是“score>=0”, 那么当我们把这个班的成绩全部输入完后, 一定要输入一个负数,才能使程序往下执行。 (3)循环体语句有可能一次也不执行。比如说上 例中,当第一次输入的分数就为负数时,则 循环体一次也不执行。
§5.3 do …while语句
① ② ④ ③
for(i=1; i<100; i++) s=s+i; printf(″s=%d″, s); }
/*循环体语句*/
对于for循环,有一点非常重要,即条件测 试永远是在循环开始时进行,如果在循环开 始时条件为假,那么循环体语句就不会被执 行。如: int i=10; for (k=10;k!=i;k++) printf(″%d″,k); printf(″%d″,k);
2、循环控制变量必须在循环体内有所改变,才 能使while和do-while语句的循环控制条件表达 式的值不断改变,直至循环结束。否则会造 成死循环。例如: i=1; while(i<=100) putchar(′*′); i++; 这个循环永远不会结束,因为“i++;”语句 不属于循环体中的语句,循环控制变量i没有 在循环体内被改变。 程序应该作如下改变:
在使用while语句的时候,我们要注意以下 两个问题: (1)循环体如果包含一个以上的语句,应该用花 括号括起来,以复合语句的形式出现。如果 不加花括号,则while语句的范围只到while后 面的第一个分号处。比如上例中,while语句 中如无花括号,则while语句范围只到 “average+=score;”。
#include <stdio.h> main() {int i,n;long fac; Scanf(―%d‖,&n); i=1 while (i<=n) fac=fac*i; i++; } Printf(―%d!=%ld‖,n,fac); }
第五章 循环与分支程序设计
continue: add loop mov loop ……
2. 分支程序设计
? ? … case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1) 逻辑尺控制 (2) 条件控制
IF-THEN-ELSE 结构
(3) 地址跳跃表(值与地址有对应关系的表) 地址跳跃表(值与地址有对应关系的表)
13
x(x1,x2,…… x2,……,x10) 例:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10), (z1,z2,…… z2,……,z10) 编程计算 z(z1,z2,……,z10) z1 = x1 z2 = x2 z3 = x3 z4 = x4 z5 = x5 z6 = x6 z7 = x7 z8 = x8 z9 = x9 + y1 + y2 - y3 - y4 - y5 + y6 - y7 - y8 + y9
3
1. 循环程序设计
初始化
初始化
N N
控制条件
Y
循环体 控制条件
Y
循环体
DO-WHILE 结构
DO-UNTIL 结构
4
初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制
特征值控制 地址边界控制
5
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1
2 3
4je lea L: shr jnb jmp add1: add jmp continue: …… routine1: …… routine2: …… al, 0
(寄存器间接寻址) 寄存器间接寻址)
continue bx, branch_table ;逻辑右移 al, 1 逻辑右移 ;jnb=jnc add1 ;段内间接转移 word ptr[bx] bx, type branch_table L
第5章 基本的控制结构(循环)
结束
图5-7
“九九乘法表”运行结果
结束
循环嵌套要注意以下事项: (1)在多重循环中,各层循环的循环控制变 量不能同名。但并列循环的循环控制变量名
可以相同,也可以不同。
(2)外循环必须完全包含内循环,不能交叉。
结束
下面的循环代码正确吗? For I=1 To 100 For I=1 To 100 For J=1 To 10 For I=1 To 10 „„ „„
结束
5.3.5 循环的退出
在某些情况下,为了减少循环次数或便 于程序调试,可能需要提前强制退出循 环。VB为For„Next和Do„Loop循环语句 提供了相应的强制退出循环的语句。
结束
Exit For语句:
用于For„Next循环,在循环体中可以出 现一次或多次。当系统执行到该语句时, 就强制退出当前循环。
结束
格式1的两种形式: Do {while} <条件> [<循环体>] Loop Do
当条件为真时, 执行循环体语句
{until} <条件> 当条件为真时,终 [<循环体>] 止执行循环体语句 Loop 说明: 格式1是先判断条件是否为真,然后执行。
结束
F
条件是否为真?
T
条件是否为真?
T
循环体
F
循环体
图2-3
Do While „Loop执行流程
图2-4
Do
Until „Loop执行流程
结束
格式2的两种形式: Do [<循环体>] Loop {while} <条件> Do
[<循环体>] Loop {until} <条件> 说明: 格式2是先执行循环体语句,然后判断条件。
c5第五章 循环结构程序设计
conio是Console Input/Output(控制台输 入输出)的简写,其中定义了通过控制 台进行数据输入和数据输出的函数,主 要是一些用户通过按键盘产生的对应操 作,比如getch()、putch()函数等等。
2
附件: warning C4013: „system‟ undefined; assuming extern returning int 警告信息的解决
4
5.1 while语句
1、while 语句 常称为“当型”循环语句。
表达式
!0 循环体
0
5
2 、while 语句的形式: while (表达式)
循环体;
特点:先判断表达式,后执行语句。 说明: – 循环体有可能一次也不执行 – 循环体可为任意类型语句 – 下列情况,退出while循环 • 条件表达式不成立(为零) • 循环体内遇break,return,goto – 无限循环:
7
例 (ch5_02.c)显示1~10的平方
#include <stdio.h> #include <conio.h> main() { int i=1; while(i<=10){ 运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100 8
printf("%d*%d=%d\n",i,i,i*i);
i++; } getch(); }
5.2 do--while语句
1、do--while语句 常称为“直到型”循
环语句。
循环体
!0
表达式
0
C语言程序设计循环结构程序设计
假
体现式
真
语句
假如体现式旳值一开始就为0,则语 句一次也不会被执行。
上一页
下一页
while语句举例
问题: 求学生旳平均成绩,以输入负数成绩为结束
算法分析:
1. 定义变量score存储学生成绩,定义s=0存储累加旳成绩,
定义n=0统计录入旳成绩数目。
2. 输入第一种学生旳score
3. 若score>=0,执行第4步,不然执行第7步
上一页
下一页
例: 求 1+2 +…+99
分析:用变量i从1到99循环, 把i旳值累加到变量s中,最 终输出s旳值。
程序如下:
#include<stdio.h> main( ) { int i,s=0;
for(i=1;i<=99;i++) s=s+i;
printf(“s=%d”,s); }
上一页
下一页
在某些情况下,for语句中旳体现式1、2、3都能够 省略,而改用其他旳方式来实现这些功能。我们还用 上面旳例子阐明for语句省略体现式旳情形。
上一页
下一页
1.省略体现式1: #include<stdio.h> main( ) { int i=1,s=0;
for(;i<=99;i++) s=s+i;
因为do-while语句至 少要被执行一次,特
别要注意n和s旳取值 问题!
s=s+score;
}while(score>=0);
if(n>1) printf (“ \n %f” ,(s-score)/(n-1));
else printf(“no student score!”);
C语言程序设计教程 第五章 课后习题参考答案
C语言程序设计教程第五章课后习题参考答案一、选择题1. B2. A3. C4. B5. D二、填空题1. while2. binary3. 164. 35. continue6. global三、判断题1. 错误2. 正确3. 错误4. 错误5. 正确四、编程题1.```c#include<stdio.h>int main() {int num;printf("请输入一个整数:"); scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数\n", num); } else {printf("%d是奇数\n", num); }return 0;}```2.```c#include<stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("%d与%d的和为%d\n", num1, num2, num1 + num2); return 0;}```3.```c#include<stdio.h>int isPrime(int num) {int i;if (num <= 1)return 0;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```4.```c#include<stdio.h>int factorial(int num) {int i, result = 1;for (i = 1; i <= num; i++) {result *= i;}return result;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘为%d\n", num, factorial(num)); return 0;}```五、简答题1. C语言逻辑与运算符(&&)短路特性是什么?答:C语言逻辑与运算符(&&)具有短路特性,即在进行逻辑与运算时,如果前一个表达式的值为假(0),则后面的表达式将不会被计算,整个逻辑与表达式的值直接为假(0)。
精品课件-C程序设计(第三版)(荣政)-第5章
第五章 循环结构的C程序设计
(2) 循环体由多个语句组成时,必须用左、右花括号括 起来,使其构成一复合语句。
如下例: void main() {
int i,sum; i=5;sum=0;
while (i>0) { sum=sum+i; i--; }
}
第五章 循环结构的C程序设计
若其中的循环体无{ },即循环语句写成: while (i>0) sum=sum+i; i--;
第五章 循环结构的C程序设计
运行结果: Input n:6 ↙ 12 34 2 11 9 5 ↙ sum is:73
第五章 循环结构的C程序设计
图 5.2 求n个数的和
第五章 循环结构的C程序设计
例 5.2 从键盘连续输入字符,直到输入“回车”符为止, 统计输入的字符个数。
分析:算法由图5.3所示的流程图描述。
#include <stdio.h> void main() {
int i,n,k,sum; i=1;sum=0; printf("Input n:"); scanf("%d",&n);
while(i<=n) { scanf("%d",&k); sum=sum+k; i++; }
printf("\nsum is:%d\n",sum); }
第五章 循环结构的C程序设计
(3) 若do-while语句的循环体部分由多个语句组成时,必 须用左、右花括号括起来,使其形成复合语句。例如:
do {
sum+=i; i--; } while(i>0); (4) C语言中的do-while语句是在表达式的值为“真”时 重复执行循环体的,这一点同别的语言中的类似语句有区别, 在程序设计中应引起注意。
第五章-循环结构程序设计编程题(参考答案)
第五章循环结构程序设计1.用for循环语句编程输出1~20之间的所有整数,两数之间以空格分隔。
#include<stdio.h>void main(){int i;for(i=1;i<=20;i++)printf("%d ",i);printf("\n");}2.用for循环语句编程输出20~1之间的所有整数,两数之间以空格分隔。
#include<stdio.h>void main(){int i;for(i=20;i>=1;i--)printf("%d ",i);printf("\n");}3.用for循环语句编程输出A~Z之间的所有字符,两字母之间以空格分隔,要求一行输出8个字符。
#include<stdio.h>void main(){char c;for(c='A';c<='A'+25;c++){putchar(c);}}4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。
#include<stdio.h>void main(){int i,j=0;for(i=100;i<=200;i++){if(i%21==0){ j++;printf("%12d",i);if(j%4==0) printf("\n");}}}5.输出1至1000之间所有满足用3除余2、用5除余3、用7除余2的数(要求每行只输出5个数)。
#include<stdio.h>void main(){for(i=1;i<=1000;i++){if((i%3==2)&&(i%5==3)&&(i%7==2)){ j++;printf("%12d",i);if(j%5==0) printf("\n");}}}6.先读入一个正整数n,然后计算并显示前n个偶数的和。
八年级信息技术教案第五章:循环结构程序设计的教学方法探讨
八年级信息技术教案第五章:循环结构程序设计的教学方法探讨在现代信息技术领域中,掌握程序设计语言的能力日益受到重视。
作为信息技术的核心内容之一,程序设计语言的学习是八年级信息技术教学的重点之一。
而程序设计语言中的循环结构也占据了重要的地位。
本文将从教学方法的角度,探讨如何更好地教授八年级学生循环结构程序设计。
一、基础知识培训循环逻辑在程序设计语言中占据了重要的地位,而理解循环逻辑的基本知识是进行程序设计的前提。
教师在教授循环结构程序设计之前,必须让学生充分了解循环的概念、循环的种类以及各种不同循环结构的特点和优缺点。
在了解了循环结构的基本知识后,学生必须具备掌握编程语言中循环语句的使用方法。
教师应该采用多种方式讲授循环语句的使用方法,如讲解、例题演练、课上讨论、团队合作等。
这些方式有助于学生更好地理解和掌握循环语句。
二、实践操作循环结构程序设计并非只靠掌握基础知识就能够实现的,更需要通过实践操作形成对其深刻的认识。
教师可以通过课堂练习、课后作业、实验室操作等多种方式,让学生走进程序设计的实际应用场景,对循环结构有所了解。
在实践操作中,教师应该鼓励学生不断尝试,让他们通过不断地实践发现问题、解决问题,在实践中提高他们的循环结构程序设计水平。
三、问题解决在实际编写程序时,难免会出现各种各样的问题。
在这个时候,教师需要及时发现并解决学生的问题。
当学生遇到困难时,教师也应该及时帮助其解决,引导学生通过自行分析、自主思考等方式解决问题。
四、知识运用学生掌握了循环结构程序设计的基础知识和实践操作方法后,很重要的一点就是要将其应用到实际的程序设计项目中。
教师应该引导学生通过自主设计程序,将所学知识应用到实际问题中。
通过这种方式,不仅能够提高学生的实践操作能力,还能让学生在实践中更好地理解循环结构程序设计的本质,从而对其掌握更加深入。
教学循环结构程序设计需要采用多种教学方法,注重实践操作和问题解决。
通过这样的教学方式,能够提高学生的循环结构程序设计能力,让学生在信息技术领域中更好地掌握程序设计语言的实战应用。
北京航空航天大学《C语言程序设计》课件-第五章循环结构程序设计
2023/4/2
5.3 do-while语句
15
语句一般格式
do
{语句组} while (表达式);
功能:
– 先执行内嵌语句(循环体),之后计算 表达式的值,不为0(逻辑真)时,再 执行循环体并判断条件,直到表达式的 值为 0 结束循环,转去执行while下面 的语句。
2023/4/2
do-while循环的算法
for(n=100;n<=200;n++) {
if (n%7!=0) continue;
printf("%6d",n); j++; if (j%10==0)
printf("\n"); } printf(" \n j=%d\n",j); }
29
2023/4/2
5.5.2 循环中break的应用
30
功能:
}
无循环体
} 循环体
2023/4/2
5.5 循环结构中的跳转语句
25
有如下三种语句实现跳转: – continue语句 – break语句 – goto语句
功能:在循环语句的循环体中使用,可 以进行循环的流程控制
2023/4/2
5.5.1 continue语句及应用
26
功能:
– 中断循环体的本次执行(即跳过循环体中尚未 执行的语句),立即开始执行下一次循环。
– 利用break语句能够强迫终止本层循环, 转到后续语句执行。
while语句
表达式? N
Y
… break;
…
do-while语句
… break;
…
表达式? N
Y
基于八年级信息技术教案第五章,如何充分利用编程软件进行循环程序设计
基于八年级信息技术教案第五章,如何充分利用编程软件进行循环程序设计由于信息技术的不断发展,编程软件的应用已经成为了学生们学习信息技术所必备的技能之一。
在学习循环程序设计时,通过合理地利用编程软件可以有效地提高学生的学习效果。
本文通过基于八年级信息技术教案第五章,探讨如何充分利用编程软件进行循环程序设计。
一、什么是编程软件?编程软件是为了完成某些特定任务而开发的一种软件。
它是程序员用来编写、测试、维护、改善和扩大计算机程序的工具。
常见的编程软件有Python、JAVA、C语言等。
二、编程软件在循环程序设计中的应用1.循环结构循环结构是程序设计中的一种结构,它可以让程序重复执行某一段代码,以便达到特定的目的。
在编程软件中,使用循环结构可以方便地实现代码的重复执行。
常见的循环结构有for循环和while循环。
2.条件语句条件语句是程序设计中的一种结构,在满足特定条件时会执行某些代码。
在编程软件中,使用条件语句可以方便地实现不同条件下的不同代码执行。
常见的条件语句有if语句和switch语句。
三、编程软件在循环程序设计中的具体操作1.使用循环结构实现图形输出在利用编程软件进行循环程序设计时,可以使用循环结构实现图形输出。
通过控制循环次数,可以让图形逐渐变大或变小,以达到美化输出的效果。
例如,在Python中实现一个三角形的图形输出,可以使用以下代码:n=int(input("请输入三角形的行数:"))for i in range(1,n+1):print(' '*(n-i)+'*'*i)输出如下:请输入三角形的行数:5***************2.使用条件语句实现相应操作在利用编程软件进行循环程序设计时,可以使用条件语句实现相应的操作。
比如,在使用while循环时,可以在特定条件下退出循环,从而避免程序无限循环。
在使用for循环时,可以利用条件语句判断当前循环次数是否符合要求,从而达到对程序的控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环程序设计一、选择题1.程序段如下:则以下说法中正确的是:。
int k=5;do{k--;}while(k<=0);A. 循环执行 5 次B. 循环是无限循环C. 循环体语句一次也不执行D. 循环体语句执行一次2.设i 和x 都是int 类型,则for 循环语句。
for(i=0,x=0;i<=9&&x!=876;i++) scanf("%d",&x);A. 最多执行10 次B. 最多执行9 次C. 是无限循环D. 循环体一次也不执行3.下述for 循环语句。
int i,k;for(i=0,k=-1;k=1;i++,k++) printf("* * * *");A. 判断循环结束的条件非法B. 是无限循环C. 只循环一次D. 一次也不循环4.程序段如下:则以下说法中正确的是:。
int k=-20;while(k=0) k=k+1;A. while 循环执行20 次B. 循环是无限循环C. 循环体语句一次也不执行D. 循环体语句执行一次5.下列程序段执行后k 值为。
int k=0,i,j;for(i=0;i<5;i++)for(j=0;j<3;j++)k=k+1 ;A. 15B. 3C. 5D. 86.程序段如下:则以下说法中不正确的是:。
#include <stdio.h>int main(){int k=2;while(k<7){if(k%2) {k=k+3; printf( “k=%d\n”,k);continue;}k=k+1;printf( “k=%d\n”,k);}return 0;}A. k=k+3; 执行一次B. k=k+1; 执行2 次C. 执行后k 值为7D. 循环体只执行一次二、读程序写结果1.#include <stdio.h>int main(){ int num=0;while(num<=2){ num++; printf("%d\n",num);}return 0;}1232.#include <stdio.h>int main(){ int i=0,s=0;do{ s+=i*2+1; printf("i=%d,s=%d\n",i,s); i++;}while(s< 10);return 0;}3.#include <stdio.h>int main(){ int i,m=1;for(i=5;i>=1;i--){m=(m+1)*2;printf("m=%d\n",m);}return 0;}4.指出下面三个程序的功能,当输入为:"quert?" 时,它们的执行结果是什么?⑴#include <stdio.h>int main(){ char c;c=getchar();while (c!='?'){ putchar(c);c=getchar();}return 0;}quert⑵#include <stdio.h>int main(){ char c;while ((c=getchar())!='?') putchar(++c);return 0;}rvfsu5.#include <stdio.h>int main(){ int i;for(i=1;i<=5;i++){ if(i%2)putchar( ‘<’);elsecontinue;putchar( ‘>’);}putchar( ‘#’);return 0;}<><><>#6.#include <stdio.h>int main(){ int a,b;for(a=1,b=1;a<=100;a++){ if(b>10) break;if(b%3==1){ b+=3; continue;}}printf("a=%d\n",a);return 0;}a=57.#include <stdio.h>int main(){int i=1;while (i<=15)if (++i%3!=2) continue;else printf("%d ",i);printf("\n");return 0;}2 5 8 11 148.#include <stdio.h>int main(){ int i,j;for(i=0;i<=3;i++){ for(j=0;j<=i;j++)printf("(%d,%d),",i,j);printf("\n");}return 0;}9.#include <stdio.h>int main(){int i,j,k;char space=' ';for (i=0;i<=5;i++){ for (j=1;j<=i;j++)printf("%c",space);for (k=0;k<=5;k++)printf("%c",'*');printf("\n");}return 0;}三、填空题1.break 语句只能用于语句和语句中。
2.计算2+4+6+8+...+98+100#include <stdio.h>int main(){int i, (1) ;for(i=2;i<=100; (2) )s+=i;return 0;}3.求Sn=a+aa+aaa+...+aa...a 之值,其中 a 是一个数字。
例如2+ 22 +222+2222 (此时n=4),n 由键盘输入。
#include <stdio.h>int main(){ int a,n,count=1,Sn=0,Tn=0;printf(" 请输入 a 和n 的值:\n");scanf("%d,%d",&a,&n);while (count<=(1)){ Tn= (2);Sn=(3);a=a*10;(4);}printf("a+aa+aaa+...=%d\n",Sn);return 0;}4.一球从100 米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?#include <stdio.h>int main(){float Sn=100.0,hn=Sn/2;int n;for (n=2;n<= (1);n++){ Sn= (2) ;hn= (3) ;}printf(" 第10次落地时共经过%f米\n",Sn);printf(" 第10次反弹%f米\n",hn);return 0;}5.打印出以下图形** * ** * * * ** * * * * * ** * * * ** * **#include <stdio.h>int main(){int i,j,k;for (i=0;i<= (1) ;i++){for (j=0;j<=2-i;j++)printf(" ");for (k=0;k<= (2) ;k++)printf("*");(3)}for (i=0;i<=2;i++){for (j=0;j<= (4);j++)printf(" ");for (k=0;k<= (5);k++)printf("*");printf("\n");}return 0;}6.准备客票。
某铁路线上共10 个车站,问需要准备几种车票?#include <stdio.h>int main(){int i,j,station,total=0;printf(" 输入车站数:");scanf("%d",&station);for (i=1;i<(1);i++)for (j= (2);j<=station;j++)total=(3);printf(" 车票种类=%d \n",total);return 0;}。