版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲结构化程序设计开发方法顺序程序设计分支结构程序设计循环程序设计/循环控制课程目录第二讲结构化程序设计开发方法本讲目录一、C程序结构·每一个源文件由预编译命令和若干函数组成(对每个文件分别编译,然后连接)·一般地,一个C程序可由多个源文件组成·每一个函数由说明部分和语句部分组成4.1C程序结构和语句课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录C程序源程序文件1源程序文件i源程序文件n预编译命令函数1函数n说明部分执行部分(语句)………一、C程序结构课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录二、C程序语句表达式语句控制语句复合语句终止程序运行语句课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录函数调用语句:
如:printf("…");赋值语句:
如:i=i+1;i++;x+y;空语句:
如:;任何事情都不做。用来做被转向点,或循环语句中的循环体。1.表达式语句课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录2.控制语句––改变语句的执行顺序①if()~else~②for()~③while()~④do~while()⑤continue⑥break⑦switch⑧goto⑨returnswitch(多分支选择)(条件语句)(循环语句)(循环语句)(循环语句)(结束本次循环语句)(中止执行switch或循环语句)(多分支选择语句)(转向语句)(从函数返回语句)()表示条件,~表示语句课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录用{}括起来的一系列语句。如:if(a>b){ z=x+y; t=z/100; printf("%f",t);}3.复合语句(语句体)
复合语句中最后一个语句的分号不能忽略不写。 C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求。课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录4.终止程序运行语句exit(整数);课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录return整数;
赋值语句是由赋值表达式加上一个分号构成。5.2赋值语句 C语言中的赋值号“=”是一个运算符,在其他大多数语言中赋值号不是运算符。
多数高级语言没有“赋值表达式”一概念。 作为赋值表达式可以包括在其他表达式之中。
例如:
if((a=b)>0)t=a;课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录 if后面的(
)内是一个条件,如:
if(x>0)…
在x的位置上换上一个赋值表达式“a=b”,其作用是:先进行赋值运算(将b的值赋给a),然后判断a是否大于0,如大于0,执行t=a。在if语句中的“a=b”不是赋值语句而是赋值表达式,这样写是合法的。
如果写成if((a=b;)>0)t=a;就错了。 在if的条件中不能包含赋值语句。由此可以看到,c把赋值语句和赋值表达式区别开来,增加了表达式的种类,使表达式的应用几乎“无孔不入”,能实现其他语言中难以实现的功能.课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录printf()和scanf()是C语言中使用得最多的一种输出函数,它可按指定的格式输出和输入多个不同类型的数据。4.5
格式式输入输出函数上机实习课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录例2.1
最简单的C程序,这也是世界上第一个C程序。/*exam21.c*//*最简单的C程序*/#include<stdio.h>main(){ printf(“Hello,world!”);}头文件主函数例----头文件与主函数课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录例2.2
已知圆的半径为R(R是一个可变的量),求圆的面积和周长,用计算机求解,程序如下/*exam22.c*//*计算圆的面积和周长*/#include<stdio.h>main(){floatr,area,s;
scanf(“%f“,&r);area=3.14*r*r;s=2*3.14*r;
printf(“面积=%f,周长=%f”,area,s);}1、注释2、数据说明3、数据输入4、数据处理5、结果输出课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录例2.3
已知平行四边形的长为50,宽为10,计算平行四边形的面积和周长。程序如下://exam23.c//计算平行四边形的面积和周长#include<stdio.h>main(){floata,b;a=10.0;b=5.0;
printf(“AREA=%f”,a*b);}程序课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录例2.4
以我国1992年工业产值为100,如果以9%的年增长率增长计算到2000年时的工业产值。1算法分析:对此问题,要找出问题的数学模型。设r为年增长率,n为年数,v为第n年的总产值。则有v=100*(1+r)n2数据结构根据算法分析,至少要用到这么几个量,年增长率、年数、第n年的总产值。而这几个量中,年增长率肯定是小数(浮点)型数据,年数是整数(整型),总产值不会是整数,应为浮点数。这些数据都要放在相应的变量中,并要进行相应的数据说明。课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录//exam24.c//计算到2000年的工业产值#include<stdio.h>main(){intn;floatrate,value;n=2000-1992;rate=0.09;value=100*pow(1+rate,n);printf(“2000年的产值为%f:”,value);}pow为求幂的函数格式
pow(底,指数)底,指数均为浮点数。自动类型转换3源程序代码课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录
此例中,只能算到2000年,且年增长率为9%时的工业产值。如果将工业产值改为10%,或者要算到其它年份,必须要修改源程序,使用不便。方法2:用scanf函数重新编写程序。//exam24.c//计算到2000年的工业产值#include<stdio.h>main(){intn,year;floatvalue,rate;printf(“请输入年份和年增长率”);scanf(“%d,%f”,&year,&rate);n=year-1992;value=100*pow(1+rate,n);printf(“按给定利率到指定年份的产值为%f”,value);}课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录例2.5
鸡兔同笼,已知鸡兔总头数为H(Heads),总数为F(Feet),问鸡兔各有多少只?1算法分析:(1)建立数学模型设鸡为x只,兔为y只,由题意有:
x+y=h......(1)
2*x+4*y=f......(2)(2)求解方程,找出x,y的具体求解公式:以下用消元法找出方程的解课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录(2)式-2×(1)式注意:计算机不会自己建数学模型,也不会自己解方程!2×y=f-2×hy=(f-2×h)/24×(1)式-(2)式2×X=4×H-FX=(4×H-F)/22数据结构程序中要用到不同的数据,存放头、脚数量的变量,存放方程解(鸡、兔数量)的变量,存放方程判别式的变量等。对于头、脚的数量,肯定是整型变量,方程的解理论上讲是整型,但在求解方程时要进行运算,为了避免发生错误,最好是用浮点数据。课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录3伪代码(由于此问题比较简单,也可直接编写程序)。说明变量x,y,f,h输入数据f,h计算x,y打印结果伪代码是一种程序设计工具,介于程序语言与自然语言之间,伪代码不能被计算机编译,但它很容易翻译成高级语言.课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录//exam25.c#include<stdio.h>main(){floatx,y;intf,h;
printf(“InputthenumbersofHeadsandFeet”);
scanf(“%d,%d”,&f,&h);x=(4.0*h-f)/2.0;y=(f-2.0*h)/2.0;printf(“Heads=%d;Feet=%d”,h,f);printf(“Chicken=%d,rabbits=%d”,x,y);}4源程序代码说明输入数据的内容课程目录第4讲最简单的c程序设计—顺序程序设计本讲目录问题:1、从键盘输入一个数,如果该数为正,打印,
否则不打印;2、将考试成绩不及格的学生名单打印出来;3、解一元二次方程,求出相应的实根或复根。
对于上述或类似问题,需要进行某种判断,并根据不同情况进行不同的处理,怎样进行程序设计?第五讲分支结构程序设计课程目录第5讲分支结构程序设计本讲目录解决办法:1、引入新的程序结构,分支结构,有时也称判断结构或选择结构。2、为了和分支结构相配合,同时还要引入逻辑表达式的概念。3、有三种形式可进行分支结构的程序设计A、if结构B、多重选择结构(switch语句)C、无条件转移结构(goto语句)课程目录第5讲分支结构程序设计本讲目录if语句关系表达式和逻辑表达式if语句的变形及嵌套多重选择语句(switch语句)无条件转移语句(goto语句)本讲小结本讲内容课程目录第5讲分支结构程序设计本讲目录的根1、算法分析:2、数据结构:由于问题简单,只需用到一些单精度实数例5.1求一元二次方程课程目录第5讲分支结构程序设计本讲目录3、伪代码输入方程系数a,b,c计算判别式d=b*b-4*a*cif判别式大于等于0then{
计算两个实根定位输出光标打印结果}else{
计算实部计算虚部定位输出光标打印结果}endprogram课程目录第5讲分支结构程序设计本讲目录
#include<math.h>#include<stdio.h>main(){
floata,b,d,c,x1,x2,p,q;printf(“输入方程系数:”);
scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4*a*c;
if(d>=0){x1=((-b+sqrt(d))/(2*a);x2=((-b-sqrt(d))/(2*a);printf(“x1=%f,x2=%f\n”,x1,x2);
else{p=-b/(2*a);q=sqrt(-d)/(2*a);
printf(“x1=%f+i%f,x2=%f-i%f\n”,p,q,p,q);}}求平方根的函数4、源程序清单课程目录第5讲分支结构程序设计本讲目录例5.2
商店售货,按购买货物款的多少分别给予不同的优惠折扣,编程计算实际应付货款。购货不足250元,没有折扣;购货250元(含250元,下同),不足500元,减价5%;购货500元,不足1000元,减价7.5%;购货1000元,不足2000元,减价10%;购货2000元及以上,减价15%;1、算法分析:设购物款为M,折扣为D,则D可表示为:
D=0(M〈250)
D=0.05(250≦M<500)D=0.075(500≦M<1000)D=0.1(1000≦M<2000)D=0.15(2000≦M)课程目录第5讲分支结构程序设计本讲目录2、源程序清单//exam42.c#include<stdio.h>main(){floatm,d,t;
printf(“请输入购物金额:”);scanf(“%f”,&m);
if(m<250)d=0;if(m>=250&&m<500)d=0.05;if(m>=500&&m<1000)d=0.075;if(m>=1000&&m<2000)d=0.1;if(m>=2000)d=0.15;
t=m*(1-d),//计算应付款
printf(“实际应付款:%f”,t);}输入购物款:249实际应付款:249输入购物款:500实际应付款:462.5课程目录第5讲分支结构程序设计本讲目录例5.3
购物折扣程序的另一个写法改写后,程序更清晰,执行时间更省。//exam42.c#include<stdio.h>main(){floatm,d,t;
printf(“请输入购物金额:”);
scanf(“%f”,&m);if(m<250)d=0;
elseif(m>=250&&m<500)d=0.05;elseif(m>=500&&m<1000)d=0.075;elseif(m>=1000&&m<2000)d=0.1;
else
d=0.15;t=m*(1-d),//应付款
printf(“实际应付款:%f”,t);}课程目录第5讲分支结构程序设计本讲目录例5.4
从键盘输入一字符,如果为Y,则打印是,为N,打印否,其它字符,打印输入错误。//exam54.c#include<stdio.h>main(){chara;printf(“输入一个字符:”);a=getchar();if(a==‘Y’||a==‘N’){
if(a==‘Y’)printf(“是”);
elseprintf(“否”);}elseprintf(“输入数据不合要求”);}演示显示程序课程目录第5讲分支结构程序设计本讲目录#include<stdio.h>main(){intx,y,z;printf(“Iputx,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);
if(x>0){
if(y>0)if(z>0)printf(“所有数据大于零!”);elseprintf(“只有X,Y大于零!”);}
elseif(x==0){if(y==0)if(z==0)printf(“所有数据都为零!”);elseprintf(“只有X,Y等于零!”);}elseprintf(“X小于零!”);}例5.5
演示
嵌套不能太深,一般以三层为限,嵌套太深,容易出错。嵌套演示程序课程目录第5讲分支结构程序设计本讲目录#include<stdio.h>main(){intx,y,z;printf(“Iputx,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);if(x>0&&y>0&&z>0)
printf(“所有数据大于零!”);elseif(x>0&&y>0)printf(“只有X,Y大于零!”);elseif(x==0&&y==0&&z==0)printf(“所有数据都为零!”);elseif(x==0&&y==0)printf(“只有X,Y等于零!”);else//(x<0)printf(“X小于零!”);}利用逻辑表达式将例4.5改写,改写后程序的结构要清晰得多。演示课程目录第5讲分支结构程序设计本讲目录例5.6
将输入的字母转化为小写字母。1算法分析
在计算机中,处理英文字母,其实是处理它的ASCII码值。将大写字母变成小写字母,就是将大写字母的ASCII码值变为相应的小写字母的ASCII码值。
大写字母的ASCII值比小写字母的ASCII值小32,故将相应字母的ASCII值加32就变成了小写字母。
程序设计时,要注意如果输入的不是大写的字母,则不用转换。课程目录第5讲分支结构程序设计本讲目录main(){charch;scanf(“%c”,&ch);if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;printf(“%c”,ch);}2源程序代码之一课程目录第5讲分支结构程序设计本讲目录main(){charch;scanf(“%c”,&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c”,ch);}注意:1条件运算符优先于赋值运算符,低于关系运算符;
2条件运算符的结合方向为“自右至左”
a>b?a:c>d?c:da>b?a:(c>d?c:d)此处使用了条件运算符3源程序代码之二课程目录第5讲分支结构程序设计本讲目录#include<stdio.h>main(){inti;
printf(“输入数字1-7:”);
scanf(“%d”,&i);
if(i==1)printf(“TodayisMonday!\n”);elseif(i==2)printf(“TodayisTuesday!\n”);elseif(i==3)printf(“TodayisWednesday!\n”);elseif(i==4)printf(“TodayisThursday!\n”);elseif(i==5)printf(“TodayisFriday!\n”);elseif(i==6)printf(“TodayisSaturday!\n”);elseprintf(“TodayisSunday!\n”);}例5.7
输入星期中的某一天,显示对应的英文此例似显复杂,是否有更好的办法?课程目录第5讲分支结构程序设计本讲目录main(){inti;printf(“输入数字1-7:”);scanf(“%d”,&i);switch(i){case1:printf(“TodayisMonday!”);case2:printf(“TodayisTuesday!”);case3:printf(“TodayisWednesday!”);case4:printf(“TodayisThursday!”);case5:printf(“TodayisFriday!”);case6:printf(“TodayisSaturday!”);default:printf(“TodayisSunday!”);}}例5.8用switch
语句重写打印星期程序。main(){intI;printf(“输入数字1-7:”);scanf(“%d”,&i);if(i==1)printf(“TodayisMonday!”);elseif(i==2)printf(“TodayisTuesday!”);elseif(i=3)printf(“TodayisWednesday!”);elseif(i==4)printf(“TodayisThursday!”);elseif(i==5)printf(“TodayisFriday!”);elseif(i==6)printf(“TodayisSaturday!”);elseprintf(“TodayisSunday!”);}课程目录第5讲分支结构程序设计本讲目录要有break才等价例5.9
用switch语句重写例4.4的程序main(){chara;printf(“输入一个字符:”);
a=getchar();
if(a==‘Y’||a==‘N’)if(a==‘Y’)printf(“是\n”);else
printf(“否\n”);elseprintf(“字符不合要求!\n”);}显然,改写后的程序更清晰,更简短。main(){chara;printf(“输入字符:”);a=getchar();
switch(a){case‘Y’:
printf(“是\n”);
break;case‘N’:
printf(“否\n”);break;default:
printf(“字符不合要求!\n”);
}}课程目录第5讲分支结构程序设计本讲目录例5.10
在屏幕上显示菜单分析:程序首先在屏幕上将功能显示出来,用户根据需要选择相应的功能,程序根据用户的选择执行相应的程序段。对于这类程序,往往是用户输入一个英文字母,然后程序根据字母来断别程序该执行什么程序段,故一般用switch语句比较方便。课程目录第5讲分支结构程序设计本讲目录2源程序清单switch(a){case'i':printf(“调用输入模块!”);break;case'o':printf(“调用输出模块!”);break;case'l':printf(“调用查找模块!”);break;case‘q':printf(“调用退出模块!”);break;
}}main(){intchara;printf(“请选择:”);
printf(“输入i”);printf(“输出o”);printf(“找出最长的单词l”);printf(“退出q”);a=getchar();执行选项时,要调用相应的模块(程序段)。由于现在还没有相应的程序,暂用一条打印语句代替。以后会用相应程序代替课程目录第5讲分支结构程序设计本讲目录例5.11
统计某班级中计算机课程中考试成绩高于80分的人数。假设学生人数为10main(){inti,fs,j=0;Loop:scanf(“%d”,&fs);j++;//统计已读入的数据个数
if(fs>80){i++;printf(“%d,%d”,i,fs);}if(j<10)//当数据没读完时,继续
gotoLoop;}课程目录第5讲分支结构程序设计本讲目录1、分支结构:改变程序的执行流程,或有选择地执行程序;2、if~else和switch是结构化语句,而goto语句不是;3、块if语句可以取代所有的分支结构,而多重分支结构不可;4、块if语句中的条件可以是复杂逻辑表达式,而多重分支中的条件只能是简单表达式;5、块if与goto语句结合,可以构造任何复杂的循环,但用专门的循环语句更方便。本讲小结课程目录第5讲分支结构程序设计本讲目录在许多问题中需要用到循环控制。循环是指对同一个程序段重复执行若干次。被重复执行的部分(由若干语句组成)称为循环体。几乎所有实用程序都包括循环。循环结构又称重复结构,它是结构化程序设计的基本结构之一。本讲主要内容:
goto循环语句
while循环语句
do~while循环语句
for循环语句
循环嵌套及注意的问题
程序的流程图第六讲循环控制课程目录第6讲循环控制本讲目录例6.1
查找某班级中计算机课程中考试是否有成绩高于95分的人。1算法分析
此题的算法比较简单,将该班计算机课程的考试成绩输入计算机,每输入一个成绩,就与95进行比较,如果有大于95的成绩,程序结束。但在输入和比较时,要有一种结构,使得计算机能不停地执行输入和比较,当某种条件(如找到了大于95分的成绩,或者所有的成绩都已输入完)满足,则结束程序。2数据结构
数据结构也很简单,用一个变量存放输入的数据,还要用一个变量记录输入数据的个数,如果输入的数据完成时,则该变量就等于输入的数据的最大个数。Goto例课程目录第6讲循环控制本讲目录说明整型变量fs,i;
输入成绩fs;
记录输入成绩的个数(i=i+1);
iffs>95或者输入数据完成(i>某值){
退出输入;
elsego输入成绩行;}if(fs>95)
打印字符串“找到了!”
else
打印字符串“没找到!”结束程序3程序伪代码课程目录第6讲循环控制本讲目录main(){intfs,i;i=0;Loop1:scanf(“%d”,&fs);i=i+1;if(fs>95||i>=10)
gotoloop2;else
gotoloop1;loop2:if(fs>95)printf(“FIND!”);elseprintf(“DONOTFIND!”);}4源程序代码之一构成循环退出循环标号标号课程目录第6讲循环控制本讲目录5源程序代码之二#include<stdio.h>main(){intfs,i=1;printf("\n请输入第%d个数据:",i);scanf("%d",&fs);
while(fs<=95&&i<10){ printf("请输入第%d个数据:",i+1);scanf("%d",&fs);i++;}if(fs>95)printf("\n找到啦!\n");elseprintf("\n没找到!\n");}注意输入提示While例1循环体课程目录第6讲循环控制本讲目录例6.2
将输入的正文复制到输出,每次一个字符.1算法分析
本题的含义是每次从键盘上输入一个字符,然后将该字符在屏幕上输出。因为是正文,故其结束的标志为ctrl+z
要使用字符函数来接受从键盘输入的字符,一般用getchar函数。课程目录第6讲循环控制本讲目录2源程序代码
#include<stdio.h>
intmain(void){
charc;
printf(“inputatextendofctrl+z\n”);
c=getchar();
while(c!=EOF){
putchar(c);
c=getchar();
}
}
在头文件中定义的常数(-1)While例2循环体注意输入提示按ctrl+z键结束输入输入一个字符输出一个字符课程目录第6讲循环控制本讲目录#include<stdio.h>intmain(void){ charc;
printf("inputatext\n");
while((c=getchar())!=EOF)putchar(c);}例6.3
请阅读下面的程序,说明程序的功能。该程序与上面的程序功能一样,只不过将字符输入语句放入循环判断条件中。在头文件中定义的常数(-1)ctrl+z键结束输入循环注意输入提示按输入一个字符输出一个字符课程目录第6讲循环控制本讲目录例6.4
比较两种循环的用法。从键盘输入一个字符Y或N,直到输入正确为止。1算法分析在程序中,经常会遇到要求用户输入Y或N,以确定某种状态。为防止用户在无意中碰到键盘而输入错误的字符,程序对用户输入的不合要求的字符忽略,并要求用户重新输入。为了做到上述要求,程序对输入的字符要进行判断,如果不合要求,则将输入的字符忽略,并等待用户重新输入。显然,要做到这一点,须用一个循环程序,当输入正确时,循环结束。设输入变量为c,则循环控制条件为!(c==‘Y’||c==‘N’)或者(c!=‘Y’&&c!=‘N’)课程目录第6讲循环控制本讲目录2源代码比较格式1:
c=getchar();
while(c!=’Y’&&c!=’N’){printf("answerisYorN“);c=getchar();}格式2:
do{printf(”EnterYorN“);c=getchar();}while(c!=’Y’&&c!=’N’);显然,格式
2更方便!do例课程目录第6讲循环控制本讲目录#include<stdio.h>main(){intfs,i=1;
do{ printf("请输入第%d个数据:",i);scanf("%d",&fs);i++;}while(fs<=95&&i<10);if(fs>95)printf("\n找到啦!\n");elseprintf("\n没找到!\n");}例6.5
将例6.1用新的do~while语句重写查找某班级考试结果是否有高于95分的成绩。do例循环体课程目录第6讲循环控制本讲目录例6.5
统计某班级中计算机课程中考试成绩高于80分的人数,现用for循环语句重写该程序。
main(){intfs,sum,j;sum=0;
for(j=1;j<=10;j++){scanf(“%d”,&fs);if(fs>80){sum=sum+1;printf(“sum=%d\n“,sum);}}}给循环变量j赋初值1循环变量j加1循环控制条件for例循环体课程目录第6讲循环控制本讲目录例6.6
求数列
的和。1、分析:该数列中每一项的分母都有规律,后一项为前一项加5,分母的通式为:
An=An-1+5,A1=1或:
程序课程目录第6讲循环控制本讲目录//exam63.c#include<stdio.h>main(){ inti; floatsum=0;
for(i=0;i<=100;i++) { sum=sum+1.0/(1+i*5); } printf("%f",sum);}给循环变量i赋初值1循环变量i
加1循环控制条件循环for例课程目录第6讲循环控制本讲目录例6.7求的近似值,精确到公式为:
此类问题相对简单,但要注意累加变量和通项的初值。
该问题中,累加变量sum的初值为0,通项term的初值为1。课程目录第6讲循环控制本讲目录#include<stdio.h>#include<math.h>main(){ doublepi,term,sum; inti; sum=0.0; term=1.0;
for(i=1;term>0.00000000000001;i++){ term=1.0/(i*i); sum=sum+term; } pi=sqrt(sum*6); printf("%f\n",pi);}两个相乘,其值会溢出,故得不到想要的结果循环for例课程目录第6讲循环控制本讲目录例6.8分别统计某班学生各科成绩中高于80分的人数。学生人数为30人,课程为:数学、语文、英语、物理、生物。intn,i;n=0;for(i=1;i<=30;i++){ //对学生人数循环
scanf(“%d”,&fs);if(fs>=80)n=n+1;//累加大于80分的人数}printf("n=%d“,n);
先看统计数学成绩循环for例课程目录第6讲循环控制本讲目录
统计五门课程,只需将统计一门课程的程序用不同的数据执行5次,这可用一个循环实现。//统计某一门课程
n=0;for(i=0;i<3;i++){scanf(“%d”,fs);if(fs>=80)n=n+1;}printf("n=%d“,n);for(j=0;j<5;j++){//对课程循环
}统计每门课程的成绩!//统计一门课程
n=0;for(i=0;i<3;i++){scanf(“%d”,fs);if(fs>=80)n=n+1;}printf("n=%d“,n);
这里,用到了二重循环。外循环内循环for例课程目录第6讲循环控制本讲目录例6.9求自然对数的底e,取前n项的和。1算法分析此题有两种算法:一种是直接求通项,则先求n!,然后求1/n!,这种方法比较简单。求n阶乘的程序段为f=1;for(j=1;j<=n;j++)f=f*j;课程目录第6讲循环控制本讲目录,则有设通项为由于数列的第一项不能用通项表示,故将其直接放入累加变量中。程序片段为第二种求通项的公式e=1.0;a=1;for(m=1;m<=n;m++){a=a*(1/m);e=e+a;}课程目录第6讲循环控制本讲目录//利用双重循环计算main(){inti,j,n;floate,f;printf(“PleaseinputN:”);scanf(“%d”,&n);e=1.0;for(i=1;i<=n;i++){f=1;for(j=1;j<=i;j++)f=f*j;e=e+1/f;}printf(“e=%f”,e);}//利用单重循环计算main(){inti,n;floate,f;printf(“PleaseinputN:”);scanf(“%d”,&n);e=1.0;f=1;for(i=1;i<=n;i++){f=f*(1/i);e=e+f;}printf(“e=%f”,e);}2源代码课程目录第6讲循环控制本讲目录例6.10
从键盘上输入字符并按行显示,遇到Esc键结束,要求只显示输出内容。在每行前显示字符串“TheLineNo.isn”,n为1,2,3,1算法分析此题要求从键盘上输入字符并按行显示,初一看,只要用行输入语句就行。但仔细分析后会发现,用行输入语句不行。如用gets或scanf语句,则输入的内容会在屏幕上回显(即输入的内容显示在屏幕上),其次,这两个语句都不能单独捕捉到Esc键。因此,只能用单个字符输入的函数,但要求不要回显,getchar函数也不行,但推测是与getchar相类似的函数。故可先调出getchar的帮助,然后看SeeAlso。课程目录第6讲循环控制本讲目录既然是按行显示,用字符输入函数,每输入一个字符,立刻在屏幕上显示出来。当接受到换行符时,转入下一行。因此,对每一行的输入,要用一个循环,循环的控制条件就是输入的字符不为换行符。当输入为换行符时,循环从头开始。程序的结束是以接受到Esc键为标志的,故而要在行输入的外面再增加一个循环,此循环的结束条件是输入的字符为Esc键。行输入的程序片段为printf("\nTheLineNo.is%d",i);do{printf("%c",c);c=getch();}while(c!=13&&c!=27);13return键ASCII码27Esc键ASCII码getch不回显输入字符函数课程目录第6讲循环控制本讲目录#include<stdio.h>#include<conio.h>intmain(void){inti=0;charc='\0';while(c!=27){c='\0';i++;printf("\nTheLineNo.is%d",i);do{printf("%c",c); c=getch();}while(c!=13&&c!=27);}printf("\nTheend\n");}从键盘上输入一个字符,不回显Esc键的ASCII码值回车符的ASCII码值2源程序代码
课程目录第6讲循环控制本讲目录例6.11
输入一个算式,模拟袖珍计算机的加、减、乘、除四则运算。例如:输入10.8+0.13*100计算结果为:1093.000000假定计算时不考虑运算符的优先级,也不允许有(),而是按照运算符出现的先后顺序执行运算。sunhui:此例也没讲。课程目录第6讲循环控制本讲目录main(void){doublex,y;charop;inx:printf("inputarithmeticexpression:\n");scanf("%lf",&x);while((op=getchar())!='\n'){iny:scanf("%lf",&y); switch(op){ case'+':x+=y;break; case'-':x-=y;break; case'*':x*=y;break; case'/': if(y)x/=y; else{printf("divisioniszero,inputyagain\n"); gotoiny; } break;default:printf("illegaloperator,inputagain\n"); gotoinx; }}printf("%8.4f\n",x);}课程目录第6讲循环控制本讲目录开始
输入系数a,b,cd>=0例6.12:用流程图描述求解一元二次方程的根x1=(-b+sqrt(d))/2x2=(-b-sqrt(d))/2输出x1,x2p=-b/2q=sqrt(-d)/2输出x1,x2结束TF课程目录第6讲循环控制本讲目录d=b*b-4*a*c例6.13
输入一段C语言程序(一个正文),按原来格式复制到输出,复制过程中删除输入程序中所有的注释。此处注释专指“/**/”的注释。1算法分析程序先要输入,在C语言中,当从键盘输入时,先将输入数据放入键盘缓冲区中,当接受到回车符后,程序才开始从键盘缓冲区中读数据。分析之前,首先,弄明白问题的意思。程序要求输入一段程序(C语言),并将输入的程序在屏幕上输出。在输出时将程序中的注释(/**/)过滤,既不输出注释。课程目录第6讲循环控制本讲目录输出时要将注释过滤掉,首先要判别什么内容是注释内容。例:while(a>b){/*whilea>b*/printf(“*/”);}字符的类型,仅从字符本身是无法区分的。如上面的串中,字符串while可能是普通字符串,也可能是注释字符串。同样,对“*/”字符,与/*配对是注释字符,否则就是普通字符。因此,需要一个类型标志
state。因此,字符的类型标志可取为:普通字符(COPY)、注释开始(START)、注释字符(COMMENT)、注释结束(END)。因此,在C程序中,从注释的角度来看,字符共有四种,普通字符、注释开始字符、注释结束字符及注释字符。while(a>b){printf(“*/”);}
为普通字符,whilea>b
为注释字符,/**/为注释标志字符。课程目录第6讲循环控制本讲目录参照下例开始程序设计。开始时,state置普通字符状态。在普通字符状态,如果输入字符不是‘/’,则将字符原样输出,如果输入字符为‘/’,在开始注释状态,如果输入字符为‘*’,while(a>b)/*whilea>b*/printf(“*/”);
则可能开始注释,将state设为注释状态,字符‘/’
不输出;课程目录第6讲循环控制本讲目录参照下例开始程序设计。开始时,state
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024秋新沪科版物理8年级上册教学课件 第6章 熟悉而陌生的力 第4节 探究:滑动摩擦力大小与哪里因素有关
- 2023年智能电能表及配件项目融资计划书
- 2023年原料药机械及设备项目融资计划书
- 养老院老人生活照料管理制度
- 养老院老人健康饮食营养师考核奖惩制度
- 物流整改方案
- 政府还款协议书(2篇)
- 抵押房子合同书(2篇)
- 《豆类坚果类与健康》课件
- 2024年度生态农业地产融资合作开发合同3篇
- 基础有机化学实验智慧树知到期末考试答案2024年
- 国际发展援助概论智慧树知到期末考试答案2024年
- 突发事件新闻发布会实例分析与研究
- 中石油反恐培训课件
- 电磁感应-2023年高考物理复习练(上海)(解析版)
- 品牌管理 课件 第11章 品牌IP打造
- 小学数学动手能力培养与研究课题研究汇编
- 人教版小学英语一年级起点四年级上册 Fun Time(市一等奖)
- 引导孩子学会适应与调适
- 医院药品目录(很好的)
- 厦门大学2023年826物理化学考研真题(含答案)
评论
0/150
提交评论