C语言程序设计试卷 一、单项选择题(每题1分,共20分) 1。C语言规定:在一个源程序中,main函数的位置()。 A。必须在最开始 B。必须在系统调用的库函数的后面 C。可以任意 D。必须在最后 2。下面四个选项中,均是合法浮点数的选项是()。 A。1e15e9。403e2 B。。6012e48e5 C。123e1。2e。42e1 D。e3。8e45。e0 3。若a14,b3,则条件表达式ab?a:b1的值为()。 A。14B。13C。3D。4 4。已知:intn,i1,j2;执行语句nij?i:j;则i和j的值是()。 A。1,2B。1,3C。2,2D。2,3 5。为了判断两个字符串s1和s2是否相等,应当使用() A。if(s1s2)B。if(s1s2) C。if(strcmp(s1,s2)) D。if(strcmp(s1,s2)0) 6。以下正确的描述是()。 A。函数的定义可以嵌套,但函数的调用不可以嵌套。 B。函数的定义不可以嵌套,但函数的调用可以嵌套。 C。函数的定义和函数的调用均不可以嵌套。 D。函数的定义和函数的调用均可以嵌套。 7。在C语言中,下面对函数不正确的描述是()。 A。当用数组名作形参时,形参数组值的改变可以使实参数组之值相应改变。 B。允许函数递归调用。 C。函数形参的作用范围只是局限于所定义的函数内。 D。子函数必须位于主函数之前。 8。如果在一个函数中的复合语句中定义了一个变量,则以下正确的说法是()。 A。该变量只在该复合语句中有效 B。该变量在该函数中有效 C。该变量在本程序范围内均有效 D。该变量为非法变量 9。以下正确的函数形式是()。 A。doublefun(intx,inty){} B。fun(intx,y){} C。fun(x,y){intx,y;} D。doublefun(intx,inty){} 10。以下程序的输出结果是()。 includestdio。h defineF(y)8。19y definePRINT(a)printf(d,(int)(a)) voidmain(void) { intx2; PRINT(xF(3)); } A。10B。13C。11D。报错 11。以下程序中编译和运行结果均正确的一个是()。 A。A。voidmain(void) { union { }comm{1}; printf(d,comm。n); } B。B。voidmain(void) { union { }comm{12。5}; printf(f,comm。x); } C。C。voidmain(void) { union { }comm{12。5} printf(f,comm。x); } D。D。voidmain(void) { union { }comm5; printf(d,comm。n); } 12。设有定义:inta1,floatb2。0;charcA;以下不合法的运算是()。 A。p;B。a;C。b;D。c; 13。以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()。 main() { intp,q,a,b; printf(inputa:); scanf(d,p); } A。p表示的是指针变量p的地址 B。p表示的是变量a的值,而不是变量a的地址 C。p表示的是指针变量p的值 D。p只能用来说明p是一个指针变量 14。若num、a、b和c都是int型变量,则执行表达式num(a4,b16,c32);后num的值为()。 A。4B。16C。32D。52 15。已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是(),(注:表示空格) intal,a2,charc1,c2; scanf(dcdc,a1,c1,a2,c2); A。10A20BB。10A20BC。10A20BD。10A20B 16。若有说明:inta〔10〕;则对a数组元素的正确引用是()。 A。a〔10〕B。a〔3。5〕C。a〔53〕D。a〔1〕 17。在C语言中,一维数组的定义方式为: 类型说明符数组名(); A。〔整型常量表达式〕B。〔表达式〕 C。〔整型常量〕D。〔整型表达式〕 18。以下能对一维数组a进行正确初始化的语句是()。 A。ina〔10〕(0,0。0,0,0); B。inta〔10〕{};C。inta〔〕{0}; D。inta〔10〕{101}; 19。以下程序段()。 x1; do { } while(!x); A。是死循环B。循环执行二次 C。循环执行一次D。有语法错误 20。以下关于dowhile循环的不正确描述是()。 A。dowhile的循环体至少执行一次 B。dowhile循环由do开始,用while结束,在while(表达式)后面不能写分号 C。在dowhile循环体中,一定要有能使while后面表达式的值变为零(假)的操作 D。dowhile的循环体可以是复合语句 二、是非判断题(每题1分,共15分) 1。C语言规定,标识符中的字母一般区分大、小写。 2。控制台标准输入设备一般是指键盘。 3。使用while和dowhile循环时,循环变量初始化的操作应在循环语句之前处理。 4。循环体中continue语句的作用是结束整个循环的执行。 5。关系表达式的值是0或1。 6。若有说明:inta〔3〕〔4〕{0},则只有元素a〔0〕〔0〕可得到初值0。 7。字符串作为一维数组存放在内存中。 8。字符数组中的一个元素存放一个字符。 9。字符数组中的最后一个字符必须是。 10。形参为指针变量时,实参必须是数组名。 11。用数组名作函数参数时传递的是数组的值。 12。全局变量可以被任何一个函数中的任何一个表达式使用。 13。一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据。 14。表达式i与i在任何场合功能完全相同。 15。在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同。 三、多项选择题(每题1分,共5分) 1。若要求在if后一对圆跨括号中表示a不等于0的关系,则不能正确表示这一关系 的表达式为()。 Aa0 B!a Ca0 Da Ea!0 2。选出所有合法的常量()。 A3e22。5 Be3 C。1e1 DBASIC E45 F0fd G0xfdaL He8 I J 3。以下关于函数原型说法错误的是:() (1)对变量的定义和声明是一回事,对函数的定义和声明也是一回事。 (2)在声明函数原型时,允许只写出参数的类型,而不必写出参数的名称。 (3)如果在定义函数时不指定函数类型,系统会隐含指定函数类型为int型。 (4)调用一个函数时,函数名、实参个数、实参类型必须与函数原型一致。 (5)如果被调函数的定义出现在主调函数之前,可以不必加以声明。 (6)所有的函数之间可以互相调用。 (7)在C语言中,所有函数都是平行的,一个函数不能从属于另一个函数,即不能嵌套定义的。 (8)如果函数没有返回值,在定义时可以省略函数类型。 (9)在C语言中,任何函数的定义都不允许为空。 (10)C语言规定,实参变量对形参变量的数据传递是值传递。 4。请从下面关于指针的叙述中,选出5个正确的叙述。 (1)指针即地址。 (2)指针须先赋值后使用。 (3)当指针p指向数组a的首址后,由于p〔i〕和a〔i〕都能引用数组元素,所以这里p和a是等价的。 (4)intp表示定义了一个指向int类型数据的指针变量p。 (5)数组的指针是指数组的起始地址。 (6)若有定义inta〔4〕,pa,则p后p指向数组a所占内存的第二个字节。 (7)使用指针变量作函数参数采取的是值传递的方式。 (8)相同类型的指针可以进行减法运算。 (9)指针变量和许多变量一样可以进行四则运算。 (10)指针p指向数组元素a〔2〕,若要其指向a〔4〕,执行pp2即可。 5。以下关于数组的叙述中,5个最确切的说法是: (1)在声明一个数组变量时必须指定大小。 (2)必须用常量表达式来说明一个数组变量的大小。 (3)在对数组进行初始化时大括号中的数据个数必须和数组的大小相同。 (4)有变量定义inta〔3〕{0,1,2},b〔3〕;,可以用ba,使数组b的每个元素和a的每个元素相等。 (5)在C语言中,可以将字符串作为字符数组来处理。 (6)定义了字符数组charc〔11〕;为了给它赋值,可以用。 (7)如果有chars〔15〕{Iamastudent};,则strlen(s)的值为6。 (8)C语言中,二维数组中元素排列的顺序是:按行存放。 (9)在C语言中,不能对局部的数组变量进行初始化。 (10)在声明时对数组进行进行初始化必须指定数组大小。 四、程序运行结果题(每题4分,共20分) 1。(4分) 下面程序的运行结果是()。 includestdio。h voidmain(void) { chara〔〕Time,b〔〕T for(i0;a〔i〕!b〔i〕!;i) if(a〔i〕b〔i〕) if(a〔i〕aa〔i〕z)printf(c,a〔i〕32); elseprintf(c,a〔i〕32); elseprintf(); } 2。(4分) 下面程序段的运行结果是()。 i1;s3 do { if(s70) }whlie(s15); printf(d,i); 3。(4分) 若运行时输入:5999,则以下程序的运行结果(保留小数点后一位)是()。 voidmain(void) { scanf(d,x); if(x0x2999)y180。12x; if(x3000x5999)y360。6x; if(x6000x10000)y540。3x; printf(6。1f,y); } 4。(4分) 以下程序的运行结果是()。 voidmain(void) { inta1,k; for(k0;k3;k)printf(4d,f1(a)) } intf1(intx) { staticintz3,y0; y; z; return(xyz); } 5。(4分) 以下程序的功能是计算函数F(x,y,z)(xy)(xy)(zy)(zy)的值,请选择填空。 includestdio,h includemath。h floatfun1(float,float); voidmain(void) { floatx,y,z, scanf(ff,x,y,z); sumfun1()fun1(); printf(sumf,sum); } floatfun1(floata,floatb) { } 五、程序填空题(每题2分,共20分) 1。下面程序的功能是用公式:61(11)1(22)1(33)。。。。。。 求的近似值,直到最后一项的值小于10e6为止。 includestdio。h includemath。h voidmain(void) { longi1; ;pi0; while(ii10e6){i;} pisqrt(6。0pi); printf(pi10。6f,pi); } 2。下面程序的功能是把以下给定的字符按其矩阵格式读入数组str1中,并输出行列号之和是3的数组元素。 voidmain(void) { charstr1〔4〕〔3〕{A,b,C,d,E,f,G,h,I,j,K,i }; intx,y,z; for(x0;x4;x) for(y0;;y) { if()printf(c,str1〔x〕〔y〕); } } 3。以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。 递归公式如下: age(1)10 age(n)age(n1)2(n1) includestdio。h intage(intn) { if(n1)c10; } 4。以下程序的功能是判断输入的年份是否是闰年。 voidmain(void) { intyear, scanf(d,year); if(year4000)yes1; elseif()yes1; if(yes)printf(dis,year); elseprintf(disnot,year); printf(aleapyear。); } 5。以下程序实现:输入三个整数,按从大到小的顺序进行输出。 voidmain(void) { intx,y,z,c; scanf(ddd,x,y,z); if(){} if(){} if(){} printf(d,d,d,x,y,z); } 六、填空题(每题1分,共20分) 1。在C语言中,一个float型数据在内存中所占的字节数为()个字节;一个double型数据在内存中所占的字节数为()个字节。 2。若有定义:charc10;则变量C中包含的字符个数为()。 3。C源程序的基本单位是()。 4。在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为(); 一个int型数据在内存中所占的字节数为()。 5。已有定义: floatn,k; charchl,ch2; 为使m3,n6。5,k12。6,ch1a,ch2A,输入数据的格式为: 36。512。6aA 则对应的scanf语句是();。 6。执行下面的程序片段后,x的值是()。 i10;i; 7。设a、b、c均是int型变量,则执行以下for循环后,c的值为()。 for(a1,b5;a) 8。以下dowhile语句中循环体的执行次数是()。 a10; b0; do{b2;a2b;}while(a0); 9。设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是()。 for(x0,y0;y!123x3;x) scanf(d,y); 10。若有以下定义和语句: intp〔3〕,a〔9〕,i; for(i0;i3;i)p〔i〕a〔3i〕; 则p〔0〕引用的是数组元素();(p〔1〕1)引用的是数组元素()。 11。设a3,b4,c5,则表达式abcbc的值是()。 12。进行逻辑与运算的运算符是()。 13。若a6,b4,c2,则表达式!(ab)c1bc2的值是()。 14。下面程序片段中循环体的执行次数是()次。 for(i1,s0;i11;i2) 15。若有以下定义和语句: inta〔4〕{0,1,2,3},p; pa〔2〕; 则p的值是()。 16。执行以下程序段后,s的值是() inta〔〕{5,3,7,2,1,5,3,10},s0,k; for(k0;k8;k2) s(ak); 17。执行以下程序段后,m的值是() inta〔〕{7,4,6,3,10},m,k, m10; ptra〔0〕; for(k0;k5;k2) m((ptrk)m)?(ptrk):m; 答案: 一、单项选择题(20分) 1。5。CBACD6。10。BDADB 11。15。CABCC16。20。CACCB 二、是非判断题(15分) 三、多项选择题(5分) 1。ABC2。CEGIJ3。ADFHI4。ABDEH5。BEGHI 四、程序运行结果题(20分) 1。tM 2。8 3。3635。4 4。6810 5。zy,zyxy,xy 五、程序填空题(20分) 1。doublepi1。0(ii) 2。y3。age(n1)2 4。year40yeaar100!0yes0 5。zyzxyx 六、填空题(20分) 1。4四8八 2。11个 3。函数 4。1一2二 5。scanf(dffcc,m,n,k,ch1,ch2) 6。12 7。10 8。3。。9。3。。10。a〔0〕a〔4〕 11。112。13。1。14。5 15。1 16。16 17。6