1、C语言程序设计考试试题 一、单项选择题 (每小题 1分,共 15分)1一个C程序的执行是从 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束2.下面四个选项中,均是不合法的用户标识符的选项的是 A) A p_o do B)float lao _AC) b-a goto int D) _123 temp INT3判断字符型变量c1是否为数字字符的正确表达式为 A)0=c1=0)&(c1=c1)|(9=0)&(c1=
2、9)4.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.0000005.在C语言中,要求运算数必须是整型的运算符是 A)/ B)+ C)!= D)%6. 若有定义: double a = 2.1,3.6,9.5;double b = 6.0;则下列错误的赋值语句是:A) b = a2; B) b = a + a2;C) a1 = b; D) b = a0 + 7;7.若定义x为双精度型变量,则能正确输入x值的语句是 。A)scanf(“%f”,x);
3、B)scanf(“%f”,&x);C)scanf(“%lf”,&x); D)scanf(“%lf”, x);8.以下不正确的说法是 。A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准9.下面程序段的运行结果是 。char *s=”Nanjing” ;s+=3 ; printf(“%s”,s);A)jingB)字符j C)字符j的地址D)不确定10.下面程序段int k=2;while (k!=0) printf(“%d”,k);k-;则下面描述中正确的是 。 A)while循环执行2次 B)循环是无限循环
4、C)循环题语句一次也不执行 D)循环体语句执行一次11.若有说明:int *p,m=5,n;以下程序段正确的是 。A)p=&n ;B)p = &n ; scanf(“%d”,&p);scanf(“%d”,*p);C)scanf(“%d”,&n);D)p = &n ; *p=n ; *p = m ;12.若要对a进行自增运算,则a应具有下面说明 。A)int a32;B)char *a =“12”,”ab”;C)char (*a) 3D)int b10, *a=b;13.若以下定义和赋值语句:int s23=0,(*p)3;p=s;则对数组s的第i行第j列(假设i、j已经正确说明并赋值)元素的合
5、法引用为: A)*(*(p+i)+j) B)*(pi)+j C)(p+i)+j D)(*p+i)j14.下面程序的运行结果是 。#iuncludevoid main ( ) struct complx int x; int y ; cnum2=1,3,2,7 ; printf(“%dn”,cnum0.y/cnum0.x*cnum1.x) ;A)0 B)1 C)2 D)615.函数rewind的作用是 。A)使位置指针重新返回文件的开头 B)将位置指针指向文件中所要求的特定位置C)使位置指针指向文件的末尾 D)使位置指针自动移至下一个字符位置二、基础知识填空(每空2分,共20分)1.在C语言中,
6、没有专门的输入输出的语句,其输入输出都是用函数来完成的,格式化输入操作是由库函数 1 完成的。2三种基本程序结构是循环结构、选择结构和 2 。3数学表达式的C语言表达式是 3 4. 设有数组定义: char array =Nuist; 则数组 array所占的内存空间为 4 5x,y,z是整型变量,写出x,y,z三个变量中至少有两个为正数的逻辑表达式是: 5 。6用continue语句只能用在循环语句的循环体内,其作用是: 6 。7.若有定义语句:int a4=1,2,3,4,*p;p=a;则+(*p)的值是 7 。8.若有#define ADD(x) x+xint m=1,n=2,k=3,s
7、um ; sum = ADD(m+n)*k ; 则sum的值为 8 9.若有定义:struct num int a ; int b ; float f ; n = 1,3,5.0 ;struct num *pn = &n ;则表达式(*pn).a+pn-f的值是 9 。10.若执行fopen函数时发生错误,则函数的返回值是 10 。三、程序阅读题(每题3分,共21分)1输入100,200回车后,下面程序执行结果是 #includevoid swap(int *,int *);int main() int a, b, *pa=&a, *pb=&b;scanf(“%d,%d”,&a,&b);swa
8、p (pa,pb);printf(“a=%d,b=%dn”,a,b);return 0;void swap (int *p1,int *p2)int *p;p=p1; p1=p2; p2=p;2.若运行以下程序时,输入2473,则程序的运行结果是 。#includeint 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) ; default : putchar
9、 (c+2) ; break ; printf(“n”); return 0;3输入6,下面程序的执行结果是: #includeunsigned long int fact (unsigned int );int main() unsigned int n,fac; scanf(%u,&n); fac=fact (n); printf(%un,fac); return 0;unsigned long int fact (unsigned int n)unsigned int result;if(n=0|n=1)result=1;else result=n*fact(n-1);return re
10、sult;4.下面程序的输出结果是 。#include int fun(int);int main()int i,a=5,sum; for(i=0;i3;i+) sum=fun(a);printf(%d %dn,i,sum); return 0;int fun(int a) int b=0; static int c=3; b+; c+; return(a+b+c); 5下面程序运行的结果是 #includevoid copy_string(char *,char *);int main() char a=I am a teacher.; char b=You are a student.;
11、copy_string(a,b); printf( %sn %sn,a,b);return 0;void copy_string(char *from,char *to) for(;*from!=0;from+,to+) *to=*from; *to=0;6下面程序执行的结果是 #includevoid inv(int , int );int main() int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10); for(i=0;i10;i+) printf(%d ,ai);printf(n);return 0;void inv(int x, int n) int
12、t,i,j,m=(n-1)/2; i=0; j=n-1; for(;i=m;i+,j-) t=xi; xi=xj; xj=t; 7.写出下面程序的运行结果 。#includestruct man char name20 ; int age ; person = “liming”, 22, “wanghua”, 21,”zhangping”,20 ;int main ( ) int old = 0 ;struct man *p=person, *q ;for ( ; p=&person2; p+) if (oldage) q=p ; old=p-age; printf(“%s %dn”,q-na
13、me,q-age) ;return 0;四、程序填空题(每空2分,共18分)1以下程序输出a,b,c三个整数,并按从小到大排序,请完善程序。#includeint main() int a,b,c,t; scanf(%d %d %d,&a,&b,&c); if( 1 ) t=a; a=b; b=t; if(ac) 2 ; a=c; c=t;if(bc) t=b; 3 ; c=t;printf(%d,%d,%dn,a,b,c);return 0;2.下面程序是实现两个矩阵相加,请完善程序。#include#define M 3#define N 4void add(int xN,int yN,i
14、nt zN);int main()int i,j,aMN,bMN,cMN;for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,&aij);add( 4 );for(i=0;iN;i+)for(j=0;jM;j+)printf(%4d,bij);printf(n);return 0;void tran(int xN,int yN,int zN)int i,j;for(i=0;iM;i+)for(j=0;jN;j+)zij= 5 ;3.下面函数的功能是将两个字符串s1和s2连接起来,请填空使程序完整。void conj(char *s1,char *s2) char *p=s
15、1 ; while (*s1) 6 ; while (*s2) *s1= 7 ; s1+,s2+; *s1=0 ;4函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据赋0到m-1的值。#include #include #include typedef struct aa int data; struct aa *next; NODE;NODE *Creatlink(int n, int m) NODE *h=NULL, *p, *s; int i;/*found*/ p=(NODE* )malloc(sizeof(NODE); h=p; p-next=NULL; for(i
16、=1; idata=rand()%m; /*rand()为随机函数*/s-next=p-next; 8 ; p=p-next; /*found*/ return h;outlink(NODE *h) NODE *p; p=h-next; while( 9 ) printf(-%d ,p-data); p=p-next; printf(n);int main() NODE *head; head=Creatlink(8,22); outlink(head); return 0; 五、改正下面程序错误(每处3分,共6分,注:错误在注释语句/*found*/下面13行以内):下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。例如,若输入5,则应输出0.783333。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include/*found*/int fun(int m) double t=1.0,j=1.0;int i;/*found*/for(i=1;i0,计算的近似值(直到最后一项的绝对值小于eps)。2设一个班级有N个人,学生信息包括姓名、学号和三科成绩,编程求每个人的三门课程的总成绩,输入m、n,把三科总成绩在m,n之间的学生信息保存在另外一个结构体数组中,并输出这些学生的信息。