上海市C语言二级考试模拟题.docx
- 文档编号:4985942
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:20
- 大小:39.90KB
上海市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;i if(____ (1)____) k=i; return______ (2)_____; } voidmain() { inti,k,a[N]; for(i=0;i scanf("%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;i result=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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上海市 语言 二级 考试 模拟