当前位置:文档之家› C语言程序设计期末考试样卷

C语言程序设计期末考试样卷

2008年C语言程序设计期末考试样卷一、填空题1、C语言程序从函数开始执行。

2、关系运算的结果得一个整数值:或者。

3、已知int a[ ]={0,1,2,3,4,5}; ,则它的最大下标是。

4、结构化程序的3种基本结构是,和。

5、若a1和a2都是double型变量,且a1的初值为3.0,a2的初值为2.0,则表达式pow(a2,fabs(a1))的值为。

6、表达式“8.2-2/3”的计算结果是。

7、若有定义:int a=25, b=14, c=19; 则表达式(a=b<c?(a>b?c:d):c)的值是。

8、设有以下结构体定义struct emp{ char name[8];int age;char sex;}staff;则用户定义的结构体类型名为。

9、表达式5>3&&2||8<4-!1的值。

10、已知int a[10]; ,则a占用内存个字节的存储单元,代表他们的首地址是。

11、将str定义为字符数组并初始化为“Lei”的语句是。

12、设有定义:int n, *k=&n; ,以下语句利用指针变量k读写变量n中的内容,请将下列语句补充完整。

scanf(“%d”, ); printf(“%d\n”, );13、设y是int型变量,请写出判断y为奇数的关系表达式:。

14、设有以下变量定义,并已赋确定值char w; int x; float y; double z;则表达式w*x+z-y所求得的数据类型为。

15、设i、j、k均为int型变量,则执行完下面的for循环后,k的值为。

for(i=0, j=10; i<=j; i++, j--) k=i+j;16、语句:x++; ++x; x=x+1; x=1+x; 执行后都使变量x中的值增1,请写出一条相同功能的赋值语句(不得与列举的相同):。

17、设a,b,c均为整型数,且a=1,b=2,c=3,则语句a-=a+(++b)+(c--);被执行后a的值是。

18、若有定义“int a[2][3] = {1,3,5,7,9,11}; ”则a[1][0]的值是,*(*(a +1)+2))的值是。

19、设X为int型变量,请写出描述“X是偶数”的表达式是:。

20、C语言提供的三种逻辑运算符是、和!;二、选择题(1) 以下非法的赋值语句是A) n=(i=2,++i); B)j++; C) ++(i+1); D)x=j>0;(2) 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是A)6.500000 B)6 C) 5.500000 D) 6.000000(3) 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是A) scanf(“%2d%2d%2d”,&i,&j,&k);B) scanf(“%d %d %d”,&i,&j,&k);C) scanf(“%d,%d,%d”,&i,&j,&k);D) scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);(4) 设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是A)printf(“x=%d\n”,x); B) printf(“x=%1d\n”,x);C)printf(“x=%8dL\n”,x); D)printf(“x=%LD\n”,x);(5) 若有以下程序:main(){int k=2,i=2,m;m=(k+=i*=k);printf(“%d,%d\n”,m,i);}执行后的输出结果是A) 8,6 B) 8,3 C) 6,4 D) 7,4(6) 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是A) 6B) 0C) 2D) 1(7) 若有以下说明和定义typedef int *INTEGER;INTEGER p,*q;以下叙述正确的是A) P是int型变量B) p是基类型为int的指针变量C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名(8) 以下选项中,与k=n++完全等价的表达式是A) k=n,n=n+1 B) n=n+1,k=n C) k=++n D) k+=n+1(9) 有以下程序段int n=0,p;do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3);此处do—while循环的结束条件是A) P的值不等于12345并且n的值小于3B) P的值等于12345并且n的值大于等于3C) P的值不等于12345或者n的值小于3D) P的值等于12345或者n的值大于等于3(10) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是A) p=q; B) *p=*q; C) n=*q; D) p=n;(11) 设有如下定义:struck skfloat b;}data;int *p;若要使P指向data中的a域,正确的赋值语句是A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a;(12) 有以下程序int f(int n){ if (n==1) return 1;else return f(n-1)+1;}main(){ int i,j=0;for(i=1;i<3;i++) j+=f(i);printf(“%d\n”,j);}程序运行后的输出结果是A) 4 B) 3 C) 2 D) 1(13) 有以下程序main(){ char a[ ]={‘a’,‘b’,‘c’,‘d’, ‘e’, ‘f’, ‘g’,‘h’,‘\0’}; int i,j;i=sizeof(a); j=strlen(a);printf(“%d,%d\n”,i,j);}程序运行后的输出结果是A)9,9 B)8,9 C)1,8 D)9,8(14) 有以下程序#include <string.h>main(){ char *p=“abcde\Ofghjik\0”;printf(“%d\n”,strlen(p));}程序运行后的输出结果是A) 12 B) 15 C) 6 D) 5(15) 有以下程序int fa(int x){ return x*x; }int fb(int x){ return x*x*x; }int f(int (*f1)(int x),int (*f2)(int x),int x){ return f2(x)-f1(x); }main()i=f(fa,fb,2); printf(“%d\n”,i);}程序运行后的输出结果是A) -4 B) 1 C) 4 D) 8(16) 有以下程序int a=3;main(){ int s=0;{ int a=5; s+=a++; }s+=a++;printf(“%d\n”,s);}程序运行后的输出结果是A) 8 B) 10 C) 7 D) 1117、C语言规定,函数返回值的类型由所决定。

A、return语句中的表达式类型B、调用该函数时的主调函数类型C、调用该函数时的形象参数D、在定义该函数时所指定的函数类型18、语句int (*ptr)( ): 的含义是。

A、ptr是指向一维数组的指针变量B、ptr是指向int型数据的指针变量C、ptr是指向函数的指针,该函数返回一个int型数据D、ptr是一个函数名,该函数的返回值是指向int型数据的指针19、若有语句组typedef int AR[5]; AR a; 则以下叙述中正确的是。

A、a是一个新类型B、a是一个整型变量C、a是一个结构变量D、a是一个数组名20、在定义一个共用体变量时,系统分配给它的内存是。

A. 结构体最后一个成员所需内存B. 各成员所需内存量的总和C. 结构体中第一个成员所需内存量D. 成员中占内存量最大者所需的容量21、以下四个运算符,按优先级由高到底的排列顺序是。

A、 /、=、==、!B、!、/、=、==C、!、/、==、=D、 /、!、==、=22、若有定义:int a[10], *p=a; 则*(p+5)表示。

A、数组元素a[5]的地址B、数组元素a[5]的值C、数组元素a[6]的地址D、数组元素a[6]的值23、以下正确的描述是。

A、函数的定义可以嵌套,但函数的调用不可以嵌套B、函数的定义不可以嵌套,但函数的调用可以嵌套C、函数的定义和函数的调用均不可以嵌套D、函数的定义和函数的调用均可以嵌套24、若w、x、y、z、k均为int类型变量,则执行下面语句后的k的值是。

w=1; x=2; y=3; z=4;k=(w<x)?w:x;k=(k<y)?k:y;k=(k<z)?k:z;A、1B、2C、3D、425、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与。

A、缩排位置相同的if配对B、其之前最近且不带else的if配对C、其之前最近的if配对D、第一个if配对三、完成程序1、下列程序打印出1000以内的所有“完全数”。

“完全数”是指一个正整数,其所有小于该数的因子之和等于该数本身。

例如:6=1+2+3,又如:28=1+2+4+7+14#include<stdio.h>void main(){ int i,j,s;for(j=2; j<=1000; j++){ s=0;for(i=1; i<j; i++)if( ) s+=i;if( ) printf(“%4d”,j);}}2、求一个3×3的整型矩阵主对角线元素之和#include<stdio.h>void main(){ int a[3][3],sum=0;int i,j;printf(“enter data:\n”);for(i=0; i<3; i++)for(j=0; j<3; j++)scanf(“%d”, &a[i][j] );for(i=0; i<3; i++)sum+=a[i][i] ;printf(“sum=%6d\n”,sum);}3、输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。

请填空。

main( ){ char ch1;scanf("%c", ch1);if ( ch1>='A' && ch1<='Z' )ch1=ch1+32;else if (ch1>='a' && ch1<='z')ch1=ch1-32 ;printf("%c", ch1);}四、编程题1、从键盘上输入任意一些整数,统计正数的个数及其和,负数的个数其和,以及零的个数,直到值为999时结束。

相关主题