您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 第 3 章 结构化程序设计的开发g
第3章结构化程序设计的开发主要内容理解算法,并会画流程图理解计数器控制的循环和用标记控制的循环理解复合语句,类型转换运算符自增、自减和赋值运算符条件运算符掌握if和if/else选择语句掌握while语句本章掌握以下算法:1.判断一个数是否回文。2.二进制转换为十进制。3。求阶层n!4.求和sum算法的概念一个程序应包括以下两个方面的内容:1)对数据的描述:在程序中要指定数据的类型的数据的组织形式,即数据结构.2)对操作的描述:即解决一个问题要采取的步骤也就是算法。提出问题编写程序确定处理方案确定操作步骤调试和运行程序输出整理结果算法设计算法的表示方法伪代码表示算法;用传统流程图表示算法;用N-S(I.NassiandB.Schneiderman)结构化流程图表示的算法;伪码是帮助程序员制定算法的智能化的信息语言.与日常英语类似.例如:Ifstdudent’sgradegreaterthanorequalto60print“Passed”Elseprint“Failed”一般处理框判断框流程线输入输出框起止框传统流程图:优点:直观形象,流程清晰,各种操作一目了然,不易产生二义;缺点:流程图占面积大,由于允许使用流程线,使流程任意转移,容易使人弄不清流程的思路。用N-S结构化流程图表示算法(I)顺序结构A块B块A块B块(a)传统流程图表示的顺序结构(b)N-S图表示的顺序结构用N-S结构化流程图表示算法(II)选择结构A块B块(a)传统流程图表示的选择结构(b)N-S图表示的选择结构条件P条件PA块B块满足不满足满足不满足用N-S结构化流程图表示算法(III)循环结构A块A块条件P当给定条件P满足满足不满足A块A块条件P直到给定条件P不满足不满足满足当型循环结构直到型循环结构用传统流程图表示算法求三个整数之和及平均值.开始sum=num1+num2+num3aver=sum/3输出sum,aver的值结束输入num1,num2,num3aver=sum/3输出sum,aver的值输入num1,num2,num3sum=num1+num2+num3用传统流程图表示算法(举例)问题:输入10个数,打印出其中正数counter10是x0否输入xcounter=counter+1是否终止开始打印xcounter=1counter++当count=10count=1输入xx0打印x是否两种不同流程图表示的算法(举例)n=1,m=0n=n+1n=50当n50是g60否输入成绩gn=n+1m=m+1是输出m否终止开始输出m的值n=0,m=0输入学生成绩g60m=m+1是否n:存放输入人数m:存放不及格人数问题:输入全班50个同学成绩,统计出不及格人数问题:输入全班50个同学成绩,统计出不及格人数及平均分counter=1,m=0,total=0counter=50是grade60否输入成绩gradecounter++m=m+1是输出m,total/(count-1)否终止开始counter:存放输入人数m:存放不及格人数total:存放学生总成绩total+=grade复合语句把多个语句用括号{}括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句,例如{x=y+z;a=b+c;printf(“%d%d”,x,a);}是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。强制类型转换运算符1)强制类型转换运算符利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)(double)a---将a转换成double类型(int)(x+y)----将x+y的值转换成整型(float)(5%3)----将5%3的值转换成实型(float)(5/3)----将5/3的值(1)转换成实型注意:1.表达式应用括号括起来.如果写成:(int)x+y则只将x转换成整数,然后与y相加.2.在强制类型转换时,得到一个所需的中间变量.原来变量的类型并未变化.自增、自减运算符++和--是两个C语言自加自减运算符。作用:使变量自增1或自减1。如:k=0;k++;/*k的值为1*/k=10;k--;/*k的值为9*/注意:++、--只能用于变量,不能用于表达式。j++是合法的,(x+y)++是非法的。++、--可以放在变量的左边或右边。k=10;y=++k;/*k自加1后,把值赋给yk=11,y=11*/k=10;y=k++;/*把k的值赋给y,然后自加1,y=10,k=11*/k=5;printf(“%d,%d”,k,k++);//5,5k=5;printf(“%d,%d”,++k,k);//6,5k=5;printf(“%d”,(k++)+(k++));/*10*/不同的开发环境,运行结果有差异,本例用VC•条件运算符格式:min=(xy)?x:y;/*在学生成绩大于或等于60时打印Passed,在成绩小于60时打印Failed*/#includestdio.hmain(){floatgrade;printf(inputgrade:);scanf(%f,&grade);printf(%s\n,grade=60?Passed:Failed);}grade=60?printf(passed\n):printf(Failed\n);条件运算符例如:输入任意字符,如果是小字母,则把他改成大写。main(){charch;scanf(“%c”,&ch);//ch=getchar();ch=(ch=‘a’&&ch=‘z’)?ch-32:ch;printf(“%c”,ch);//putchar(ch);}思考题:voidmain(void){unsignedinta=6;intb=-20;(a+b6)?puts(6):puts(=6);}6原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。if语句的三种形式:1.单路选择:格式:if(expression)statementexprstatement非0=0if(xy)printf(“%d”,x);printf(“%d”,y);exprstatement1statement2非0=02.双路选择格式:if(expression)statement1elsestatement2if(xy)max=x;elsemax=y;printf(“max=%d”,max);形式三(多路选择):if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2statemntnstatemnt2非0=0执行过程:例:if(salary1000)index=0.4;elseif(salary800)index=0.3;elseif(salary600)index=0.2;elseif(salary400)index=0.1;elseindex=0;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明:if后面的表达式类型任意语句可以是复合语句if(x)if(x!=0)if(!x)if(x==0)1.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是。if(xy)z=x;x=y;y=z;A)x=10,y=20,z=30B)x=20,y=30,z=30C)x=20,y=30,z=10D)x=20,y=30,z=20示例2.以下程序运行结果是。#includestdio.hmain(){inta=5,b=0,c=0;if(a=b+c)printf(****);elseprintf($$$$);}A)****B)$$$$C)****$$$$D)显示错误信息示例3以下程序的输出结果是A)-11B)01C)10D)00main(){inta=-1,b=1;if((++a0)&&!(b--=0))printf(%d%d\n,a,b);elseprintf(%d%d\n,b,a);}示例•例如:求函数:-1x0y=0x=01x0程序1main(){intx,y;scanf(“%d”,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(“y=%d”,y);}程序2main(){intx,y;scanf(“%d”,&x);if(x=0)if(x0)y=1;elsey=0;elsey=-1;printf(“y=%d”,y);}例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);实现if~else正确配对方法:加{}/*在考试成绩大于等于90打印A,80~89打印B,70~79打印C,60~69打印D,小于60打印D(书P46页)*/#include“stdio.hmain(){floatgrade;charch;printf(inputgrade:);scanf(%f,&grade);if(grade=90)ch='A';elseif(grade=80)ch='B';elseif(grade=70)ch='C';elseif(grade=60)ch='D';elsech='E';printf(%.1f--%c\n,grade,ch);}while语句while语句的一般格式:while(表达式)语句功能:当表达式为真时执行语句,一直到表达式为假时为止。条件语句非00退出循环#includeStdio.hmain(){floataverage;intcounter,grade,total;total=0;counter=0;/*初始化阶段*/printf(Entergrade,-1toend:);scanf(%d,&grade);while(grade!=-1){total+=grade;counter++;printf(Entergrade,-1toend:);scanf(%d,&grade);}if(counter!=0){average=(float)total/counter;printf(Classaverageis%.2f,average);}elseprintf(Nogradewereentered\n);}/*(书P53)求全班平均成绩的程序,程序在每次运行时都能够处理任意个数的成绩*//*书P56输入每个学生的考试结果(即输入1或2),计算每种类型考试结果的个数#include“stdio.hmain(){intpasses=0,failures=0,student=1,result;while(student=10){printf(Enterresult(1=pass,2=fail):);scanf(%d,&result);if(result==1)passes++;elsefailures++;student++;}printf(Passes%d\n,passes);printf(Failed%d\n,failures);if(passes8)printf(Raisetuition\n);getch();}1.设有程序段:intk=10;while(k=0)k=k-1;则下列描述正确的是。CA)循环体语句执行一次B)while循环执行10次C)循环体语句一次也不执行D)死循环2.下列程序段运行结果是。Aa=1;b=2;c=
本文标题:第 3 章 结构化程序设计的开发g
链接地址:https://www.777doc.com/doc-3249244 .html