




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序流程的控制1徐秋红办公地点:主楼西配楼(信息学院)310办公电话:62336516—808E-mail:计算机通过执行程序来完成特定的任务,而程序中的语句是控制计算机一步步的命令,每条语句所处的位置以及语句的内容决定了计算机什么时候去做、如何做。程序执行的结果是什么,完全由算法决定。C语言提供三种程序设计结构去实现算法。什么是算法?算
法
对操作过程的描述叫算法。即根据要执行的动作以及这些动作的执行顺序来求解问题的过程被称为算法。例如:求任意两个整数的最大公约数。算法的文字描述算法对操作过程的描述叫算法。算法可以用文字来描述,但是直观性上差一些。常用的算法描述方法是流程图传统流程图
N_S流程图程序的控制语句本章的主要内容:认识流程图
学会使用流程图描述顺序程序结构学会使用流程图描述选择结构学会使用流程图描述循环结构掌握利用流程图设计C语言程序学习建立流程图顺序结构程序的流程计算圆的周长和面积输出周长和面积#include<stdio.h>
#definePI3.14159
/*PI将代表圆周率*/#defineR6
/*R将代表半径值6*/intmain(void){doublegirth,area;girth=2*R*PI;area=R*R*PI;printf("girth=%f\n",girth);printf(“area=%f\n",area);return0;}输入圆的半径值计算圆的周长和面积输出周长和面积输入圆的半径值开始结束顺序结构程序设计顺序结构程序中,每个可执行语句都是按程序编写的先后次序顺序执行,并且是无条件的全部执行输入矩形的长、宽值计算其周长和面积输出其周长和面积实例:编写一个程序,求某个矩形的周长和面积。要求从键盘输入矩形的长和宽(正实型数据),程序运行的结果是在屏幕上打印该矩形的周长和面积。#include<stdio.h>intmain(void){ floatlength,width,perimeter,area; printf(“请输入矩形的长和宽:"); scanf("%f%f",&length,&width); perimeter=(length+width)*2;printf("矩形的周长是%.3f,\t",perimeter); area=length*width;printf("矩形的面积是%.3f\n",area);system("Pause"); return0;}源程序清单选择结构程序设计根据给定的条件,选择其中一条运行线路执行.单路选择结构: 仅当条件为真时才执行选择结构内部的语句块A。PA(空)真假A真假P选择结构的流程if(表达式)
语句块A
单路选择结构设计程序,将不及格的成绩打印出来输入一位学生的成绩,存入xx<60?输出x真假#include<stdio.h>intmain(void){ floatx; printf("\nInputascore:"); scanf("%f",&x);
if(x<60) printf("\nFail:%.1f\n",x);
return0;}选择结构程序设计根据给定的条件,选择其中一条运行线路执行.双路选择结构: 当条件为真时,执行选择结构内部的语句块A;当条件为假时,执行选择结构内部的语句块B。PAB真假A真假PBif(P)
statement_Aelse
statement_B流程图例如,百货商场进行打折促销活动,购物总额x满300元时可以打8折。scanf(“%f”,&x);if(x>=300)
printf(“应付%f,实付%f”,x,x*0.8);elseprintf(“应付%f,实付%f”,x,x);x>=300?真假输出x*0.8输出x输入x输出x*0.8输出x
x>=300?真假输入x开始结束双路选择结构设计程序:如果成绩及格,则打印Pass,否则打印Failed。输入一位学生的成绩,存入xx<60?输出“Failed”输出“pass”真假#include<stdio.h>intmain(void){ floatx; printf("\nInputascore:"); scanf("%f",&x);
if(x<60){ puts(“\tFailed\n\t运筹学课程补考单\n"); puts("定于第6周星期二下午3:00在二教110补考\n");
}
else printf("\tPass\n\t运筹学成绩:%.1f\n",x);
return0;}选择结构程序设计根据给定的条件,选择其中一条执行线路.多路选择结构:如果在多种(两种以上)的选择中择一而行,则要使用if语句嵌套或if…else语句嵌套结构来实现。P1AP2真假BC真假多路选择结构例如,求一元二次方程的根的算法可用如下代码描述:doublea,b,c,d;scanf("%lf%lf%lf",&a,&b,&c);d=b*b–4*a*c;if(d==0) printf("\n有相等的两个实根。");else if(d>0) printf("\n有不等的两个实根。");else printf("\n有两个复根。");用switch结构处理多选择结构问题switch语句可以实现根据条件表达式运算结果,从众多不同选项中选择某一项去执行。switch语句结构形式如下:switch(expression){
casetemplate_1:
statement_1;
casetemplate_2:
statement_2;
……
casetemplate_n:
statement_n;
[default:
statement;
]}必须是整型必须是整型常量或字符常量用switch结构处理多选择结构问题例如:根据指定的定期存款年限year,显示该年限整存整取的年利率。switch(year){ case1:puts("\t1年期的年利率是3.25\n");break; case2:puts("\t2年期的年利率是3.75\n");break; case3:puts("\t3年期的年利率是4.25\n");break; case5:puts("\t5年期的年利率是4.75\n");break; default:puts("\t更多信息请咨询银行机构\n");}switch结构中的break语句根据录入的百分制成绩值,选择显示4个等级评价中的一个,其中评价标准是:
90分~100分的评价是“Excellent”70分~89分的评价是“Good”60分~69分的评价是“Pass”0分~59分的评价是“Failed”
#include<stdio.h>intmain(void){ floatscore; intgrade; printf("Inputascore(0~100):"); scanf("%f",&score); grade=(int)(score/10); switch(grade) { case10: case9: printf("\n\tExcellent\n");break; case8:case7: printf("\n\tGood\n");break; case6: printf("\n\tPass\n");break; default: printf("\n\tFailed\n");}
return0;}必须是整型常数switch结构中的break语句循环设计一个程序,自动在屏幕上显示一个直角三角形。设计一个程序,自动在屏幕上依次输出三个这样的直角三角形。循环设计一个程序,自动在屏幕上依次输出三个直角三角形。声明整型变量k设置k的初值为3输出一个三角形
只要满足k>0k自减1(即k--)设置k值是3(k是整型)输出一个三角形k>0?k自减1真假流程图循环结构的流程对邮件做查看、分类和存档处理真假有新邮件
有新邮件?若有,则对邮件做查看、分类和存档处理在一定条件下,反复执行固定的语句块的过程称为循环.
?循环结构C语言提供了以下三种能够重复执行指定操作的循环控制语句:
while语句
do…while语句
for语句循环结构------while语句
while语句的语法格式如下:while(condition){statement;}计算condition执行statement执行statement真假计算condition条件为假时,循环结束fcondition为真condition为假condition为真循环结构------do…while语句
do…while语句的语法格式如下:
do {
statement;
}while(condition);
计算condition执行statement执行statement真假计算condition先执行循环内部的语句,再做条件的判断。条件为假时,循环结束。initial计算condition执行statementincrement循环结构------for语句for语句的语法格式如下:for(
initial;
condition;increment){ statement;}条件为假时,循环结束执行statement真假计算conditioninitialincrement循环结构建立通用的除法计算器。
如果除数为零,则重新输入除数,直至正常的完成除法运算为止。#include<stdio.h>intmain(void){doublex,y,z;printf("请输入被除数x和除数y:");scanf("%lf%lf",&x,&y);if(y!=0){z=x/y;printf("运算结果%f/%f=%f\n\n",x,y,z);}elseputs("除数y为0是无效的!\n\n");
return0;}while(y==0){puts("除数y为0是错误的!");printf("请重新输入一个除数y:");scanf("%lf",&y);}z=x/y;printf("运算结果%f/%f=%f\n\n",x,y,z);例如:在屏幕上显示20以内的自然数。#include<stdio.h>intmain(void){ intn=0; while(n<20) { printf("%d",n); n++; } return0;}声明变量n,n=0n<20?输出nn=n+1while循环结构的特点......应用循环结构做处理/*输出0至20以内的奇数*/intn=1; do{ printf("%d,",n); n=n+2;}while(n<20);输出n,n增值真假计算n<20?do...while循环结构的特点......应用循环结构做处理当输入一个非零值后,程序以如下形式输出该数值:
------输入的数
------
并结束;否则(即为0时)重新输入数据。floatzero=0;while(!zero){ printf("\nPleaseinputadata:"); scanf("%f",&zero);}printf("\n-----%f-----\n",no_zero);Pleaseinputadata:76------76------应用循环结构做处理/*打印30个星号**/intcounter; for(counter=1;counter<=30;counter++)
printf(“*”);
计数器实例4.6通过键盘输入一段文本信息,以输入Enter键(换行操作)表示终止输入,统计在按下Enter键之前共输入了多少个字符。使用while循环语句去展示处理过程。使用do...while循环去展示处理过程。使用for循环语句去展示处理过程。#include<stdio.h>intmain(void){intcounter=0;charent_char; puts("\nInputasectionoftext:");
do{ ent_char=getchar(); counter++;
}while(ent_char!=10);printf("\n\tcounter=%d\n",--counter);return0;}实例4.7使用C语言设计一个文字菜单程序,要确保只有通过键盘正确地选择了菜单项以后,程序才可以继续向下运行,否则重新显示菜单的内容。
(1)--------Option1 (2)--------Option2 (3)--------Option3Pleaseenteryourselection(from1to3):实例4.7#include<stdio.h>intmain(void){charsel;/*存储选项号码的变量*/do{ printf("\n\n\t(1)----------Option1");printf("\n\t(2)----------Option2"); printf("\n\t(3)----------Option3"); printf("\nInputyourselection(from1to3):"); scanf("%c",&sel);getchar();}while(sel!='1'&&sel!='2'&&sel!='3');switch(sel){ case'1':puts("你选择了Option1\n");break; case'2':puts("你选择了Option2\n");break; default:puts("你选择了Option3\n");}return0;}如果要建立一个加、减、乘法计算器程序,如何改?#include<stdio.h>intmain(void){charsel;/*存储选项号码的变量*/doublea,b;/*存储两个运算数据的变量*/do{printf("\n\n\t(1)执行加法运算");printf("\n\t(2)执行减法运算");printf("\n\t(3)执行乘法运算");printf("\n输入你的选择项(请输入:1、2、3):");scanf("%d",&sel);}while(sel!='1'&&sel!='2'&&sel!='3');
printf("\n你的选择是执行");switch(sel){case‘1’:puts("加法运算\n");printf("请输入被加数和加数:");scanf("%lf%lf",&a,&b);printf("%f+%f=%f\n",a,b,a+b);break;case‘2’:puts("减法运算\n");printf("请输入被减数和减数:");scanf("%lf%lf",&a,&b);printf("%f-%f=%f\n",a,b,a-b);break;
default:puts("乘法运算\n");printf("请输入被乘数和乘数:");scanf("%lf%lf",&a,&b);printf("%f*%f=%f\n",a,b,a*b);}puts("\n----结束----\n");return0;}实例4.8从键盘输入5个实型数据,求它们的平均值。#include<stdio.h>#defineN5intmain(void){ intcount;/*设置count为计数器*/ floatx,sum=0;
/*设置sum为累加器*/ printf("\nInput%dnumber:",N);
for(count=1;count<=N;count++)
{ scanf("%f",&x); sum=sum+x;
}printf(“\tAverage=%.5f\n",sum/N);return0;}实例设计一个程序,可以判别口令字(密码)正确与否。#include<stdio.h>intmain(void){chara='$',x;printf("请输入口令字(一个字符):");scanf("%c",&x);if(a==x) puts("\n欢迎使用本程序。\n");else puts("\n口令字不对!\n");return0;}实例输入口令字,如果口令正确,则显示"欢迎使用本程序";否则提示“口令错误”。3-19.c输入口令字口令出错?YN提示"口令出错"显示"欢迎使用本程序"假设口令字只是一个字符#include<stdio.h>intmain(void){ chara='b',b='j',c='f',d='u',x1,x2,x3,x4; printf("请输入口令字(由4个字符组成):");scanf("%c%c%c%c",&x1,&x2,&x3,&x4);
if(x1!=a) printf("\n口令出错!\n");elseif(x2!=b) printf("\n口令出错!\n");elseif(x3!=c) printf("\n口令出错!\n");elseif(x4!=d) printf("\n口令出错!\n");elseprintf("\n------欢迎使用本程序------\n\n"); return0;}YNYNNYNY欢迎...提示出错口令的第一个字符错了?口令的第二个字符错了?第三个错了?第四个错了?提示出错提示出错提示出错口令字是4个字符组成输入口令字口令出错?YN提示口令出错欢迎使用本程序修改实例给予最多3次输入口令的机会,只有口令正确,才可以显示“欢迎使用本程序”。3-19.c特点:循环次数已确定:3次为了程序简单,假设口令字只一个字符输入口令字YN提示口令出错口令正确!将循环次数置为3输入口令次数没有达到3次?试用次数加1口令出错?#include<stdio.h>#defineM3intmain(void){chara='$',x;inti;
for(i=1;i<=M;i++){printf("请输入口令字(1个字符):");scanf("%c",&x);
getchar();if(x==a){ printf(“\n------口令正确!------\n\n");
i=M;}elsei<M?puts(“\n口令出错!再试试。\n”):puts(“\n你无权限!\n\n");}
return0;}修改前面有关“打印成绩等级”的实例打印学生成绩单3-11.c输入口令的次数没有达到3次?输入口令字口令字出错?YN打印:口令出错打印清单列出成绩等级做结束循环的处理完整程序#include<stdio.h>#defineM3intmain(void){doublescore;chara='$',x;inti,grade;for(i=0;i<M;i++){printf("输入口令字(1个字符):");scanf("%c",&x);getchar();
if(x==a){ printf("\n------口令正确!------\n\n"); printf("\n**欢迎使用本系统打印程序清单**\n"); i=M; printf("\n请输入学生的成绩:"); scanf("%lf",&score); if(score<60) {printf("\n\n*****运筹学课程补考通知单*****\n\n"); printf("请于第8周星期二下午3:40,在二教303室补考。\n"); printf("请务必带上学生证或考试证!\n\n");} else {printf("\n\n*****成绩单*****\n\n"); printf("考试课程:运筹学\n");printf("学生的成绩:%.1f\n-------------\n",score);} printf("\n成绩等级是"); grade=(int)(score/10); switch(grade) {case10: case9: printf("Excellent\n\n");break; case8: case7: printf("Good\n\n");break; case6: printf("Pass\n\n");break; default: printf("Failed!\n\n");}}
elsei<M?puts(“\n口令出错!再试试。\n”):puts(“\n你无权限!\n\n"); }return0;}prt_score.c课堂练习——了解循环语句的作用1在屏幕的一行上显示连续10个字符A2在屏幕上显示连续10个字符A,显示6行嵌套循环嵌套循环是指一个循环结构的循环体中包含了另一个循环。while(...){ ...
while(...) {
... } ...}打印乘法表#include<stdio.h>intmain(void){intk=2,j;
/*k是被乘数,j是乘数*/
for(j=1;j<=9;j++){ printf("%d*%d=%d\t",k,j,k*j);}
putchar(‘\n’);system("Pause");return0;}2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=181*2=22*2=43*2=64*2=85*2=106*2=127*2=148*2=169*2=18打印乘法表2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=183*1=33*2=53*3=93*4=123*5=153*6=183*7=213*8=243*9=271*1=21*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9......intk,j;for(k=1;k<=9;k++){
for(j=1;j<=9;j++) {
printf("%d*%d=%d\t",k,j,k*j);
}
putchar('\n');}加入:专门限制打印的控制语句例4.11
打印乘法九九表。与循环相关的两个语句:break;
continue;break语句的作用1)在switch语句中的作用是结束该switch语句的执行过程。2)在循环语句中的作用是结束该循环语句的执行过程。for(i=1;i<=10;i++){printf(“i=%d“,i);}for(i=1;i<=10;i++){if(i==5){break;
}printf(“i=%d“,i);}for(i=1;i<=10;i++){if(i==5){continue;
}printf(“i=%d“,i);}continue语句的作用1)是for、while、do...while循环结构内部使用的执行语句。2)停止循环体当次的执行,转去准备下一轮的循环。#include<stdio.h>intmain(void){intk,j,n;
for(k=1;k<=9;k++)
{
for(j=1;j<=9;j++)
{if(j>k){break;} printf("%d*%d=%d\t",k,j,k*j);
}putchar('\n');
}system("Pause");return0;}#include<stdio.h>intmain(void){intk,j;
for(k=1;k<=9;k++) {
for(j=1;j<=9;j++) {if(k>j) {printf("\t");continue;} printf("%d*%d=%d\t",k,j,k*j);
}
putchar('\n');}return0;}分步执行程序范例输出不能被3整除的20以内的自然数for(n=1;n<20;n++){
if(n%3==0)
continue;printf("%d",n);}分步执行程序#include<stdio.h>intmain(void){intk,j,n;
for(k=1;k<=9;k++) {
for(j=1;j<=9;j++) {if(k>j) printf("\t");else printf("%d*%d=%d\t",k,j,k*j);}putchar('\n');
}return0;}程序设计中,break和continue语句并非不可缺少for(j=1;j<=9;j++){if(j>k)j=9;elseprintf("%d*%d=%d\t",k,j,k*j);}#include<stdio.h>intmain(void){intk,j; for(k=1;k<=9;k++) { for(j=1;j<=k;j++) { printf("%d*%d=%d\t",k,j,k*j); } putchar('\n')
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自然资源的开发利用 随堂检测题-人教版高中化学必修第二册
- 重庆市某中学2024-2025学年八年级下学期期末语文试题(解析)
- 2025年保安员考试题库及答案(基础+提升)
- 2025年安徽省安庆市社会工作者职业资格社会工作实务(初级)预测试题含答案
- 看台座椅安装的标识系统规范考核试卷
- 智能化产品原型验证工具考核试卷
- 乙醇与乙酸(教材深度讲义)-高一化学(人教版)
- 电热卷发棒修理技术考核试卷
- 重难点:化学用语-2024年高考化学专练(新高考专用)解析版
- 小升初数学专项提升:从负数到有理数-教师版
- 《静脉输液》课件
- (完整word版)IT系统升级预算使用计划表
- 护理十四项核心制度考核试题及答案
- 上海肿瘤医院报告查询
- 珠海打印耗材行业分析
- 护士职业素养及伦理规范
- 《压力性尿失禁》课件
- 中南地区工程建设标准设计建筑图集 11ZJ111 变形缝建筑构造
- 无锡旅游景点攻略惠山古镇
- 一 《七律二首 送瘟神》(教学设计)-【中职专用】高二语文精讲课堂(高教版2023·职业模块)
- 外卖骑手安全培训课题
评论
0/150
提交评论