您的当前位置:首页正文

上海市2011计算机二级B卷答案

2022-06-03 来源:客趣旅游网
2010年上海市高等学校计算机等级考试试卷 二级 C语言程序设计 ( B 卷)

(本试卷考试时间 120 分钟)

一、单选题 ( 本大题 15 道小题 ,每小题 2 分,共 30 分),从下面题目给出的A、B、C、D四个可供选择的答案中选择一个正确答案。

1. 在一个C 语言源程序中,main()函数的位置__ ___。 答案: C A. 必须在最前面

B. 必须在其它函数之前 C. 可以在任意位置 D. 必须在最后面

2. 若有变量定义语句:char ch='\'; 则变量ch 。 答案: C A. 包含4个字符 B. 包含2个字符 C. 包含1个字符

D. 说明不合法,ch的值不确定

3. 设有变量定义char str[80]; 下列 语句能将字符串“shanghai 2011”从键盘输入到数组变量str中。 答案: B A. printf(\"%s\B. gets(str);

C. scanf(\"%s\D. puts(str);

4. 若有以下变量定义:

int n=5,m=4;

float a=2.2,b=1.5;

则表达式n/m + (int)(a+b)%2的值为________。

答案: C A. 1 B. 1.25 C. 2 D. 2.25

5. 在语句if(!(e+1))a=b; 中条件 !(e+1)等价于_______。 答案: D A. e!=0 B. e==0 C. e!=-1 D. e==-1

6. 以下程序运行的结果是 。

第 1 页 共 12 页

void main( )

{ int a=2,b=3,c=2; if(aprintf(“%d\\n”,c); }

答案: D A. 0 B. 1 C. 2 D. 3

7. 设有变量定义:int a[ ]={5, 6, 1, 3, 7}, c, i; 当执行完语句: for(i=c=0; i<5; i++) { if(a[i]%3 = =0) continue; c++; }

之后,c的值是_____。 答案: C A. 1 B. 2 C. 3 D. 4

8. 以下程序运行结果为_______

#define PII 3

#define S(x) PII*x*x main()

{ int a=1, b=2, c; c = a+b;

printf(\"%d\\n\}

答案: B A. 9 B. 27 C. 7 D. 10

第 2 页 共 12 页

9. 若有变量定义:int a[4], *p=a; 则以下对数组a的元素不正确的引用是_____。 答案: D A. *a B. *(p+1) C. p[1] D. a[4]

10. 设有变量定义:int d[50], *p=&d[0]; 下面哪个表达式计算结果为int类型的数值(非地址) 。 答案: D A. p+=1 B. p++ C. &d[2] D. p-d

11. 为了判断两个字符串s1和s2是否相等,应当使用_____。 答案: D A. if (s1==s2 ) B. if (s1 = s2 )

C. if ( strcpy (s1,s2 ) ) D. if ( strcmp( s1,s2) == 0 )

12. 设有变量定义int n; char str[80];与函数调用:n=hex2dec(str);则函数hex2dec正确的函数说明应该是_______。 答案: A A. int hex2dec(char str[]); B. void hex2dec(char str[]); C. int hex2dec(char str); D. void hex2dec(char str);

13. 设有以下结构体定义及初始化,表达式(stu[0].score+stu[1].score)/2的

结果是_______。

struct student {

int num; float score;

} stu[2]={90,91.5,93,92.5};

答案: C A. 91.0 B. 91.5 C. 92.0 D. 92.5

14. 在C语言中,将文件内部的位置指针重新指向一个流(数据流/文件)的开头的库函数是_______。 答案: B

第 3 页 共 12 页

A. fgetc B. rewind C. fscanf D. fread

15. 若建立了以下链表结构,head,p,q是指向结点的指针,以下_____组语句的功能是输出如下图所示的中间结点的数据项。

答案: B

A. q = p; printf(\"%c\

B. q = p->next; printf(\"%c\C. q = p; printf(\"%c\

D. q = p->next; printf(\"%c\

二、程序填空题 ( 本大题 3 道小题 ,每空 2.5 分,共 30 分)。 1. 程序功能:运行时若输入a、n分别为2、5,则输出下列表达式的值。

2+22+222+2222+22222 #include void main()

{ int j,a,n,s,t=0;

____1____;

scanf(\"%d%d\

for(j=1; ___3____;j++) {

t=t*10+1; s=____4____;

} s=s*a;

printf(\"%d\\n\}

1): 【s=0】

第 4 页 共 12 页

2): 【&n】 3): 【j<=n】 4): 【s+t】【t+s】

2. 程序完成以下功能:对x=1,2,...,10,求函数f(x)=x-10*cos(x)-5*sin(x)的最大值,并将该值写到新建文件data.txt中。

#include #include void main() { FILE *p;

float f(float),max,x;

if((p=fopen(\"___1____ \ { printf(\"cannot open FILE\\n\"); exit(0); } max=f(1);

for(x=2;x<=10;x++) if(___2____ fprintf(p,\"%.3f\ fclose(___3____); }

float f(float x) { ___4____;

y=x-10*cos(x)-5*sin(x); return y; } 1): 【data.txt】 2): 【max】 3): 【p】 4): 【double y】【float y】

3. 在输入的字符串中删除小写字母t,并统计删除的个数。

如输入:gt=5xt-6ty 则输出:删除后的串为:g=5x-6y 删除个数:3

#include #include int f(char s[]) { int i=0, ___1____; while(s[i]!='\\0') if(___2___ == 't') {

strcpy(s+i,s+i+1);

第 5 页 共 12 页

c=c+1; } else i++; ___3____; }

void main() { int s;

char str[80]; gets(str);

s=f(___4____);

printf(\"删除后的串为:\") ; puts(str);

printf(\"删除个数:%d\

} 1): 【c=0】 2): 【s[i]】 3): 【return c】 4): 【str】

三、操作题

(一)程序调试题(3小题,第1小题2处错,第2、3小题各3处错,每改正1处错2.5分,共20分)

1. 程序调试题1

调试要求:下列程序包含2个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_1.C文件和B_2_1.EXE文件)保存到目录C:\\KS\\中。

功能说明:程序从键盘输入8个学生计算机二级考试的成绩(成绩可能有小数),统计并输出成绩合格的学生的人数。程序对有小数的成绩应也能够正确处理。 如输入:71.5 46 64.5 82 94 53 79 48 则输出:5 带错误原程序(见C:\\KS\\B_2_1.C): #include int main() {

int i, c;

float score[8];

c=0;

for (i=0; i<8; i++)

{ scanf(\"%d\ if (score[i]≥60) c++;

第 6 页 共 12 页

}

printf(\"%d\\n\

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

答案:

#include int main() {

int i, c;

float score[8];

c=0;

for (i=0; i<8; i++)

{ scanf(\"%f\ /*******/ if (score[i]>=60) c++;/*******/ }

printf(\"%d\\n\

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

2. 程序调试题2

调试要求:下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_2.C文件和B_2_2.EXE文件)保存到目录C:\\KS\\中。

功能说明:程序从键盘输入一个字符串(长度不超过80),然后用选择法按照字符顺序从小到大进行排序,最后输出排序后的字符串。 如输入:ca39t6k 则输出:369ackt 带错误原程序(见C:\\KS\\B_2_2.C): #include #include int main() {

char str[81], *p, *q, *minq;

gets(str[81]);

for (p=str; *p!='\\0'; p++) // 用选择法按照字符顺序从小到大进行排序 {

for (q=minq=p; *q!='\\0'; q++) // 用minq指向本趟排序字符值最小的字符的位置 if (*q>*minq) minq=q;

if (minq!=p) // 字符值最小的字符不在希望的位置上,则交换 { c=*minq; *minq=*p; *p=c; } }

第 7 页 共 12 页

puts(str);

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

答案:

#include #include int main() {

char str[81], *p, *q, *minq,c; /*******/

gets(str); /*******/

for (p=str; *p!='\\0'; p++) // 用选择法按照字符顺序从小到大进行排序 {

for (q=minq=p; *q!='\\0'; q++) // 用minq指向本趟排序字符值最小的字符的位置 if (*q<*minq) minq=q; /*******/

if (minq!=p) // 字符值最小的字符不在希望的位置上,则交换 { c=*minq; *minq=*p; *p=c; } }

puts(str);

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

3. 程序调试题3

调试要求:下列程序包含3个错误,请按题中的功能要求,调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括B_2_3.C文件和B_2_3.EXE文件)保存到目录C:\\KS\\中。

功能说明:函数mysum的功能是计算n个整数中数值在70~80之间(含70和80)的整数的和,程序从键盘输入8个整数,通过调用函数mysum计算这8个整数中数值在70~80之间的整数的和,然后输出。

如输入:23 71 56 85 94 78 63 80 则输出:sum=229 带错误原程序(见C:\\KS\\B_2_3.C): #include

float mysum(int b[], int n) { float s; int i;

for (i=0; iif (70<=b[i]<=80) s += b[i]; return s; }

int main() {

第 8 页 共 12 页

int a[8], i;

for (i=0; i<8; i++)

scanf(\"%d\

printf(\"sum=%.0f\\n\

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

答案:

#include

float mysum(int b[], int n) { float s; int i;

for (i=0; iif (70<=b[i]&&b[i]<=80) s+= b[i]; /*******/ return s; }

int main() {

int a[8], i;

for (i=0; i<8; i++)

scanf(\"%d\

printf(\"sum=%.0f\\n\ /*******/

getchar(); /*本句无错;暂停程序,按任意键继续 */ }

(二)编程题(2小题,共35分) 1.编程题1

编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括B_4_1.C文件和B_4_1.EXE文件)保存到目录C:\\KS\\中。

程序功能:从键盘上输入一个字符并存放到变量c,再输入一个整数存放到变量n(设2≤n≤20),输出以变量c中的字符组成的n行2n列方波波形图案,图案及坐标计算如图所示。

第 9 页 共 12 页

#########←第1行 # # # # # # # # # # # ######### #←第n行↑ ↑ ↑第1列 第n列 第2*n列

程序运行两次,分别输入“# 8”和“@ 5”时的运行结果如下:

参考代码:

#include \"stdio.h\" #include \"stdlib.h\"

void prin(char c,int n) {

int i;

for(i=1;i<=n;i++) printf(\"%c\}

main() {

char c;int i,j,n;

printf(\"请输入字符\");scanf(\"%c\

printf(\"\\n请输入图形的行数\");scanf(\"%d\ prin(' ',n-1);prin(c,n+1);printf(\"\\n\"); for(i=2;i<=n-1;i++) { for(j=1;j<=2;j++) {prin(' ',n-1); prin(c,1); }

printf(\"\\n\");

第 10 页 共 12 页

}

prin(c,n); prin(' ',n-1); prin(c,1); }

2.编程题2

编程要求:请按题中的功能要求,编写程序并能得到正确的结果。将结果(包括B_4_2.C文件和B_4_2.EXE文件)保存到目录C:\\KS\\中。

功能说明:电力公司根据如下税率表进行收费:头300度以每度0.6元计,下一个 300度(到600度)以每度0.5元计,再下一个 400度(到1000度)以每度0.4元计,超过1000度的电量以每度0.3元计。

(1)设计计费函数float fee(int x); 函数根据客户用电量(x)计算电费并返回;

(2)设计主函数,从键盘上输入3个客户的用电量,调用fee函数分别计算出相应电费,并按示例格式输出(电费保留一位小数)。 运行示例: 输入:

123 2011 985 输出:

fee(123)=73.8 fee(2011)=793.3 fee(985)=484.0 参考代码: #include \"stdio.h\" #include \"stdlib.h\" float fee(int x) { float y;

if(x<=300) y=x*0.6; else if(x<=600)

y=300*0.6+(x-300)*0.5; else if(x<=1000)

y=300*0.6+300*0.5+(x-600)*0.4; else

y=300*0.6+300*0.5+400*0.4+(x-1000)*0.3; return y; }

main() {

int x1,x2,x3;

printf(\"请输入3个客户的用电量\"); scanf(\"%d%d%d\

printf(\"fee(%d)=%.1f\\nfee(%d)=%.1f\\nfee(%d)=%.1f\\n\ }

第 11 页 共 12 页

第 12 页 共 12 页

因篇幅问题不能全部显示,请点此查看更多更全内容