计算机程序设计基础(C)第05章_第1页
计算机程序设计基础(C)第05章_第2页
计算机程序设计基础(C)第05章_第3页
计算机程序设计基础(C)第05章_第4页
计算机程序设计基础(C)第05章_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机程序设计基础(C)王虎C语言结构化程序设计基础程序的控制结构(黑箱)单入口单出口的控制结构易于理解三种基本控制结构:顺序、分支、循环控制结构可以嵌套,以构成更复杂的控制结构程序的结构化三种基本控制结构可以构造任何复杂的结构化算法结构化程序设计原则:自顶向下,逐步求精结构化程序设计过程:首先对任务进行功能分解,然后使用结构化程序设计思想逐一解决各个子问题,最后构造原始问题的解好处:逻辑性强,可读性好,维护方便顺序结构顺序结构的含义由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务顺序结构是最基本的算法结构语句与复合语句(语句块)三种语句结构:单语句(表达式;)、空语句(;)、复合语句({语句序列})AB入口出口顺序结构顺序结构程序示例#include<stdio.h>例5.1main(){floatC,F;

printf("请输入摄氏温度:");

scanf("%f",&C);F=1.8*C+32;//摄氏转华氏

printf("对应的华氏温度是:%6.2f\n",F);}顺序结构程序示例例5.2设圆半径r=1.5,圆柱高h=3,编写程序,求圆周长、圆面积、圆柱体积。要求从键盘输入数据,并输出计算结果,输出结果要带有文字说明,保留两位小数数学公式

L=2πr,S=πr2,V=πr2h顺序结构程序示例#include<stdio.h>例5.2#definePI3.1415926intmain(){doubler,h,l,s,v;

printf("请输入圆半径r=");

scanf("%f",&r);//输入圆半径

printf("请输入圆柱高h=");

scanf("%f",&h);//输入圆柱高

l=2*PI*r;s=PI*r*r;v=PI*r*r*h;

printf("圆周长l=%6.2f\n",l);

printf("圆面积s=%6.2f\n",s);

printf("圆柱体积v=%6.2f\n",v);}顺序结构程序示例例5.3求一元二次方程2x2+x-3=0的根在正式写程序时,应该先构思出一个大概的算法对程序的执行流程做出简单描述自然语言伪代码流程图N-S图顺序结构程序示例#include<stdio.h>例5.3#include<math.h>intmain(){floata,b,c,x1,x2,m;

printf("请输入方程系数a,b,c:");

scanf("%f,%f,%f",&a,&b,&c);m=sqrt(b*b-4*a*c);x1=(-b+m)/(2*a);x2=(-b-m)/(2*a);printf("x1=%f\n",x1);printf("x2=%f\n",x2);}分支结构分支结构(选择结构)的含义根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支中的处理块去执行最基本的分支结构是二路分支结构以条件判断为起点,如果判断结果为真,则执行A处理块的操作,否则执行B处理块的操作入口分支结构真假出口AB条件if-else语句语句格式:

if(表达式)

语句1

else

语句2语句1与语句2可以为复合语句语句1与语句2只能有一个被执行表达式必须位于括号内,一般为关系或逻辑表达式先计算表达式值,若为真则执行语句1,否则执行语句2if-else语句如果仅仅用于确定某条语句是否执行,else分支可以省略入口单分支结构真假出口A条件if-else语句示例例5.4输入一个整数,输出其绝对值#include<stdio.h>int

main(){

intx;

printf("请输入一个整数x:");

scanf("%d",&x);

if(x<0) x=-x;

printf(“|x|=%d\n”,x);}if-else语句示例例5.4-1输入一个整数,若为负数则取绝对值,并+10,输出该数。#include<stdio.h>int

main(){

intx;

printf("请输入一个整数x:");

scanf("%d",&x);

if(x<0) x=-x;x=x+10;

printf(“|x|=%d\n”,x);}if-else语句示例例5.5输入三个整数,分别存放到变量x、y、z中,要求对三个变量的值按从大到小的顺序排序存放,然后输出。算法1、比较x和y,若x<y,则x←→y2、比较x和z,若x<z,则x←→z3、比较y和z,若y<z,则y←→zif-else语句示例#include<stdio.h>例5.5voidmain(){int

x,y,z,t;

printf("输入三个整数:");

scanf("%d%d%d",&x,&y,&z);

if(x<y){t=x;x=y;y=t;}/*交换x,y的值*/

if(x<z){t=z;z=x;x=t;}/*交换x,z的值*/

if(y<z){t=y;y=z;z=t;}/*交换z,y的值*/

printf("从大到小排序为:%d%d%d\n",x,y,z);}if-else语句示例例5.6输入一个字符,判断是否为英文字母#include<stdio.h>voidmain(){charch;

printf(“Inputacharacter:”);

ch=getchar();

if(ch>='a'&&

ch<='z'||

ch>='A'&&

ch<='Z')

printf(“Itisaletter.\n”);else

printf(“No,itisnotaletter.\n”);}if-elseif-else

语句语句格式if(表达式1)语句1elseif(表达式2)语句2…else语句n入口复杂分支结构真假出口真假假语句1表达式1表达式2语句2...语句nif-elseif-else

示例例5.7根据百分制成绩给出优秀、通过或不通过成绩#include<stdio.h>int

main(){floatscore;

printf(“Inputscore:“);

scanf(“%f“,&score);

if(score>=85&&score<=100)printf(“Excellent.\n“);elseif(score>=60&&score<85)printf(“Pass.\n“);elseif(score>=0&&score<60)printf(“Nopass.\n“);else

printf(“Errorscore.\n“);return0;}条件分支的嵌套条件语句的嵌套格式当年龄大于50岁时,若工资小于500,则加300,否则加200if(age>50)

if(sal<500)

sal+=300;else

sal+=200;若年龄大于50岁且工资小于500,加300;若年龄不大于50岁,则加200if(age>50)

if(sal<500)

sal+=300;else

sal+=200;if(age>50){

if(sal<500)

sal+=300;}else

sal+=200;条件分支的嵌套语法规定:else与离它最近的未配对的if配对嵌套的条件语句可以实现复杂的逻辑判断提倡按照层次缩进格式书写,但书写格式不会改变程序的结构条件分支嵌套示例求方程ax2+bx+c=0的根算法1、若a=0且b=0且c=0

,任意值2、若a=0且b≠0

,x=-c/b

3、若b2-4ac=0

,x1=x2=-b/2a

4、若b2-4ac≥05、若b2-4ac﹤0条件分支嵌套示例#include<stdio.h>例5.8#include<math.h>//由于用到平方根函数,要用此头文件int

main(){floata,b,c,x1,x2,p,q,m;//定义实型变量

printf(“Enter3coefficients:“);

scanf(“%f,%f,%f“,&a,&b,&c);//从键盘读入方程的三个系数

if(a==0&&b==0&&c==0)//分支1:三个系数全为0

printf(“anyvalue\n“);

elseif(a==0&&b!=0)//分支2:系数a为0,解一元一次方程

printf(“x1=x2=%f\n",–c/b);

else

//分支3:解一元二次方程的两个根

{

m=b*b–4.0*a*c;…条件分支嵌套示例

if(m>=0){//解实根

x1=(–b+sqrt(m))/(2.0*a);

x2=(–b–sqrt(m))/(2.0*a);

printf(“x1=%f\n“,x1);//输出两个实根

printf(“x2=%f\n“,x2);}

else{//解虚根

p=–b/(2.0*a);

q=sqrt(–m)/(2.0*a);

printf(“x1=%f+%fi\n“,p,q);

printf(“x2=%f–%fi\n“,p,q);}}return0;}switch分支语法计算过程先计算表达式的值依次与一组常量比较若相同则执行该分支否则转向default分支退出switch语句说明switch后面的表达式必须为整型、字符型或枚举型case后面必须为常量表达式,且各个case值必须不同如果没有default子句,且没有case子句匹配,则不执行case分支中的语句可以有多条,不需要花括号switch(表达式){case常量表达式1:语句组1case常量表达式2:语句组2┇case常量表达式n:语句组ndefault:语句组}switch分支流程图入口switch分支结构case出口语句组1语句组2...switch表达式case值2值1语句组ncase值n语句组defaultswitch分支示例根据输入的成绩等级,打印相应分数段#include<stdio.h> int

main(){chargrade;printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){

case‘A‘:printf(“90-100\n“);break;

case‘B‘:printf(“80-89\n“); break;

case‘C‘:printf(“70-79\n“); break;

case‘D‘:printf(“60-69\n“); break;

case‘E‘:printf(“0-59\n“); break;

default:printf(“Error\n“);}return0;}switch_gradeswitch分支示例-break的用途break的作用是退出当前的switch如同default,从语法角度来说,break不是必需的参考switch_grade_noBreakswitch分支示例根据输入的成绩等级,打印是否通过信息#include<stdio.h>int

main(){chargrade;printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);switch(grade){case‘A‘:case‘B‘:case‘C‘:case‘D‘:printf(“Pass\n“);break;case‘E‘:printf(“Fail\n“);break;default:printf(“Error\n“);}return0;}如果逻辑上确实如此,则不同的case分支可以使用同一个语句组,这也许是特意不在某些case分支中使用break的唯一正当理由switch分支示例例5.9

编写程序,输入一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以上为‘A’,80--89分为‘B’,70--79分为‘C’,60--69为‘D’,60分以下为‘E’。若输入超出范围,输出错误信息。仿照例5.7if(score>=90&&score<=100)printf("A\n");elseif(score>=80&&score<90)printf("B\n");elseif(score>=70&&score<80)printf("C\n");elseif(score>=60&&score<70)printf("D\n");elseif(score>=0&&score<60)printf("B\n");elseprintf("error!\n");switch分支示例#include<stdio.h>int

main(){

intscore;printf("Pleaseenterscore:");

scanf("%d",&score);

switch(score

){

case

(score>=90&&score<=100)

:printf(“A\n“);break;

case

(score>=80&&score<90):printf(“B\n“);break;

default:printf(“Error\n“);}}switch分支示例int

main(){

intscore;printf("Pleaseenterscore:");

scanf("%d",&score);

switch(score

){case100:

case

99

:

case

98

:…

printf(“A\n“);break;

case

89

:case

88

:…

printf(“B\n“);break;…..}}switch分支示例#include<stdio.h>例5.9

main(){intscore;printf("Pleaseenterscore:");scanf("%d",&score);switch(score/10){case10:case9:printf("%d——A\n",score);break;case8:printf("%d——B\n",score);break;case7:printf("%d——C\n",score);break;case6:printf("%d——D\n",score);break;case5:case4:case3:case2:case1:case0:printf("%d——E\n",score);break;default:printf("Inputerror!\n");}}循环结构循环结构的含义根据某一条件的判断结果,反复执行某一处理块的过程最基本的循环结构是当循环进入循环结构,判断循环条件,如果循环条件的结果为真,则执行A处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为假时,循环结束入口循环结构真假出口A条件while循环while循环格式:while(表达式)循环体while循环流程先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环为保证循环终止,循环体内应有能改变表达式值的语句入口while循环真假出口循环体表达式while循环例5.10

输入n,计算s=1+2+3+…+n之和,要求用while语句实现分析:

s=s+1

s=s+2…

s=s+nwhile循环例5.11从键盘输入一行字符,以回车结束,统计字符的个数并输出结果分析:step1、利用循环不断输入字符,并检查该字符step2、如果不是回车,则字符个数计数,并返回step1step3、如果是回车,执行step4step4、输出结果while循环#include<stdio.h>例5.11

main(){charc;

intnum=0;

printf("请输入一行字符:");while(

){

}

printf("字符个数=%d\n",num);}do-while循环do-while循环格式:do{

循环体

}while(表达式);do-while循环流程先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,表达式为真时重复执行循环体,否则终止循环(循环体至少执行一次,这与while循环不同)为保证循环终止,循环体内应有能改变表达式值的语句入口do-while循环真假出口循环体表达式do-while循环例5.12

计算s=1+2+3+…+n之和,do-while实现#include<stdio.h>main(){int

i,n,s;

printf("Pleaseentern:");

scanf("%d",&n);s=0;i=1;//设置初值

do{s=s+i;//累加一个整数ii++;//准备下一个数

}while(i<=n);//条件满足,执行循环体

printf("1+2+3+…+%d=%d\n",n,s);}for循环for循环格式for(表达式1;

表达式2;

表达式3)循环体for循环流程先判断后执行:先执行表达式1(循环初始化),再计算表达式2以根据其结果决定是否执行一遍循环体(为真时执行),计算表达式3的值(循环再次“初始化”),返回重新计算表达式2的值以确定循环是否终止入口for循环真假出口循环体表达式2表达式3表达式1for循环例5.13

计算s=1+2+3+…+n之和,for实现#include<stdio.h>main(){

int

i,n,s;

printf("Pleaseentern:");

scanf("%d",&n);

for(i=1,s=0;i<=n;i++){s=s+i;}printf("1+2+3+…+%d=%d\n",n,s);}for循环示例#include<stdio.h>main(){int

i,n,s;

printf("Pleaseentern:");

scanf("%d",&n);

for(i=1,s=1;i<=n;i++)s=s*i;

printf("%d!=1*2*…*%d=%d\n",n,n,s);}例5.14

输入n,计算n!三种循环结构的比较三种循环结构可以互换使用for循环与while循环常见,do-while循环少见While,do-while循环常用于循环次数不定的场合for循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合for循环将所有循环控制因素都放在循环头部,循环结构最清晰循环嵌套例5.16打印九九乘法表#include<stdio.h>int

main(){

int

i,j,k;

for(i=1;i<=9;i++){

for(j=1;j<=9;j++){

k=i*j;

printf(“%d×%d

=%2d“,i,j,k);}

printf(“\n“);}return0;}如果一个循环体内包含另一个循环则称循环嵌套或多重循环三种循环都可以嵌套,但嵌套时内外层循环不能发生交叉发生嵌套时,内层循环经常需要使用外层循环的某些值作为控制条件循环控制转移:break语句通常用于循环语句和switch语句功能是提前结束它所在的循环或switch,转而去执行后面的语句循环和switch只能一级一级的退出循环控制转移:break语句例5.17从键盘输入10个正整数进行求和,如果错误地输入了负数,则求和结束#include<stdio.h>main(){

intsum=0,x,i;

printf("输入10个正整数:\n");

for(i=1;i<=10;i++)//i>10,正常结束循环

{scanf("%d",&x);//输入x

if(x<0)break;//若x<0,则跳转结束循环

sum=sum+x;//正数累加求和

}

printf("sum=%d\n",sum);}循环控制转移:continue语句只用于循环语句功能是提前结束本次循环,开始下一轮循环对于while和do-while循环,立即去执行循环条件测试;对于for循环,立即计算表达式3循环控制转移:continue语句输入一串字符,以回车结束输入,程序统计并输出其中小写字母的个数参看例5.11continue.c#include<stdio.h>int

main(){charc;

int

num=0;

printf(“Enterastring:\n“);

while((c=getchar())!=‘\n‘){

if(c

<97||c>122)continue;

//非小写字母,本次循环结束

num++;}

printf(“%d\n“,num);return0;}continue终止的是当前循环的当前一次迭代,而不是整个循环,当前循环的下一次迭代仍会执行结构化程序设计注意事项要保证结构的完整性不允许结构层次间的交叉!要保证操作的完整性一个基本结构就是一个完整的操作单元,程序只能从入口进出口出程序最好不要有多入口多出口,尤其不能从外部进入循环或条件分支内部正确的结构嵌套错误的结构交叉结构化程序设计应用示例例5.21找出100以内的全部素数,并按照每行10个素数输出分析:什么是素数只能被1和其本身整除的自然数如何编程求一个数是否为素数

primeNumber.c结构化程序设计应用示例例5.23输出裴波那契数列前12项值(递推)()11nFnF(n-1)+F(n-2)n>2=ìï=íïî1n=2#include<stdio.h>int

main(){

int

f1,f2,f,i;

f1=1;f2=1;

printf(“%10d%10d“,f1,f2);

for(i

=3;i<=12;i++){

f=f1+f2;

printf(“%10d“,f);

if(i

%4==0)printf(“\n“);//控制每行输出4个数

f1=f2;f2=f;}

printf(“\

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论