《C语言程序设计考试辅导(1).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计考试辅导(1).ppt(247页珍藏版)》请在三一办公上搜索。
1、程序设计基础,C语言程序设计考试辅导2011信息学院 张宝森,考试大纲分析,六、考试形式及试卷结构,考试大纲分析,五、考试内容(一)、C语言概述与基本概念(二)、数据类型、运算符与表达式(四)、选择结构程序设计(五)、循环控制结构程序设计(六)、数组的应用(七)、函数的应用(八)、指针的应用(九)、结构体与共用体结构的应用(十)、简单位运算的使用(十一)、文件的基本概念和主要应用,算法编程,基本概念,复 习 汇 总,一、C语言概述与基本概念,1、C语言的主要特点2、算法的基本概念和算法的主要描述方法3、结构化程序的三种基本结构4、C语言程序的主要调试及运行步骤,1、C语言的主要特点,(1)语言
2、简洁、紧凑,使用方便、灵活。32个关键字、9种控制语句,程序形式自由(2)运算符丰富。34种运算符(3)数据类型丰富,具有现代语言的各种数据结构。(4)具有结构化的控制语句,是完全模块化和结构化的语言。(5)语法限制不太严格,程序设计自由度大。(6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点。(7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10-20%。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。,要弄懂,什么是算法广义:操作步骤;狭义:求一个数据的方法C语
3、言程序组成模块化:最小程序单位函数结构化:顺序、分支、循环编辑、编译、连接、执行,模块化和结构化,模块化C程序由函数组成。每个C程序必须有一个主函数main()。结构化C程序(函数)由三种语句结构组成:顺序语句 分支语句 循环语句每个C语句以分号结束。,例题,1.编译程序的作用之一是:(2007)A)将高级语言程序翻译成可执行程序B)发现源程序中的逻辑错误C)发现源程序中的语法错误D)纠正源程序中的语法错误2.修改高级语言编写的源程序使用的是(2007)A)编辑程序 B)解释程序 C)编译程序 D)链接程序3.以下关于C程序组成特点的叙述中错误的是(2009)A)C程序的基本组成单位是函数B)
4、C语言不允许在函数中定义函数C)C语言不允许在一行内写多条语句D)分号是C语句的组成部分4结构化程序由三种基本结构组成,它们是【1】结构、【2】结构、和【3】结构。(2005),5.以下不能用于描述算法的是(2009)A)N-S图 B)传统流程图 C)自然语言 D)E-R图6.传统流程图的判断框有【1】个入口,【2】个出口。(1、2)7.关于注释,不正确的说法是:A)注释可以放在程序的任何地方B)C语言的注释是用“/*”和“*/”括住的任意字符列。C)程序编译时,注释不参与编译,也不会出现在目标程序中。D)当注释由“/*text/*sending*/”文字组成时,注释内容仅为sending8.
5、,标识符,程序中各种对象的名字。语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。,大小写不同是不同的标识符,A和a,_ A和_a、ab和AB是不同的标识符(对象)。合法的用户标识符:按规则且除去关键字的标识符。,main主函数不是关键字,关键字和标识符易于出题,下列四个选项中哪个不是关键字 A)while B)switch C)Return D)goto 下列四个选项中哪个是关键字 A)_while B)switch1 C)Return D)goto 下列四个选项中哪个是正确的标识符 A)while B)switch C)Return D)goto 下列四个
6、选项中哪个不是正确的标识符 A)1while B)_switch C)Return D)_2goto,习题,下列四组选项中,均不是C语言关键字的是:A)define B)getc C)include D)while IF char scanf go type printf case pow下面四组选项中,均是不合法的用户标识符的选项是:(都不是合法的标识符)A)A B)float C)b-a D)_123 P_0 1a0 goto temp do _A int INT,例题,以下说法正确的是:A)C程序由define和主函数组成 B)C程序由include和主函数组成 C)C程序只由主函数组成
7、 D)C程序由主函数和其他函数组成以下说法错误的是:A)C程序可以包含多个函数。B)C程序由include命令和主函数组成。C)任何C程序都有一个主函数。D)C程序由主函数和其他函数组成。,习题,1.C源程序的基本单位是【】。2.一个C源程序至少包含一个【】。3.C源程序的注释由【】和【】构成。4.结构化程序设计主要由【】、【】和【】语句结构构成。,函数,主函数,/*,*/,顺序语句,分支语句,循环语句,其它知识,1.语句:表达式+分号 分号是语句的一部分;空语句:单独的分号2.函数原型 int max(int,int);3.空函数:是一个合法的函数,但是什么也不做。void dump()4.
8、函数的组成:函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。,例题,函数的组成包括:【返回值类型】、【函数名】、【函数参数】【函数体】。函数体包括:【变量等说明语句】、【可执行语句】两部分。函数原型由【函数头】和【分号】组成。空函数是【函数体没有任何语句或只包含空语句】那样的函数。,编辑、调试、运行 由C源程序建立可执行程序要经过的步骤是【编译】和【链接】。编译的任务是:进行语法检查,无错是生成目标(.obj)文件。链接的任务是:连接系统函数、形成可执行程序(.exe)文件。,算法的基本概念和主要描述方法,一个程序应包括两个方面的内容:对数据组织的描述:数据
9、结构(data structure)对操作步骤的描述:算法(algorithm)数据结构+算法=程序所谓“算法”,是为解决一个问题而采取的方法和步骤。,例:求,方法1:0+1,+2,+3,+4,一直加到100 加100次方法2:(0+100)+(1+99)+(2+98)+(49+51)+50=10050+50,求1+2+3+(100),int i,s=0,n;scanf(“%d”,s=100*50+50;,通用方法。,由人们事先推导公式。,计算机算法可分为两大类别:数值算法:求数值解,例如求方程的根、求函数的定积分等。非数值算法:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事
10、管理、行车调度管理等。,求135n(即n!),定义变量s、i、n。S1:输入nS2:s=1S3:对于i从1-n s=s*iS4:输出s,void main()int s、i、n;scanf(“%d”,例1.3 求2个数中较大者。,#include int max(int x,int y);/*对被调用函数max的声明*/void main()/*主函数*/int a,b,c;/*定义变量a、b、c*/scanf(d,d,/*输出c的值*/,int max(int x,int y)/*求2个数中较大者*/int z;if(xy)z=x;else z=y;return(z);,return xy?
11、x:y;,算法的特性,有穷性:包含有限的操作步骤确定性:算法中的每一个步骤都应当是确定的 有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息 有一个或多个输出:算法的目的是为了求解,“解”就是输出 有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果 可以用不同的方法表示算法,常用的有:自然语言伪代码传统流程图结构化流程图,用传统流程图表示算法,1入2出,将求n!的算法用传统流程图表示,优点:用流程线指出各框的执行顺序缺点:毫不受限制地使流程随意地转向,使流程图变得毫无规律循环结构不明显。,三种基本结构,Bohra和Jacopini提出了以下三种基本结构:顺序结构、选择结
12、构、循环结构用这三种基本结构作为表示一个良好算法的基本单元。,顺序结构,选择结构,循环结构,先判断,后执行可能一次都不执行循环体,先执行,后判断至少执行一次循环体,总结,(1)只有一个入口;(2)只有一个出口;(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。)(3)结构内的每一部分都有机会被执行到;(4)结构内不存在“死循环”(无终止的循环)。,N-S流程图,(1)顺序结构,(2)选择结构,(3)循环结构,NS流程图举例,判断闰年,4的倍数,整百的倍数中挑出400的倍数,用N-S图表示求n!的算法,流程图阅读,功能?,如何阅读程序?,当i
13、=sqrt(n),void main()int n,i,w,r;scanf(“%d”,画出程序中的变量模拟运行,逐条执行,逐一填写变量的值输入不同数据,反复运行,模块设计的方法,模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。子模块一般不超过50行划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。,(二)、数据类型、运算符与表达式,1、十进制与十六进制及八进制数之
14、间的数制转换2、变量和常量的定义与使用3、数据类型(基本类型,构造类型,指针类型,空类型)的概念及定义4、整型、实型、字符型数据的定义、存储、表示范围及运用5、变量赋初值6、不同类型数据间的转换与运算7、算术运算符、赋值运算符、逗号运算符及其表达式的运用,1、十进制与十六进制、八进制数之间的数制转换,转换的基础二进制,八进制数不会出现大于7的数字,1、十进制与十六进制及八进制数之间的数制转换,10进制转X进制原则:10进制数A,欲转成X进制,A除以X的商B和余数R,取余数R,在用B除以X,再取余,直至商为0,所得余数序列的反序,则为X进制数。例如,求117的二进制数:,反序后1110101结果
15、,二进制与八进制、十六进制转换,28:右起3位一段 1110101 1 6 5八进制任何位不会超过782:一位扩展3位 1 6 5 001110101,216:右起4位一段十六进制任何位不会超过f162:一位扩展4位,C语言的数制,书写方法:默认10进制8进制:以数字0开头:027516进制:以0 x开头:0 x3a5b如:int x=0123;int y=0 xa72f;unsigned long b=0123+0 x3ab5;输入方法:(需要格式控制符的配合)同上,也可不加引导头如:int a,b,c;scanf(“%d%o%x”,10、2、8、16进制数对照表,例题,下列4个数中哪个最大
16、?A)151 B)(172)8 C)(1101110)2 D)(1a2)16 按八进制输入数据的方法是:A)scanf(“%0 x”,2、变量和常量的定义与使用,(1)常量和符号常量在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:符号常量宏#define PRICE 30常量 const double PI 3.1415926(2)变量所有用到的变量都必须在程序中定义 变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,类型 标识符,整型常量 100,125,0(默认int),-100L实型常量 3.14,0.125(默认double),-3.789f
17、字符型常量 a,b,2 不合法字符串型常量“a”,“ab”,”1232”“”空串,3、数据类型的概念及定义,数据类型的分类,整型变量的分类,4、整型、实型、字符型数据的定义、存储、表示范围及运用,类型 类型说明符 长度 数的范围 基本型 int 2/4字节-3276832767 短整型 short 2字节-215215-1 长整型 long 4字节-231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型 unsigned long 4字节 0(232-1),例3.3 整型数据的溢出,#include
18、void main()int a,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);,浮点型数据,浮点型常量两种表示形式都是double型的,小数:0.123、123.456指数:3e-3、0.3e3、.3e-6,注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数。,P 1e3、1.8e-3、-123e-6、-.1e-3O e3、2.1e3.5、.e3、e,浮点型变量,分类:浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。float f1;double f2;long double f3;,字符型数
19、据,字符常量用单引号包含的一个字符是字符型常量(只能包含一个字符)a,A,1 P abc、“a”O 转义字符:以“”开头、后跟专用特殊字符。n 换行 t 横向跳格 r 回车 反斜杠 ddd ddd表示1到3位八进制数字 xhh hh表示1到2位十六进制数字字符变量 char a,b;,字符例题,例3.6 向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);c1=y;c2=z;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,
20、c2);,c1=-35;c2=-121;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);,例3.7 大小写字母的转换,#include void main()char c1,c2;c1=a;/*A+32 ch+=32*/c2=b;c1=c1-32;c2=c2-32;printf(“c c,c1,c2);,字符串常量,一对双撇号括起来的字符序列 如:“How do you do.”,“CHINA”,“a”,“$123.45”又如:printf(“How do you do.”);规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串
21、是否结束。规定以字符作为字符串结束标志。字符串存储字符数组:char s20=“How do you do.”;字符指针:char*p=“How do you do.”;字符串与字符区别 不合法“”合法,空字符串,占1字节 空格字符“”仅有空格字符的字符串,占2字节 a字母a字符“a”仅有a字符的字符串,占2字节 abc非法“abc”含有abc三个字符的字符串,占4字节,习题,下面不正确的字符串常量是 A)abc B)”1212”C)“0”D)“”下面四组选项中,均是正确的八进制或十六进制数的选项是:A)-10 B)0abcd C)0010 D)0a12 0 x8f-017-0 x11-0 x
22、123-011 0 xc 0 xf1-0 xa下面四组选项中,均是合法转义字符的选项是:A)B)C)018 D)0 017 f 101 n“xab x1f下面四组选项中,均是合法整型常量的选项是:A)160 B)-0 xcdf C)-01 D)-0 x48a-0 xffff 01a 986,012 2e5 011 0 xe 0668 0 x,习题,在C语言中,基本数据类型除了单精度和双精度类型外,还有【int】【long】【char】。在C语言中,float型变量在内存占【4】字节,double型变量在内存占【8】字节。,5、变量的初值问题,定义变量时同时赋值。#include void ma
23、in()int a1=5,a2=0 x1fd,a3=0171;long L1=32987,L2=5252352L;float f1=123.345,f2=3.25e-3;double d1=6.25e3,d2=0.00005;char c1=a,c2=b;printf(“d d dn,a1,a2,a3);printf(“ld ldn,L1,L2);printf(“f fn,f1,f2);printf(“lf fn,d1,d2);printf(“c dn,c1,c2);,不是初值问题int a;a=100;,6、各类数值型数据间的混合运算,隐式转换(自动转换)整型:char=int int与sh
24、ort=int int、char、short与long=long浮点型:float=double float 与 double=double整型+浮点型=double强制转换(类型)表达式(int)3.999=3(float)(3+2)=5.0(double)(int)5.28+(char)3.6)=8.0,7、算术运算符、赋值运算符、逗号运算符及其表达式的运用,的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(!)(3)逻辑运算符(!|)(4)位运算符(|)(5)赋值运算符(+=-=/=*=%=|)(自增自减运算符)+-(6)条件运算符(?:)(7)逗号运算符(,)(8)求
25、字节数运算符(sizeof())(9)强制类型转换运算符((类型))(10)指针运算符(*)(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符(),后面讲解,习题,若有代数式,则不正确的表达式是:A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3以下符合C语言语法的赋值表达式是:A)d=9+e+f=d+9 B)d=9+e,f=d+9 C)d=9+e,e+,d+9 D)d=9+e+=d+7在C语言中,要求运算数必须是整型的运算符是:A)/B)+C)!=D)%若有代数式,则正确的表达式是:A)sqrt(fabs(pow(y,x)
26、+log(y)B)sqrt(abs(pow(y,x)+log(y)C)sqrt(fabs(pow(x,y)+log(y)D)sqrt(abs(pow(x,y)+log(y),习题,若有定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4的值是:A)2.500000 B)2.75000 C)3.500000 D)0.000000设float n=12.678;int m;则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是:A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0 C)
27、n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.0 若有定义:int k=7,x=12;则值为3的表达式是:A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)若有定义:char w;int x;float y double z;,则表达式w*x+z-y的类型是:A)char B)int C)float D)double,习题,printf(“%d,%d,%d”,a,b,c);与 printf(“%d,%d,%d”,(a,b,c),b,c);的区别若int x=5,n=5;,则计算表达式x+=n+后,x、n的值分别为【1
28、0】和【6】。若int a=6;,则计算表达式a+=a-=a*a后,a的值是【-60】。若int a;,则表达式(a=4*5,a*2),a+6的值是【26】。,三、简单的C程序设计,1、表达式语句,空语句,复合语句的应用2、赋值语句的含义和使用3、输入/输出函数的基本格式和使用,1、表达式语句,空语句,复合语句的应用,表达式语句:表达式 加 分号 赋值语句:赋值表达式;a=3*2;+i;函数调用语句:函数(实参);printf(“A C statement.”);f=sqrt(fabs(pow(x,y)+log(y);赋值语句空语句:只有一个分号的语句;复合语句:用一对 括起来的语句。z=x+
29、y;t=z/100;printf(“%f”,t);,用作if部分和循环体,2、赋值语句的含义和使用,赋值表达式 a=100赋值语句 a=100;1.语句可以独立存在,而表达式不能。2.单个符号=是“赋值”,自右向左。条件中一般不能含有赋值符号,但是赋值表达式可以包含于条件表达式中 例:if(a=100)t=a;错误?比较:if(a=b)t=a;正确 if(a=0)t=a;?if(a=b)0)t=a;正确?,例4.10 输入三角形的三边长,求三角形面积,假设:三个边长a,b,c能构成三角形已知面积公式:s=(a+b+c)*0.5area=sqrt(s*(s-a)*(s-b)*(s-c),#inc
30、lude#includevoid main()float a,b,c,s,area;scanf(“%f,%f,%f,3、输入/输出函数的基本格式和使用,字符输入函数:getchar()格式输入函数:scanf()字符串输入函数:gets(),字符输出函数:putchar()格式输出函数:printf()字数穿输出函数:puts(),c=getchar();getchar();scanf(“%d%f”,格式化输入输出,格式控制,标志(%与控制符之间),输入输出,%wd 输入宽度为w个字符的数据。m.nf。指定输出的数据共占列,其中有位小数。如果数值长度小于,则左端补空格。int a;char s
31、100;scanf(“%20s%d”,s,例4.11 从键盘输入一个大写字母,要求改用小写字母输出。,#include void main()char c1,c2;c1=getchar();printf(%c,%dn,c1,c1);c2=c1+32;printf(%c,%dn,c2,c2);,习题,已有如下定义,若要求给a1、a2、c1、c2输入的值为10,20,A和B,当从第1列开始输入数据时,正确的输入方式是_.(注意:表示回车,表示空格)int a1,a2;char c1,c2;scanf(“%d%c%d%c”,A)*s1=ChinaBeijing*B)*s1=ChinaBeijing*
32、s2=*chi*s2=chiC)*s1=*ChinaBeijing*D)ChinaBeijing*s2=chi*s2=chi*,默认右对齐,习题,若a、b为整型变量,则以下语句的功能是【交换数据】。a+=b;b=a-b;a-=b;以下程序的输出结果是:_。#include main()int a=252;printf(a=%o a=%#on,a,a);printf(a=%x a=%#xn,a,a);有一输入函数scanf(“%d”,k);,则不能是float变量k得到正确数值的原因是【f】和【&】。,a=374 a=0374a=fc a=0 xfc,四、选择结构程序设计,1、关系运算、逻辑运算
33、的运用2、用if语句实现选择结构3、用switch语句实现多分支选择结构4、选择结构嵌套的应用,1、关系运算、逻辑运算的运用,关系运算符及其优先次序(大于)=(大于或等于)=(等于)!=(不等于)逻辑运算符及其优先次序!(逻辑非)&(逻辑与)|(逻辑或)关系表达式和逻辑表达式的运算结果为1或0(真或假)。算术表达式和赋值表达式的运算结果为非0或0(真或假)。优先级:!*/%+-=!=&|=非 算术 大小关系 不等关系 与或 赋值,关系、逻辑表达式的等价与相反,对一个命题,往往可以写出多个不同的逻辑表达式。若两个表达式在任何数据情况下都具有相同的真假值,就称为它们具有相同的逻辑。相同逻辑的表达式
34、是等价的。例如,x!=0,还可以写成0!=x,或x0|x=5,其等价的逻辑表达式为:x5|x=5。对数学式子|x|-5&x-5 或者!(x=5|x=5 的反命题逻辑表达式为:x5。而x!=0 的反命题逻辑表达式为:x=0。,习题,(1)判断字符变量ch中是否为字母y和n。【分析】对这个判断应当明确是否也包含大写字母。一般情况下应当包含,因此,只要ch中存储的是字母Y、y、N和n之一,命题都成立,显然,这是一种逻辑“或”的关系。【结论】对应的逻辑表达式为:ch=Y|ch=y|ch=N|ch=n(2)判断数据x是否在区间0,60内。【分析】x在区间0,60内,既要满足x=0,又要满足x=0&x=6
35、0思考:为什么不能写成:0=x=60?,习题,(3)x和y都等于100【分析】若使命题成立,既要满足x是100,又要满足y是100。【结论】对应的逻辑表达式为:x=100&y=100思考:为什么不能写成:y=x=100 或者 x=100|y00?(4)判断a是否为3、5、7的公倍数。【分析】a为3、5、7的公倍数的条件是,a能被3整除且a能被5整除且a能被7整除,这里的“且”实际是同时成立的意思,因此是逻辑“与”的关系。【结论】对应的逻辑表达式为:a%3=0&a%5=0&a%7=0 思考:为什么不能写成:a%(3,5,7)=0?(5)判断a是否能被3、5、7中的任意一个数除尽。【分析】a能被3
36、、5、7中任一个数整除,则条件成立,也就是a能被3整除或a能被5整除或a能被7整除。这里应该使用逻辑“或”。【结论】对应的逻辑表达式为:a%3=0|a%5=0|a%7=0思考:为什么不能写成:a%(3|5|7)=0 或者 a%3=0&a%5=0&a%7=0?,习题,(6)判断变量year表示的年份是否闰年。【分析】闰年的规律是:年份能被4整除,但不能被100整除;或者年份能被400整除。这个规律已经表明了逻辑关系。“年份能被4整除,但不能被100整除”可以用year%4=0&year%100!=0表示;而“年份能被400整除”可以用year%400=0表示。【结论】判断年份year是闰年的完整
37、的逻辑表达式为:(year%4=0)&(year%100!=0)|(year%400=0)(7)与x=0等价的逻辑表达式为【!(x0)】。(!x),逻辑表达式的“短路”问题,在计算复杂的逻辑关系表达式时,如果前面部分表达式已经能够决定整个表达式的逻辑结果,则后面的表达式不再计算这就是所谓的“短路”。如:x=1|y5 若x的值正好为1,则x=1为真,则整个表达式已经为真,不再计算y5这个表达式了“或”关系 x=1&y5 若x的值不为1,则x=1为假,则整个表达式不可能为真,不再计算y5这个表达式了“与”关系讨厌的用法:x5&(y=2*x)(x=3)|(y=7),2、用if语句实现选择结构,分支结
38、构就是选择结构,根据条件的真假,执行程序的不同部分,走不同的线路。if语句的三种基本形式(1)if(表达式)语句(2)if(表达式)语句1 else 语句2,(3)if(表达式1)语句1 else if(表达式2)语句2 else if(表达式m)语句m else 语句n,例5.1 输入两个实数,按代数值由小到大的顺序输出这两个数。,#includevoid main()float a,b,t;scanf(“%f%f”,#includevoid main()float a,b,t;scanf(“%f%f”,例5.2 输入三个数a,b,c,要求按由小到大的顺序输出,要求仅使用一条语句printf
39、(%5.2f,%5.2f,%5.2fn,a,b,c);,#include void main()float a,b,c,t;scanf(“%f,%f,%f”,条件运算符(?:),表达式:表达式?表达式表达式语句:表达式?表达式表达式;,例5.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,#include void main()char ch;scanf(%c,ch=A,3、用switch语句实现多分支选择结构,switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;default:语句n+1;,一个表达
40、式多分支,例 5分制成绩,在给毕业设计评分时,往往需要将计算出的百分制成绩转换为5分制成绩,分别给出“优秀”、“良好”、“中等”、“及格”和“不及格”这样的评价。现在要编写程序帮助实现以上功能。具体的评价标准是:90100分(包括90分)为优秀;8089分(包括80分)为良好;7079分(包括70分)为中等;6069分(包括60分)为及格;059分 为不及格。,#includevoid main()int grade;printf(本程序实现百分制成绩到5分制成绩的转换。n);printf(请输入百分制成绩:n);scanf(%d,4、选择结构嵌套的应用,if语句的嵌套switch与if,if
41、语句的嵌套,if(表达式1)if(表达式2)语句1else 语句2elseif(表达式3)语句3else 语句4,if(表达式1)if(表达式2)语句1 else if(表达式3)语句3 else 语句4,多表达式多分支,例 5.3 计算分段函数,-1(x0),算法1:输入x 若x0,则y=1 否则 y=0 输出y,#includevoid main()int x,y;scanf(“%d”,程序段,上例中的程序段有四个,请判断哪个是正确的?,-1(x0),闰年的if结构,leap=year%4=0,if(year%400=0)leap=1;else if(year%4=0)if(year%10
42、0!=0)leap=1;else leap=0;,if(year%400=0)leap=1;else if(year%100!=0)if(year%4=0)leap=1;else leap=0;else leap=0;,一元二次方程ax2+bx+c=0的求解。,#include#includevoid main()float a,b,c,delta,x1,x2,realpt,imagpt;printf(本程序求解一元二次方程n);printf(请输入一元二次方程的三个参数:n);scanf(%f%f%f,else if(fabs(delta)=1e-6)x1=x2=-b/(2*a);print
43、f(方程的两个相等实根为:x1=x2=%8.4fn,x1);else delta=-delta;realpt=-b/(2*a);imagpt=sqrt(delta)/(2*a);printf(方程的两个共轭复根为:n);printf(%8.4f+%8.4fin,realpt,imagpt);printf(%8.4f-%8.4fin,realpt,imagpt);else printf(这不是一个一元二次方程。n);,编写程序比较两人的年龄大小,switch与if,菜单选择,计算三角形计算矩形计算梯形退出,scanf(“%d”,switch(a)case 1:程序段;break;case 2:程
44、序段;break;case 3:程序段;break;case 5:,习题,在C语言中,表示逻辑“真”用【!0】。能表示“当x取值在1,10和200,210为真,否则为假”的表达式为:A)(x=1)&(x=200)&(x=1)|(x=200)|(x=1)&(x=200)&(x=1)|(x=200)|(x=A)&(ch=A)&(ch=A)AND(ch=y&chB&!y)的值是:A)0 B)语法错 C)1 D)“假”,习题,以下不正确的if语句形式是 A)if(xy A)x=10,y=20,z=30 B)x=20,y=30,z=30 C)x=20,y=30,z=10 D)x=20,y=30,z=20
45、若w=1,x=2,y=3,z=4,则条件表达式 wB&CA|AB的值是【0】。条件“22&x5|x-10】。已知int a=3.b=4,c=5;则表达式!(a+b)+c-1&b+c/2的值是【1】。,习题,以下程序如果输入一个小写字母,则将其循环变为其后的第5个字母输出,如a变为f输出,z变为e输出。#include”stdio.h”main()char ch;ch=getchar();if(ch=a,则表达式(-a!=c+)?-a:+c的值是【8】。,习题,若程序运行时输入3 5/,则以下程序运行结果是【0.60000】。main()float x,y;char ch;double r;sc
46、anf(“%f%f%c”,编程题,交换并且输出2或3个数据(按大小次序)。分段函数计算等级分数闰年判断倍数(除尽)条件表达式自增减运算,五、循环控制结构程序设计,1、for 循环结构的使用 2、while和do-while循环结构的使用 3、continue语句和break语句的使用4、循环嵌套的应用,1、for 循环结构的使用,一般形式:for(表达式1;表达式2;表达式3)语句累加:for(i=1,sum=0;i=n;i+)sum=sum+i;阶乘:for(i=1,sum=1;i=n;i+)sum=sum*i;变化:for(i=1;i=n;i+,i+)sum=sum+i;,2、while和
47、do-while循环结构的使用,一般形式 while(表达式)语句正规用法:表达式1;while(表达式2)语句;表达式3;一般形式:do 循环体语句 while(表达式);正规用法:表达式1;do 语句;表达式3;while(表达式2);,例6.2 求1到100的和#include void main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%dn,sum);,#include void main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(%dn,sum);,3、brea
48、k 语句和continue语句的使用,break语句:用来“中止”所属语句。如果属于循环,则从循环体内跳出循环体,即提前结束循环;如果是属于switch语句,则结束switch语句;接着执行下面的语句。一般形式:break;注意:一般和if配合使用。例如,计算10个圆的面积,若面积大于100,则不输出了,循环停止。float pi=3.14159;for(r=1;r100)break;printf(r=%f,area=%fn,r,area);,“脱离”,continue语句,continue语句:仅在循环中与if配合使用,继续循环。即跳过循环体中continue语句下面尚未执行的语句,接着进行
49、下一次循环,(是否执行循环由条件决定)。一般与if配合使用:if(条件)continue;例6.5 把100200之间的不能被3整除的数输出。#include void main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);,4、循环嵌套的应用,一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。肇事车牌:4位数字,前2位相同,后2位相同,和起来是一个2位数的平方。for(i=1;i=9;i+)num=i*
50、1100;,完整程序,#includestdio.hvoid main()int i,j,k,num;for(i=1;i=9;i+)for(j=0;j=9;j+)num=i*1100+j*11;for(k=10;k=99;k+)if(k*k=num)printf(%dn,num);,习题,设有以下程序段,则:int x=0,s=0;while(!x!=0)s+=+x;printf(“%d”,s);A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次下面程序段的运行结果是:x=y=0;while(x15)y+,x+=+y;printf(“%d,%