资源描述
专升本C语言历年考试题及答案(1) 程序设计语言的发展 1、机器语言 2、汇编语言 3、面向过程的语言 4、面向对象的程序设计语言(二) C程序设计语言的执行过程1、编辑 2、编译 3、连接 4、执行(三) 用库函数组装C程序例1:计算2.1715的正弦值。#include “math.h”main( )float a; /*定义a为实型变量*/a=sin(2.1715); /*调用sin函数*/printf(“%fn”,a); /*调用printf函数,输出a的值*/详解:1、在本例中用到的sin函数称为数学函数,它是为了用户使用方便,由一批厂家开发编写的函数,并不是C语言的一部分。在使用数学函数时,往往要用到函数执行时所需的一些信息(例如宏定义),这些信息包含在“math.h”中。因此在程序开头用#include “math.h”将有关的标头文件包括到程序中。2、一个C语言源程序文件由一个或多个函数组成,C语言的基本组成单位是函数。一个完整的C语言程序有且只有一个称为主函数的main函数,程序总是从main函数开始执行,调用其它函数后再回到main函数,在main函数中结束整个程序的运行。3、main是函数名称,没有参数可以不写,但圆括号不能省略,main()后面有一对花括号,花括号内的部分称为函数体,main函数可以在程序的任意位置。4、C规定每个语句以分号(;)结束,分号是语句不可缺少的组成部分,每行中可以写多条语句。5、/*与*/之间为注释信息,对程序运行结果不发生影响,也不被编译,注释说明可以放在语句的任意位置。6、float a;此语句是把a定义为一个实型变量。7、C语言本身没有输入、输出语句,本例使用prinft函数输出数据。prinft函数的括号内包括两部分内容:双引号内的部分、双引号外的部分。双引号内的部分是“格式字符串”,用于指定输出双引号外的变量的打印格式。此例中双引号中有一个”%f”,它是输出一个保留小数点后6位数字的格式字符,小数点前的位数不指定。二、练习(一) 选择题1、以下叙述正确的是_C_。(A)在C程序中,main函数必须位于程序的最前面(B)C程序的每行中只能写一条语句(C)C语言本身没有输入输出语句(D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误2、C语言规定:在一个源程序中,main函数的位置_C_。(A)必须在最开始(B)必须在系统调用库函数的后面(C)可以任意(D)必须在最后3、一个C语言程序是由_B。(A)一个主程序和若干子程序组成(B)函数组成(C)若干过程组成(D)若干子程序组成4、一个C程序的执行是从A_。(A)本程序的main函数开始,到main函数结束(B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束(C)本程序的main函数开始,到本程序文件的最后一个函数结束(D)本程序文件的第一个函数开始,到本程序main函数结束5、以下叙述不正确的是_D_。 (A)一个C源程序可由一个或多个函数组成(B)一个C源程序必须包含一个main函数(C)C程序的基本组成单位是函数(D)在C程序中,注释说明只能位于一条语句后面(二) 填空题: 1、一个C源程序中至少包括一个 _main函数_。2、在一个C源程序中,注释部分两侧的分界符分别为_/*_和_*/_。 第二章 数据描述与基本操作一、主要知识点(一) C的基本数据类型节 短整型(short) 整型 整型 (int) 基本类型 字符型(char) 长整型 (long)实型(浮点型) 单精度型 (float)枚举类型 双精度型 (double)数据类型 构造类型 数组类型 结构类型(struct) 指针类型 共用类型(union) 空类型(void) 文件类型(FILE)(二) 常量和符号常量1、常量定义:在程序运行过程中,其值不能被改变的量称为常量。常量常区分不同的类型,如12、0、-3为整型常量,a、D为字符常量。2、符号常量:用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。常量不同于变量,它的值在作用域内不能改变,也不能再被赋值。例1:已知商品的单价及数量求商品的总价值。#define PRICE 30 main( ) int num=10,total; total=num*PRICE;printf(“total=%d”,total);输出结果:total=300详解:1、程序中用#define命令行定义PRICE代表常量30,此后凡在此文件中出现的PRICE都代表30,可以和常量一样进行运算。2、符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋值。如再用以下赋值语句给PRICE赋值:PRICE=40;是错误的。(三) 变量1、变量定义:其值可以改变的量称为变量。2、标识符的命名规范和其它高级语言一样,用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符,语言中的标识符命名规范为:变量名只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。C语言中标识符的长度(字符个数)无统一规定,随系统而不同。许多系统(如IBM PC的MS C)取前7个字符,假如程序中出现的变量名长度大于7个字符,则只有前面7个字符有效,后面的不被识别。语言有32个关键字(例如if、else、while)它们已有专门含义,不应用采用与它们同名的变量名。C语言将大写字母和小写字母认为是两个不同字。例2:在下列符号中,可以选用哪些作变量名?哪些不可以? a3B 3aB +a -b *x $ _b5_ if next_ day e_2 OK? integer MAXNUMBER i*j答案:_b5_ a3B next_ day e_2 MAXNUMBER可作变量名,其它的作变量名不可以。详解:MAXNUMBER可作变量名。习惯上符号常量名用大写,变量名用小写以示区别,但大写字母作变量名并无错误。if、integer属于保留字,保留字不可作变量名。 +a -b *x $ OK? i*j不可作变量名,因为变量名只能由字母、数字和下划线三种字符组成。3aB不可作变量名,因为变量名的第一个字母必须为字母或下划线。(四) 整型数据1、整型常量整型常量即整常数。C语言整常数可用以下三种表示形式。十进制表示。如231、-56.478八进制表示。以0开头的数是八进制数。如0123即(123)8=1*82+2*81+3*80=64+16+3=83。十六进制表示。以0 x开头的数是16进制。如0 x123即(123)16=1*162+2*161+3*160=256+32+3=291。2、整型变量整型变量分为:基本型、短整型、长整型、和无符号型四种。基本型,以int表示短整型,以short int表示或以short表示长整型,以long int表示,或以long表示无符号型,存储单元中全部二进制位(bit)用作存放数本身,而不包括符号。无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsigned int 、unsigned short 和unsigned long表示。3、整型数据的取值范围C标准没有具体规定各类型所占内存字节数,各种机器处理上有所不同,以IBM PC为例,数的范围如表2.1所示。表2.1所占位数数的范围Int16-3276832767 即-215(215-1)shortint16-3276832767 即-215(215-1)Longint32-21474836482147483647 即-231(231-1)Unsignedint16065535 即0(216-1)Unsigned short16065535 即0(216-1)Unsigned long3204294967295 即0(232-1)4、整型常量的分类一个整常量,如果其值在-3276832767范围内,认为它是int型,它可以赋值给int型和long int型变量。一个整常量,如果其值超过了上述范围,而在-21474836482147483647范围内,则认为它是long int型,可以将它赋值给一个long int型变量。如果某一计算机系统的C版本确定的short int与int型在内存中占据的长度相同,则一个int型的常量出同时一个short int型常量。常量中无unsigned型。但一个非负值的整常量可以赋值给unsigned型整变量,只要它的范围不超过变量的取值范围即可。例如:将50000赋给一个unsigned int型变量是可以的,而将70000赋给它是不行的(溢出)。在一个整常量后面加一个字母l或L,则认为是long int型常量。(五) 实型数据1、实型常量实数在C语言中又称为浮点数。实数有两种表示形式:十进制形式。它由数字和小数点组成(注意必须有小数点)。例如:0.123、.123、123.0、0.0都是十进制数形式。指数形式。如123.56e4或123.56E4都代表123.56*104。但字母e(或E)之前必须有数字,e后面指数必须为整数。例如:e3、2.1e3.5、.e3、e等都不是合法的指数形式。例3:下面四个选项中,均是不合法的浮点数的选项是_。(A)160. 0.12 e3 (B)123 2e4.2 .e5(C)-.18 123e4 0.0 (D)-.e3 .234 1e3答案:B详解:160. 0.12 -.18 123e4 0.0 .234 1e3是实数的十进制形式或指数形式。e3 2e4.2 .e5 -.e3不是正确的指数形式。因为正确的字母e(或E)之前必须有数字,e后面指数必须为整数。对于数据表示形式.e5以及-.e3,e前的.与-.不是有效的数字表示形式。123是整数形式。2、实型变量C实型变量分为单精度(float型)和双精度(double型)两类。在一般系统中,一个单精度型数据在内存中占4个字节(32位),一个double型数据占8个字节。一个单精度型变量能接收7位有效数字,一个double型变量能接收17位有效数字,数值的范围随机器系统而异。在IBM PC中,单精度实数的范围约为(3.4E10-383.4E1038),双精度实数的范围约为(1.7E10-3081.710308)。例4:main( ) float a; a=111111.666666; printf(“%f”,a); 输出结果:111111.640621详解:一个实型常量不分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应的有效位数字。由于float型变量只能接收7位有效数字,因此在把111111.666666赋给a时,a只接收了111111.6,由于输出函数printf中的%f格式表示输出小数点后的6位小数,所以111111.6后的40621属于无意义数字。如果a改为double型,则能全部接收上述12位数字。(六) 字符型数据1、字符常量:普通形式的字符常量:用引号(即撇号)括起来的一个字符,如a、D、$、?等都是字符常量。转义符:以“”开头的字符序列。常用的以“”开头的特殊字符见表2.2表2.2字符形式功能n换行t横向跳格v竖向跳格b退格r回车f走纸换页反斜杠字符单引号字符ddd1到3位8进进制所代表的字符xhh1到2位16进制数所代表的字符例5:若有说明语句:char c=729;则变量c_。(A)包含1个字符 (B)包含2个字符(C)包含3个字符 (D)说明不合法答案:D详解:”后可以有1到3位8进制所代表的字符,本题中”后的”72”属于8进制所代表的字符,而”9”则不属于8进制位所代表的字符,则729中包含了两个字符常量72和9。而字符常量是用引号(即撇号)括起来的一个字符,所以答案为D。2、字符变量字符变量是用来存放字符常量的存储单元。3、字符数据在内存中的存储形式将一个字符常量存放到一个字符变量中,实际上并不是把该字符本身存放到内存单元中去,而是将该字符的相应的ASCII码值存放到存储单元中去。例6:将小写字母转换成大写字母main( ) char c1=a; c1=c1-32; printf(“%c”,c1);输出结果:A详解:a的ASCII码为97,所以c1=a;语句的功能是把97赋值给了c1。c1=c1-32;语句的功能是把97-32的值65赋值给c1。printf函数中的%c格式表示以字符方式输出。ASCII码值为65的字符为A,所以运行结果为:A(七) 字符串常量字符常量是用一对双引号括起来的零个或多个字符序列。C规定以字符0作为字符串结束标志。所以字符串”a”实际上包含2个字符:a、0,因此下面的语句:c=”a”;把一个串赋值给一个字符变量c是错误的。例7:下面不正确的字符串常量是_。(A)abc (B)”1212” (C)”0” (D)” ”答案:A详解:abc是用单引号引来的,所以abc不是正确的字符串常量。(八) 算术运算符和算术表达式1、基本算术运算符C语言中有5个基本算术运算符:(加法运算符。如3+5、+3)(减法运算符。如5-2、-)(乘法运算符,如3*5)(除法运算符,如5/3,5.0/3)(求余运算符,要求%两侧均为整型数据)例8:在C语言中,要求运算数必须是整型的运算符是_。(A)/ (B)+ (C)!= (D)%答案:D详解:对于%运算符来说,要求两侧均为整型数据,所以表达式3.5%2与3%2.0是错误的。例9:写出下列程序的输出结果main( ) printf(“%d,%dn”,5/3,5%3);printf(“%d,%dn”,-5/-3,-5%-3);printf(“%d,%dn”,-5/3,-5%3);printf(“%d,%dn”,5/-3,5%-3);输出结果:1,21,-2-1,-2-1,2详解:两个同号整数相除时结果为正整数,如5/3、-5/-3的结果值为1。两个异号整数相除时结果为负整数,多数机器采取“向零取整”法,即-5/-3=-1,5/-3=-1,但如果参加运算的两个数中有一个数为实数时结果为实数。对于求余(%)运算,运算结果与第一个数的符号相同。优先级别:先*、/、%后+、运算量:双元运算量,前后必须为整数。左右结合性:自左至右参预运算。2、自加自减运算符C语言中有4种形式的自加自减运算符:i (先使i加1后使用)i (先使用后使i加1)i (先使i减1后使用)i (先使用后使i减1)优先级别:高于算术运算。例10:若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为_,n的值为_。x+=n+答案:10 6详解:根据优先级别选运算表达式n+,因为n+是后缀表示形式,所以n先参预运算,再运算表达式x+=n,则x为10,最后n自加为6。例11:main( ) int x,y,m,n;x=2;y=2m=x+*5;n=+y*5;printf(“%d,%d,%d,%d”,x,y,m,n);输出结果:3,3,10,15详解:对于后缀来说是先使用后运算,所以m的值为x在自加以前的2*5得10赋值给m后,x自加变为3。对于前缀来说是先运算后使用,所以m的值为x在自加以后的3*5得15赋值给n。 运算量:单元运算量,此运算量必须为变量,所以表达式5+、(x+y)+是错误的。左右结合性:自右至左参预运算。(九) 关系运算1、C语言提供的关系运算符有: (大于) =(大于或等于) (小于) =(小于或等于) =(等于)是 !=(不等于)2、优先级别:关系运算符的优先级别低于纯算术类,高于赋值类。后两个的优先级小于前四个。如表达式a+bc+d完全等价于表达式(a+b)(c+d)。3、运算量:关系运算符是双元运算符,整型、实型、字符都可以参预运算。4、左右结合性:从左向右的结合方向5、关于关系运算符的进一步说明:关系表达式的值是整型数0或1,故也可以将其看成一种整型表达式。例如:int i=1,j=7,a;a=i+(j%4!=0);的执行结果为:a的值为2。要说明x在区间a,b中,普通数学中使用表达式axb。但C语言中应写成a=x&x278在数学上是不允许的,而在C中是允许的。按自左至右求解。字符数据的比较按其ASCII码值进行。在判定两个浮点数是否相等时,由于存储上的误差,会得出错误的结果。例如:1.0/3.0*3.0=1.0该表达式的值为0。(十) 逻辑运算1、C语言提供的逻辑运算符:&(逻辑与) |(逻辑或) !(逻辑非)2、优先级别:&与|的优先级别低于关系运算符,高于条件运算符,&的优先级别高于|,!的优先级别与自加运算符(+)、自减运算符(-)同级。3、运算量:&和|是双元运算符,!是单元运算符。例12:已知x=43,ch=A,y=0;则表达(x=y&chB&!y)的值是_。(A)0 (B)语法错 (C)1 (D)“真”答案:C详解:C语言不提供逻辑性数据“真”和“假”,在进行逻辑运算时,结果不是1就是0。4、左右结合性:&和|运算符的结合方向为自左至右,!的结合方向为自右至左。5、关于逻辑运算符的进一步说明:在一个&表达式中,若&的一端为0,则不必再计算另一端,该表达式的值肯定为0。在一个|表达式中,若|的一端为0,则不必再计算另一端,该表达式的值肯定为1。例13:写出下面程序的输出结果。 main( ) int x,y,z; x=y=z=0; +x&+y|+z; printf(“%d,%d,%d”,x,y,z); x=y=z=0; +x|+y&+z; printf(“%d,%d,%d”,x,y,z);输出结果:1,1,01,0,0详解:因为&的优先级别高于|,所以表达式+x&+y|+z是一个或表达式,根据|的一端为0,则不必再计算另一端的原则,先计算表达式+x&+y的值为1,因为1或任何值都为1,所以表达式+z没有运算,输出结果为:1,1,0。表达式+x|+y&+z也是一个或表达式,同样根据|的一端为0,则不必再计算另一端的原则,先计算表达式+z的值为1,因为1或任何值都为1,所以表达式+y&+z没有运算,输出结果为:1,0,0。(十一) 赋值运算1、基本的赋值运算符:=(将赋值运算符右侧的表达式赋给左侧的变量)2、自反算术赋值运算符C语言中有5个基本自反算术赋值运算符:=(a=3 等价于a=a3)=(a=3 等价于a=a3)=(a=3 等价于a=a3)=(a=3 等价于a=a3)=(a=3 等价于a=a3)3、优先级别:赋值运算符与自反算术赋值运算符属于同等级别,低于条件运算符,高于逗号运算符。如对于表达式x%=y+3完全等价于x%=(y+3)。例14:若有以下定义,则能使值为3的表达式是_。Int k=7,x=12;(A)x%=(k%5) (B)x%=(k-k%5)(C)x%=k-k%5 (D)(x%=k)-(k%=5)答案:D详解:表达式(x%=k)-(k%=5)完全等价于(x=x%k)-(k=k%5)等价于5-2,此表达式的结果为3。4、运算量:双元运算量,赋值运算符与自反算术赋值运算的第一个量必须为变量,且=前后必须为整型数据。如对于表达式a*3+=2是错误的。因为此表达式完全等价于(a*3)=(a*3)+2。5、左右结合性:自右至左参预运算。例15:若a是int型变量,且a的初值为6,则计算表达式后a的值为_。a+=a-=a*a答案:-60详解:表达式从左向右运算,先计算表达式a=a-36后a为-30,再计算表达式a=a+a后a的值变为-60。(十二) 条件运算: 1、条件运算符的基本形式及功能:条件运算是一种在两个表达式的值中选择一个的操作。它的一般形式为:e1?e2:e3它的操作过程为,若e1为真,则表达式的值为e2,若为假表达式的值为e3。2、优先级别:低于逻辑运算,高于赋值运算。3、运算量:三元运算量,e1一般为算术表达式,e2、e3可以是任意类型的表达式,条件表达式的值的类型为e2与e3二者中类型较高的。例16:若有条件表达式(exp)?a+:b-,则以下表达式中能完全等价于表达式(exp)的是_。答案:exp!=0详解:对于表达式e1?e2:e3 ,e1一般为算术表达式、逻辑表达式、关系表达式,结果为1(真)或0(假)。也可以为数值exp,结果为结果为非0(真)或0(假)在本例中与exp完全等价的表达式是exp!=0。4、左右结合性:自右至左运算。 例17:以下程序的运行结果是_。 main() int k=4,a=3,b=2,c=1; printf(“%d”,ka?k:cb?c:a); 答案:1 详解:条件表达式是从右向左运算,所以在本例中先计算表达式cb?c:a的值,把各数值代入此表达式的值为1。再计算表达式ka?k:1的值,因为km,则自动取n值,即保证n个字符正常输出。f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:%f:不指定宽度,整数部分全部输出并输出6位小数。%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。 %-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。 e格式:以指数形式输出实数。可用以下形式:%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。4、关于printf函数的进一步说明:如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,如:printf(“%f%”,1.0/3);输出0.333333%。(十六) scanf函数 scanf函数可以用来输入任何类型的多个数据。1、scanf函数的一般格式scanf(格式控制,地址表列)“格式控制”的含义同printf函数。普通字符即需要原样输入的字符。地址表列是指由若干个地址组成的表列,它们之间用“,”隔开。2、格式控制的完整格式:% * m l或h 格式字符格式字符与printf函数中的使用方式相同,以%d、%o、%x、%c、%s、%f、%e,无%u格式、%g格式。可以指定输入数据所占列宽,系统自动按它截取所需数据。如:scanf(“%3d%3d”,&a,&b);输入:123456系统自动将123赋给a,456赋给b。%后的“*”附加说明符,用来表示跳过它相应的数据。例如:scanf(“%2d%*3d%2d”,&a,&b);如果输入如下信息:1234567。将12赋给a,67赋给b。第二个数据”345”被跳过不赋给任何变量。输入数据时不能规定精度,例如:scanf(“%7.2f”,&a);是不合法的,不能企图输入:12345.67而使a的值为12345.67。3、输入数据流分隔根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符时,就认为这一项结束。如:scanf(“%d%c%f”,&a,&b,&c);如果输入如下信息:1234r1234.567则scanf函数在接收数据时发现”r”类型不匹配,于是把”1234”转换成整型赋值给a,把”r”赋给变量b,最后把”1234.567”转换成实型数据赋给c。根据格式项中指定的域宽分隔出数据项。如语句:scanf(“%2d%3f%4f”,&a,&b,&c);如果输入如下信息:123456789012345 则scanf函数在接收数据时根据域宽把12赋值给a,345赋值给b,6789赋值给c。隐示分隔符。空格、跳格符(t)、换行符(n)都是C语言认定的数据分隔符。显示分隔符。在scanf函数的两个格式说明项间有一个或多个普通字符,那么在输入数据时,在两个数据之间也必须以这一个或多个字符分隔。如语句:scanf(“a=%d,b=%f,c=%f”,&a,&b,&c);则输入数据应该为: a=1234,b=67.8,c=98.1234、关于scanf函数的进一步说明:scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。例如,如果a、b为整型变量,则scanf(“%d,%d”,a,b);是不对的,应将”a,b”改为”&a,&b”。如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。例如:scanf(“%d,%d”,&a,&b);输入时应输入:3,4。3与4之间的逗号应与scanf函数中的“格式控制”中的逗号相对应,输入其它符号是不对的。在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符输入。scanf(“%c%c%c”,&c1,&c2,&c3);如输入:a b c 。字符a赋给c1,字符(空格) 赋给c2,字符b 赋给c3。5、scanf的停止与返回格式参数中的格式项用法-正常结束。发生格式项与输入域不匹配时-不正常退出:(十七) getchar、putchar函数1、getchar函数getchar函数是从终端输入一个字符。getchar函数没有参数,其一般形式为:getchar( )。2、putchar函数putchar函数的作用是向终端输出一个字符。二、练习(一)选择题1、下面四个选项中,均是不合法的用户标识符的选项是_。(A)A P_0 do (B)float la0 _a(C)b-a goto int (D)_123 temp INT2、若x,i,j和k都是int型变量,则计算下面表达式后,x的值为_。x=(i=4,j=16,k=32)(A)4 (B)16 (C)32 (D)523、下列四个选项中,均是不合法的整型常量的选项是_。(A)-0f1 -0 xffff 0011(B)-0 xcdf 017 12,3456(C)-018 999 5e2(D)-0 x48eg -068 03f4、下面四个选项中,均是合法浮点数的选项是_。(A)1e1 5e-9.4 03e2(B)-.60 12e-4 -8e5(C)123e 1.2e-.4 2e-1(D)-e3 .8e-4 5.e-0 5、下面四个选项中,均是合法字符的选项是_。(A) xf (B) 017 n(C)018 f xab(D)0 101 xlf6、以下不正确的叙述是_。(A)在C程序中,逗号运算符的优先级最低。(B)在C程序中,APH和aph是两个不同的变量(C)若a和b类型相同,在计算机了赋值表达式a=b后,b的值不变。(D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数据。第三章 C程序的流程设计一、算法1、算法的概念为解决某一个问题而采取的方法和步骤,就称为算法。2、算法的性质有穷性:一个算法应包含有限的操作步骤一个初始:此动作序列只有一个初始动作确定性:算法中的每一个步骤都应当是确定性的,仅有一个后继动作。有一个或多个输出:序列终止表示问题得到解答或问题没有解答,没有输出的算法是没有意义的。二、选择型程序设计1、if 语句的形式 if(条件表达式) 语句 if(条件表达式) 语句1 else 语句 2 注意:if语句中的条件表达式一般为逻辑表达式或关系表达式,但也可以是任意的数值类型(包括整型、实型、字符型、指针类型),例如下列语句也是合法的。 if(a) printf(“%d” ,a);在if语句中,分号是语句的结束标志。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。例1:以下不正确的if语句形式是( )。A)if(xy&x!=y);B)if(x=y) x+=y;C)if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y);D)if(xy)z=x;x=y;y=z; 答案:x,y,z的值分别是:20 30 30 详解:在此语句中,条件xy为假,所以只执行x=y;y=z;两条语句。例3、以下不正确的语句是( )A)if(xy);B)if(x=y)&(x!=0) x+=y;C)if(x!=y) scanf(“%d”,&x);D)if(xy)x+;y+;答案:D详解:分号是语句结束的标志,y+的末尾无分号,所以y+不是合法的语句。2、if 的嵌套 if(条件1) if(条件2) 语句1 else 语句2 else if(条件3) 语句3 else 语句4例4:以下程序的输出结果是( )main( )int a=100,x=10,y=20,ok1=5,ok2=0;if(xy)if(y!=10)if (!ok1)a=1;else if(ok2) a=10; printf(“%dn”,a); 答案:100详解:把10、20、5、0分别给变量x、y、ok1、ok2赋值,执行条件语句后a值没有改变,所以a值仍是原值100。3、switch结构switch语句是多分支选择语句,其形式如下:switch(表达式)case 常量表达式1:语句1case 常量表达式2:语句2default:语句n+1注意:1、switch后面括弧内的“表达式”,可以是整型表达式或字符型表达式,也可以枚举型数据。2、当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。3、每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。4、执行完一个case后面的语句后,流程控制转移到下一个case继续执行,直到遇到break语句或执行完为止。5、default可以放在case语句的后面,也可以放在case语句的前面。例5:运输公司对用户计算运费,距离越远,每公里运费越低。设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f计算公式为f=p*w*s(1-d),编写程序。公里数s与折扣率d的标准如下:(此程序可用ifelse来完成,也可以用switch来完成)。s250km d=0250s500 d=0.05500s1000 d=0.0751000s2000 d=0.12000s3000 d=0.153000s d=0.2 main()int s;float p,w,d,f;printf(“请输入每公里每吨货物的基本运费”);scanf(“%f”,&p);printf(“请输入货物重”);scanf(“%f”,&w);printf(“请输入公里数”);scanf(“%f”,&s);switch(int)(s/250) case 0: d=0; break; case 1: d=0.05; break; case 2: case 3: d=0.075; break; case 4: case 5:case 6: case 7: d=0.1; break; case 8: case 9:case 10: case 11: d=0.15; break; default: d=0.2; f=p*w*s(1-d); printf(“基本运费是:%f”,f);详解:1、多个case可共用一组执行语句,必须写成如下的形式:case 4: case 5:case 6: case 7: d=0.1; break;case后面只能有一个常量,把上式改写成case 4,5,6,7: d=0.1; break;的形式是错误的。2、switch后面括弧内的“表达式”必须是整型表达式或字符型表达式,也可以是枚举型数据,对于swith来说,关键是把原始数据转换为易表达的形式。例6:请读以程序写出程序的输出结果。#includemain( ) int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+;break;case 1: b+;break; case 2: a+;b+;break; printf(“a=%d,b=%d”,a,b);答案:a=2,b=1详解:此程序是switch的嵌套结构,在此程序中break跳出内层switch结构,接着执行外层switch的case 2后的语句。例7:写出下面程序的运行结果是( )main()int i;for(i=1;i=5;i+) switch(i%5) case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“n”); case 2: printf(“&”); 答案:#& & &*详解:default可放在case语句的前面,也可以放在case语句的后面,当i%5不等于0,1,2时,将执行default后的语句printf(“n”);执行完成后没有break,将继续执行case 2后的语句printf(“&”);三、循环型程序设计1、while语句while语句用来实现”当型”循环结构,其一般形式如下:while(条件表达式) 循环体语句例11:设有程序段: int k=10; while(k=0) k=k-1; 循环体执行( )次。 答案:0答案解析:在此程序的while结构中,条件表达式k=0的结果永远为0即为假,所以循环执行的次数为0。例12:下面程序段的运行结果是( )x=y=0; while(x3) break; 循环执行( )次答案:4答案解析:while结构中的条件表达式printf(“*”)的值为输出数据的个数,在此例中,printf(“*”)的结果为1,即为真。2、do-while语句do-while语句的特点是先执行循环体,然后判断循环条件是否成立,其一般形式为:do循环体语句while(条件表达式); 例14、若有如下语句 int x=3; do printf(“%dn”,x-=2); while(-x);则上面程序段输出结果是( )。答案:1 例15、以下程序段循环执行几次。x=-1;do x=x*x; while(!x);答案:1例16、下面程序的运行结果是( )main( )int y=10;doy-; while(-y);printf(“%dn”,y-);答案:0 3、for语句C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句,其一般形式为:for(表达式1;表达式2;表达式2) 语句说明:for语句一般形式中的“表达式1”可以省略,此时应for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如果表达式2省略,即不判断循环条件,循环无终止地进行下去。表达式3也可以省略,但此时程序设计者应另外设法保证循环正常结束。可以省略表达式1和表达式3,只有表达式2,即只给循环条件,在这种情况下,完全等同于while语句。3个表达式都可省略,如:for( ; ; ) 语句,相当于while(1) 语句,即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。表达式1可以是
展开阅读全文