上海市二级C程序设计试题及答案.docx
- 文档编号:3270200
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:12
- 大小:22.76KB
上海市二级C程序设计试题及答案.docx
《上海市二级C程序设计试题及答案.docx》由会员分享,可在线阅读,更多相关《上海市二级C程序设计试题及答案.docx(12页珍藏版)》请在冰豆网上搜索。
上海市二级C程序设计试题及答案
2008年上海市高等学校计算机等级考试试卷
二级(C程序设计)
(本试卷答题时间为120分钟)
试题一(28分,每小题4分)
解答下列各小题,把解答写在答卷纸的对应栏内。
1.写出数学计算式
的C语言表达式。
(
=3.14)
2.x是一个两位正整数,是该数的个位和十位颠倒的表达式为:
x/10+。
(如87颠倒为78)
3.以下程序段中printf语句执行几次?
i=1;
do{
for(j=1;j<=i;j++)
printf(“*”);
}while(++i<=5);
4.写出以下程序段执行后的输出结果:
intk=3,j=6,*p1=&k,*p2=&j,*p3;
p3=p1;
p1=p2;
p2=p3;
printf(“j/k=%d\n*p1=%d\n”,j/k,*p1);
5.有以下语句
structstudent{
longnum;
charname[20];
floatscore;
}stu,*p;
p=&stu;
则将学号20082168赋给结构体变量stu中的成员num,除了用赋值语句stu.num=20082168;以外,还可以使用哪种赋值语句?
第1页共7页
6.以下getResult函数的功能是比较两数,若a>b返回两者之和,否则返回两者之差。
请指出函数中的一个错误。
VoidgetResult(floata,floatb)
{floatc;
c=a>b?
a+b:
a-b;
returnc;
}
7.假定建立了如下图所示的链表结构,指针p指向一个新结点,写出将新结点插入到链表成为头结点的C语句(插入后指针head仍然指向链表头结点)
datanext
7
7
7
head
9
p
试题二(12分,每小题6分)
阅读下列程序,把程序的输出结果写在答卷纸的对应栏内。
【程序2.1】从键盘上输入134<回车>,写出下列程序的输出结果。
#include
voidmain()
{intc;
while((c=getchar())!
=’\n’
{switch(c-‘1’)
{case0:
case1:
putchar(c+4);
case2:
putchar(c+3);break;
case3:
putchar(c+2);
case4:
putchar(c+1);break;
}
}
printf(“\n”)
}
第2页共7页
【程序2.2】写出下列程序的输出结果。
#include
Voidmain()
{charstr[]=“BeijingOlympic2008”;
inti=1,j=0;
while(str[i]!
=‘\0’)
{if(str[i]>str[j])j=i;
i++;
}
printf(“%c\n”,str[j]);
str[j]=str[i];
puts(str);
}
试题三(12分,每小题6分)
下列程序中都有三个错误,按题中的功能要求,纠正错误,并加以附加行号“#XX”行改“……”的形式进行解答,把解答写在答卷纸的对应栏内。
代码左边的#1,#2,…是附加的行号。
【程序3.1】本程序中输入三个数,输出这三个数的和。
#1voidmain()
#2{inti;
#3floatx[3],sum;
#4printf(“Enterthreenumbers:
\n”)
#5sum=0;
#6for(i=0,i<3,i++)
#7{
#8scanf(“%f”,x[i]);
#9sum+=x[i];
#10}
#11printf(“sum=%d\n”,sum);
#12}
第3页共7页
【程序3.2】从键盘输入任意10个整数,用冒泡法对其升序排列。
例如,输入:
13245768109
输出:
12345678910
#1#include
#2voidbubbleSort
#3voidmain()
#4{
#5inti,a[10;]
#6for(i=0;i<10;i++)
#7scanf(“%d”,&a[i]);
#8bubbleSort(&a,10);
#9for(i=0;i<10;i++)
#10printf(“%d”,a[i]);
#11printf(“\n”);
#12}
#13voidbubbleSort(int*a,intn)
#14{
#15inti,j,t;
#16for(j=0;i #17for(i=0;i #18if(a[i] #19t=a[i];a[i+1]=t;a[i]=a[i+1]; #20} #21} 试题四(18分,每小题9分) 按指定的要求编写程序段,把解答写在答卷纸的对应栏内。 1.编写一个程序,输入一个正整数n(假设n<7),求1! +2! +3! +4! +……+n! 。 2.编写一个函数intf(intstart,intend,inta[]);利用参数start和end传入两个三位数,寻找从start到end之间满足下列两个条件的数。 条件一: 它是完全平方数;条件二: 第一个数字和最后一个数字相同,例如: 121,676找到的数存放于数组a中,并返回找到的数的个数。 提示: 开平方函数为sqrt()。 第4页共7页 试题五(15分,每个空格3分) 阅读下列问题描述和相应的程序,把应填入(n)处的内容写在答卷纸的对应栏内。 【问题描述】以下程序输入一个整数n,当n不是大于2的偶数时需重新输入,当n是大于2的偶数时重新输入,当n是大于2的偶数时,将n分解为两素数之和并输出相应分解式,程序只需要输出一个分解式即可。 【程序5】 #include Intisprime(intn) {/*判断n是否是素数,是则返回1,否则返回0*/ inti; for(i=2;i if (1) return0; (2); } Voidmain() {intn,i; do{scanf(“%d”,&n); }while((3));/*n不是大于2的偶数时重新输入*/ for(i=2;i<=n-2;i++) if(isprime(i)&&isprime((4)))/*n分解为两素数之和*/ printf(“%d=%d+%d\n”,n,i-n); } 第5页共7页 试题六(15分,每个空格3分) 阅读下列问题描述和相应的程序,把应填入(n)处的内容写在答卷纸的对应栏内。 【问题描述】下面的函数ptos()用来复原压缩过的数据(解压缩),数组p存放压缩后的数据,数组s存放复原后的数据,函数返回复原后的数据个数。 主函数main()调用函数ptos()进行数据复原,然后显示复原后的数据,同时以文本形式写入文件C08.TXT中。 下面简要说明数据的压缩规则: 当原始数据中连续出现M(M>0)个不同数据时(如: -23,-9),则在压缩数据中先存放-M,再存放这M个相邻不同的数(如: -2,-23,-9)。 当原始数据中连续出现N个(N>1)相同的数据X时(如: 5,5,5,5)。 则在压缩数据中存放N和X两个数(如: 4,5)。 压缩数据中,数据的存放次序与原始数据中的次序相一致,并在最后加上0作为结束标志。 例如原始数据中有以下数据: -23,-9,21,21,21,21,-7,8,8,8,-7,5,5,5,5 压缩后的数据为: -2,-23,-9,4,21,-1,-7,3,8,-1,-7,4,5,0 【程序6】 #include intptos(intp[],ints[]) { inti,j,k,m; i=0; (1);/*变量初始化*/ while(p[j]! =0) { m=p[j++]; if(m>0) {for(k=0;k s[i++]=p[ (2)]; j++; } else {m=-m; for(k=0;k s[i++]=p[j++]; } } return(3);/*返回复原后的数据个数*/ } voidmain() { intp[]={-2,-23,-9,4,21,-1,-7,3,8,-1,-7,4,5,0}; 第6页共7页 ints[100],n,i; FILE*fp; n=ptos((4)); fp=fopen(“C0.8TXT”,(5));/*以写方式打开文件*/ for(i=0;i {printf(“%4d”,s[i]);/*显示复原后的数据*/ fprintf(fp,“%4d”,s[i]);/*复原数据写入文件*/ } fclose(fp); } 第7页共7页 2008年上海市高等学校计算机等级考试 二级答卷纸(C程序设计) 考生注意: 本大卷纸专供C程序设计考试解题使用。 答案应填写在与试卷相对应的解答栏内。 题号 一 二 三 四 五 六 总分 加分人 复核人 得分 试题一(每小题4分,总分28分) 试题一解答栏 得分 (1) 4*3.14*r*r*r/3或4/3.0*3.14*r*r*r或4.0/3*3.14*r*r*r或4*3.14*pow(r,3)/3 4分 (2) x%10*10 4分 (3) 15 4分 (4) j/k=2 *p1=6 2分 2分 (5) p->num=20082168或 (*p).num=20082168 4分 (6) 函数getResult()的返回值类型有错误 4分 (7) p->next=head; head=p 2分 2分 评阅人 校阅人 小计 C答卷—1(共4页) 试题二(每小题6分,总共12分) 试题二解答栏 得分 (1) 54665(全错为0分,错一个数扣一分) 6分 (2) y BeijingOI 3分 3分 评阅人 校阅人 小计 试题三(每小题6分,总共12分) 试题三解答栏 得分 (1) #6for(i=0,i<3,i++)改为for(i=0;i<3;i++) #8scanf(“%f”,x[i]);改为scanf(“%f”,&x[i]); #11printf(“sum=%d\n”,sum);改为printf(“sum=%f\n”,sum); 发现1个错误得1分 改正一个错误得1分 (2) #8bubbleSort(&a,10);改为bubbleSort(a,10)或bubbleSort(&a[0],10); #18if(a[i]a[i+1]){ #19t=a[i];a[i+1]=t;a[i]=a[i+1];改为t=a[i];a[i]=a[i+1];a[i+1]=t; 发现1个错误得1分 改正一个错误得1分 评阅人 校阅人 小计 C答卷—2(共4页) 试题四(每小题9分,总共18分) 试题四解答栏 得分 (1) #include voidmain() { intn,i; longs=0,x=1; scanf(“%d”,&n); for(i=1;i<=n;i++) { x*=i; x+=x } printf(“%1d\n”,s); } 程序能实现所要求的功能得9分; 否则: 功能4分 结构3分 语法2分 (2) intf(intstart,intend,inta[]) { inti,j=0,m; for(i=start;i<=end;i++) { m=sqrt(i); if(m*m==i&&i%10==i/100) a[j++]=i; } returnj; } 程序能实现所要求的功能得9分; 否则: 功能4分 结构3分 语法2分 评阅人 校阅人 小计 C答卷—3(共4页) 试题五(每个空格3分,总共15分) 试题五解答栏 得分 (1) n%i==0 3分 (2) return1 3分 (3) ! (n>2&&n%2==0)或n<=2||n%2==1(其中==0也可以是! =1,==1也可以是! =0) 如果部分正确,酌情给1-2分 3分 (4) n-i 3分 (5) break 3分 评阅人 校阅人 小计 试题六(每个空格3分,总共15分) 试题六解答栏 得分 (1) j=0 3分 (2) j 3分 (3) i 3分 (4) p,s,如果部分正确,可酌情给1-2分 3分 (5) “w”或“w+”,如果部分正确,可酌情给1-2分 3分 评阅人 校阅人 小计 C答卷—4(共4页)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上海市 二级 程序设计 试题 答案