上海市C语言二级考试模拟题.docx
《上海市C语言二级考试模拟题.docx》由会员分享,可在线阅读,更多相关《上海市C语言二级考试模拟题.docx(20页珍藏版)》请在冰豆网上搜索。
上海市C语言二级考试模拟题
一
1,表达式sizeof(“C2009”)的值是_________
2,在C语言中,标识符只能由字母、数字和下划线字符组成,并且第一个字符不能是________字符。
3,定义intb=7;floata=5.2,c=6.9;
则表达式b*(int)(a+c)/2的值为_____________
4,设x、y均为整型变量,完成以下语句,以实现不借助任何其它变量将x、y的值进行交换:
x=x+y;y=x-______;x=x-______;
5,设有如下定义,并且结构体数组student中的元素都已有值,若要将这些元素写到fp指向的文件中,请将函数调用语句fwrite(student,sizeof(structst),50,_____);补充完整。
structst
{
charname[8];
intnum;
floats[3];
}student[50];
6,写出下列程序的输出结果________
#include
longfac(intn)
{
if(n==1)return1;
returnn*fac(n-1);
}
main()
{
printf("5!
=%ld\n",fac(5));
}
7,假定建立了以下链表结构,如图所示。
指针p与q指向2个不同的结点,t为与data同类型的数据变量,则交换2结点数据的语句为:
t=p->data;___________;和___________;
1)以下程序按每行5个数的格式输出1至n范围内能被7或17整除的整数,并求出其和。
如输入:
50
则输出:
714172128
34354249
Sum=247
源程序:
#include
voidmain()
{
inti,n,ct=0,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(____
(1)_____)
{
printf("%d\t",i);
_____
(2)_______;
ct++;
if(___(3)______)
printf("\n");
}
printf("\nSum=%d\n",sum);
}__
2)
以下程序输入10个整数到a数组,找到并输出其中最大的整数及其下标。
如输入:
80290150520330-160-9902009
则输出:
a[3]=520
源程序:
#include
#defineN10
intget_max_index(inta[],intn)
{
inti,k=0;
for(i=1;iif(____
(1)____)
k=i;
return______
(2)_____;
}
voidmain()
{
inti,k,a[N];
for(i=0;iscanf("%d",&a[i]);
k=_______(3)______;
printf("a[%d]=%d\n",k,a[k]);
}______
3)
以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,从键盘上输入平时成绩在总成绩中所占比重,计算每个学生的总成绩(四舍五入为整数)后输出到屏幕上。
文件的最后一行为0表示学生数据结束。
设文件student.txt的内容为
101Zhao9558
103Qian7581
105Sun9991
107Li8067
0
运行时键盘输入:
0.1
则屏幕输出:
101Zhao955862
103Qian758180
105Sun999192
107Li806768
源程序:
#include
voidcalc(FILE*fp,floatx)
{
intnum,score1,score2;
floatscore3;
charname[20];
while(!
feof(fp))
{/*文件还有未读数据时*/
num=0;
fscanf(fp,"%d%s%d%d",&num,name,&score1,&score2);
if(num>0)
{/*学生数据有效时*/
score3=score1*x+score2*(1-x);/*计算总成绩*/
printf("%3d%-7s%3d%3d%3d\n",num,name,score1,
score2,______
(1)______);/*总成绩四舍五入为整数*/
}
}
}
voidmain()
{
FILE*fp;
floatx;
fp=fopen("student.txt","r");
if(____
(2)____)/*如果文件打开失败*/
{
printf("FileOpenError!
\n");
return;
}
scanf("%f",&x);
calc(____(3)____);/*调用calc函数*/
fclose(____(4)____);/*关闭文件*/
}
四、程序调试题(本大题2小题,第1题4分,第2题6分,共10分)
1.程序调试题1(B_3_1.C)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括B_3_1.c文件和B_3_1.exe文件)保存到目录C:
\KS\中。
功能说明:
程序计算并输出1!
+2!
+……+n!
(1至n阶乘的累加和),其中函数fact(n)计算n!
的值,返回类型为double。
如输入:
10
则输出:
1!
+2!
+…+10!
=4037913
原程序(见C:
\KS\B_3_1.C):
#include
doublefact(intn)
{
inti;
doubleresult=1;
for(i=1;iresult=result*i;
returnresult;
}
voidmain()
{
inti,n;
doublesum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum+=fact(inti);
printf("1!
+2!
+...+%d!
=%.0lf\n",n,sum);
}
2.程序调试题2(B_3_2.C)
调试要求:
下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括B_3_2.c文件和B_3_2.exe文件)保存到目录C:
\KS\中。
功能说明:
程序输入任意一行字符串(设字符数不大于20),提取该字符串中的数字字符并组成一个整数,输出该整数及其两倍的值。
如输入:
abc12e3fgh4i
则输出:
12342468
原程序(见C:
\KS\B_3_2.C):
#include
voidmain()
{
inti,n=0;
charstr[80];
gets(str[80]);
for(i=0;str[i]!
='\0';i++)
if(str[i]>=0&&str[i]<=9)
n=n*10+str[i];
printf("%d%d\n",n,2*n);
}
五、编程题(本大题2小题,每题18分,共36分)
1.编程题1(B_5_1.C)
编程要求:
请按题中的功能要求,编写程序并能得到正确的结果。
将结果(包括B_5_1.C文件和B_5_1.exe文件)保存到目录C:
\KS\中。
功能说明:
输入5个整数,输出其中正整数的累加和与正整数的平均值,输入输出格式如以下示例。
如输入:
10020-531
则输出:
Sum=61,Average=20.3
2.编程题2(B_5_2.C)
编程要求:
请按题中的功能要求,编写程序并能得到正确的结果。
将结果(包括B_5_2.C文件和B_5_2.exe文件)保存到目录C:
\KS\中。
功能说明:
输入正整数m和n(设100≤m≤n≤999),输出m到n之间满足下列条件的三位数:
它的个位数的立方加十位数的平方再加上百位数等于该数的本身(例如135=1+3*3+5*5*5)。
如输入:
135555
则输出:
135175518
二
1,表达式strlen(“C2009”)的值是________
2,设inta=3,b=4,c=5;则a*a+b*b==c*c的结果为_____________
3,设a=2,b=3,x=3.5,y=2.5,表达式(float)(a+b)/2+(int)x%2/4的值为____________
4,设a,b,c为整型变量,写出表达式:
当a比b、c都大时结果为真__________
5,
与下列语句等价的条件表达式语句是_______
switch(x!
=0)
{
case0:
y=1;break;
case1:
y=-1;
}
6,
设有下述描述学生信息的结构定义及变量说明,则使学生变量s的出生年份为1990的赋值语句是___________
structdate
{intyear;/*年*/
intmonth;/*月*/
intday;/*日*/
};
structstudent
{intno;/*学号*/
char*name;/*姓名*/
charsex;/*性别*/
structdatebirth;/*出生年月日*/
}s,
7,假定建立了下图所示的链表结构,指针p、q分别指向如图所示的结点,则将q所指结点从链表中删除的C语句是__________
1),下面程序实现的功能是打印n以内的水仙花数,水仙花数是指其本身的值等于每一位数字的立方和,例如:
153是一个水仙花数,153=1*1*1+5*5*5+3*3*3.
如输入:
400
则输出:
1153370371
#include
voidmain()
{
intn,digit,k,m,s;
scanf("%d",&n);
for(k=1;____
(1)____;k++)
{
s=0;
m=k;
while(m!
=0)
{
digit=____
(2)____;
s=s+digit*digit*digit;
m=m/10;
}
if(____(3)____)
printf("%d",s);
}
}
2)
以下函数intsum(intx[],intnum)计算数组x前num个元素之和。
在主函数中,输入10个任意整数和下标index1、index2的值(设1<=index1<=index2<=9),调用sum()函数计算index1元素到第index2元素的和,并输出结果。
如输入:
13257964810
24
则输出:
Sum=14
例示说明:
下标从2至4的元素为2、5、7,其累加为14
源程序:
#include
intsum(intx[],intnum)
{
inti,s=0;
for(i=0;____
(1)____;i++)
s=____
(2)____;
returns;
}
voidmain()
{
inti,index1,index2,result;
intx[10];
for(i=0;i<10;i++)
scanf("%d",&x[i]);
scanf("%d%d",&index1,&index2);
result=sum(x+index1,____(3)____);
printf("Sum=%d\n",result);
}
3)以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩(学生已按学号从小到大排序),从键盘上输入一个新学生的信息,按学号顺序将数据插入到学生表中,并生成新的文本文件“studentC.txt”。
文件的最后一行为0表示学生数据结束。
设文件student.txt的内容为
101Zhao9558
103Qian7581
105Sun9991
107Li8067
0
运行时键盘输入:
104Chen8090
则生成新文件studentC.txt的内容为:
101Zhao9558
103Qian7581
104Chen8090
105Sun9991
107Li8067
0
源程序:
#include
voidmain()
{
FILE*fp1,*fp2;
intfnum,fscore1,fscore2;
charfname[20];
intnum,score1,score2;
charname[20];
intflag;
fp1=fopen("student.txt",____
(1)____);
fp2=fopen("studentC.txt","w");
if(fp1==NULL||fp2==NULL)
{
printf("FileOpenError!
\n");
return;
}
scanf("%d%s%d%d",&num,name,&score1,&score2);
_______
(2)______;
while
(1)
{
fnum=0;
fscanf(fp1,"%d%s%d%d",&fnum,fname,&fscore1,&fscore2);
if(fnum==0)
break;
if(flag==1&&num<=fnum)
{
flag=0;
fprintf(fp2,"%3d%-7s%3d%3d\n",num,name,
score1,score2);
}
fprintf(fp2,"%3d%-7s%3d%3d\n",fnum,fname,
fscore1,fscore2);
}
if(____(3)____)
fprintf(fp2,"%3d%-7s%3d%3d\n",num,name,score1,score2);
fprintf(fp2,____(4)____);
fclose(fp1);
fclose(fp2);
四、程序调试题(本大题2小题,第1题4分,第2题6分,共10分)
1.程序调试题1(C_3_1.C)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_3_1.c文件和C_3_1.exe文件)保存到目录C:
\KS\中。
功能说明:
程序输入一个正整数并因式分解,输出分解等式。
如输入:
60
则输出:
60=1*2*2*3*5
原程序(见C:
\KS\C_3_1.C):
#include
voidmain()
{
intn,i;
scanf("%d",&n);
printf("%d=1",n);
for(i=2;i<=n;)
{
if(n%i=0)
{
printf("*%d",i);
n/i;
}
else
i++;
}
}
2.程序调试题2(C_3_2.C)
调试要求:
下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括C_3_2.c文件和C_3_2.exe文件)保存到目录C:
\KS\中。
功能说明:
以下程序中函数str_to_upper将字符串中的小写字母转换为大写字母,主函数调用此函数及输入输出数据,用户通过键盘输入计算所需的数据。
如输入:
Helloworld.
则输出:
HELLOWORLD.
原程序(见C:
\KS\C_3_2.C):
#include
voidstr_to_upper(char*s)
{
while(*s=='\0')
{
if(*s>='a'||*s<='z')
*s=*s-'A'+'a';
s++;
}
}
voidmain()
{
charstr[80];
gets(str);
str_to_upper(str);
puts(str);
}
五、编程题(本大题2小题,每题18分,共36分)
1.编程题1(C_5_1.C)
编程要求:
请按题中的功能要求,编写程序并能得到正确的结果。
将结果(包括C_5_1.C文件和C_5_1.exe文件)保存到目录C:
\KS\中。
功能说明:
键盘输入5个整数,输出其中同时为3和5倍数的正整数。
如输入:
18305-1575
则输出:
3075
2.编程题2(C_5_2.C)
编程要求:
请按题中的功能要求,编写程序并能得到正确的结果。
将结果(包括C_5_2.C文件和C_5_2.exe文件)保存到目录C:
\KS\中。
功能说明:
编写程序计算并输出:
1+12+123+1234+……的前n(设0例如输入:
3,则输出:
136
又如输入:
6,则输出:
137171
三
1,在C语言中,char类型的数据所占存储空间的字节数为_____,能够测试数据所占存储空间字节数的运算符是__________
2,设有定义charx;写出判定x是否为大写字母的表达式________
3变量value已被定义为float型,对其小数部分进行四舍五入的C表达式为_________
4设有以下程序段,则执行完该程序段后,变量i的值是________
inti;
chars[]="Hello!
",*p=s;
for(i=0;*(p+i)!
='\0';i++);___
5阅读以下程序并写出运行结果___________
#include
main()
{
intk,n=0;
for(k=1;k<=1000;k++)
if(k%3==0&&k%5==0)
{
printf("%d",k);
n++;
if(n==3)break;
}
}____
6一个C程序总是从_______函数开始执行的__
7假定建立了如下图所示的链表结构,指针p、q分别指向相邻的2个结点,则将r所指结点插入p、q所指结点之间的C语句是___________;和____________;
1)以下程序输入n和n个大于1的正整数,输出其中素数。
如输入:
51993113715
则输出:
191137
例示说明:
先输入n为5,再输入5个正整数,输出5个整数中的素数
#include
voidmain()
{
intn,a,i,j,ct;
scanf("%d",&n);
for(i=0;____
(1)____;i++)
{
______
(2)______;
scanf("%d",&a);
for(j=2;jif(____(3)____)
ct++;
if(ct==0)
printf("%d",a);
}
printf("\n");
}__
2)以下程序输入一个10进制整数,转换为16进制,计算16进制的各个位数,并从高位到低位依次输出。
如输入:
687
则输出:
2AF
例示说明:
10进制687等于16进制2AF,输出时2、A、F中间包含空格
源程序:
#include
voidmain()
{
inta[10],i,n;
scanf("%d",&n);
for(i=0;n>0;i++)
{
a[i]=____
(1)____;
n/=16;
}
for(i--;____
(2)____;____(3)____)
printf("%X",a[i]);
}
_____
3)以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,再从键盘上输入一个成绩,将所有考试成绩达到或超过该成绩的学生数据写到新的文本文件“studentD.txt”。
文件的最后一行为0表示学生数据结束。
设文件student.txt的内容为
101Zhao9558
103Qian7581
105Sun9991
107Li8067
0
运行时键盘输入:
80
则生成新文件studentD.txt的内容为:
103Qian7581
105Sun9991
四、程序调试题(本大题2小题,第1题4分,第2题6分,共10分)
1.程序调试题1(D_3_1.C)
调试要求:
下列程序不能得到正确的结果,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。
将结果(包括D_3_1.c文件和D_3_1.exe文