《C语言程序设计》课件第三章11_第1页
《C语言程序设计》课件第三章11_第2页
《C语言程序设计》课件第三章11_第3页
《C语言程序设计》课件第三章11_第4页
《C语言程序设计》课件第三章11_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

-C语言程序电子教案算法语言程序设计第三章简单语句和选择语句本章内容学习结构化程序设计方法简单语句选择语句3.1结构化程序设计概述

一个高质量的程序必须是运行可靠、清晰易读、高效率和可适应性及可移植性的。可靠性为首位。必须掌握如下几个避免错误的技术和方法: 正确的程序设计方法 正确性证明 校对 编译检查 运行检查 系统测试注:程序的清晰易读性越来越被人们所强调。有效的方法有:

自顶向下的结构程序设计方法 标识符的合理选择 程序格式的规范书写

C语言是结构化程序设计的语言,具有结构化语言的一系列特征。

C语言的主要结构成分是函数,利用它很容易构造出相对独立的子系统模块。调用函数时仅需知道它实现什么功能,不必知道其功能是如何实现的,符合结构化设计的特点。在书写格式上允许采取逐层缩进的形式,增强了程序的可读性。#include“stdio.h”voidmain(){printf("hello\n");}

#include“stdio.h”voidmain(){printf("hello\n");}#include“stdio.h”voidmain(){printf("hello\n");}3.2.1为何要输入数据请看下面求圆面积的程序:#include“stdio.h”#definePI3.14159voidmain(){floatr,area;

r=4;area=PI*r*r;printf("Theareais%f\n",area);}编译连接执行这个程序以后,将输出半径为4的圆的面积,但不能输出其他不同半径的圆面积3.2scanf函数和字符输入、输出函数3.2.2scanf函数scanf函数是从键盘得到输入数据的函数。scanf函数的一般格式为:

scanf(“输入控制”,输入数据表列);“输入控制”的含义与printf函数的“输出控制"相同(2)输入数据表列是一个或多个用逗号分隔的变量的地址或字符串的首地址,变量的地址可以通过地址运算符"&"得到。例如,r的地址就是&r。【例3.1】编写求圆面积的通用程序#include“stdio.h”#definePI3.14159voidmain(){floatr,area;

scanf("%f",&r);

area=PI*r*r;

printf("Theearais%f\n",area);

}从键盘输入r的值地址运算符【例3.2】运行下面C程序#include“stdio.h”voidmain(){inta1,a2;floata3;printf("Pleaseenteravalueofa1:");

scanf("%d",&a1);/*从键盘输入a1的值*/printf("Enteravalueofa2:");scanf("%d",&a2);/*从键盘输入a2的值*/printf("Enteravalueofa3:");scanf("%f",&a3);/*从键盘输入a3的值*/printf("a1=%d,a2=%d,a3=%f\n",a1,a2,a3);}【例3.3】在同一行中输入三个数据#include“stdio.h”voidmain(){inta1,a2;floata3;printf("Pleaseentervalueofa1,a2,a3:");scanf("%d%d%f",&a1,&a2,&a3);printf("a1=%d,a2=%d,a3=%f\n",a1,a2,a3);}

数据输入方式:(c)123回车

(a)1234567.89456回车

(b)123TAB456TAB7.897.89回车【例3.4】输入三个实数,求最大者。#include“stdio.h”voidmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);t=(a>b)?a:b;printf("%f\n",(t>c)?t:c);}输入:2.5,6.7,8.32结果:8.3200003.2.3字符输入函数

字符输入函数getchar()是专门用于输入一个字符常量的函数。它没有参数,函数的值就是从键盘输入的一个字符。使用getchar()函数之前,必须用#include包含“stdio.h”。例3.5显示从键盘输入的一个字符。

#include"stdio.h"

voidmain()

{charc;

c=getchar();

printf("%c",c);

}

输入:a

输出:a【例3.6】编程序判断输入的字符是否为’a’,若是,则输出’a’,否则输出’N’。程序如下:

#include"stdio.h"voidmain(){charc;printf("%c",((c=getchar())==’a’)?c:’N’);}

输入:a输入:b

输出:a输出:N3.2.4字符输出函数

与getchar()相对应,putchar()是字符输出函数,它向标准设备(通常是显示器)输出一个字符例如:putchar(c);/*输出字符变量c的值*/注意:

与getchar()一样,使用putchar()之前必须用#include包含“stdio.h”。【例3.7】用putchar函数显示从键盘输入的字符#include"stdio.h"voidmain(){charc;c=getchar();/*putchar(getchar());*/putchar(c);}键盘输入:a键盘输入:A屏幕输出:a屏幕输出:A3.3表达式语句

在第二章中已经学习了C语言中众多的表达式。在每一种表达式的后面加一个分号,都可以构成一个最简单的语句——表达式语句。例如:

表达式表达式语句

a=a+c*(d+3)a=a+c*(d+3);

a+b+ca+b+c;

i++i++;例如:

函数调用也是表达式,在其后加一个分号,就变成了函数调用语句。例:printf函数调用语句

scanf函数调用语句小结:

在表达式之后加一个分号,从而构成一个语句,这是C语言的一个特色。它使C语言的程序设计的表达能力更强。3.4复合语句定义:

用花括号括起来的程序段就是一个复合语句。例如:

{a=1.0;b=2.0;i++;}3.5if条件语句

用C语言求解实际问题时,经常会遇到要进行判断的情况。例如:从键盘输入圆半径的值。如果输入的值大于等于0,则程序就计算圆的面积;如果输入的值小于0,则显示错误信息,以提醒用户纠正输入的错误。像这样根据条件判断决定其后的动作,在C语言中可以使用if条件语句来实现。C语言中if条件语句有三种结构形式,它们是:

1.if结构

2.if-else结构

3.else-if结构3.5.1if结构if结构的一般格式为:

if(表达式)语句功能:首先计算表达式的值,若其值为非0(即“真”),则执行表达式后的语句;若其值为0(即“假”),则跳过这个语句去执行if语句的后继语句。注:if(表达式)后面的语句只能是一个语句或一个复合语句。if结构的功能流程图假(0)表达式为真吗?执行语句真(非0)入口表达式为真吗?执行语句真(非0)假(0)入口

if结构的功能流程图中棱形框、矩形框和指向线是构成流程图的基本元素。棱形框:表示对表达式的判断。它有一个入口,两个出口。一个是“真”出口,一个是“假”出口。棱形框中的出口取哪个角为“真”,哪个角为“假”是任意的。矩形框:表示执行处理的内容。它只能有一个入口和一个出口。带箭头的线:是指向线,表示程序的流向。。例3.8从键盘输入圆的半径,若半径小于等于

0,则不进行计算;否则,计算圆面积。#include"stdio.h"voidmain(){floatr;printf("Inputtheradiut:");scanf("%f",&r);if(r>0)printf("area=%f\n",3.14159*r*r);}例3.9从键盘输入圆的半径,若为10,则计算圆

的面积,若为20,则计算圆的周长。若既

不等于10又不等于20,则不进行计算。

#include"stdio.h"voidmain(){floatr;printf("Inputtheradiut:");scanf("%f",&r);if(r==10)printf("Area=%f\n",3.14159*r*r);if(r==20)printf("Cycle=%f\n",2.0*3.14159*r);}例3.10输入两个实数,按由大到小的顺序输出

这两个数。

分析:输入两个实数时,这两个实数的大小顺序是任意的。但是题中要求输出的顺序是由大到小。若a>b,则先a后b;若a<b,则先b后a。

#include"stdio.h"voidmain(){floata,b;scanf("%f,%f",&a,&b);if(a>b)printf("%f,%f",a,b);if(a<b)printf("%f,%f",b,a);}用交换变量值的方法按顺序输出这两个数

交换变量值的思想:不改变变量名,但变量值可改变的性质。若a的值大于b的值,则a与b的值不交换;若a的值小于b的值,则两者互相交换值。从而使得无论何时,变量a的值始终大于变量b的值。最后,按先a后b的顺序输出,即可实现按由大到小的顺序输出的功能。实现方法:为了能够进行相互交换,必须引进一个临时变量t。用以下三个赋值语句可实现交换。

t=a;a=b;b=t;/*t=a,a=b,b=t;*/程序如下:

#include"stdio.h"voidmain(){floata,b,t;printf("Pleaseinputtwonumbers:\n");scanf("%f%f",&a,&b);if(a<b){t=a;a=b;b=t;}/*复合语句*/printf("%f,%f",a,b);}【例3.11】输入两个小写字母,然后按字母顺

序输出。#include"stdio.h"voidmain(){charch1,ch2,c;printf(“Pleaseinputtwolowercases:”);

if((ch1=getchar())>(ch2=getchar())){c=ch1;ch1=ch2;ch2=c;}printf(“%c%c\n”,ch1,ch2);}输入:ab输入:ba

输出:ab输出:ab注意输入方式3.5.2if-else结构if-else结构的一般格式为:

if(表达式)

语句1else

语句2功能:首先计算表达式的值,若其值为非0,则执行语句1,然后跳过语句2,往下执行if结构的后继语句;若其值为0,则跳过语句1,执行语句2,然后往下执行if结构的后继语句。流程图假(0)表达式为真吗?执行语句1真(非0)入口执行语句2【例3.12】求a、b中的最大值。#include"stdio.h"voidmain(){inta,b,max;scanf("%d,%d",&a,&b);if(a>b)max=a;elsemax=b;printf("Maxnumis%d",max);}【例3.13】输入一个正整数,判断这个数

是奇数还是偶数。分析:因为对一个正整数,不是奇数就是偶数,只有两种选择,故使用if-else结构语句。

#include"stdio.h"voidmain(){intnumber;printf("Inputanumberfortesting:");scanf("%d",&number);if(number%2==1)/*或!(n/2*2==n)*/printf("%disodd.\n",number);elseprintf("%diseven.\n",number);}3.5.3else-if结构

else-if结构的一般格式为:

if(表达式1)

语句1elseif(表达式2)

语句2elseif(表达式3)

语句3…else

语句n功能:实现多路分支选择,在多种条件下的不同分支中选择一个分支执行。若表达式1的值为非

0,则执行语句1;否则,若表达式2的值为非

0,则执行语句2;……最后,在上述表达式的值都为0的情况下,执行语句n。注意:每当选择其中一个语句执行完以后,整个else-if语句就结束了,然后执行else-if语句的后继语句。流程图【例3.14】输入一个x值,求下列相应的y值:#include"stdio.h"voidmain(){floatx,y;scanf("%f",&x);if(x>0)y=1;elseif(x<0)y=-1;elsey=0;printf("y=%f\n",y);}1(x>0)0(x=0)-1(x<0)Y=例3.15从键盘输入学生的成绩(score),

由计算机对学生的成绩进行分级:

score>100或score<0,则作错误处理;

score>=90,则为“A级”;

score<90且score>=80,则为“B级”;

score<80且score>=70,则为“C级”;

score<70且score>=60,则为“D级”;

否则为“E级”。#include"stdio.h"voidmain(){intscore;printf("Enterascore");scanf("%d",&score);if(score>100||score<0)printf("Error!\n");elseif(score>=90)printf("A\n");elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");}#include"stdio.h"voidmain(){intscore;printf("Enterascore:");scanf("%d",&score);if(score>100||score<0)printf("Error!\n");elseif(score>=80&&score<90)printf("B\n");elseif(score>=90&&score<100)printf("A\n");elseif(score>=60&&score<70)printf("D\n");elseif(score>=70&&score<80)printf("C\n");elseprintf("E\n");}3.5.4条件语句的嵌套

在例3.13中曾经介绍过一个程序,这个程序的作用是从键盘输入一个正整数,判断这个数是奇数还是偶数。现在修改一些条件,设读入的不是正整数而是任意整数,怎样判断这个数是奇数还是偶数呢?设输入的整数为i。首先必须判断这个数是否为正数,在正数(i>0)的前提下,若i能被2整数,则i为偶数;若i不能被2整除,则i为奇数。程序段:if(i>0)

if(i%2==0)printf("positiveandeven\n");

else

printf("positiveandodd\n");

嵌套if语句就是在if语句中包含另一个if语句。从语法上讲,if语句中所包含的语句是一个语句或一个复合语句,这个语句当然也可以是另一个if语句,即内嵌if语句。

if(i>0)if(i%2==0)/*i>0&&(i%2==0)*/printf("positiveandeven\n");/*正数且偶数*/else/*否则,i>0&&(i%2!=0)*/printf("postiveandnotqdd\n");/*正数但非偶数*/if(i>0){if(i%2==0)printf("Positiveandeven\n");/*正数且偶数*/}elseprintf(“notpositive\n”);/*负数*/【例3.18】从键盘输入三个实数,求其最大者。#include"stdio.h"voidmain(){floata,b,c,max;scanf("%f%f%f",&a,&b,&c);if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c)max=b;elsemax=c;}printf("Max=%f\n",max);}几点说明:(1)程序引进了一个中间变量max,用以存放最大数。(2)嵌套在内层的if语句可以不用花括号括起来。但为了使结构更清晰,添加花括号也决不是多余的。修改后的程序:#include"stdio.h"voidmain(){floata,b,c,max;scanf("%f%f%f",&a,&b,&c);if(a>b)max=(a>c)?a:c;elsemax=(b>c)?b:c;printf("Max=%f\n",max);}3.6结构化流程图3.7switch语句

在if语句中,用else-if结构可以解决多分支的选择问题。但是,如果判断条件太多,程序冗长,逻辑关系就变得不够清晰。C语言中提供的switch语句可用于解决过多分支的问题。switch语句的一般格式为:

switch(表达式){case常量表达式1:语句块1break;

case常量表达式2:语句块2break;…case常量表达式n:语句块nbreak;

default:

语句块n+1break;}功能:(1)执行switch语句时,首先计算表达式的值,然后将此值与case后面的常量表达式的值相比较,如果某个常量表达式的值与它相等,则执行该case后的语句块;如果表达式的值与所有常量表达式的值都不相等,则执行default后的语句块。当执行完某一个case语句块后遇到break或执行完default语句块时,就跳出switch语句。case结构与else-if结构的对比if(a==1)printf("A");elseif(a==2)printf("B");elseif(a==3)printf("C");elseprintf("D");switch(a){case1:printf("A");break;case2:printf("B");break;case3:printf("C");break;default:printf("D");}(2)如果执行完某一个case的语句块后没有遇到

break语句,扰进入到下一个case的语句块

或进入到default后的语句块去执行。switch(a){case1:printf("A");/*此处没有break*/case2:printf("B");break;case3:printf("C");break;default:printf("D");}if(a==1)/*两次输出*/{printf("A");printf("B");}elseif(a==2)printf("B");elseif(a==3)printf("C");elseprintf("D");(3)多个case可以共用一个语句块switch(a){case1:case2:case3:printf("A");break;…}if(a==1||a==2||a==3)printf("A");elseif…几点说明:(p64)(1)switch后的表达式的值一般是整型或字符型。(2)case后的表达式是可以求得整型量或字符型量的常量表达式。常量表达式中不允许包含有变量和函数调用。(3)default通常出现在switch的最后部分。但这不是它的唯一位置。default可以出现在case

之间,甚至出现在所有的case之前,但等效于出现在switch的最后部分。【例3.20】从键盘先输入两个实数,再输入四则

运算符“+”、“-”、“*”、“/”中的一个,

然后进行四则运算。若按其他键,屏幕则显示出

错信息。#include"stdio.h"voidmain(){floata,b;charoptor;printf("Inputvaluesofa,b:");scanf("%f%f",&a,&b);printf("Enteropterator:");scanf("%c",&optor);switch(optor){case'+':printf("%f+%f=%f\n",a,b,a+b);break;case'-':printf("%f-%f=%f\n",a,b,a-b);break;case'*':printf("%f*%f=%f\n",a,b,a*b);break;case’/':if(b==0)printf("dividedby0\n");elseprintf("%f/%f=%f\n”,a,b,a/b);break;default:printf("Inputerror!");}}

3.8程序设计举例例3.21某产品的国内销售价,80箱以下,每箱350元,超过80箱,超过部分每箱优惠20元;国外销售价,1000箱以下,每箱900元,超过1000箱,超过部分每箱优惠15元。试编写计算销售额的程序。#include"stdio.h"voidmain(){floatmoney;intnational,count;printf("Inputnationalorexternal:");scanf("%d",&national);printf("Inputcountofproduct:");scanf("%d",&count);

if(national)

if(count<=80)money=count*350.0;

elsemoney=count*350.0-(count-80.0)*20.0;else

if(count<=1000)money=count*900.0;

elsemoney=count*900.0-(count-1000.0)*15.0;printf("tatal=%f",money);}【例3.22】设计一个程序的控制菜单,根据输入的选择项,程序完成不同的功能。假设控制菜单的形式为:

L—装载文件

S—保存文件

E—编辑文件

P—打印文件

X—退出程序

——请输入一个选项:#include"stdio.h"voidmain(){charkey;printf("L—装载文件\n");printf("S—保存文件\n");printf("E—编辑方式\n");printf("P—打印文件\n");printf("X—退出程序\n");printf("请输入一个选项:");

key=getchar();

switch(key){case'L':case'l':printf("您选择装载文件.");

break;case'S':case's':printf("您选择保存文件.");

break;case'E':case'e':printf("您选择编辑方式.");

break;case'P':case'p':printf("您选择打印文件.");

break;case'X':case'x':printf("您选择退出程序.");

break;defaulf:printf("错误选择!");}}【例3.23】编写一个程

温馨提示

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

评论

0/150

提交评论