C语言程序设计-第三章第四章-顺序分支_第1页
C语言程序设计-第三章第四章-顺序分支_第2页
C语言程序设计-第三章第四章-顺序分支_第3页
C语言程序设计-第三章第四章-顺序分支_第4页
C语言程序设计-第三章第四章-顺序分支_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第三章顺序结构

3.1引例3.2结构化程序设计的三种基本控制结构3.3顺序结构3.4顺序结构程序设计※3.2结构化程序设计的三种基本控制结构结构化程序设计的方法的主要技术是模块化、自顶向下和逐步求精。结构化程序设计:顺序结构分支结构循环结构3.2.1算法与流程图符号名称表示的含义处理框输入、输出、赋值等常规操作判断框根据给定条件决定下步要执行的路径流程线箭头表示流程的方向结构化程序设计三种结构的基本流程图语句A语句B顺序结构条件语句A语句B分支结构循环体循环结构3.2.2算法举例交换两个变量的值。水空醋123attbba图3-3交换两瓶液体图3-4交换两个变量的值3.3.2符号常量

符号常量的定义通过预处理命令#define来实现。定义格式如下:

#define符号常量常量计算圆的面积的程序代码#include<stdio.h>#definePI3.14//定义符号常量PIint

main(void){ doubler; r=3;

printf("小圆面积为%f",PI*r*r); r=7;

printf("大圆面积为%f",PI*r*r); return0;}3.3.3数据输出

输入、输出操作是通过函数调用实现。

输入、输出函数是在系统文件“stdio.h”中声明,编写程序时,始终在程序中加入语句:

#include<stdio.h>

输出函数包括

putchar()函数printf()函数1.putchar()函数putchar()函数是向标准输出设备输出单个字符数据,其语法格式为:

putchar(输出参数);其中,输出参数:字符常量、变量整型常量、变量Putchar()函数也可以用于输出控制字符,如putchar('\n')输出一个换行符。例:使用putchar()函数#include<stdio.h>int

main(void){ chara,b,c; a='B';b='O';c='Y'; putchar(65);

putchar('');

putchar(a);

putchar(b);

putchar(c); return0;}2.Printf()函数

printf()函数则可以向终端输出若干个任意类型的数据。printf()函数的一般格式:

printf(格式控制字符串,输出参数表);printf(“格式控制字符串”,输出参数表);“格式控制字符串”用双引号("")括起来,表示要输出的格式。“输出参数表”是需要输出的一些数据,可以是常量、变量或表达式。printf()函数的输出参数必须和格式控制字符串中的格式说明相对应,并且它们的类型、个数和位置要一一对应。printf("

a=%d,b=%f,c=%c",a,b,c);#include<stdio.h>int

main(void){ chara;

intb; floatc; doubled;

scanf("%c,%d,%f,%lf",&a,&b,&c,&d);

printf("hello%c:第%d名,奖金%f和%f!\n",b,a,c,d); return0;}printf()函数格式字符

d格式符:用来输出十进制整数。o格式符:以八进制数形式输出整数。x格式符:以十六进制形式输出整数。f格式符:用来以小数形式输出一个实数,包括单、双精度数据。c格式符:输出一个字符。s格式符:输出一个字符串。e格式符:以指数形式输出实数3.3.4数据输入1.getchar()函数2.scanf()函数1.Getchar()函数getchar()函数是字符输入函数,接收从键盘输入的单个字符数据。语法格式为:

变量=getchar();Getchar()函数只能接收单个字符,输入数字也按字符处理。当输入的字符多于一个时,只接收第一个字符。例:getchar()函数的使用#include<stdio.h>int

main(void){ charch;

ch=getchar();

putchar(); return0;}2.Scanf()函数Scanf()函数可以用来输入任何类型的多个数据。scanf()函数的一般格式为:

scanf(格式控制字符串,地址表列);

“格式控制字符串”:%d,%f,%lf“地址表列”是由若干个地址组成的表列&x是指变量x在内存中的地址。

例:scanf()函数的使用#include<stdio.h>int

main(void){

int

x,y,z

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

printf("x=%d,y=%d,z=%d",x,y,z); return0;}说明:1.程序运行时,输入的多个数据之间必须用逗号间隔。2.使用scanf()函数可以输入一个数据,如“scanf(“%d”,&x);”也可以输入多个数据,此时要求输入参数和格式控制说明的类型、个数和位置要一一对应。【例3-5】甲和乙从东西两地同时出发,相对而行,两地相距10公里。甲每小时走3公里,乙每小时走2公里,计算过几小时两人相遇?用C语言编写程序学习程序设计语言时,需要考虑的几个问题:编程时使用哪些类型的数据?对这些数据需要进行哪些操作?如何用C语言完成给定工作?C语言的三个基本内容数据表达;运算;流程控制;【例3-5】例题分析:(1)数据表达已知条件:两地距离、甲和乙的速度;未知结果:相遇时间;可由公式:时间=距离/速度;计算得出结果;因此,所需变量有距离、速度和时间;(2)运算:时间=距离/速度;(3)流程控制:顺序结构。【源程序代码】#include<stdio.h>int

main(void){ floata,b,s,t; s=10; a=3; b=2;

t=s/(a+b);

printf("甲、乙相遇所需的时间是%.2f小时\n",t);

return0;}

【例3-6】交换两变量的值。分析:(1)数据定义:交换两变量的值,因此变量至少有两个;(2)运算:水空醋123

空瓶也是用一个变量表示,因此第一步数据定义中增加一个变量作为中间变量。(3)流程控制:顺序结构水空醋123attbba图3-3交换两瓶液体图3-4交换两个变量的值#include<stdio.h>int

main(void){

int

a,b,t;

scanf("%d,%d",&a,&b);

printf("a=%d,b=%d\n",a,b); t=a; a=b; b=t;

printf("a=%d,b=%d\n",a,b); return0;}3.3.5常用数学函数库函数

调用系统库函数时,要用“#include”命令将相应的头文件包含到源程序中函数种类平方根函数sqrt(x)绝对值函数fabs(x)幂函数pow(x,n)指数函数exp(x)常用数学库函数平方根函数:sqrt(x)

绝对值函数:fabs(x)fabs(-3.56)的值为3.56幂函数pow(x,n)

:xnpow(1.1,2)的值为1.21(即1.12)指数函数exp(x):exexp(2.3)的值为e2.3以e为底的对数函数log(x):lnxlog(123.45)的值为4.815836以10为底的对数函数log10(x):log10xlog10(123.45)的值为2.091491。【例3-8】将两个两位数的正整数a,b合并成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在数c的千位和十位上,b数的十位和个位数依次放在数c的百位和个位上。#include<stdio.h>int

main(void){

inta,a1,a2,b,b1,b2,c;

printf("Inputtwonumbers:");

scanf(“%d,%d",&a,&b); a1=a%10; a2=a/10; b1=b%10; b2=b/10; c=a2*1000+b2*100+a1*10+b1;

printf("c=%d\n",c); return0;}运行结果Inputtwonumbers:1324c=1234第四章分支结构4.1引例4.2单分支结构(基本的if语句)4.3二分支结构(if—else语句)4.4多分支结构(elseif语句)4.5switch多分支结构4.6分支结构程序设计※4.1引例从键盘输入一个数,如果该数为正,打印;否则不打印。【知识点】单分支(if)语句二分支(if—else)语句多分支(elseif)语句

switch语句4.2单分支结构--基本的if语句单分支结构的语法是:if(条件表达式) {

语句段

}表达式(也叫做条件表达式)一般为关系表达式或逻辑表达式if语句的执行流程首先对表达式求解,当结果为真(非0)时,则执行指定的语句;否则跳过指定语句,接着执行该语句下面的语句。表达式语句段NY4.2单分支结构(基本的if语句)【例4-1】从键盘输入一个用24小时制表示的时间,把它转换为用12小时制表示的时间并输出。如:输入15:30(15点30分),则输出3:30PM。【例4-2】输入三个数a,b,c,输出三者之中的最大者。4.3二分支结构(if—else语句)【例4-3】输入三角形的三个边长,求三角形的面积。根据海伦公式:半周长p=(a+b+c)/2,面积s=

数据处理流程定义变量、输入值构成三角形?计算并输出结果输出出错信息NYif—else语句语法结构

if(表达式){

语句段1

}

else{

语句段2

}执行流程 先计算关键字if后“表达式”的值,如果表达式的值为“真”(不为0),执行语句段1;否则,执行语句段2。if—else语句表达式语句段1语句段2NY【源程序代码】

#include<stdio.h>#include<math.h>int

main(void){floata,b,c,p,s;printf("请输入三角形的三条边:");scanf("%f%f%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){//若能构成三角形,则计算面积

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("三角形的面积是%.2f\n",s);}else//若不能构成三角形,输出出错信息printf("输入有误,不能构成三角形!\n");}运行结果请输入三角形的三条边:345三角形的面积是6.00【例4-4】为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下(设x≥0)。输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留两位小数)。

x≤15

2.5x-10.5x>15y=f(x)=【源程序代码】

#include<stdio.h>int

main(void){doublex,y;printf("请输入用水量(吨):");scanf("%lf",&x);if(x<=15)//if—else语句

y=4*x/3;else y=2.5*x-10.5;printf("您的用水量%.2f吨,\n应缴纳的水费是%.2f元。\n",x,y);return0;}//if—else语句可以写成条件表达式y=x<=15?4*x/3:2.5*x-10.5;运行结果1请输入用水量(吨):12您的用水量12.00吨,应缴纳的水费是16.00元运行结果2请输入用水量(吨):18您的用水量18.00吨,应缴纳的水费是34.50元4.4多分支结构(elseif语句)【例4-6】商店售货,按购买货物款的多少分别给予不同的优惠折扣,购货不足200元,没有折扣;购货满200元,不足500元,减价5%;购货满500元,不足1000元,减价7.5%;购货满1000元,不足2000元,减价10%;购货2000元以上,减价15%编程计算实际应付货款。数据处理流程YNNd=0.05m<200m<500m<10000d=0d=0.075d=0.1YYN定义变量、输入值m<20000d=0.15计算t,输出结果YN4.4.1elseif语句一般形式为:if(表达式1)

语句段1;elseif(表达式2)

语句段2;elseif(表达式3)

语句段3;

…elseif(表达式n)

语句段n;else

语句段n+1;执行流程 依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。

YNN语句段2表达式1表达式2表达式n语句段1语句段n语句段n+1YYN…………【源程序代码】#include<stdio.h>intmain(){doublem,t,d;printf("请输入购物金额:");scanf("%lf",&m);if(m<200)d=0;//elseif语句elseif(m<500)d=0.05;elseif(m<1000)d=0.075;elseif(m<2000)d=0.1;elsed=0.15;t=m*(1-d);printf("购物款为%.2f元,\n实际应付款是%.2f元\n",m,t);return0;}【例4-7】求一元二次方程的ax2+bx+c=0根。

数据处理流程计算d=b*b-4*a*cd=b*b-4*a*ca不等于0计算两个实根并输出输出出错信息YN定义变量、输入值d大于等于0YN计算两个虚根并输出4.4.2多分支结构(嵌套的if—else语句)

一般形式如下:if(表达式1) if(表达式2)语句1;

else语句2;else if(表达式3)语句3;

else语句4;

else和if的匹配准则:else与最靠近它的、没有与别的else匹配过的if相匹配。分支嵌套语句执行过程语句2表达式1表达式2表达式3语句1语句3语句4YN

N

Y

Y

N【源程序代码】#include<stdio.h>#include<math.h>int

main(void){doublea,b,c,d,x1,x2,p,q;printf("请输入方程系数:");scanf("%lf%lf%lf",&a,&b,&c);d=b*b-4*a*c;if(a!=0){

if(d>=0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%.2f,x2=%.2f\n",x1,x2); } else{ p=-b/(2*a); q=sqrt(-d)/(2*a);

printf("x1=%.2f+%.2fi\nx2=%.2f-%.2fi\n",p,q,p,q); }}else

printf("输入的数据出错");//嵌套的if—else语句return0;}【例3-8】从键盘输入一个字符,判断该字符的类型(大写字母、小写字母、数字或其他控制字符)【源程序代码】#include<stdio.h>int

main(void){charch;printf("Enteracharacter:");ch=getchar();//从键盘输入一个字符,赋值给变量chif(ch<32)//控制字符的ASCII码值小于32

printf("Thisisacontrolcharacter\n");elseif(ch>='0'&&ch<='9')//判断ch是数字字符

printf("Thisisadigit\n");elseif(ch>='A'&&ch<='Z')//判断ch是大写英文字母

printf("Thisisacapitalletter\n");elseif(ch>='a'&&ch<='z')//判断ch是小写英文字母

printf("Thisisasmallletter\n");else

printf("Thisisanothercharacter\n");return0;}4.5switch多分支结构

【例4-9】查询自动售货机商品的价格。假设自动售货机出售4种商品:果汁、矿泉水、巧克力和饼干,售价分别是每份3.5元、1.5元、6.0元和4.0元。在屏幕上显示以下菜单(编号和选项),用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号1~4,显示相应商品的价格(保留两位小数);输入0,退出查询;输入其他编号,显示价格为0。[1]请选择果汁[2]请选择矿泉水[3]请选择巧克力[4]请选择饼干[0]退出查询【源程序代码】#include<stdio.h>int

main(void){intchoice,i;doubleprice; for(i=1;i<=5;i++){//可以连续查询五次,用for循环实现

printf("[1]请选择果汁\n");

printf("[2]请选择矿泉水\n");

printf("[3]请选择巧克力\n");

printf("[4]请选择饼干\n");

printf("[0]退出查询\n");

printf("请选择:");

scanf("%d",&choice); if(choice==0)break;//若输入选项值为0就退出查询。

switch(choice){//根据输入的编号,将相应的价格赋值给price case1:price=3.5;break;//用break语句跳出switch语句,下同

case2:price=1.5;break; case3:price=6.0;break; case4:price=4.0;break; default:price=0.0;break; }

printf("price=%0.2f\n",price);}//for循环结束

printf("Thanks\n");return0;}4.5.1switch语句一般形式为:switch(表达式){case常量1:

语句1; break;case常量2:

语句2; break;……case常量n:

语句n; break;default:

语句n+1; break;}switch语句的执行流程表达式语句段1语句段2语句段n语句段n+1表达式=常量1表达式=常量2表达式=常量n其他breakbreakbreakbreakswitch语句在执行过程中,有多种情况:1.如果在case后面包含多条执行语句时,也不需要像if语句那样加大括号,进入某个case语句后,会自动顺序执行本case后面的所有执行语句。2.default总是放在最后,这时default后不需要break语句。并且,default部分也不是必须的,如果没有这一部分,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支直接退出switch语句。此时,switch语句相当于一个空语句。

3.在switch-case语句中,多个case可以共用一条执行语句4.把case语句下面的break删除,则程序执行流程改变5.使用switch语句时还应注意:在case后的各常量表达式的值不能相同,否则会出现错误。

【例4-10】从键盘输入两个数(d1、d2)和一个运算符(op),计算d1opd2的值。#include<stdio.h>int

main(void)//完成两个数简单的四则运算{floata,b;//定义两个操作数变量charop;//定义一个字符型的操作符变量printf("Pleaseentera,bandop:");scanf("%f%c%f",&a,&op,&b);switch(op)//判断操作符并进行四则运算

{

}return0;}case'+':

printf("%.2f+%.2f=%.2f\n",a,b,a+b);

break;

case'-':

printf("%.2f-%.2f=%.2f\n",a,b,a-b);

break;

case'*':

printf("%.2f*%.2f=%.2f\n",a,b,a*b);

break;

case'/':

if(b!=0.0)//做除法运算时,判断除数是否为零

printf("%.2f/%

温馨提示

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

评论

0/150

提交评论