(063试卷)1/9(063)上海大学2006-2007年春季学期试卷2007.6课程名:程序设计基础(C)课程号:00863006学分:5应试人声明:我保证遵守《上海大学学生手册》中的《上海大学考场规则》,如有考试违纪、作弊行为,愿意接受《上海大学学生考试违纪、作弊行为界定及处分规定》的纪律处分。学号:姓名:学院/教师:题号一二三四卷面上机总分题分21368127723100得分考生须知:1.试卷和答题纸上的“学号、姓名、学院、教师”都要填上;2.所有答题内容都写在答卷纸上,交卷时将试卷和答卷纸一起交上;3.不遵守上述要求者考试成绩将为零分。4.本卷考试的得分为卷面分,电脑上机考试(另行安排)的得分为上机分,考试成绩为卷面分与上机分之和。一、基础题(21分,第1小题3分,其它每小题2分)1.定义intx=63,y=36,z=100;写出z+=(z==x+y)?x++:--y;执行后各变量的值。2.定义floatx=6.3,y=3.6;计算表达式(int)(x+y)*2与(int)(2*(x+y))的值。3.设a=b=6,分别判断表达式4a6和b++==6是真还是假。4.分别写出判断表达式:字符x为大写字母,字符x为数字字符。5.设x为正实数,分别写出表达式:x截去小数后的整数值与四舍五入后的整数值。6.将二进制数01011010转换为十进制和十六进制数。7.计算0x63^0x5A和0x63|~0x5A的值,结果用16进制表示。8.写出printf(“%d,%05d,%4.2f,%u”,-2,123,45.678,-1);的执行结果。9.定义inta[]={11,22,33,44,55,66,77},*p=&a[2],*q=a+5;写出printf(“%d,%d”,q-p,*q-*p);的运行结果。10.定义FILE*fp,写出以读方式打开文本文件test.txt的语句。(063试卷)2/9二、阅读程序(36分,每小题4分)仔细阅读下列程序,将各程序的运行结果写在答卷纸上。(1)程序#includestdio.hmain(){intx,y,z,w,t;scanf(%d%d%d%d,&x,&y,&z,&w);t=x;x=y;y=z;z=w;w=t;printf(x=%d,y=%d,z=%d,w=%d\n,x,y,z,w);}输入:10203040输出:?(2)程序#includestdio.hmain(){intn;while(1){scanf(%d,&n);if(n0)break;elseif(n=60)printf(%disPASS\n,n);elseprintf(%disFAIL\n,n);}}输入:5898-1输出:?(3)程序#includestdio.hmain()(063试卷)3/9{inti,j;for(i=1;i=4;i++){for(j=1;j=i;j++)printf(%d,%-3d,i,-j);printf(\n);}}输出:?(4)程序#includestdio.hmain(){longn;inta[10],i;scanf(%ld,&n);for(i=0;n0;i++){a[i]=n%10;n/=10;}for(i--;i=0;i--)printf(%2d,a[i]);}输入:12345678输出:?(5)程序#includestdio.h#defineN5main(){inta[N],max,min,sum,i;for(i=0;iN;i++)scanf(%d,&a[i]);(063试卷)4/9sum=max=min=a[0];for(i=1;iN;i++){sum+=a[i];if(a[i]max)max=a[i];if(a[i]min)min=a[i];}printf(max=%d\nmin=%d\nsum=%d\naver=%4.2f\n,max,min,sum,(float)(sum-max-min)/(N-2));}输入:203058540输出:?(6)程序#includestdio.hchar*toucase(char*str){char*p;for(p=str;*p!='\0';p++)if(*p='a'&&*p='z')*p=*p-'a'+'A';returnstr;}main(){chars[81]=Hello.;puts(toucase(s));puts(toucase(gets(s)));}输入:Howareyou?输出:?(7)程序#includestdio.hintfunc(inta){staticintct=0;(063试卷)5/9return100*a+ct++;}main(){inti;for(i=6;i=9;i++)printf(Data=%d\n,func(i));}输出:?(8)程序#includestdio.hvoidsplit(char*str,char*word,char*rem){char*p;for(p=str;*p=='';p++);while(*p!=''&&*p!='\0')*word++=*p++;*word='\0';while(*p!='\0')*rem++=*p++;*rem='\0';}main(){chars[81],w[40][81];intn=0;gets(s);dosplit(s,w[n++],s);while(w[n-1][0]!='\0');for(n-=2;n=0;n--)puts(w[n]);}输入:Iamfine.!@#$%输出:?(063试卷)6/9(9)程序#includestdio.hstructfs{intfz,fm;};voidprint(structfs*p){printf(fs=%d/%d\n,p-fz,p-fm);}structfs*simp(structfs*p,intg){if(gp-fz||gp-fm)returnp;if(g1&&p-fz%g==0&&p-fm%g==0){p-fz/=g;p-fm/=g;simp(p,g);}elsesimp(p,g+1);}main(){structfsfsdata;FILE*fp;intn,i;fp=fopen(063.txt,r);fscanf(fp,%d,&n);for(i=0;in;i++){fscanf(fp,%d%d,&fsdata.fz,&fsdata.fm);print(simp(&fsdata,1));}fclose(fp);}设文件与内存操作总是成功的,并设文件063.txt的内容为:2121612(063试卷)7/9输出:?三、改错程序(8分,每错误点2分)下列程序各有两个错误(两个错误分别是在不同的行上,并只在有注解行号所标注的行上),按原来程序的要求,纠正错误,并将错误所在行号以及错误行完整的正确内容写在答卷纸的对应栏内。(1)以下函数isprime判断一个正整数是否为素数,若是素数,返回1,否则返回0,主程序调用该函数并输出数组中的所有素数。#includestdio.hintisprime(intn){inti;/*1*/for(i=2;in;i++)/*2*/if(n%i!=0)/*3*/return0;/*4*/return1;}main(){inta[5]={13,15,17,19,21},i;/*5*/for(i=0;i5;i++)/*6*/if(isprime(a[i]))/*7*/printf(%f,a[i]);}/*运行后将输出:131719*/(2)函数mystrcat实现库函数strcat相同功能,将字符串src拼接至字符串dest的末尾,并返回拼接后的字符串。#includestdio.hchar*mystrcat(char*dest,char*src){char*p;/*1*/for(p=dest;*p!='\0';p++);/*2*/for(;*src!='\0';p++,src++)/*3*/*p=*src;/*4*/*p='\n';/*5*/returnsrc;(063试卷)8/9}main(){chars[81]=Hi;puts(mystrcat(s,everybody.));}/*运行后将输出:Hieverybody.*/四、程序填空(12分,每填空2分)阅读下列问题描述和相应的C程序,把应填入其中(n)处的内容写在答卷纸的对应栏内。(1)以下sort函数使用选择法对数组按从小到大排序。#includestdio.hvoidsort(inta[],intn){inti,j,k,t;for(i=0;in-1;i++){for(k=j=i;jn;j++)if((1))k=j;if(k!=i){t=a[k];(2);a[i]=t;}}}main(){inta[10]={20,30,50,40,10,90,70,60,99,80},i;sort((3));for(i=0;i10;i++)printf(%3d,a[i]);}/*运行后将输出:10203040506070809099*/(2)以下结点node定义了一个学生的信息,函数insert将一个新结点插入到链表head的末尾并返回新链表的头结点指针。函数printlist输出链表中所有结点的学号信息。#includestdio.h(063试卷)9/9#includestdlib.hstructnode{intnum;/*学号*/structnode*next;};structnode*insert(structnode*head,intnum){structnode*p,*q;p=(structnode*)(4);p-num=num;p-next=NULL;if(head==NULL)returnp;for(q=head;q-next!=NULL;q=q-next);(5);returnhead;}void*printlist(structnode*head){structnode*p;for(p=head;(6);p=p-next)printf(%d\t,p-num);printf(\n);}main(){structnode*head=NULL;inti;for(i=11;i=15;i++)head=insert(head,i);printlist(head);/*结点删除部分略*/}/*运行后将输出:1112131415*/(063试卷)10/9(063)上海大学2006-2007年春季学期答卷2007.6课程名:程序设计基础(C)课程号:00863006学分:5应试人声明:我保证遵守《上海大学学生手册》中的《上海大学考场规则》,如有考试违纪、作弊行为,愿意接受《上海大学学生考试违纪、作弊行为界定及处分规定》的纪律处分。学号:姓名:学院/教师:题号一二三四卷面上机总分题分21368127723100得分考生须知:5.试卷和答题纸上的“学号、姓名、学院、教师”都要填上;6.所有答题内容都写在答卷纸上,交卷时将试卷和答卷纸一起交上;7.不遵守上述要求者考试成绩将为零分。8.本卷考试的得分为卷面分,电脑上机考试(另行安排)的得分为上机分,考试成绩为卷面分与上机分之和。小题第一题答栏(基础题)21%第1小题3分,其它每小题2分1x=63y=35z=1352前式:18后式:193前式:真后式:真4前式:x=’A’&&x=’Z’后式:x=’0’&&x=’9’5前式:(int)x后式:(int)(x+0.5)6十进制:90十六进制:0x5A7前式:0x39后式:0xffe78-2,00123,45.68,6553593,3310fp=fopen(“test.txt”,”r”);小计:(063试卷)11/9小题第二题答栏(阅读程序)36%4分/格1x=20,y=30,z=40,w=10258isFAIL98i