c语言考试题及答案 .doc
一、选择题(1) 在C语言中,如果下面的变量都是int类型,则输出的结果是sum=pad=5; pad=sum + + ,pad + + , + + pad;printf("%dn",pad);A) 7 B) 6 C) 5 D) 4(2) 以下程序的输出结果是# include <stdio.h>main() int i=010 , j = 10;printf("%d,%dn",+ +i , j - -); A) 11,10 B) 9,10 C) 010,9 D) 10,9(3) 已知在ASCII代码中,字母A的序号为65,以下程序的输出的结果是# include <stdio.h>main() char c1='A', c2='Y'printf("%d,%dn",c1,c2); A) 因输出格式不合法,输出错误信息 B)65,90 C)A,Y D)65,89(4) 指针s所指字符串的长度为char *s=""NameAddressn"A) 19 B) 15 C) 18 D) 说明不合法(5) 设有说明int(*ptr)m;其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量(6) 语句while(!E);中的条件!E等价于A)E = = 0 B)E!=1 C)E!=0 D)E(7) 以下程序的输出结果是# include <stdio.h>main() printf("%dn",NULL); A) 不确定的(因变量无定义) B)0 C)-1 D)1(8) 以下函数调用语句中含有的实参个数为。func(exp1,exp2),(exp3,exp4,exp5);A) 1 B) 2 C) 4 D) 5(9) 设有以下语句:char a=3,b=6,c;c=ab<<2;则c的二进制值是A) 00011011 B)00010100 C)00011100 D)00011000(10) 下面的程序中第几行有错误(每行程序前面的数字是行号)。1 #include <stdio.h>2 main()3 4 float a3=0,0;5 int i;6 for(i=0;i<3;i + + ) scanf("%d",&ai);7 for(i=1;i<3;i + + ) a0=a0+ai;8 printf("%fn",a0);9 A) 没有 B)第4行 C)第6行 D)第8行(11) 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是A)3 B)0 C)9 D)-12(12) 以下的for循环for(x=0,y=0; (y!=123)&&(x<4); x + + );A) 是无限循环 B)循环次数不定 C)执行4次 D)执行3次(13) 设有语句char a='72'则变量aA)包含1个字符 B)包含2个字符 C)包含3个字符 D)说明不合法(14) 以下程序的输出结果是# include <stdio.h># include <math.h>main() int a=1,b=4,c=2;float x=10.5 , y=4.0 , z;z=(a+b)/c+sqrt(double)y)*1.2/c+x;pritnf("%fn",z); A) 14.000000 B) 015.400000 C) 13.700000 D) 14.900000(15) sizeof(double)是A)一种函数调用 B)一个双精度型表达式C)一个整型表达式 D)一个不合法的表达式(16) C语言中A)不能使用do-while语句构成的循环 B)do-while语句构成的循环必须用break语句才能退出C)do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D)do-while语句构成的循环,当while语句中的表达式值为零时结束循环(17) 以下程序的输出结果是# include <stdio.h># include <string.h>main() char str12='s','t','r','i','n','g'printf("%dn",strlen(str); A) 6 B) 7 C) 11 D) 12(18) 以下程序的输出结果是# include <stdio.h>main() int a=2,c=5;printf("a=%d,b=%dn",a,c); A) a=%2,b=%5 B) a=2,b=5 C) a=%d,b=%d D) a=%d,b=%d(19) 以下程序的输出结果是# include<stdio.h>main() int a ,b,d=241;a=d/100%9;b=(-1)&&(-1);printf("%d,%dn",a,b); A) 6,1 B) 2,1 C) 6,0 D) 2,0(20) 以下程序的输出结果是# include <stdio.h>main() int i; for ( i=1;i<=5;i + + ) if ( i%2 ) printf("*");else continue; printf("#");printf("$n"); A) *#*#*#$ B) #*#*#*$ C) *#*#$ D) #*#*$(21) 以下for语句构成的循环执行了多少次# include <stdio.h># define N 2# define M N+1# define NUM (M+1)*M/2main() int i , n=0;for ( i=1;i<=NUM;i + + );n + + ; printf("%d",n); printf("n"); A) 5 B) 6 C) 8 D) 9(22) 设有以下语句,则不是对a数组元素的正确引用的选项是(其中0i<10)int a10=0,1,2,3,4,5,6,7,8,9, *p=a;A) ap-a B) *(&ai) C) pi D) *(*(a+i)(23) 有以下程序:# include <stdio.h># define N 6main() char cN; int i=0;for ( ;i<N ; ci=getchar () , i + + );for ( i=0 ; i<N ; putchar(ci) , i + + ); 输入以下三行,每行输入都是在第一列上 开始,<CR>代表一个回车符:a<CR>b<CR>cdef<CR>程序的输出结果是A) abcdef B) a C) a D) a b b b c cd cdef d e f(24) 以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空。# include <stdio.h>findmax ( s , t , k )int *s , t , *k; int p; for(p=0,*k=p;p<t;p + + )if ( sp > s*k )_; main() int a10 , i , k ;for ( i=0 ; i<10 ; i + + ) scanf("%d",&ai);findmax ( a,10,&k );printf ( "%d,%dn" , k , ak ); A) k=p B) *k=p-s C) k=p-s D) *k=p(25) 有以下程序:#include<stdio.h>union pw int i; char ch2; a;main() a.ch0=13; a.ch1=0; printf("%dn",a.i); 程序的输出结果是(注意: ch0在低字节,ch1在高字节。)A) 13 B) 14 C) 208 D) 209(26) 有以下程序:# include<stdio.h>main() int c;while(c=getchar()!='n') switch(c-'2') case 0:case 1: putchar(c+4);case 2: putchar(c+4);break;case 3: putchar(c+3);case 4: putchar(c+2);break; printf("n"); 从第一列开始输入以下数据,<CR>代表一个回车符。2743<CR>程序的输出结果是A) 668977 B) 668966 C) 6677877 D) 6688766(27) 以下程序的输出结果为main() char *alpha6="ABCD","IJKL","MNOP","QRST","UVWX"char *p; int i;p=alpha;for(i=0;i<4;i + + ) printf("%s",pi); printf("n"); A) ABCDEFGHIJKL B) ABCD C) ABCDEFGHIJKLMNOP D) AEIM(28) 以下程序的输出结果是# include<stdio.h># define FUDGE(y) 2.84+y# define PR(a) printf("%d",(int)(a)# define PRINT1(a) PR(a);putchar('n')main()int x=2; PRINT1(FUDGE(5)*x); A) 11 B) 12 C) 13 D) 15(29) 以下程序的输出结果是# include<stdio.h>main() int i=1,j=3;printf("%d",i + + ); int i=0; i+=j*2; printf("%d,%d",i,j); printf("%d,%dn",i,j); A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 D) 1,7,3,2,3(30) 以下程序的输出结果是# include <stdio.h>main() int k=4,m=1,p;p=func(k,m); printf("%d,",p); p=func(k,m); printf("%dn",p);func(a,b)int a,b; static int m=0,i=2;i+=m+1; m=i+a+b; return(m); A) 8,17 B) 8,16 C) 8,20 D) 8,8(31) 设有以下语句:char str412="aaa","bbbb","ccccc","dddddd",*strp4;int i; for(i=0;i<4;i + + )strpi=stri;不是对字符串的正确引用的选项是(其中0k<4)A) strp B) strk C) strpk D) *strp(32) 设有以下语句: char str1="string",str28,*str3,*str4="string"则不是对库函数strcpy的正确调用的选项是(库函数用于复制字符串)A) strcpy(str1,"HELLO1"); B) strcpy(str2,"HELLO2"); C) strcpy(str3,"HELLO3"); D) strcpy(str4,"HELLO4");(33) C语言中形参的缺省存储类别是A)自动(auto) B)静态(static) C)寄存器(register) D)外部(extern)(34) 设有以下语句:struct st int n; struct st *next;static struct st a3=5,&a1,7,&a2,9,'0',*p;p=&a0;则下列哪一个表达式的值是6A)p + + ->n B) p->n + + C) (*p).n + + D) + + p->n(35) 以下四个程序中,哪一个不能对两个整型变量的值进行交换A)# include <stdio.h>main() int a=10,b=20; swap(&a,&b); printf("%d %dn",a,b);swap(p,q)int *p,*q;int *t; t=(int )malloc(sizeof(int);t=p;*p=*q;*q=*t; B) # include <stdio.h> main()int a=10,b=20; swap(&a,&b);printf("%d %dn",a,b);swap(p,q)int p,q;int *t;t=*p;*p=*q;*q=t;C) # include <stdio.h>main() int *a,*b;*a=10,*b=20;swap(a,b);printf("%d %dn",*a,*b);swap(p,q)int *p,*q;int t;t=*p;*p=*q;*q=t;D) # include<stdio.h>main()int a=10,b=20;int x=&a,y=&b;swap(x,y);printf("%d %dn",a,b);swap(p,q)int *p,*q;int t;t=*p;*p=*q;*q=t;二、填空题(1) 以下C语言程序将磁盘中的一个文件复制到另一个文件中,两个文件名在命令行中给出。#include <stdio.h>main(argc,argv)int argc; char *argv; FILE *f1,*f2; char ch;if(argc< 【1】 ) printf("Parameters missing!n"); exit(0); if( (f1=fopen(argv1,"r") = = NULL)|(f2=fopen(argv2,"w") = = NULL) printf("Can not open file!n"); exit(0);while( 【2】 )fputc(fgetc(f1),f2);fclose(f1); fclose(f2); (12) 以下程序中的trap函数是一个用梯形法求定积分的通用函数。梯形法求定积分的公式为:n-1 a-bs=(f(a)+f(b)/2+ f(a+i*h)*h , h=|-|i=1 n其中,n为积分小区间数。以下程序调用trap函数求定积分,被积函数是:f(x)=x*x+3*x+2,且n=1000,a=0,b=4。#include <stdio.h>3include <math.h>double trap(fun,a,b)double (*fun)(),a,b; double t,h;int i,n=1000;t=0.5*(*fun)(a)+(*fun)(b); h=fabs(a-b)/(double)(n);for(i=1;i<=n-1;i + + ) t=t+ 【3】 ;t=t*h; return(t); double mypoly(x)double x; return(x*x+3.0*x+2.0); main() double y,(*pf)(); pf= 【4】 ;y=trap(pf,0.0,4.0); printf("%fn",y); (13) 以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。#include <stdio.h>main() int i,a10,*p=a,sum=0;printf("Enter 10 num:n");for(i=0;i<10;i + + ) scanf("%d",&ai);for(i=0;i<10;i + + )if(isprime(*(p+ 【5】 ) = = 1) printf("%d",*(a+i); sum+=*(a+i); printf("nThe sum=%dn",sum); isprime(x)int x; int i; for(i=2;i<=x/2;i + + )if(x%i = = 0) return (0); 【6】 ; (14) 以下程序调用invert函数按逆序重新放置a数组中元素的值。a数组中的值在main函数中读入。#include <stdio.h>#define N 10invert(s,i,j)int *s,i,j; int t; if(i<j) t=*(s+i); *(s+j)=(s+j);*(s+j)=t; invert(s, 【7】 ,j-1);main() int aN,i;for(i=0;i<N;i + + ) scanf("%d",a+ 【8】 );invert(a,0,N-1);for(i=0;i<N;i + + ) printf("%d",ai);printf("n"); (15) 以下程序建立了一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data 域不放数据,表空的条件是ph->next = = NULL).#include<stdio.h>struct list int data;struct list *next;【9】 creatlist() struct list *p,*q,*ph; int a;ph=(struct list *) malloc(sizeof(struct list);p=q=ph; printf("Input an integer number,enter -1 to end:n");scanf("%d",&a):while(a!=-1) p=(struct list *)malloc(sizeof(struct list);p->data=a; q->next=p; 【10】 =p; scanf("%d",&a); p->next='0' return(ph); main() struct list *head; head=creatlist();参考答案选择题:(1)C (2)B (3)D (4)B (5)C (6)A (7)B (8)B (9)A (10)C(11)D (12)C (13)A (14)C (15)C (16)D (17)A (18)D (19)B (20)A(21)C (22)D (23)C (24)D (25)A (26)A (27)C (28)B (29)B (30)A(31)A (32)C (33)A (34)D (35)C 填空题:(1)3(2)!feof(f1)或feof(f1)=0(3)(*fun)(a+i*h)(4) mypoly(5)I(6)return 1 或 return (1)(7)i+1(8) I(9) struct list *(10) q一、选择题(1) 请选出可用作C语言用户标识符的一组标识符A) void B) a3_b3 C) For D) 2adefine _123 -abc DOWORD IF Case sizeof(2) 设 int a=12,则执行完语句 a+=a-=a*a后,a的值是A) 552 B) 264 C) 144 D) -264(3) C语言程序的基本单位是A) 程序行 B) 语句 C) 函数 D) 字符(4) 请选出合法的C语言赋值语句A) a=b=58 B) i+; C) a=58,b=58 D) k=int(a+b);(5) 执行下面程序片段的结果是int x=23;do printf("%2d",x-);while(!x);A) 打印出321 B) 打印出23 C) 不打印任何内容 D) 陷入死循环(6) 请选出以下语句的输出结果printf("%dn",strlen("t"065xffn");A) 5 B) 14 C) 8 D) 输出项不合法,无正常输出(7) 设有如下的函数ggg(x)float x; printf("n%d",x*x);则函数的类型A) 与参数x的类型相同 B) 是void C) 是int D) 无法确定(8) 设有如下枚举类型定义:enum language Basic=3,Assembly,Ada=100,COBOL,Fortran;枚举量Fortran的值为A) 4 B) 7 C) 102 D) 103(9) 若有以下说明和语句,请选出哪个是对c数组元素的正确引用int c45, (*cp)5;cp=c;A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2)(10) 标准函数 fgets(s, n, f) 的功能是A) 从文件f中读取长度为n的字符串存入指针s所指的内存B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存C) 从文件f中读取n个字符串存入指针s所指的内存D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存(11) 设有如下一段程序:int *var,ab;ab=100var=&ab;ab=*var+10;执行上面的程序后,ab的值为A) 120 B) 110 C) 100 D) 90(12) 以下程序段给数组所有的元素输入数据,请选择正确答案填入。#include<stdio.h>main() int a10,i=0;while(i<10) scanf("%d",_ );A) a+(i+) B) &ai+1 C) a+i D) &a+i(13) 设有如下的程序段:char str ="Hello"char *ptr;ptr=str;执行上面的程序段后,*(ptr+5)的值为A) 'o' B) '0' C) 不确定的值 D) 'o'的地址(14) 在宏定义 #define PI 3.14159中,用宏名PI代替一个A) 单精度数 B) 双精度数 C) 常量 D) 字符串(15) 字符(char)型数据在微机内存中的存储形式是A) 反码 B) 补码 C) EBCDIC码 D) ASCII码(16) 执行下面的程序段int x=35;char z='A'int b;B=(x&15)&&(z<'a');后,B的值为A) 0 B) 1 C) 2 D) 3(17) C语言规定,程序中各函数之间A) 既允许直接递归调用也允许间接递归调用B) 不允许直接递归调用也不允许间接递归调用C) 允许直接递归调用不允许间接递归调用D) 不允许直接递归调用允许间接递归调用(18) 假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表示代数式 的表达式是A) 1/a*b*c B) 1/(a*b*c) C) 1/a/b/(float)c D) 1.0/a/b/c(19) 若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是A) pb=&x B) pb=x; C) *pb=&x; D) *pb=*x(20) 设有static char str ="Beijing"则执行printf("%dn", strlen(strcpy(str,"China");后的输出结果为A) 5 B) 7 C) 12 D) 14(21) 设有如下程序:#include<stdio.h>main() int *k, *j, i=100;j=&i; k=&j;printf("%dn", *k);上面程序的输出结果是A) 运行错误 B) 100 C) i的地址 D) j的地址 (22) 设 a=5, b=6, c=7, d=8, m=2, n=2, 执行(m=a>b)&&(n=c>d)后n的值为A) 1 B) 2 C) 3 D) 4(23) 下面函数的功能是sss(s, t)char *s, *t; while(*s)&&(*t)&&(*t+= *s+);return(*s-*t);A) 求字符串的长度 B) 比较两个字符串的大小C) 将字符串s复制到字符串t中 D) 将字符串s接续到字符串t中(24) 请选出以下程序的输出结果#include<stdio.h>sub(x,y,z)int x, y, *z; *z=y-x; main() int a, b, c;sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);printf("%d,%d,%dn", a,b,c);A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7(25) 下面程序的输出结果是#include<stdio.h>main() int i=2,p;p=f(i,i+1);printf("%d",p);int f(a,b)int a,b; int c;if(a>b) c=1;elseif(a=b) c=0;else c=-1;return(c);A) -1 B) 0 C) 1 D) 2(26) 请选出以下程序段的输出结果#include<stdio.h>#define MIN(x,y) (x)<(y)? (x):(y)main() int i,j,k;i=10; j=15;k=10*MIN(i,j);printf("%dn",k);A) 15 B) 100 C) 10 D) 150(27) 请选出以下程序段的输出结果#include<stdio.h>main() char sl10, s210, s310, s410;scanf("%s%s",s1,s2); gets(s3); gets(s4);puts(s1); puts(s2); puts(s3); puts(s4);输入数据如下:(此处<CR>代表回车符)aaaa bbbb<CR>cccc dddd<CR>A) aaaa B) aaaa C) aaaa D) aaaa bbbb bbbb bbbb bbbb cccc cccc cccc dddd dddd cccc dddd dddd eeee(28) 请选出以下程序的输出结果#include<stdio.h>fun(s, n1, n2)int *s, n1, n2; int i, j, t;i=n1; j=n2;while(i<j) t= *(s+i); *(s+i)= *(s+j); *(s+j)=t;i+; j-;main() int a10=1,2,3,4,5,6,7,8,9,0,i, *p=a;fun(p,0,3); fun(p,4,9); fun(p,0,9);for(i=0; i<10; i+) printf("%d", *(a+i);printf("n");A) 0 9 8 7 6 5 4 3 2 1 B) 4 3 2 1 0 9 8 7 6 5C) 5 6 7 8 9 0 1 2 3 4 D) 0 9 8 7 6 5 1 2 3 4(29) 请选出以下程序的输出结果#include<stdio.h>main() int a = 1,2,3,4 ,i;int x=0;for(i=0; i<4; i+) sub(a,x); printf("%d",x);printf("n");sub(s,y)int *s, y; static int t=3;y=st; t-;A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 4(30) 下面程序的输出结果为struct st int x;int *y; *p;int dt4=10,20,30,40;struct st aa4= 50,&dt0,60,&dt1,70,&dt2,80,&dt3 ;main() p=aa;printf("%dn", +p->x );printf("%dn", (+p)->x);printf("%dn", +( *p->y);A) 10 B) 50 C) 51 D) 60 20 60 60 70 20 21 21 31二、填空题(1) 设有如下程序段:int i=0, sum=1;do sum+=i+;while(i<6);printf("%dn", sum);上述程序段的输出结果是 【1】 。(2) 阅读下列程序:#include<stdio.h>main() int i, j, row, column,m;static int array33=100,200,300,28,72,-30,-850,2,6;m=array00;for (i=0; i<3; i+)for (j=0; j<3; i+)if (arrayij<m) m=arrayij; row=i; column=j;printf("%d,%d,%dn",m,row,column);上述程序的输出结果是 【2】 。(3) 设a、b、c为整型数, 且a=2、b=3、c=4, 则执行完以下语句:a*=16+(b+)-(+c);后,a的值是 【3】 。(4) 下面程序的输出结果是 【4】 。#include<stdio.h>main() int a=3, b=2, c=1;c-=+b;b*=a+c; int b=5, c=12;c/=b*2;a-=c;printf( '%d,%d,%d,",a,b,c);a+=-c;printf( '%d,%d,%d,",a,b,c);(5) 设有如下程序:#include<stdio.h>main(argc,argv)int argc; char *argv ; while( -argc>0) printf("%s",argvargc);printf("n");假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROG ABCD EFGH IJKL <CR>,则输出结果为 【5】 。(6) 阅读下列程序:#include<stdio.h>#define MAX_COUNT 4void fun();main() int count;for (count=1; count<=MAX_COUNT; count+) fun();void fun() static int i;i+=2; printf("%d",i);上述程序的输出结果是 【6】 。(7) 设有下列程序:#include<stdio.h>#include<strint.h>main() int i;char str10, temp10;gets(temp);for (i=0; i<4; i+) gets(str);if (strcmp(temp,str)<0) strcpy(temp,str);printf("%sn",temp);上述程序运行后,如果从键盘上输入(在此<CR>代表回车符):C+<CR>BASIC<CR>QuickC<CR>Ada<CR>Pascal<CR>则程序的输出结果是 【7】 。(8) 设有如下程序:#include <stdio.h>main(argc,argv)int argc; char *argv ; FILE *fp;void fc();int i=1;while( -argc>0)if(fp=fopen(argvi+,"r")=NULL) printf("Cannot open file! n");exit(1);else fc(fp); fclose(fp); void fc(ifp)FILE *ifp; char c;while(c=getc(ifp)!='#') putchar(c-32);上述程序经编译、连接后生成可执行文件名为cpy.exe。假定磁盘上有三个文本文件,其文件名和内容分别为:文件名 内容a aaaa#b bbbb#c cccc#如果在DOS下键入cpy a b c<CR>则程序输出 【8】 。(9) 若输入3个整数3,2,1,则下面程序的输出结果是【9】 。#include<stdio.h>void sub( n,uu)int n, uu ; int t;t=uun-; t+=3*uun;n=n+;if(t>=10) uun+=t/10; uun=t%10;else uun=t;main( ) int i, n, aa10=0,0,0,0,0,0scanf( "%d%d%d",&n,&aa0,&aa1);for(i=1; i<n; i+) sub(i,aa);for(i=0; i<=n; i+) printf("%d",aai);printf("n");(10) 若有以下定义:double w10;则w数组元素下标的上限为 【10】 ,下限为 【11】 。(11) 以下程序统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。#include <stdio.h>#include <ctype.h>main( ) int num26,i; char c;for(i=0; i<26; i+) numi=0;while( 【12】 !='#') /*统计从终端输入的大写字母个数*/if(