南京信息工程大学2009-2010(2)C语言期末考试试卷B
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[6] ,最后一个元素的值是 [8] 。 [9] 。在一个函数内部直接或
7. 若有 char a[10]=”12346”; 则 a[0]的值是 [7] 8.在一个函数内部调用另一个函数的调用方式称为 间接调用该函数称为函数 [10] 调用方式。
三、程序阅读题(每题 3 分,共 24 分)
1.以下程序输出结果的第一行是 ,第二行是 ,第三行是 。 #include<stdio.h> int main() { int a[2][3]={{1,3,5},{2,4,6}}; int b[3][2],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { b[j][i]=a[i][j]; } } for(i=0;i<3;i++) { for(j=0;j<2;j++) printf("%4d",b[i][j]); printf("\n"); } return 0; } 2.运行以下程序时,输入 6↙ 的程序运行结果。 #include<stdio.h> void sub(char * ,char ); int main ( ) { char s[]=”97531”,c; c = getchar ( ) ; sub(s,c); puts(s) ; return 0; } void sub(char *a,char b)
areturn语句中的表达式类型b调用该函数时的主调函数类型c调用该函数时由系统临时d在定义函数时所指定的函数类型deof二基础知识填空每空21c程序中文件可以用和二进制两种代码形式存放
南京信息工程大学试卷
2009 - 2010
学年 第 2 学期
C 语言程序设计
课程统考试卷( B 卷)
;出卷时间 2010 年 6 月
第4页 共8页
。
int main ( ) { int n,k ; for (n=100; n<1000 ; n++) if (k=func(n)) printf(“ %d”,k) ; return 0; } int func (int n) { int i,j,k; i=n/100; j=n/10-i*10 ; k=n%10 ; if (i*100+j*10+k == i*i*i+j*j*j+k*k*k) return n ; return 0; } 6.有以下程序,运行后输出结果的是 #include <stdio.h> int main( ) { FILE *fp; int i,k=0,n=0; fp=fopen("d1.dat"."w"); for(i=1;i<4;i++) fprintf(fp, "%3d",i); fclose(fp); fp=fopen("d1.dat","r"); fscanf(fp, "%d%d",&k, &n); printf("%d %d\n",k, n) ; fclose(fp); return 0; } 7.下面程序执行的结果是 #include<stdio.h> void inv(int *, int ); int main() { int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10); for(i=0;i<10;i++) printf("%d,",a[i]); printf("\n"); return 0 ; } void inv(int *x, int n) { int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--) { t=*i; *i=*j; *j=t; } } 8.输入 10,20,30 回车后,以下程序的运行结果是 #include<stdio.h>
第3页 共8页
{ while (*(a++)!=’\0’) ; while (*(a-1)<b) *(a--)=*(a-1); *(a--)=b; } 3.以下程序的运行结果是 #include<stdio.h> struct Node { int x; char ch; }; void fun(struct Node *); int main( ) { int i; static struct Node st={10,'a'}; for(i=0;i<2;i++) fun(&st); printf("%d,%c\n",st.x,st.ch); return 0; } void fun(struct Node *sn) { static k=1; sn->x=20; sn->ch='a'+k++; } 4.下面程序执行的结果是 #include<stdio.h> int f(int); int main() { int z; z=f(4); printf("%d\n",z); return 0; } int f(int x) { if(x==0||x==1) return 3; else return x*x-f(x-2); } 5.写出下面程序的功Байду номын сангаас是 #include<stdio.h> int func(int);
3.已有如下定义和输入语句,若要求 a1,a2,c1,c2 的值分别为 10,20,A 和 B,当从第一列开始输 入数据时(0表示空格) ,正确的输入方式是 。 int a1,a2; char c1,c2; scanf(“ %d%d”,&a1,&a2); scanf(“ %c%c”,&c1,&c2); A)1020AB↙ B)10020↙ AB↙ C)100200AB↙ D)10020AB↙ 4.下面程序段 int k=2; while (k=0) {printf(“%d”,k);k--;} 。 则下面描述中正确的是 A)while 循环执行 10 次 B)循环是无限循环 C)循环题语句一次也不执行 D)循环体语句执行一次 5.下面程序的输出结果是 。 #include<stdio.h> void main ( ) { int k=0,m=0,i,j; for (i=0; i<2; i++) { for (j=0; j<3; j++) k++ ; k-=j ; } m = i+j ;
第6页 共8页
else printf("对称\n"); return 0; } 3.设链表上结点的数据结构为 struct node{ int x; struct node *next;}; 若已经建立了一条链表,h 表示链表头指针,函数 delete 的功能是:在链表上找到与 value 相等, 则删除该结点(假定各结点的值不同) ,要求返回链表的首指针。 struct node *delete(struct node *h,int value) { struct node *p1,*p2; p1=p2=h; while(p1!=NULL) { if(p1->x = =value) { if(p1= =h) ; { h= [5] free(p1); } else ; { p2->next= [6] free(p1); } } else { p2=p1; ; } p1= [7] } return h; } 4.下面函数的功能是将两个字符串 s1 和 s2 连接起来,请填空使程序完整。 void conj(char *s1,char *s2) { char *p=s1 ; ; while (*s1) [8] while (*s2) { *s1= [9] ; s1++,s2++; } *s1=’\0’ ; } 5. 以下程序是利用选择法对 M 个整数进行从大到小排序,请在______内填入正确内容。 #include <stdio.h> #define M 10 int main() { int a[M],i,j,k,x; for(i=0;i<M;i++) scanf("%d",&a[i]); for(i=0;i<M-1;i++)
二、基础知识填空(每空 2 分,共 20 分)
1.C 程序中,文件可以用 [1] 和二进制两种代码形式存放。 2.C 语言中,数组名是一个不可改变的 [2] ,不能对它进行赋值运算。 3. 任何函数的返回值都是通过函数体中的 return 语句返回的, [3] 类型的函数没有返回值, 因此它的调用形式不能作为表达式的运算分量。
本试卷共 8 页;考试时间 120 分钟;任课教师
学院 学号 姓名
专业
2009 年级 得分
班
一、单项选择题 (每小题 1 分,共 12 分) 1.C 语言规定:在一个源程序中,main 的位置 A)必须在最开始 C)可以任意 B)必须在系统调用的库函数后面 D)必须在最后
2.表达式 18/4*sqrt(4.0)/8 值的数据类型为 A)float C)double B)char D)不确定
第2页 共8页
4 .若有以下函数调用语句 : fun(a+b,(x,y),fun(n+k,d,(a,b))); 在此 函数调用语句中 实参 的个数是 [4] 。
5.设有 char *a=”ABCD”,则 printf(“ %c”,*a)的值为 [5] 6.数学表达式
x2 + y2 等价的 C 语言表达式是 a+b
第1页 共8页
printf(“ k=%d,m=%d”,k,m) ; } A)k=0,m=3 B)k=0,m=5 C)k=1,m=3 D)k=1,m=5 6. 对于定义"int a[10];"的正确描述是: 。 A) 定义一个一维数组 a,共有 a[1]到 a[10]10 个数组元素 B) 定义一个一维数组 a,共有 a(0)到 a(9)10 个数组元素 C) 定义一个一维数组 a,共有 a[0]到 a[9]10 个数组元素 D) 定义一个一维数组 a,共有 a(1)到 a(10)10 个数组元素 。 7.以下函数的功能对应于 int fun(char *s,char *t) { while ((*s)&&(*t)&&(*t==*s)) { t++; s++; } return(*s-*t); } A)strlen(s)+strlen(t) B)strcmp(s,t) C)strcpy(s,t) D)strcat(s,t) 8.已知下列程序段: char a[3], b[]="Hello"; a=b; printf("%s", a); 。 则 A) 运行后将输出 Hello B) 运行后将输出 He C) 运行后将输出 Hel D) 编译出错 。 9.若有定义:int a[5],*p=a;则对 a 数组元素的正确引用是 A)*&a[5] B)a+2 C)*(p+5) D)*(a+2) 决定的。 10.C 语言规定,函数返回值的类型是由 A)return 语句中的表达式类型 B)调用该函数时的主调函数类型 C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型 。 11.若已定义 char s[10];则在下面表达式中不表示 s[1]的地址是 A)s+1 B)s++ C)&s[0]+1 D)&s[1] 12.若执行 fopen 函数时发生错误,则函数的返回值是 。 A)地址值 B)0 C)1 D)EOF
四、程序填空题(每空 2 分,共 24 分)
1.下面函数的作用是通过递归的方法将字符串倒置,请填空使程序完整。 void fun(char s[ ],int l,int h) ) return ; { if ( [1] else { char t ; ); fun ( [4] t = s[l] , s[l]=s[h] , s[h]=t ; } } 2. 以下程序用来检查二维数组是否对称(即:对所有 i,j 都有 a[i][j]=a[j][i]) 。 #include <stdio.h> int main(){ int a[4][4]={1,2,3,4, 2,2,5,6, 3,5,3,7, 8,6,7,4}; int i, j, found=0; for(j=0; j<4; j++){ for(i=0; i<4; i++) ){ if( [3] found = [4] ; break; } if(found) break; } if(found) printf("不对称\n");
第5页 共8页
。
。
int main() { int a,b,c,t; scanf("%d,%d,%d",&a,&b,&c); if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=c; c=t; } if(b<c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c); return 0; }