您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 习题/试题 > C语言程序设计2013期末试题(含答案)
1已经反复修改调试过了,应该没问题了。如果对答案有什么疑问可以直接私戳我qq553915228李添锐一、写出下列程序段的运行结果(40分)1.(4分)inti=1,j=2,k=4;printf(%f,,i-(float)(j/k));printf(%d,,j3k);k+=(i+k)/10+0.5;printf(%d,,k);printf(%d,(j=1)?2:0);输出:1.000000,1,(此处有空格)4,22.(4分)chara=0x12303F;printf(%d,,a);a='a'-'B'+'E';printf(%c,--a);输出:63,c3.(4分)inti=3,j=2;if(!i&&i--)i+=2;i++;printf(%d,,i);do{j+=i;i/=2;if(j8)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,245.(4分)chars[]=1234,*p;for(p=s+3;ps;p--){printf(%s,,p);}输出:4,34,234,6.(4分)intf(){staticintj=1;intk=1;return((++j)+(++k));}intmain()厦门大学《C语言程序设计》课程试卷信息科学与技术学院系2013年级专业主考教师:试卷类型:(A卷)2{inti;for(i=0;i3;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,39.(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;输出:1510.(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行之前存在38个错误。#includestdio.h/*第1行*/#defineMAX300;/*第2行*/去掉分号;inta[MAX],b[MAX],cnt;/*第3行*/voidfun()/*第4行*/{/*第5行*/intI,j,flag;/*第6行*/for(I=5;IMAX;I++)/*第7行*/本行之前加上cnt=0{/*第8行*/for(j=I-5;jI;j++)/*第9行*/if(a[I]a[j]&a[I]%2==0)flag=1;/*第10行*/&应该双写else/*第11行*/{/*第12行*/flag=0;/*第13行*/continue;/*第14行*/}/*第15行*/if(flag==1)b[cnt++]=a[I];/*第16行*/}/*第17行*/for(I=0;Icnt-1;i++)/*第18行*/i改为Ifor(j=I+1;jcnt;j++)/*第19行*/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;icnt;i++)/*第33行*/i=0printf(%d\n,b[i]);/*第34行*/4printf(\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;iMAX;i++)/*第47行*/fscanf(fp,%d,&a[i]);/*第48行*/加上fclose(fp);}/*第49行*/本题20分应该是有10处错三、编程题(40分)注意:程序中请添加必要的注释1、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。例如:输入2468,输出3197(12分)解:本题较简单,按照题目所述编写代码即可#includestdio.hintmain(){chara[4];//因为是直接输入2468输出3197所以我们要用字符串inti;scanf(%s,a);for(i=0;i4;i++){5a[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;i4;i++){printf(%d,a[i]);}return0;}2、输入一个字符串,内有数字和非数字字符。请编写一个函数找出其中连续最长的数字串,返回找到的连续最长数字串及其长度。若连续最长数字串有多个,则返回最后一个串。例如,输入“abcd12845ed125ss123?456789”,返回“456789”及6;又如,输入“abcd12345ss54321”返回“54321”和5。要求:所编写的函数中应采用指针法来引用输入字符串中的元素。(14分)解:本题难度适中,需要用到字符串转成数字等知识,最后那个要求用指针简直就是坑爹#includestdio.h#includestring.hintmain(){chara[1000],b[10][100]={'\0'},*p,*q;inti,j,k=0,l=0,m,n,maxl=0,maxnum=0;6gets(a);n=strlen(a);p=a;//以下的所有*(p+x)指的都是a[x](坑爹的指针==)for(i=0;in;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]);7printf(%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分)。解:本题考指针引用链表,较难,笔者用的方法是双向链表法#includestdio.h#includestdlib.h#definelensizeof(structp)structp{inta;structp*next;C2034^A520^B1314^8structp*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(n1)p2-next=p1;p2=p1;p1=(structp*)malloc(len);p1-a=a[n]-48;p1-before=p2;}p2-next=NULL;last=p2;returnlast;9}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){p2-before=q;q-next=p2;}if(q==NULL){p2-before=p;p-next=p2;}while(p2-next!=NULL){10p2=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;11inti,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;}
本文标题:C语言程序设计2013期末试题(含答案)
链接地址:https://www.777doc.com/doc-1745496 .html