题目
一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.C语言的保留字是( B ) A. define B. enum C. main D. include 2.错误的实型(浮点型)常数是( D ) A. .0 B. 0.E0 C. 0.0 D.0E+0.0 3.无条件转移语句的一般形式是:goto语句标号[1];,其中的语句标号可以是( B ) A.整型数 B.标识符[2] C.保留字 D.实型数 4.设int a;,则表达式a=2,4,a+1的值是( C ) A.1 B.2 C.3 D.4 5.设int i; float f; double d; long int e;,则表达式10+'a'+i*f-d/e结果的类型是( A ) A. double B.long C. int D. float 6.设int a;,则语句for(a=0;a= =0;a++);和语句for(a=0;a=0;a++);执行循环的次数分别是( C ) A.0,0 B.0,1 C.1,0 D.1,1 7.if(表达式)和while(表达式)中的“表达式”( D ) A.只能是逻辑的 B.只能是关系的 C.只能是算术的 D.以上三种都可以 8.设int a=0,b=0,m=0,n=0;,则执行(m=a= =b)||(n=b= =a)后m和n的值分别是( C ) A.0,0 B.0,1 C.1,0 D.1,1 9.设int a,b;为使变量a和b分别获得数据10和20,则下列正确的是( A ) A.scanf("%d,%d",&a,&b);输入数据:10,20 B.scanf("%d,%d",&a,&b);输入数据:10 20 C.scanf("%d,%d",&a,&b);输入数据:a=10,b=20 D.scanf("%d,%d",a,b);输入数据:10,20 10.对于函数,正确的说法是( B ) A.可以嵌套定义 B.定义时有些函数名前可以带星号 C.必须有返回语句 D.必须有形式参数[3] 11.设int a[3][4]; ,则与元素a[0][0]不等价的表达形式是( B ) A.*a B.* *a C.*a[0] D.*(*(a+0)+0) 12.设char s1[]=('a','b','c'),s2[]="abc"; ,则数组s1和s2的长度分别是( C ) A.2,3 B.3,3 C.3,4 D.4,4 13.设int(*p)( );,则p是( B ) A.一维数组的指针变量 B.函数的指针变量 C.二级指针变量 D.字符串的指针变量 14.在C语言中,若定义函数时类型缺省,则类型隐含为( A ) A. int B. char C. float D. void 15.设char ch,str[4],*strp;,则正确的赋值语句[4]是( C ) A. ch="MBA"; B. str="MBA"; C. strp="MBA"; D. *strp="MBA"; 16.设typedef char *POINT; POINT p,q[3],*r;,则p、q和r分别是字符型的( D ) A.变量、一维数组和指针变量 B.变量、二维数组和指针变量 C.指针变量、一维数组指针和二级指针变量 D.指针变量、一维指针数组和二级指针变量 17.若变量定义时未初始化,则其值不确定的是( B ) A.静态全局变量[5] B.局部变量[6] C.静态局部变量 D.全局变量 18.设struct(int a; char b;)Q,*p=&Q; ,则错误的表达式是( A ) A. *p.b B. (*p).b C. Q.a D. p->a 19.在某文件中,若全局变量与局部变量同名,则( D ) A.视为同一个变量 B.变量作用域[7]不确定 C.不允许 D.允许 20.设宏定义#define P(x) x/x 则执行语句printf("%dn",P(4+6));后的输出结果是( C ) A.1 B.8.5 C.11 D.11.5 二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。 21.在C语言中,预处理功能主要包括:宏定义、文件包含和条件编译。 22.表达式4&5-3&&5的值是0。 23.设int j=5;,则执行语句j+=j-=j*j;后j的值是-40。 24.设int a,b=2,c=3;执行表达式a=(b>c)?(b+1):(c+2),3 后a的值是5。 25.设int a[3][2]=(2,4,6,8,10);则*(a[1]+1)的值是8。 26.在C语言中,++运算符的结合性是自右向左。 27.在C语言中,若函数的形参是整型变量,而对应的实参[8]是整型数,则形实结合的方式是值传递。 28.在C语言中,数组名除名字的功能之外还代表数组的首地址。 29.设enum en(a,b=3,c=4);,则a的序值是0。 30.continue语句可以出现在for、while和do-while语句中。 三、程序分析题(本大题共5小题,每小题5分,共25分) 阅读下列程序,将输出结果写到各题右侧的空白处。 31.main( ) (int a=10,b=20,c=30; if(a>b) if(a>c) printf("a=%dn",a); else printf("b=%dn",b); printf("c=%dn",c); ) 答: c=30 32.SUM(int n) ( if (n==1) return 1; else return n * n+SUM (n-1); ) main( ) ( printf ("SUM=%dn",SUM(5)); ) 答: SUM=55 33.int fuc(int j) ( static int k; return (++k+j); ) main( ) ( int j; for (j=1;j<=3;j++) printf ("%5d",fuc(10)); printf ("n"); ) 答: 11 12 13 34.假定在DOS提示符下显示源程序[9]如下 (相应的可执行程序[10]name.exe也在C盘中) C>type name.c main (int argc, char *argv[]) ( printf ("argc=%dn",argc); while (--argc>0) printf("%s",argv[argc]); printf ("n"); ) 写出执行下列命令行后的输出结果。 C>name 1949 October First 答: argc=4 FirstOctober1949 35.struct (int a,b; union {int M,N;char ch[10];)in; } Q,*p=&Q; main( ) (Q.a=3;Q.b=6; Q.in.M=(*p).a+(*p).b;Q.in.N=p->a*p->b; printf("%d,%d,%dn",sizeof(Q.in),Q.in.M,Q.in.N); ) 答: 10,18,18 四、程序填充题(本大题共3小题,每小题6分,共18分) 给出下列程序,将横线处缺少的部分补上,使其能正确运行。 36.输入一个英文字符串(换行符作为结束),分别统计并输出其中元音字母(大小写不加区别)各自出现的次数。 元音字母:(a,A),(e,E),(i,I),(o,O),(u,U) #include main( ) ( int a=0,e=0,i=0,o=0,u=0; /* 第一空 */ char c; while(c=getchar()!='n')/* 第二空 */ switch(c)/* 第三空 */ { case'a': case'A':a++; break; case'e': case'E':e++;break; case'i': case'I':i++;break; case'o': case'O':o++;break; case'u': case'U':u++; ) printf("(a,A)=%d,(e,E)=%d,(i,I)=%d,(o,O)=%d,(u,U)=%dn",a,e,i,o,u); } 37.使用二维数组形成一个五行的杨辉三角形并输出。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 #define N 5 main( ) ( int m,n,a[N][N]; for(m=0;n< N; m++) { a[m][0]=a[m][m]=1;/* 第一空 */ for(n=1;n void main() { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%d ",j); printf("n"); ) } 40.任意输入并输出三条边(a,b,c实型),若能构成三角形,则计算并输出其面积,否则输出标志“NO”。(6分) 计算公式: 答: #include #include void main() ( double a,b,c,s,area; printf("Please input a b c:"); scanf("%lf%lf%lf",&a,&b,&c); if((a+b>c)&&(b+c>a)&&(c+a>b)) { s=1/2.0*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("the area is%fn",area); ) else printf("NOn"); } 41.利用公式计算π=4(1-1/3+1/5-1/7+1/9-……)的近似值,直到括号中最后一项的绝对值小于10-6为止。(6分) 答: #include #include main() (int s=1; float n=1,pi=0; double t=1; while(fabs(t)>=2e-6) {pi+=t; n+=2; s=-s; t=s/n; ) pi*=4; printf("pi=%.6fn",pi); }
一、单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.C语言的保留字是( B ) A. define B. enum C. main D. include 2.错误的实型(浮点型)常数是( D ) A. .0 B. 0.E0 C. 0.0 D.0E+0.0 3.无条件转移语句的一般形式是:goto语句标号[1];,其中的语句标号可以是( B ) A.整型数 B.标识符[2] C.保留字 D.实型数 4.设int a;,则表达式a=2,4,a+1的值是( C ) A.1 B.2 C.3 D.4 5.设int i; float f; double d; long int e;,则表达式10+'a'+i*f-d/e结果的类型是( A ) A. double B.long C. int D. float 6.设int a;,则语句for(a=0;a= =0;a++);和语句for(a=0;a=0;a++);执行循环的次数分别是( C ) A.0,0 B.0,1 C.1,0 D.1,1 7.if(表达式)和while(表达式)中的“表达式”( D ) A.只能是逻辑的 B.只能是关系的 C.只能是算术的 D.以上三种都可以 8.设int a=0,b=0,m=0,n=0;,则执行(m=a= =b)||(n=b= =a)后m和n的值分别是( C ) A.0,0 B.0,1 C.1,0 D.1,1 9.设int a,b;为使变量a和b分别获得数据10和20,则下列正确的是( A ) A.scanf("%d,%d",&a,&b);输入数据:10,20 B.scanf("%d,%d",&a,&b);输入数据:10 20 C.scanf("%d,%d",&a,&b);输入数据:a=10,b=20 D.scanf("%d,%d",a,b);输入数据:10,20 10.对于函数,正确的说法是( B ) A.可以嵌套定义 B.定义时有些函数名前可以带星号 C.必须有返回语句 D.必须有形式参数[3] 11.设int a[3][4]; ,则与元素a[0][0]不等价的表达形式是( B ) A.*a B.* *a C.*a[0] D.*(*(a+0)+0) 12.设char s1[]={'a','b','c'},s2[]="abc"; ,则数组s1和s2的长度分别是( C ) A.2,3 B.3,3 C.3,4 D.4,4 13.设int(*p)( );,则p是( B ) A.一维数组的指针变量 B.函数的指针变量 C.二级指针变量 D.字符串的指针变量 14.在C语言中,若定义函数时类型缺省,则类型隐含为( A ) A. int B. char C. float D. void 15.设char ch,str[4],*strp;,则正确的赋值语句[4]是( C ) A. ch="MBA"; B. str="MBA"; C. strp="MBA"; D. *strp="MBA"; 16.设typedef char *POINT; POINT p,q[3],*r;,则p、q和r分别是字符型的( D ) A.变量、一维数组和指针变量 B.变量、二维数组和指针变量 C.指针变量、一维数组指针和二级指针变量 D.指针变量、一维指针数组和二级指针变量 17.若变量定义时未初始化,则其值不确定的是( B ) A.静态全局变量[5] B.局部变量[6] C.静态局部变量 D.全局变量 18.设struct{int a; char b;}Q,*p=&Q; ,则错误的表达式是( A ) A. *p.b B. (*p).b C. Q.a D. p->a 19.在某文件中,若全局变量与局部变量同名,则( D ) A.视为同一个变量 B.变量作用域[7]不确定 C.不允许 D.允许 20.设宏定义#define P(x) x/x 则执行语句printf("%d\n",P(4+6));后的输出结果是( C ) A.1 B.8.5 C.11 D.11.5 二、填空题(本大题共10小题,每小题2分,共20分) 请在每小题的空格中填上正确答案。错填、不填均无分。 21.在C语言中,预处理功能主要包括:宏定义、文件包含和条件编译。 22.表达式4&5-3&&5的值是0。 23.设int j=5;,则执行语句j+=j-=j*j;后j的值是-40。 24.设int a,b=2,c=3;执行表达式a=(b>c)?(b+1):(c+2),3 后a的值是5。 25.设int a[3][2]={2,4,6,8,10};则*(a[1]+1)的值是8。 26.在C语言中,++运算符的结合性是自右向左。 27.在C语言中,若函数的形参是整型变量,而对应的实参[8]是整型数,则形实结合的方式是值传递。 28.在C语言中,数组名除名字的功能之外还代表数组的首地址。 29.设enum en{a,b=3,c=4};,则a的序值是0。 30.continue语句可以出现在for、while和do-while语句中。 三、程序分析题(本大题共5小题,每小题5分,共25分) 阅读下列程序,将输出结果写到各题右侧的空白处。 31.main( ) {int a=10,b=20,c=30; if(a>b) if(a>c) printf("a=%d\n",a); else printf("b=%d\n",b); printf("c=%d\n",c); } 答: c=30 32.SUM(int n) { if (n==1) return 1; else return n * n+SUM (n-1); } main( ) { printf ("SUM=%d\n",SUM(5)); } 答: SUM=55 33.int fuc(int j) { static int k; return (++k+j); } main( ) { int j; for (j=1;j<=3;j++) printf ("%5d",fuc(10)); printf ("\n"); } 答: 11 12 13 34.假定在DOS提示符下显示源程序[9]如下 (相应的可执行程序[10]name.exe也在C盘中) C>type name.c main (int argc, char *argv[]) { printf ("argc=%d\n",argc); while (--argc>0) printf("%s",argv[argc]); printf ("\n"); } 写出执行下列命令行后的输出结果。 C>name 1949 October First 答: argc=4 FirstOctober1949 35.struct {int a,b; union {int M,N;char ch[10];}in; } Q,*p=&Q; main( ) {Q.a=3;Q.b=6; Q.in.M=(*p).a+(*p).b;Q.in.N=p->a*p->b; printf("%d,%d,%d\n",sizeof(Q.in),Q.in.M,Q.in.N); } 答: 10,18,18 四、程序填充题(本大题共3小题,每小题6分,共18分) 给出下列程序,将横线处缺少的部分补上,使其能正确运行。 36.输入一个英文字符串(换行符作为结束),分别统计并输出其中元音字母(大小写不加区别)各自出现的次数。 元音字母:(a,A),(e,E),(i,I),(o,O),(u,U) #include main( ) { int a=0,e=0,i=0,o=0,u=0; /* 第一空 */ char c; while(c=getchar()!='\n')/* 第二空 */ switch(c)/* 第三空 */ { case'a': case'A':a++; break; case'e': case'E':e++;break; case'i': case'I':i++;break; case'o': case'O':o++;break; case'u': case'U':u++; } printf("(a,A)=%d,(e,E)=%d,(i,I)=%d,(o,O)=%d,(u,U)=%d\n",a,e,i,o,u); } 37.使用二维数组形成一个五行的杨辉三角形并输出。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 #define N 5 main( ) { int m,n,a[N][N]; for(m=0;n< N; m++) { a[m][0]=a[m][m]=1;/* 第一空 */ for(n=1;n void main() { int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%d ",j); printf("\n"); } } 40.任意输入并输出三条边(a,b,c实型),若能构成三角形,则计算并输出其面积,否则输出标志“NO”。(6分) 计算公式: 答: #include #include void main() { double a,b,c,s,area; printf("Please input a b c:"); scanf("%lf%lf%lf",&a,&b,&c); if((a+b>c)&&(b+c>a)&&(c+a>b)) { s=1/2.0*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("the area is%f\n",area); } else printf("NO\n"); } 41.利用公式计算π=4(1-1/3+1/5-1/7+1/9-……)的近似值,直到括号中最后一项的绝对值小于10-6为止。(6分) 答: #include #include main() {int s=1; float n=1,pi=0; double t=1; while(fabs(t)>=2e-6) {pi+=t; n+=2; s=-s; t=s/n; } pi*=4; printf("pi=%.6f\n",pi); }
题目解答
答案
答案为自做,有错误请指出。