C语言程序设计期末试题含答案.docx
- 文档编号:23556692
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:14
- 大小:34.16KB
C语言程序设计期末试题含答案.docx
《C语言程序设计期末试题含答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计期末试题含答案.docx(14页珍藏版)》请在冰豆网上搜索。
C语言程序设计期末试题含答案
厦门大学《C语言程序设计》课程试卷
信息科学与技术学院系2013年级专业
主考教师:
试卷类型:
(A卷)
一、写出下列程序段的运行结果(40分)
1.(4分)
inti=1,j=2,k=4;
printf("%f,",i-(float)(j/k));
printf("%d,",j<3 k+=(i+k)/10+0.5; printf("%d,",k); printf("%d",(j=1)? 2: 0); 输出: 1.000000,1,(此处有空格)4,2 2.(4分) chara=0x12303F; printf("%d,",a); a='a'-'B'+'E'; printf("%c",--a); 输出: 63,c 3.(4分) inti=3,j=2; if(! i&&i--) i+=2; i++; printf("%d,",i); do{j+=i; i/=2; if(j>8)break; }while(i=3); printf("%d\n",j); 输出: 4,9(此处需要换行即\n) 4.(4分) intp[7]={11,13,15,17,18,20,23},i=0,k=0; for(;p[i]%2;) { switch(p[i]%5) { case1: k+=p[i++];break; case3: k+=p[i]; default: i++; } } printf("%d,%d",i,k); 输出: 4,24 5.(4分) chars[]="1234",*p; for(p=s+3;p>s;p--) { printf("%s,",p); } 输出: 4,34,234, 6.(4分) intf() { staticintj=1;intk=1; return((++j)+(++k)); } intmain() { inti; for(i=0;i<3;i++) printf("%d,",f()); return0; } 输出: 4,5,6, 7.(4分) voidfun(inti) { if(i) { fun(i-3); printf("%d,",i); } } intmain() { fun(9); return0; } 输出: 3,6,9, 8.(4分) union { struct{inta,b,c;}s; inta[3]; }u; intmain() { u.s.a=0;u.s.b=1;u.s.c=2; *(u.a+1)=3;u.a[2]=4; printf("%d,%d",u.s.a,u.s.b); return0; } 输出0,3 9.(4分) ints[3][3]={1,2,3,4,5,6,7,8,9}; intsum; sum=*(s[0])+*(s[1]+1)+*(s[2]+2); printf("%d",sum); return0; 输出: 15 10.(4分) FILE*fp;inte;longlen;charc; fp=fopen("pi.tmp","w"); fputs("3.1415926",fp); fclose(fp); fp=fopen("pi.tmp","r"); fscanf(fp,"%d%c",&e,&c); len=ftell(fp); fseek(fp,-1L,SEEK_END); len=ftell(fp)-len; printf("%ld",len); 输出: 6 二、改错题(20分) 已知数据文件“c: \data.dat”以二进制方式存有300个整数,函数readDat()把这些数存入数组a中,函数fun()的功能是: 依次从数组a中取出一个数,若该数连续大于它之前的五个数且该数是偶数(若之前不满五个数,则不统计),统计满足此条件的个数cnt,并把这些数按从大到小的顺序存入数组b中。 程序中包含若干个错误,请指出程序中的错误并更正。 提示: 程序30行之前存在8个错误。 #include #defineMAX300;/*第2行*/去掉分号; inta[MAX],b[MAX],cnt;/*第3行*/ voidfun()/*第4行*/ {/*第5行*/ intI,j,flag;/*第6行*/ for(I=5;I {/*第8行*/ for(j=I-5;j if(a[I]>a[j]&a[I]%2==0)flag=1;/*第10行*/&应该双写 else/*第11行*/ {/*第12行*/ flag=0;/*第13行*/ continue;/*第14行*/改为break; }/*第15行*/ if(flag==1)b[cnt++]=a[I];/*第16行*/ }/*第17行*/ for(I=0;I for(j=I+1;j if(b[I]>b[j])/*第20行*/>改成< {/*第21行*/ b[I]=b[j];/*第22行*/将22行与23行对调 flag=b[I];/*第23行*/ b[j]=flag;/*第24行*/ }/*第25行*/ }/*第26行*/ intmain()/*第27行*/ {/*第28行*/ inti;/*第29行*/加一个函数声明voidreadDat(); readDat();/*第30行*/ fun();/*第31行*/ printf("cnt=%d\n",cnt);/*第32行*/ for(i=1;i printf("%d\n",b[i]);/*第34行*/ printf("\n");/*第35行*/ return0;/*第36行*/ }/*第37行*/ voidreadDat()/*第38行*/ {/*第39行*/ inti;/*第40行*/ FILE*fp;/*第41行*/ if((fp=fopen(“c: \data.dat”,“rb”))==NULL)/*第42行*/c: \\data.dat注意双写\ {/*第43行*/ printf("can'topenfile! \n");/*第44行*/ exit(0);/*第45行*/ }/*第46行*/ for(i=0;i fscanf(fp,"%d",&a[i]);/*第48行*/加上fclose(fp); }/*第49行*/ 本题20分应该是有10处错 三、编程题(40分)注意: 程序中请添加必要的注释 1、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 例如: 输入2468,输出3197(12分) 解: 本题较简单,按照题目所述编写代码即可 #include intmain() { chara[4];//因为是直接输入2468输出3197所以我们要用字符串 inti; scanf("%s",a); for(i=0;i<4;i++) { a[i]-=48;//将字符转成相应的数字 a[i]+=5; a[i]%=10; } i=a[0];a[0]=a[3];a[3]=i; i=a[1];a[1]=a[2];a[2]=i; for(i=0;i<4;i++) { printf("%d",a[i]); } return0; } 2、输入一个字符串,内有数字和非数字字符。 请编写一个函数找出其中连续最长的数字串,返回找到的连续最长数字串及其长度。 若连续最长数字串有多个,则返回最后一个串。 例如,输入“abcd12845ed125ss123? 456789”,返回“456789”及6;又如,输入“abcd12345ss54321”返回“54321”和5。 要求: 所编写的函数中应采用指针法来引用输入字符串中的元素。 (14分) 解: 本题难度适中,需要用到字符串转成数字等知识,最后那个要求用指针简直就是坑爹 #include #include intmain() { chara[1000],b[10][100]={'\0'},*p,*q; inti,j,k=0,l=0,m,n,maxl=0,maxnum=0; gets(a); n=strlen(a); p=a;//以下的所有*(p+x)指的都是a[x](坑爹的指针==) for(i=0;i { if(*(p+i)>=48&&*(p+i)<=57) { j=i; while(*(p+j)>=48&&*(p+j)<=57) { b[k][l]=*(p+j); j++; l++; } if(--l>=maxl) { maxl=l; maxnum=k; } k++; i=i+l; l=0; } } m=strlen(b[maxnum]); printf("%s",b[maxnum]); printf("%d",m); return0; } 3、用链表存储一个八进制数(类型为unsignedlong),(520)8可存储为如下链表(^表示链表尾): 函数Add(A,B)的参数A和B分别指向两条链表(表示两个八进制数),函数返回链表C,表示A加上B后所得的八进制数。 例如,再有B如下: 则执行C=Add(A,B)后,由于(520)8+(1314)8=(2034)8,最后结果如下: 要求: (1)给出链表结点定义(2分);(蓝色字体) (2)编写Add函数,实现题目要求的功能(12分)。 (紫色字体) #include #include #definelensizeof(structp) structp { inta; structp*next; structp*before; }; structp*creat() { structp*p1,*p2,*last=NULL; intn=0; chara[10]; p1=p2=(structp*)malloc(len); scanf("%s",a); p1->a=a[n]-48; p1->before=NULL; while(a[n]! =0) { n++; if(n>1) p2->next=p1; p2=p1; p1=(structp*)malloc(len); p1->a=a[n]-48; p1->before=p2; } p2->next=NULL; last=p2; returnlast; } structp*Add(structp*p,structp*q) { structp*p1,*p2=NULL; intn=0; while(p&&q) { n++; p1=(structp*)malloc(len); p1->a=p->a+q->a; if(n==1) {p2=p1;p2->next=NULL;} else {p2->before=p1;p1->next=p2;} p2=p1; p=p->before;q=q->before; } if(p==NULL&&q! =NULL) {p2->before=q;q->next=p2;} if(q==NULL&&p! =NULL) {p2->before=p;p->next=p2;} if(q==NULL&&p==NULL) p2->before=NULL; while(p2->next! =NULL) { p2=p2->next; } while(p2->before! =NULL) { if(p2->a>=8) { p2->before->a+=p2->a/8; p2->a%=8; } p2=p2->before; } if(p2->a>=8) { p2->before=(structp*)malloc(len);p2->before->a=p2->a/8;p2->before->next=p2; p2->a%=8; p2=p2->before; } returnp2; } intmain() { structp*p,*q,*t; inti,j,k,l,m,n; p=creat(); q=creat(); t=Add(p,q); while(t) { printf("%d",t->a); t=t->next; } printf("\n"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 期末 试题 答案