版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章C语言的语法基础2.1要点导读●C语言中标识符是一个名字,标识符可以是常量、变量、类型、语句、标号及函数的名称。C语言中标识符有三类:关键字、预定义标识符和用户定义标识符。关键字:已被C系统所使用的标识符称为关键字。TurboC2.0的关键字共43个。预定义标识符:C语言系统提供的库函数名和编译预处理命令等构成了预定义标识符。应尽量避免使用预定义标识符作为用户标识符。用户标识符:用户对程序中用到的变量、符号常量、用户函数、标号等进行命名,构成用户标识符。标识符必须由英文字母、下划线、数字组成,不能包含其他字符,且还必须由英文字母或下划线开头。●C语言的变量在使用之前必须先定义其数据类型,数据类型确定了变量的性质、取值范围、占内存空间大小以及该变量所能参加的运算方式。C语言中常见的基本数据类型有:整型(int)、长整型(longint)、无符号整型(unsignedint)、字符型(char)、无符号字符型(unsignedchar)、单精度实型(float)及双精度实型(double)等。●在程序执行过程中,值不能被改变的量称为常量。C语言中有整型常量、实型常量、字符型常量、字符串常量和符号常量五种类型。整型常量:整型常量就是整数。C语言的整型常量有三种表示形式:十进制整数、八进制整数(数字0打头整数)和十六进制整数(0x打头的整数)。一个整型常量的尾部加上小写字母l或大写字母L,则为长整型(long或longint)常量。实型常量:实型常量就是实数。C语言中实型常量用两种形式表示:小数形式,用一个实数表示,包括数字和小数点;指数形式,这时实数包括整数部分、小数点、小数部分和指数部分,指数部分前加字母e或E。字符型常量:C语言的字符常量是ASCII码字符集里的一个字符。字符常量有三种表示方法:把单个字符用一对单引号括起来表示字符常量;用该字符的ASCII码值表示字符常量;用反斜杠“\”开头,后跟规定的单个字符或数字,并用一对单引号括起来表示字符常量。字符串常量:若干个字符用双引号括起来就构成字符串常量。C语言中在存储字符串常量时,除了存储双引号中的所有字符之外,在字符串的最后还要存放一个字符'\0',表示该字符串常量到此结束。字符'\0'称为字符串结束标志。符号常量:C语言中可以用一个标识符来代表一个常量,这个标识符就称为符号常量。有两种方式定义C语言中的符号常量:利用宏定义#define来定义符号常量,以及利用“const”来定义符号常量。●在程序执行过程中,值可以改变的量称为变量。C语言中变量必须先定义数据类型及变量名,才能在程序中使用该变量。变量定义格式是:数据类型关键字<变量名表>;。定义变量时,在变量之后加“=常量”,可以对该变量初始化。一个动态变量未经初始化,也未对其赋值,其初值是不确定的。●printf函数是格式化输出函数,用于向标准输出设备(通常指定为屏幕)按规定格式输出数据。printf函数的调用格式为:printf(格式化字符串,输出表列);。格式化字符串中,格式说明与运行项从左到右数据类型必须一一匹配。格式化字符串包括两部分内容:普通字符与转义字符将按原样运行到屏幕;另一部分是“输出格式说明”,以"%"开始,后跟一个或几个格式字符,用来指定输出数据的格式。在"%"与字符之间根据需要可以插入“宽度说明”、左对齐符号“-”、长度修饰符“l”或“L”等。●scanf是格式化输入函数,可以从标准输入设备(通常指定为键盘)上以各种不同的格式读入数据到变量。scanf函数的格式为:scanf(格式化字符串,地址表列);。格式化字符串包括三类不同的字符:“输入格式说明”、“空白字符”、“非空白字符”。格式化字符串中,格式说明的类型及项数必须与地址表列中输入项的类型及项数由左至右一一匹配。输入的各数据之间用空白字符(空格键、回车键Enter或制表键Tab)隔开。如果在格式化字符串中插入某个非空白字符,输入数据时应输入一个与该非空白字符相同的字符,形成一一对应。输入格式说明都必须用"%"开头,以一个格式字符作为结束,在此之间根据需要可以插入“宽度说明”、长度修饰符“l”或“L”等。●C语言中的非格式化输入、输出函数主要用于字符和字符串的输入和输出。常见的非格式化输入、输出函数有putchar、getchar、getch、getche、puts、gets等函数。●计算机语言中的运算符与数学中的运算符类似,都有优先级和结合方向。C语言有很丰富的运算符。算术运算符:“+”两数相加、“-”两数相减、“*”两数相乘、“/”两数相除、“%”取模或求余数。取模运算要求参加运算的两个数必须都是整数。要特别注意C语言的算术表达式中整数除与实数除的区别:整数除,两个整数相除后值等于商的整数部分;实数除,两个相除的数中至少要有一个是实数,相除后的值等于实数(商本身)。●C语言中允许整型、实型、字符型数据进行混合运算。不同类型的数值型数据进行混合运算时,先要把低数据类型向高数据类型转换,成为同一类型后才进行运算。●增1运算符“++”使运算对象的值增1,而减1运算符“--”则使运算对象的值减1。它们都是单目运算符,其运算对象必须是变量,不能是常量和表达式。增1与减1运算符可以作前缀运算符,先使运算对象值增1或减1之后,再使用运算对象。增1与减1运算符也可以作后缀运算符,先使用运算对象,再使运算对象值增1或减1。●关系运算符用于比较两个运算对象的大小。C语言提供六种关系运算符:<(小于),>(大于),<=(小于或等于),>=(大于或等于),==(等于),!=(不等于)通常关系表达式的值为一个逻辑值:“真”或“假”。C语言中没有专门用来表示“真”、“假”的常量,在C语言中的非零值认为是“真”,零则认为是“假”。若关系表达式得到非零值,则关系表达式为“真”,用1表示;若关系表达式得到零值,则关系表达式为“假”,用0表示。●C语言提供三种逻辑运算符:&&(逻辑与),||(逻辑或),!(逻辑非)。C语言的逻辑表达式的值也只能是1或0。若逻辑表达式值为1,则称该逻辑表达式为“真”;若逻辑表达式值为0,则称该逻辑表达式为“假”。●C语言中,在求解逻辑表达式、关系表达式的值时,数字1代表“真”,数字0代表假。但在判定一个表达式是否为“真”时,以零代表“假”,以非零代表“真”。●C语言中把“?:”称为条件运算符,条件运算符要求有三个运算对象,一般形式为:判定式?表达式1:表达式2。●C语言提供了六种位运算符,位运算的运算对象只适用于字符型和整数型数据。“~”按位取反,其运算功能是把运算对象的内容按位取反。“<<”左移运算符,左移运算符的左边是运算对象,右边是整型表达式,表示左移的位数。左移时,低位(右端)补0,高位(左端)移出部分舍弃。“>>”右移运算符,右移运算符的左边是运算对象,右边是整型表达式,表示右移的位数。右移时,低位(右端)移出的二进制位数舍弃,高位(左端)补0(正数)或补1(负数)。“&”按位与运算符,先把两个运算对象按位对齐,再进行按位与运算,如果两个对应位上的数都为1,则该位的运算结果为1,否则为0。“∧”按位异或运算符,先把两个运算对象按位对齐,如果对应位上的数相同,则该位的运算结果为0;如果对应位上的数不相同,运算结果为1。“|”按位或运算符,先把两个运算对象按位对齐,再进行按位或运算,如果两个对应位上的数都为0,则该位的运算结果为0,否则为1。如果参加位运算的两个运算对象类型不同,此时先将两个运算对象右端对齐,若为正数或无符号数高位补0,负数高位补1。●赋值运算符“=”,赋值表达式的一般形式为:变量名=表达式。赋值运算的功能是先计算“=”号右边表达式的值,然后把这个值赋值给“=”左边的变量,也就是把“右边表达式的值”存入“左边变量”的地址所指的存储单元中。在赋值运算符“=”的左边加上算术运算符或位运算符就构成了复合赋值运算符。它们有十种:*=,/=,%=,+=,-=,>>=,<<=,&=,∧=,|=。在赋值运算中,当赋值号右边表达式值的“数据类型”与左边“变量的类型”不一致但都是数值型时,系统将自动地把右边的数值类型转换成左边变量的类型后再进行赋值。●强制类型转换运算符将一个表达式的值转换成所需的数据类型,其使用格式为:(类型名)(表达式)。●C语言中,可以用逗号运算符“,”把两个或多个C的合法表达式连接起来构成逗号表达式。逗号表达式的形式为:表达式1,表达式2,…,表达式n。逗号表达式的计算顺序是从左至右,先计算表达式1,然后计算表达式2,依次计算,最后计算表达式n。逗号表达式的值为最右边表达式(即表达式n)的值。●长度运算符“sizeof()”用于计算变量或类型所占内存字节数的大小。sizeof()运算符的有两种用法:sizeof(数据类型)计算该数据类型在内存中所占的字节数;sizeof(变量名)计算该变量在内存中所占的字节数。2.2选择题(每题只有一个正确答案)2.1C语言的简单数据类型包括【1】。【1】A)整型、实型、逻辑型B)整型、实型、字符型、逻辑型C)整型、字符型、逻辑型D)整型、实型、字符型2.2以下不属于C语言关键字的是【2】。【2】A)default B)unsignedC)real D)typedef2.3在C语言中,合法的字符常量是【3】。【3】A)'\\'B)"Hello!"C)'Hello'D)a2.4下列四组中都能正确作为C语言程序标识符的是【4】组。【4】A)printB)sort_3_float C)powD)book->nameifPI5_abcA#B2.5下列C语言合法的数据类型关键字是【5】。【5】A)DoubleB)unsigned C)integerD)Char2.6以在C语言中,变量所分配的内存空间大小【6】。【6】A)均为一个字节B)由用户自己定义C)由变量的类型决定D)是任意的2.7C语言的字符型数据在内存中的存储形式是【7】。【7】A)原码B)补码C)反码 D)ASCII码2.8C语言的整型数据在内存中的存储形式是【8】。【8】A)原码B)补码C)反码 D)ASCII码2.9C语言中关于用户变量定义与使用不正确的描述是【9】。【9】A)变量按所定义的类型存放数据 B)系统在编译或在运行程序时为变量分配相应的存储单元C)变量应先定义后使用D)通过类型转换可更改变量存储单元的大小2.10设int类型的数据长度为2个字节,则unsignedint类型数据的取值范围是【10】。【10】A)0至255B)0至65535C)-32768至32767D)-128至1272.11C语言中整数-8在内存中存储的二进制形式是【11】。【11】A)1111111111111000B)1000000000001000C)0000000000001000D)11111111111101112.12以下关于C语言变量的叙述,错误的是【12】。【12】A)变量名必须由字母或下划线开头B)程序中的变量必须在使用之前定义C)不同基本类型的变量之间可以混合运算D)在定义变量的同时不能对变量赋初值2.13在C语言中,合法的整型常数是【13】。【13】A)-0x123B)3.14159C)01001101bD)6.7e102.14下列整数值中,不正确的八进制或十六进制数是【14】。【14】A)0x16B)-016C)081 D)0x3A2.15下列各变量均为整型,其不正确的C语言赋值语句是【15】。【15】 A)i+=++i;B)i=j==k;C)i=j+=i;D)i=j+1=k;2.16设有语句intx=2,y=3;,则表达式x=(y==3)的值为【16】。【16】A)0 B)1C)2D)32.17设有定义:charc;floatf;inti;unsignedu;doubled;,下列各表达式的类型分别为【17】。①u+1②d!=f&&(i+1)③4.0*i+c【17】A)double,double,doubleB)int,double,charC)unsigned,int,doubleD)unsigned,unsigned,int2.18数学关系式x≤y≤z可用C语言的表达式表示为【18】。【18】A)(x<=y)&&(y<=z) B)(x<=y)and(y<=z) C)(x<=y<=z) D)(x<=y)&(y<z)2.19下列c为字符型变量,当且仅当c的值为小写字母时,表达式【19】为真。【19】A)'a'<=c<='z'B)(c>=a)&&(c<=z)C)('a'<=c)&&('z'>=c) D)(c>='a')||(c<='z')2.20若表达式!x的值为1,则表达式【20】的值为1。【20】A)x==0B)x==1C)x=!1D)x!=02.21以下程序段的运行结果为【21】。intk=11,k1=-11;printf("k=%d,k=%o,k=%x\n",k,k,k);printf("k1=%d,k1=%o,k1=%x\n",k1,k1,k1);【21】 A) k=11,k=13,k=bB) k=11,k=11,k=b k1=-11,k1=177765,k1=fff5 k1=-11,k1=-13,k1=-b C) k=11,k=11,k=11D) k=11,k=13,k=bk1=-11,k1=fff5,k1=b k1=-11,k1=-13,k1=b2.22若w、x、y、z均为int型变量,要使下列语句的运行结果为1234+123+12+1,正确输入形式应当是【22】。scanf("%4d+%3d+%2d+%1d",&x,&y,&z,&w);printf("%4d+%3d+%2d+%1d\n",x,y,z,w);【22】A)123412312<回车> B)1234123412341234<回车>C)1234+1234+1234+1234<回车> D)1234+123+12+1<回车>2.23以下程序段的运行结果为【23】。inti=-0123;printf("i=%05d,i=%-5d,i=%u,i=%#X\n",i,i,i,i);【23】 A)i=-0083,i=-83,i=83,i=0XFFADB)i=-0083,i=-83,i=65453,i=0Xffad C)i=-0083,i=-83,i=65453,i=0XFFAD D)i=-0083,i=-83,i=-83,i=ffad2.24C语言的运算符按运算对象的个数可以分为【24】。【24】A)单目运算符一种B)单目和双目运算符C)单目、双目和三目运算符D)单目、双目、三目和四目运算符2.25以下程序运行结果是【25】。main(){intx=1,y=2,z;z=x>y?++x:++y;printf("%d,%d,%d\n",x,y,z);}【25】A)1,2,3B)1,3,3C)2,3,3D)2,2,32.26运行以下程序段时编译出错,其原因是【26】。charc1='a',c2='123';printf("%c,%d\n",c1,c2);【26】A)字符串要用"123"表示 B)'123'只能赋值给字符数组 C)c2是字符变量,不能用%d格式输出D)c2是字符变量,只能赋以字符常量,不能赋以字符串常量2.27若定义floata;,现要从键盘输入a数据,其整数位为3位,小数位为2位,则选用【27】。【27】A)scanf("%6f",&a); B)scanf("%5.2f",a);C)scanf("%6.2f",&a);D)scanf("%f",a);2.28若定义doublet;,则表达式t=1,t+5,++t的值为【28】。【28】 A)1.0 B)2.0C)6.0D)7.02.29已知各变量的类型说明如下,则C语言中错误的表达式是【29】。intk,a,b;unsignedlongw=5;doublex=1.42;【29】A)x%(-3)B)w+=2C)k=(a=2,b=3,a+b)D)a+=a-=(b=4*(a=3))2.30以下程序段的运行结果是【30】。unsigneda=0356,b;b=~a|a<<2+1;printf("%x\n",b);【30】A)ffba B)ff71C)fff8 D)fc022.31以下程序段的运行结果是【31】。inta=0,b=0,c=0;if(a&&++b)c++;printf("%d,%d\n",b,c);【31】A)1,1 B)1,0C)0,0D)0,12.32在下列运算符中,优先级最高的运算符是【32】。【32】A)<= B)+C)!=D)||2.33已知各变量的类型如下,则下列符合C语言语法的表达式是【33】。inti=8,a,b;doublex=1.42,y=5.2;【33】A)a+=a-=(b=4)*(a=3) B)a=a*3=2C)x%(-3) D)y=float(i)2.34若有以下程序段,则z的二进制值是【34】。intx=3,y=6,z;z=x^y<<2;【34】A)0000000000011011B)0000000000010100C)0000000000011000D)00000000000001102.35在C语言中,判定逻辑值为“真”的最正确的叙述是【35】。【35】A)1B)大于0的数 C)非0整数D)非0的数2.3填空题2.36以下程序的功能是将a数据的低4位取反。#include<stdio.h>main(){unsignedchara=0x39,b=【1】;a=a^b;printf("%d\n",a);}2.37以下程序段运行结果是【2】。intz,i=0,j=2;z=i++&&j++;printf("%d,%d,%d\n",i,j,z);2.38运行以下程序段时,由键盘输入:12345#6.789123回车,则运行结果是【3】。floatf1,f2;inti,j;charch;scanf("%3d%d%c%5f%f",&i,&j,&ch,&f1,&f2);printf("%d,%d,%c,%f,%f\n",i,j,ch,f1,f2);2.39运行以下程序段,其结果是【4】。doublex=4.56789;printf("x=%f,x=%8.3f,x=%3.8f,x=%+8.0f,x=%g,x=%e\n",x,x,x,x,x,x);2.40C语言中,标识符可分为三类,它们是【5】。2.41C语言中,整数可用三种进制数表示,它们是【6】。2.42C语言中,char与unsignedchar类型(占1个字节)的变量取值范围分别是【7】。2.43C语言中,int与unsignedint类型(占2个字节)的变量取值范围分别是【8】。2.44C语言中,long与unsignedlong类型(占4个字节)的变量取值范围分别是【9】。2.45C语言中,float类型(占4个字节)的变量取值范围是【10】,其有效位是【11】位。2.46C语言中,double类型(占8个字节)的变量取值范围是【12】,其有效位是【13】位。2.47printf函数的格式化字符串中,格式说明与输出项从左到右的数据类型必须一一匹配,否则将【14】。2.48printf函数的格式化字串中,格式说明与输出项的个数必须相同。如果格式说明的个数少于输出项的个数,则多余的输出项【15】。如果格式说明的个数多于输出项的个数,则对于多余的格式将输出【16】。2.49scanf函数的格式化字符串中,格式说明的类型必须与地址表列中输入项的类型由左至右一一对应匹配。如果类型不匹配,则读入的数据是【17】。2.50使用scanf函数从键盘输入数据时,输入的各数据之间默认用空白字符隔开。C语言中的空白字符是【18】。如果在scanf函数格式化字符串中插入有某个非空白字符,输入数据时应输入一个【19】,形成一一对应关系。2.51scanf函数的地址表列中的输入项是地址,不是变量名,因此普通变量前应加【20】。2.52设有定义语句:inti=3;floatf=456.789;,则表达式1.2+i+'A'+f值的数据类型是【21】。2.53以下程序的运行结果是【22】。#include<stdio.h>main(){inti=5,j=9;floatx=2.3,y=4.5;printf("%8.2f\n",i%(int)(x+y)*j/2/3+y);}2.54若有代数式|yx+lg(x2+1)+3ex+ln(y)|+sin(25°),则正确的C语言表达式是【23】。2.55以下程序的运行结果是【24】。main(){inti=12345;longj=1234567;floatf=12345.67;doubled=12345.678956789;chars[]="Howareyou!";printf("%10d***%-10ld***\n",i,j);printf("%10d***%3ld***\n",-i,j);printf("%-10u***%10x***%10X***%10o***%x***\n",999,999,999,999,-999);printf("%f***,%10.2f***%-10.2f***\n",d,d,d);printf("%10.0f***%8.5f***\n",f,d);printf("%s*%15s*%-15s*%8.3s*%-8.3s*\n",s,s,s,s,s);printf("%8c***%-8c***\n",'A','B');}2.56有如下定义和语句,若要使变量a1、a2、c1、c2的值分别为10、20、'A'、'B',则由键盘正确输入数据的格式是【25】。inta1,a2;charc1,c2;scanf("%d%c",&a1,&c1);scanf("%c%d",&c2,&a2);2.57以下程序输入1.2345.6789<CR>,则程序运行结果为x=1.230000,y=45.678900,请填空完成程序。注:<CR>表示回车。#include<stdio.h>main(){doublex,y;scanf(【26】);printf("x=%f,y=%f\n",x,y);}2.58若有charch;,要判断ch是否是英文字母的表达式是【27】。2.59若有charch;,要判断ch是否是数字字符的表达式是【28】。2.60运算符“<<”、“sizeof”、“&&”、“||”、“^”、“|”按优先级由高到低的排列次序是【29】。2.61在C语言中,运算符“&”作为单目运算符时,表示的是【30】运算;作为双目运算符时,表示的是【31】运算。2.62在C语言中,运算符“*”作为单目运算符时,表示的是【32】运算;作为双目运算符时,表示的是【33】运算。2.63在C语言中,若字符变量ch为大写字母,欲将其转换成小写字母的表达式是【34】。若ch为小写字母,欲将其转换成大写字母的表达式是【35】。2.64若ch为数字字符,欲将其转换成相对应数字的表达式是【36】。2.4编程题2.65编写程序,从键盘输入三个双精度数a、b、c,计算总和、平均值、x=a2+b2+c2的值,并计算x平方根的值。所有运行数据保留三位小数,第四位四舍五入。2.66输入三角形的三个边长,计算并输出三角形的面积。2.67输入两个长整型数,输出它们(整数除的)商和余数。2.68输入两个整数,输出它们(实数除)的商,并输出商的第二位小数位(例如:15/8.0=1.875,1.875的第二位小数位是7)。2.69输入一个(unsigned类型)无符号整数,分别输出它的低四位和高四位。2.70输入两个小写字母分别赋值给字符变量ch1与ch2,将它们转换成大写字母,并交换ch1与ch2的值,最后输出ch1与ch2的值。2.71输入秒数,将它转换,用小时、分钟、秒来表示。例如输入7278秒,则输出:2小时1分18秒。2.72输入两个复数的实部和虚部,输出这两个复数积的实部和虚部。两复数的积按下面的公式计算:(a+bi)·(c+di)=(ac-bd)+(ad+bc)i。2.5实验题2.5.1目的要求1.掌握C语言各类基本数据类型的应用范围及方法。2.熟练掌握printf函数与scanf函数格式说明字符串的使用。3.掌握C语言运算符及表达式的运算机制。2.5.2实验内容1.编写程序,运行C语言中各种基本数据类型占内存的字节数。2.编写程序,完成教材《C语言程序设计与应用教程》表2.8、2.9、2.10、2.11中printf语句的运行功能。3.编写程序,完成教材《C语言程序设计与应用教程》表2.14中scanf语句的输入功能。4.编写程序,例举C语言算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符,增1、减1运算符,类型转换运算符、赋值运算符、逗号运算符及长度运算符的应用,并对运行结果进行分析,从而掌握各类运算符的运算规则、运算优先级和结合方向。2.6参考答案与分析2.6.1选择题2.1答案:D 分析:C语言的简单数据类型(即基本数据类型)包括整型(int、long、unsigned、unsignedlong)、字符型(char、unsignedchar)和实型(float、double、longdouble)。2.2答案:C 分析:C语言中单精度实型数据要用float表示,而不是real。2.3答案:A 分析:用反斜杠“\”开头,后跟规定的单个字符或数字,并用一对单引号括起来是C语言的字符常量表示方法之一。'\\'是反斜杠字符,表示字符“\”。"Hello!"是字符串常量,a是一个标识符,不是常量。2.4答案:B分析:答案A中包含了C语言的关键字if,是错误的。答案C中5_abc以数字打头,是错误的。答案DA#B中包含了“#”非法字符,也是错误的。2.5答案:B分析:C语言中的关键字均由小写字母和下划线组成,大小写字母是有区别的,Double、Char均含有大写字母,是错误的。integer是Pascal语言中的整型数据类型。只有unsigned才是C语言的无符号整型数据类型,是C语言的关键字。2.6答案:C分析:在C语言中变量必须先定义才能使用。变量一经定义数据类型,计算机系统就会给该变量分配相应的存储空间,以便存放变量的值。因此C语言中,变量所分配的内存空间大小是由变量的类型决定的。2.7答案:D分析:C语言中,字符型数据在内存中的存储形式是以ASCII码值表示的。2.8答案:B分析:C语言中,整型数据在内存中的存储形式是以补码表示的。2.9答案:D 分析:类型转换只能改变表达式值的类型,不能改变变量存储单元的大小。2.10答案:B分析:int类型的数据长度为2个字节,则数据的取值范围是-32768至32767;unsignedint类型数据长度也为2个字节,由于是无符号数,数据的最高位不用于表示符号位,而是数值位。因此,unsignedint类型数据的取值范围是0至65535。2.11答案:A分析:-8是int类型,int类型的数据长度为2个字节。-8的原码为1000000000001000,反码为1111111111110111,加1后的补码表示成1111111111111000。2.12答案:D分析:定义变量时,在变量之后加“=常量”,可以对该变量初始化。2.13答案:A分析:答案B和D是实型常数,答案C是非法常数,只有答案A是整型常数。2.14答案:C分析:八进制整数中不能包含8、9这两个数字。2.15答案:D分析:j+1是表达式,不能被赋值。2.16答案:B分析:y==3是一个关系表达式,当y的值为3时,其表达式为真,值为1,该值赋给x。2.17答案:C分析:同类型的数值型数据进行混合运算时,先要把低数据类型向高数据类型转换,成为同一类型后才进行运算。其中=2\*GB3②是关系、逻辑表达式,得1或0均为int型。2.18答案:A分析:数学上的关系式x≤y≤z,在C语言中不能用关系表达式x<=y<=z来表示,只能用C语言的逻辑表达式x<=y&&y<=z来表示。2.19答案:C分析:当表达式('a'<=c)&&('z'>=c)值为真时,变量c的值一定是小写字母。2.20答案:A分析:若表达式!x的值为1,变量x的值一定为0,因此A为正确答案。2.21答案:A分析:十进制数11,分别用十进制、八进制、十六进制表示为:11、13、b。十进制数-11,分别用十进制、无符号十进制数、无符号十六进制表示为:-11、177767、fff5。2.22答案:D分析:scanf函数格式化字符串中,输入的各数据之间默认用空白字符(空格键、回车键Enter或制表键Tab)隔开。如果在格式化字符串中插入某个非空白字符如“+”,输入数据时应输入一个该非空白字符“+”,形成一一对应关系。2.23答案:C分析:使用printf函数输出时,在格式化字符串的“%”号和格式字符之间插入一个“0”,若指定了输出宽度,则数据前面的多余空格处填以数字0。若要在输出的八进制数加前导0,在输出的十六进制数加前导0x,可在“%”号和格式字符o和x之间插入一个“#”号。格式输出字符%x与%X用于无符号整数以十六进制整数输出,x用于输出十六进制中的abcdef,X用于输出十六进制中的ABCDEF。2.24答案:C分析:C语言有单目运算符、双目运算符、三目运算符三种运算符。2.25答案:B 分析:执行语句组intx=1,y=2,z;z=x>y?++x:++y;时,关系表达式x>y的值为0,则执行表达式++y,表达式++x不被执行,因此,x、y、z的值分别为1、3、3。2.26答案:D 分析:字符变量只能赋以字符常量值,而'123'是非法的字符常量。2.27答案:A 分析:在scanf函数中,不能指定实型数据小数位的宽度。这一点与printf函数不同,应特别注意不要混淆。2.28答案:B 分析:表达式t=1,t+5,++t是一个逗号表达式,其结合方向是从左到右,先求解表达式t=1使变量t的值为1,再求解表达式t+5,最后求解表达式++t,因此t的值为2.0。2.29答案:A分析:实型变量x不能用于取模运算。2.30答案:B分析:语句b=~a|a<<2+1;相当于语句b=(~a)|(a<<(2+1));。按位取反运算符“~”优先级最高,先计算(~a);其次是双目算术运算符“+”,计算2+1;接着是左移位运算符“<<”,计算a<<3;然后位运算符“|”;最后是赋值运算符“=”。2.31答案:C分析:求解表达式(a&&++b)时,由于变量a的值为0,这时系统可以确定逻辑表达式0&&++b的值必定是0,因此,不再对表达式++b、c++求值,变量b、c的值不变,仍为0。2.32答案:B分析:按运算符优先级由高到低的次序是“+”、“<=”、“!=”、“||”。2.33答案:A分析:答案Ba*3=2对表达式赋值,是非法的。答案C实型变量x不能用于取模运算,也是非法的。强制类型转换正确的用法是y=(float)(i),答案D数据类型float没加括号,是非法的。2.34答案:A分析:先进行位移运算,再按位异或运算。2.35答案:D分析:C语言在求解逻辑表达式、关系表达式的值时,数字1代表“真”,数字0代表“假”。但在判定一个表达式是否为“真”时,以0代表“假”,以非0代表“真”。2.6.2填空题2.36答案:【1】15或0xf或017(其中x、f大小写均正确)分析:若要将数x的某些位n1、n2…取反,只要取一数y,置y的相应位n1、n2…为1,其余位置0,并让数x与数y进行位异或运算,所得结果即是将数x的位n1、n2…取反。2.37答案:【2】1,2,0分析:本题是逻辑表达式的“不完全计算问题”,见2.32题。2.38答案:【3】123,45,#,6.789000,123.000000分析:scanf函数输入数据的实际宽度是由输入数据的结束标志决定的,在读入某数据项时,遇到结束标志就完成该数据项读入。结束标志有三种:①空白字符,空格键、回车键或制表键(Tab)。②宽度m,格式字符前可用一个整数m指定输入数据所占宽度,此时输入数据的宽度不能大于m。③非法字符,由于非法字符的存在,构成了不正确的C常量。2.39答案:【4】x=4.567890,x=4.568,x=4.56789000,x=+5,x=4.56789,x=4.56789e+002.40答案:【5】关键字、预定义标识符、用户定义标识符2.41答案:【6】十进制、八进制、十六进制分析:十进制整数由不是以数字0开头的整数组成,可以由数字0至数字9组成;八进制整数由数字0开头的整数组成,只能由数字0至数字7组成;十六进制整数由数字0和字母x(或X)开头的数组成,可以由数字0至数字9、字母a至字母f或字母A至字母F组成。三种表示方式的均前面可加正号“+”或负号“-”。2.42答案:【7】-128~127与0~255分析:因为char是有符号位的,8位中最高位表示符号位,其最小值为10000000,取反(11111111)加1得,最高位处有两个1,一个表示符号“-”,另一个是数值1即27,得-128。2.43答案:【8】-32768~32767与0~65536分析:同上类推。2.44答案:【9】-2147483648~2147483647与0~4294967295分析:同上类推。2.45答案:【10】3.4×10-38~3.4×1038【11】7~8 分析:C语言规定。2.46答案:【12】1.7×10-308~1.7×10308【13】15~16分析:C语言规定。2.47答案:【14】输出错误结果 分析:略。2.48答案:【15】不予输出 【16】不确定值分析:略。2.49答案:【17】不正确的数据 分析:略。2.50答案:【18】空格键、回车键(Enter键)和制表键(Tab键)【19】与该非空白字符相同的字符 分析:C语言规定。2.51答案:【20】&分析:scanf函数的地址表列中的输入项是地址,不是变量名,因此普通变量前应加地址操作符“&”。但是对于字符串数组或字符串指针变量,其变量名本身就是地址,不需要在它们前面加“&”地址操作符。2.52答案:【21】double分析:C语言中,不同类型的数值型数据进行混合运算时,先要把低数据类型向高数据类型转换,成为同一类型后才进行运算。在计算表达式1.2+i+'A'+f时,先把整型变量i的值3转换成double型数据后,与1.2相加,值为double类型的数据;然后把字符'A'转换成65.0(double型数据),再进行相加运算;最后把单精度实型变量f的值也转换成double类型,与前面的结果相加,结果为double类型的数据。2.53答案:【22】11.50 分析:%、*、/的优先级相同,从左到右进行计算。2.54答案:【23】fabs(pow(y,x)+lg10(x*x+1)+3*exp(x)+lg(y))+sin(25*3.14159/180)分析:C语言中数学函数的写法。2.55答案:【24】12345***1234567***-12345***1234567***999***3e7***3E7***1747***fc19***12345.678957***,12345.68***12345.68***
12346***12345.67896***Howareyou!*Howareyou!*Howareyou!*How*How*A***B***分析:输出格式规定。2.56答案:【25】10AB20回车分析:输入格式规定。2.57答案:【26】"%4lf%lf",&x,&y分析:在scanf函数中,可以指定输入的实型数据总宽度,但不能指定实型数据小数位的宽度。应特别注意,对于double类型的变量,scanf函数输入格式说明中的长度修饰符“l”不能省略,否则将接收到错误的数据。但使用printf函数输出double类型的数据时,输出格式说明中的长度修饰符“l”可以省略。2.58答案:【27】('A'<=ch)&&(ch<='Z')||('a'<=ch)&&(ch<='z')分析:考虑字母的大小写。2.59答案:【28】('0'<=ch)&&(ch<='9')或(48<=ch)&&(ch<=57)分析:'0'~'9'的ASCII值为48~57。2.60答案:【29】“sizeof”、“<<”、“^”、“|”、“&&”、“||”分析:见《C语言程序设计与应用教程》附录E。2.61答案:【30】取地址【31】按位与 分析:C语言语法规定。2.62答案:【32】指针(或间接取值)【33】乘法 分析:C语言语法规定。2.63答案:【34】ch+'a'-'A'(或ch+32)【35】ch-('a'-'A')(或ch-32)分析:大小写字母之间ASCII值相差32。2.64答案:【36】ch-'0'或ch-48 分析:略。2.6.3编程题2.65参考答案:#include<stdio.h>#include<math.h>main(){doublea,b,c,total,average,square,squareroot;printf("请输入三个双精度实数:");scanf("%lf%lf%lf",&a,&b,&c);total=a+b+c;average=total/3.0;square=a*a+b*b+c*c;squareroot=sqrt(square);printf("三个数的和=%-15.3f,三个数的平均值=%-15.3f\n",total,average);printf("三个数的平方和x=%.3f,x的平方根=%.3f\n",square,squareroot);}运行结果:请输入三个双精度实数:1.234.567.89三个数的和=13.680,三个数的平均值=4.560三个数的平方和x=84.559,x的平方根=9.1962.66参考答案:#include<stdio.h>#include<math.h>main(){floata,b,c,k,area;printf("请输入三角形三条边的边长:");scanf("%f%f%f",&a,&b,&c);/*由键盘输入三角形三边边长*/if((a+b<=c)||(a+c<=b)||(b+c<=a)){printf("您输入的三条边无法构成三角形。\n");exit(1);/*结束程序*/}k=(a+b+c)/2;area=sqrt(k*(k-a)*(k-b)*(k-c));/*函数sqrt(x)是求x的平方根*/printf("该三角形的面积是%6.2f\n",area);}运行结果:请输入三角形三条边的边长:3.45.67.4该三角形的面积是9.052.67参考答案:main(){longa1,a2,a3,a4;printf("请输入两个整数:");scanf("%ld%ld",&a1,&a2);a3=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025土豆销售合同
- 2024年版:解除婚姻关系补充协议书
- 2025版SPF猪饲养与疫病防控一体化服务合同3篇
- 2025林权转让合同模版
- 2025版集体用地租赁合同范本(含土地用途限制)2篇
- 二零二五年度1号金融资产转让及代持风险控制合同3篇
- 2024年高端设备租赁场地服务合同3篇
- 2025年智能门禁监控系统安装与售后服务合同样本3篇
- 2024年跨国物流与供应链管理协议
- 2024年门窗安装工程保险合同
- 图书馆管理系统答辩
- 先天性心脏病封堵术护理
- 2024北京初三(上)期末语文汇编:记叙文阅读
- 三级安全教育试题(公司级、部门级、班组级)
- 2024年金融工作会议
- 2024年人教版八年级生物上册期末考试卷(附答案)
- 2024年叉车租赁合同经典版(四篇)
- 环保工程施工安全检查表
- 人教版五年级上册数学期末考试试卷含答案
- 小学科学青岛版(六三制)六年级上册全册教案(共25课)(2022秋)
- 2024焊接工艺规程
评论
0/150
提交评论