同济大学C语言期末考试卷.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 同济大学 语言 期末 考试卷
- 资源描述:
-
同济大学C语言期末考试卷 2005-2006学年第二学期《C程序设计期末试卷》(闭卷) 一、单项选择题(20分) 1. 在定义函数时,能用以下 (1) 标识符作函数名。 A.struct B._abc C. 8abc D. abc@ 2在一个函数被调用执行过程中,当执行到函数体中 (2) 语句后立即无条件返回主调函数。 A.goto B.break C.continue D.return 3.以下关于main函数定义的叙述中,错误的是 (3) 。 A. main函数是自定义函数,因此函数体中的声明和语句都是可选的 B. main函数定义时可以有形式参数也可以没有形式参数 C. main函数定义必须出现在一个源程序的起始位置 D. 在一个源程序中只能有一个main函数定义 4.以下函数定义中正确的是 (4) 。 A. double fun(int x,y){ return x*y;} B. double fun(int x,int x){ return x*x; } C. double fun(register int x,int y){ return x*x;} D. double fun(extern int x,int y){ return x*y;} 5.若函数定义为void fun(int x,int y,int *p) { *p= x>y ? x : y; }, 且main函数中有声明“int a=1,b=2,c[2]={0};”,则以下语句中正确的是 (5) 。 A.printf(“%d”,fun(a,b,c)); B.fun(a,b,c+1); C.fun(a,b,c[2]); D.fun(1,2); 6. 若函数定义为double fun(double x,double y){ return x/y;},则以下fun引用声明(函数原型)中错误的是 (6) 。 A. double fun(double x,double y); B. double fun(double a,double b); C. double fun(double ,double ); D. float fun(double x,double y); 7.以下程序段中,有语法错误的是 。 A. double f; double f (double x) { return f=x*x; } C. double f (double x) { double f; return f=x*x; } B. double f (double f) { return f*f;} D. double f (double x) { if(x>0){ double f ; return f=x;} else{ double f ; return f= -x;} } 8.以下一维数组声明中,正确的是 (8) 。 A. int a[ ]; B.int b[10],a[b]; C. int a[4]={1,2,3,4,5}; D. int a[sizeof('a')]={'a'}; 9.以下二维数组声明中,正确的是 (9) 。 A. char b[2][3]={“a”.”b”.”c”}; B. char b[][3]={0}; C. char b[2][]={0}; D. char b[][]={0}; 10.已知有二维数组声明“int a[3][3]={1,2,3,4,5,6,7,8,9};”,不能正确输出数组a中第2行(行下标为1)第3列元素(列下标为2)的语句是 (10) 。 A.printf(“%d”,a[1][2]); B. printf(“%d”,*(*(a+1)+2)); C. printf(“%d”,*(a+1)[2]); D. printf(“%d”,*(a[1]+2)); 11.若需要将字符串“happy”和“good luck”存储到数组中,则以下选项中正确的是 (11) 。 A. char s[2][10]; s[2][10]={“happy”, “good luck” }; B. char s[2][10]; s[0]= “happy”;s[1]=“good luck”; C. char s[2][10]; strcpy(s[0][0],“happy”);strcpy(s[1][0],“good luck”); D. char s[2][10]; strcpy(s[0],“happy”);strcpy(s[1],“good luck”); 12.已知有声明“char *s=”happy birthday”,t[10];”,要求将s指向的字符串中“birthday”子串复制到t数组中并输出t数组中的字符串,正确的操作的是 (12) 。 A.puts(strcpy(t,s)); B. puts(strcpy(t,s+6)); C. puts(strcat(t,s)); D. puts(strcat(t,s+6)); 13.在以下结构类型定义中,正确的是 (13) 。 A. struct for { int x,y; }; C. struct For { static int x, y; }; B. struct FOR { int x,y; }; D. struct FOR { int x; int x; }; A.B.C.D. 13. A.B.C.D. 14.已知有数据类型定义及变量声明如下: struct { int a; struct { char name[10];}b; }s={1,”mark”},*ps=&s; 则以下选项中能够输出“mark”的语句是 (14) 。 A.puts(name); B.puts(b.name) C.puts(s.b.name); D.puts(*p.b.name); 15.若已有数据类型定义为“struct { int x,y;}a={2,3},b={0};”,则以下语句中正确的是 (15) 。 A.b=a; B.if(a!=b)b=a; C.b+=a; D.b++; 16.在基于以下全局对象标识符p的声明中,不能做p++运算的声明是 。 A.int p; B.int a[10], *p=a; C. int a[2],*p[2]={a}; D. int a[2][2], (*p)[2]=a; 17. 若已有声明“int a[][3]={{1,2,3},{4,5},{6}},*p1=&a[0][0], (*p2)[3]=a;”,以下选项中的语句分别被执行后,屏幕输出结果不是4选项是 (17) 。 A. printf("%d",a[1][0]); B. printf("%d",a[0][3]); C. printf("%d",p1[4]); D. p2++; printf("%d",p2[0][0]); 18.以下选项均为fun函数的定义,其中有语法错误的是 (18) 。 A. void fun(int x, int *y){ x*=*y;} B. void fun(int x, int *y){ *x*=*y;} C. void fun(int *x,int y){ *x+=y;} D. int *fun(int *x,int y){ return x+=y;} 19.以下表达式中,不要求操作数a必须是左值的选项是 (19) 。 A.a++ B.*a C.--a D.a=0; 20.已知有数据类型定义为“enum flower{ROSE,LILY,TULIP}flo[2]={1,2},*pf;”则以下语句中正确的是 (20) 。 A. flo[ROSE]=LILY; B.ROSE=flo[LILY]; C. pf=&ROSE; D. flo[LILY+TULIP]=LILY; 二、填空题(18分) 1.当定义一个无返回值函数时,函数的返回值类型标应为 (1) 。 2.若已有二维数组声明“int a[][3]={{1},{2},3,4,5,6};”,则该数组共有 (2) 个数组元素。 3.若有如下数据类型定义及数组声明,则p数组在内存中占用的存储字节数为 (3) 。 struct { long x; union { int a; char b; float c;}y; }p[5]; 4.“int (*pa)();”是 (4) 的声明。 5.当程序中需要调用库函数strcmp时,应当包含头文件 (5) 。 6.当某程序准备从一个磁盘文件中读入数据,需要有类似“FILE *fp;”这样的声明,该声明中的FILE是指 (6) 。 7. 以下程序运行后输出结果是 (7) . #include<stdio.h> int f(int x,int y) { if(x<y) return x,y; else return y,x; } main() { printf("%d",f(2,3)); } 8. 以下程序运行后输出结果的第一行是 (8) 第二行是 (9) 。 #include<stdio.h> void f(int *a,int n, int times) { int i,t=a[0]; for(i=0;i<n;i++)a[i]=a[i+1]; a[n-1]=t; times++; } main() { int a[5]={1,2,3,4},i; f(a,4, a[4]); for(i=0;i<4;i++)printf("%d ",a[i]); printf("\n%d",a[4]); } 9.以下程序运行后输出结果的第一行是 (10) 第二行是 (11) 。 #include<stdio.h> int f() { int i,s=0; for(i=1;i<=3;i++) { static int i=1; s=s+i; i++; } return s; } main() { int i; for(i=0;i<2;i++)printf("%d\n",f()); } 10.以下程序运行后输出结果的第一行是 (12) 第二行是 (13) 。 #include<stdio.h> int f(int n,int x) { if(n==1)return x; else return f(n-1,x+2)+x; } main() { printf("%d\n",f(1,2)); printf("%d",f(3,2));} 11.以下程序运行后输出结果的第一行是 (14) 第二行是 (15) 第三行是 (16) 。 #include<stdio.h> int create(int (*a)[5],int m,int n) { int i,j,k; a[0][0]=m; for(k=1;k<n;k++) { i=k; j=0; a[i][j]=++m; while(j<i)a[i][++j]=++m; while(i>0)a[--i][j]=++m; } } main() { int i,j,x[5][5]={0}; create(x,1,3); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",x[i][j]); printf("\n"); } } 12.以下程序运行后输出结果的第一行是 (17) 第二行是 (18) 。 #include<string.h> #include<stdio.h> void ss(char a[][10],int *m,char b[][10],int *n) { int i,j,k; for(i=0;i<*m;i++) { for(j=0;j<*n;j++) if(strcmp(a[i],b[j])==0) { for(k=i;k<*m-1;k++) strcpy(a[k],a[k+1]); *m=*m-1; i--; break; } } for(i=0;i<*m;i++) strcpy(b[i+*n],a[i]); *n=*n+*m; } main() { char a[][10]={"this","C"}; char b[10][10]={"this","VC"}; int i,m=2, n=2; ss(a,&m,b,&n); for(i=0;i<m;i++) printf("%s ",a[i]); printf("\n"); for(i=0;i<n;i++) printf("%s ",b[i]); } 三、完善程序题(12分) 1.函数change功能:将x指向的一个二维数组中存储的n´n矩阵变换为其转置矩阵(转置矩阵的数学定义:把矩阵A的行换成同序数的列得到的一个新矩阵叫做A的转置矩阵)。 #include<stdio.h> #define swap(a,b,c) (1) void change(int x[],int n) { int i,j,k; for(i=0;i<n;i++) for(j=0; (2) ;j++) { swap(x[i*n+j],x[j*n+i],k); } } main() { int a[3][3]={1,1,1,2,2,2,3,3,3},i,j; change( (3) , 3); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%d ",a[i][j]); putchar('\n'); } } 2.insert函数功能:将key中保存的一组数据(一个新记录)插入到a指向的一个有序结构数组中,已知该结构数组按name成员字典顺序存储,插入新记录后结构数组仍然按name成员的字典顺序存储。 #include<stdio.h> #include<string.h> struct p { int id; char name[5]; }; int insert(struct p a[],int n,struct p key) { int i,j,k; for(i=0;i<n;i++) if(strcmp(a[i].name,key.name)>0 ) (4) ; for(j=n;j>i;j--) (5) ; (6) =key; return ++n; } main() { int i,n=4; struct p x[5]={{1,"a"},{3,"c"},{4,"d"},{5,"e"}},y={2,"b"}; n=insert(x,4,y); for(i=0;i<n;i++) printf("%d, %s \n",x[i].id,x[i].name); } 3.find函数功能:在x指向的一个有序二维数组的前n行中查找值为key的数组元素,若找到则将该数组元素在二维数组中的行、列下标值分别保存到row和col指向的变量中且函数返回1,若未找到则函数返回0。已知x指向的二维数组的每一行中元素的值均从小到大顺序存储,第i行中所有元素的值均小于第i+1行中所有元素的值(i=0,1,2,3…n-1)。算法:用折半查找法定位值为key的数组元素所在行,用线性查找法在已经定位的行中查找值为key的数组元素。 #include<stdio.h> int find(int x[][5],int n,int key,int *row,int *col) { int i,low=0,high=n-1,mid; while(low<=high) { mid= (7) ; if(key>=x[mid][0]&& key<=x[mid][4])break; if(key<x[mid][0]) (8) ; else if(key>x[mid][4]) low=mid+1; } for(i=0;i<5;i++) if( (9) ) { *row=mid; *col=i; return 1;} return 0; } main() { int a[5][5]={{1,3,4,6,9},{12,14,15,17,19},{22,23,24,26,28}, {31,33,34,36,37},{42,44,46,47,48}},m,n,key; puts("input key:"); scanf("%d",&key); if(find(a,5,key,&m,&n))printf("%d is stored at a[%d][%d]",key,m,n); else printf("\n %d not found!",key); } 4.f1函数功能:建立一个链表,链表各节点的数据来源于a指向的一个指针数组中的前n个元素所指向的n个字符串,函数返回链表首节点的地址。 f2函数功能:对于h指向的链表中连续出现的多个name成员相同的那些结点,统计并保存这些相同结点的数量,保留一个结点,删除其余结点。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct p { char name[20]; int count; struct p *next; }PS; PS *f1(char *a[],int n) { int i,c=1;char name[20]; PS *head=0,*p,*tp; for(i=0;i<n;i++) { tp=(PS *)malloc( (10) ); if(tp==NULL){puts("fail!");exit(0);} strcpy(tp->name,a[i]); tp->count=1;tp->next=NULL; if(head==0)head=p=tp; else { (11) =tp; p=tp; } } return head; } void f2(PS *h) { while(h->next!=NULL) { if(strcmp(h->name,h->next->name)==0) { h->next= (12) ; h->count++; } else h=h->next; } } main() { PS *head,*p; char *a[6]={"a","b","b","b","c","c"}; head=f1(a,6); f2 (head); for(p=head;p!=NULL; p=p->next) printf("%s:%d ",p->name,p->count); } KEY: 一、单项选择题(20分) (1) B (2) D (3) C (4) C (5) B (6) D (7) A (8) D (9) B (10) C (11) D (12) B (13) B (14) C (15) A (16) C (17) C (18) B (19) B (20) A 二、填空题(18分) (1) void (2) 12 (3) 40 (4) 指向函数的指针变量 (5) string.h (6) 结构类型标识符 (7) 3 (8) 2 3 4 1 (9) 0 (10) 6 (11) 15 (12) 2 (13) 12 (14) 1 4 9 (15) 2 3 8 (16) 5 6 7 (17) C (18) this, VC,C 三、完善程序题(12分) (1) (c)=(a); (a)=(b); (b)=(c); (2) j<i 或 j<=i (3) a[0] 或 *a (4) break (5) a[j]=a[j-1] (6) a[i] (7) (low+high)/2 (8) high=mid-1 (9) key==x[mid][i] (10) sizeof(PS) 或sizeof(struct p ) (11) p->next (12) h->next->next展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




同济大学C语言期末考试卷.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/10674776.html