版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计循环结构while循环结构while(条件表达式){}循环条件循环体含义:只要表达式结果为"真",就执行循环体内的语句。执行完循环体的语句后,再算一次表达式的值,只要结果为"真",就继续执行循环体语句。直至条件不满足为止。if(条件表达式){}含义:只要表达式结果为"真",就执行复合语句体。执行完后结束if语句,执行后面的内容。
可能执行很多次只执行一次如何设定循环条件是保证while结构正常工作的关键。#include<stdio.h>main(){
inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i=i+1;}
printf("Sum=%d",sum);}例:求1~100之和,即循环变量设定循环条件循环体开始定义变量i,sumi=1sum=0sum=sum+1用printf输出sum结束i≤100?YNi++循环结构条件表达式中的变量在循环体前设定初值,并在循环体内发生改变,是循环有始有终的前提。注意事项:如果循环体内只有一条语句,则可以不用大括号{};语法上并没有要求一定要存在循环初始条件的设定,也没有要求循环条件中的变量必须在循环体内改变,但逻辑上要求有,否则将成为无效循环或死循环。循环变量在循环体内的改变应该有使循环条件不满足的趋势。例:读程序,说明程序的功能。#include<stdio.h>main(){
intk,s,n;
scanf("%d",&n); s=1;k=1; while(k<=n/2) { s=s*(2*k-1); k++; } printf("%d\n",s);}n以内所以奇数的乘积#include<stdio.h>main(){
intk,s,n1,n2
; scanf("%d,%d",&n1,&n2); s=0;i=n1; while(i<=n2) { if(i%2==0)s=s+i; i++; } printf("%d\n",s);}n1至n2间所有偶数之和例:计算两个数的最大公约数和最小公倍数。#include<stdio.h>main(){
inti,max,min;
scanf("%d,%d",&max,&min); i=min; while(i>0) { if(max%i==0&&min%i==0)break; i--; }
printf("%d和%d的最大公约数是:%d\n",max,min,i); i=1; while(1) { if(min*i%max==0)break; i++; }
printf("%d和%d的最小共倍数是:%d\n",max,min,min*i);}分析:用试验的方法计算最大公约数:
用1~min分别除max和min,看其余数是否同时为零;计算最小公倍数:
用1~?分别乘以max和min,看其乘积是否相等。问题:计算最大公约数时如何设计循环的初始值和循环条件?计算最小公倍数时如何设定循环条件?do…while循环结构do{
循环体}while(条件表达式)含义:执行循环体内的语句,只要表达式结果为"真",就反复执行,直到条件不满足为止。比较:
1.
do…while循环至少执行一次循环体。2.while可能一次也不执行循环体。3.两者之间可以通过初始条件的设定相互转化。while(条件表达式){}循环体例:判断某个数是否是质数。方法:根据定义,一个数如果只能被1和自身整除,则为质数。#include<stdio.h>main(){
int
i,num; i=2;
scanf("%d",&num); do{ if(num%i==0)break; i++; }while(i<num); if(i<num)
printf("It'snotaprimenumber!"); else
printf("It'saprimenumber!");}开始输入数字numi=2不是质数结束i<numNYnum能被i整除i++YNi<numNY是质数例:找出所有的水仙花数。
水仙花数:153=13+53+33分析:穷举搜索法对每个可能的数字进行分解和计算,看其是否满足水仙花数的条件。搜索范围:100~999开始i=100分解i结束i<1000YY是水仙花?输出NN#include<stdio.h>intmain(){ intn1,n2,n3,i; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}for循环结构for(初值表达式;循环条件;增量表达式){
循环体}含义:计算"初值表达式",作为循环变量的初始值设定;"循环条件"是否满足?若满足转向步骤"3",否则转向步骤"6";执行循环体;计算"增量表达式",使循环变量变化,以趋于不满足循环条件;执行步骤"2";结束循环,执行后面的语句。初值表达式;while(循环条件){
增量表达式;}相当于例:计算#include<stdio.h>main(){
int
i,n,sign; floate,pi;
scanf("%d",&n); pi=0.0;sign=1; for(i=1;i<n;i=i+1) { e=1.0/(2*i-1); pi=pi+sign*e; sign=-sign; }
printf("pi=%f\n",pi*4);}例:计算Fibonacci数列。
Fibonacci数列:1,1,2,3,5,8,13,21…开始输入数列长度:n循环初值:3循环条件:<n循环增量:1结束前两个值:f1=1;f2=1;temp=f1+f2;f1=f2;f2=temp;输出temp值循环体分析:1.初始值为1,1;2.后面的数字是前两个数之和。#include<stdio.h>main(){
intf1,f2,temp,i,n;
scanf("%d",&n); f1=1;f2=1; printf("%d,%d",f1,f2);
for(i=3;i<=n;i++) { temp=f1+f2; f1=f2; f2=temp;
printf(",%d",temp); }}for循环的特点同时设定初值、循环条件、循环增量。可以实现while结构和do…while结构。三种循环可以相互替代。作业:P129,6.7P129,6.8for循环的不同形式标准for循环:
for(初值表达式;条件表达式;增量表达式)省略初值表达式:主要用于无初始值设定或复杂初始化的情况。
for(;条件表达式;增量表达式)省略条件表达式:在循环体内控制结束条件,主要用于多条件情况。
for(初值表达式;;增量表达式)省略增量表达式:主要用于不确定循环增量的情况。
for(初值表达式;条件表达式;)以上各种省略情况可以组合出现。例如:
for(初值表达式;;)
for(;条件表达式;)
for(;;)不同类型for循环应用举例省略增量表达式:for(i=1;i<100;){……if(x>0)i=i+2;elsei=i+1;……}省略条件表达式:for(i=1;;i++){……if(x>0)break;……if(m<3&&y>0break;……}省略初值表达式:f1=1;f2=1;for(;f2<100;){……}注意:for循环应用很灵活,是否需要省略某个表达式,完全根据题目的要求和解题的思路确定,没有硬性规定。省略前两个表达式的时候,分号不能省略。例:找出大于300的最小的水仙花数。 水仙花数:153=13+53+33#include<stdio.h>intmain(){ intn1,n2,n3,i; for(
) { n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i){ printf("%d=%d+%d+%d\n",i,n1,n2,n3); break; } }}分析:循环初始值i=300;循环终值?结束条件?循环增量?i=300;;i++while(){ …… while() {……} ……}do(){ …… while() {……} ……}while()while(){ …… for() {……} ……}for(){ …… while() {……} ……}for(){ …… do {……}while() ……}do{ …… for() {……} ……}while()循环的嵌套一个循环体内包含另一个完整的循环,称为循环的嵌套。循环的嵌套说明:1.三种不同类型的循环可以任意嵌套;2.循环嵌套必须层次分明,不允许交叉嵌套。3.循环嵌套的层数没有限制;4.为保证层次分明,建议按标准格式书写程序。for(){ …… while() { …… for() { …… } } ……}多重循环的执行次数sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<i;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){if(j%2==0)continue;sum=sum+1;}if(sum>500)break;}循环执行次数:99*49=4851循环执行次数:0+1+2+3+…99=4950循环执行次数:难以确定#include<stdio.h>main(){
int
col,line,num;
scanf("%d",&num); for(line=1;line<=num;line++) { for(col=1;col<=num-line;col++)
printf(""); for(col=1;col<=2*line-1;col++)
printf("*");
printf("\n"); }}例:打印三角形****************分析:屏幕显示原则:只能在当前光标位置显示。光标不能向左回退,不能向上回退。逐行打印,每行打印若干空格和若干星号。打印若干行。计算:行数:键盘输入n。每行空格数:
1→3 2→2 3→1
每行星号数:
1→1 2→3 3→5
回车,右边的空格不考虑。y=n-行号y=行号*2-1作业:书上P130,6.14例题:用二分法求方程的根。
方程:r1r2xyy1<0y2>0r*=(r2+r1)/2y*>0r*=(r2+r1)/2y*<0#include<stdio.h>#include<math.h>intmain(){ floatr1,r2,rt,f1,f2,ft; do{
printf("Enterx1&x2:"); scanf("%f,%f",&r1,&r2); f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6; }while(f1*f2>0); do{ f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6;
rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0)r2=rt; elser1=rt; }while(fabs(ft)>1.0e-5);
printf("x=%6.2f\n",rt);}无限循环,直至输入的猜测区间内有根存在。do{
rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0){r2=rt;f2=ft;} else{r1=rt;f1=ft;}}while(fabs(ft)>1.0e-5);continue和break语句continue
无条件结束本次循环,跳到循环起始语句,开始下一次循环。break
无条件跳出循环,执行循环后面的语句。for(){ …… continue; ……}while(){ …… break; ……}注意:break语句只能跳出它所在的那层循环,不存在跳出所有循环的break。例:用continue语句改写寻找水仙花数的程序。#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}if(t!=i){i++;continue;}printf(……);#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=999; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i--; }while(i>100);}例:找出最大的水仙花数。if(t==i){
printf(……);
break;}i--;程序的调试方法与技巧构建(build)
编译系统进行基本的语法检查,并报告error和warning,只有消除语法错误的程序才可能运行。断点设置
在程序的某行设置断点后,程序运行到该行时会暂停,可以查看变量的当前值,也可以修改变量值。没有语法错误的程序不一定能正常执行,也不一定能实现正确的功能,可能存在大量的逻辑错误,软件调试工作占到软件编制工作的80%。VC开发环境提供了“断点设置”和“单步跟踪”功能,为软件的调试提供了方便的工具。在光标所在行设置断点。可以根据需要设置多个断点。断点标记在调试状态下执行程序弹出执行窗口,等待键入数据箭头表明当前程序暂停的位置(即将要执行的语句)。变量(Variables)窗口中显示程序用到的变量及其当前值。再次按F5,程序执行到新的断点,并再次暂停。变量值发生了变化,并用红色显著地标识出来。再次按F5,程序随着循环的执行再次停到了第一个断点的位置。变量窗口不但可以显示变量值,还可以动态地修改。当不再需要断点时,可随时将光标放在断点行,按F9取消断点。当找到错误的原因时,可按shift+F5中断程序的调试,返回到源程序窗口进行修改。程序的调试方法与技巧单步跟踪
“单步跟踪”可以逐行执行程序,每执行一条语句后都会暂停,相当于在每条语句上都设置了断点。将光标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房屋买卖合同补充协议(包含房屋买卖合同纠纷调解)3篇
- 二零二五年度图书馆图书借阅积分兑换与购销协议3篇
- 2025年度协议离婚诉讼全程指导及法律知识3篇
- 二零二五年度夫妻共有公司经营权离婚协议3篇
- 综合课程设计的原则是
- 二零二五年度新能源车辆质押借款担保合同2篇
- 2025年度水利项目合同终止及水资源利用协议3篇
- 海南医学院《数字电子技术实验》2023-2024学年第一学期期末试卷
- 海南体育职业技术学院《身边的力学》2023-2024学年第一学期期末试卷
- 二零二五年度夫妻财产保全不离婚协议执行细则2篇
- 培训机构入驻合作协议
- 分布式光伏 承诺书范本
- 常见酸和碱说课课件
- 2023-2024学年湖北省利川市小学语文六年级期末通关测试题详细参考答案解析
- 矿大毕业设计-固定式带式输送机设计
- 高考地理一轮复习课件+湖泊的水文特征
- 热动复习题材料热力学与动力学
- GB/T 19405.1-2003表面安装技术第1部分:表面安装元器件(SMDS)规范的标准方法
- GB/T 13275-1991一般用途离心通风机技术条件
- 弹塑性力学(浙江大学课件)
- 千年菩提路解说词
评论
0/150
提交评论