上海计算机二级C语言考试真题

  • 格式:doc
  • 大小:538.00 KB
  • 文档页数:16

1单选

设有定义int a[10]; 则合法数组元素的下标范围为_0~9_____

设有定义:int x=10,y=20,z=30; 则执行下列语句后的结果是___20,30,30_____

if ( x>y ) z=x;

x=y; y=z;

printf("%d,%d,%d",x, y, z );

执行下列语句序列后,不可能出现的运行结果是________

int n;

scanf( "%d", &n);

switch ( n )

{

case 1:

case 2: putchar('X');

case 3:

case 4: putchar('Y'); break;

default: putchar('Z');

}

2填空

设有以下程序段,则执行完该程序段后,变量 i 的值是________

int i;

char s[]="Hello!", *p=s;

for( i=0; *(p+i)!='\0';

i++ );

阅读以下程序并写出运行结果___________

#include

main()

{

int k,n=0;

for ( k=1; k<=1000; k++ )

if ( k%3==0 && k%5==0 )

{

printf( "%d ", k );

n++;

if ( n==3 ) break;

}

}

3程序填空

以下程序输入n和n个大于1的正整数,输出其中素数。

如输入:5 19 93 11 37 15

则输出:19 11 37

例示说明:先输入n为5,再输入5个正整数,输出5个整数中的素数

#include

void main()

{

int n, a, i, j, ct;

scanf( "%d", &n );

for ( i=0; ____(1)____; i++ )

{

______(2)______;

scanf( "%d", &a );

for( j=2; j

if ( ____(3)____ )

ct++;

if ( ct==0 )

printf( "%d ", a );

}

printf( "\n" );

}

以下程序从文件“student.txt”读取学生的学号、姓名、平时成绩和考试成绩,再从键盘上输入一个成绩,将所有考试成绩达到或超过该成绩的学生数据写到新的文本文件“studentD.txt”。文件的最后一行为0表示学生数据结束。

设文件student.txt的内容为

101 Zhao 95 58

103 Qian 75 81

105 Sun 99 91

107 Li 80 67

0

运行时键盘输入:80

则生成新文件studentD.txt的内容为:

103 Qian 75 81

105 Sun 99 91

0

例示说明:student.txt中考试成绩在80分以上的Qian与Sun信息写到studentD.txt

源程序:

#include

void select( FILE *fp1, FILE *fp2, int x )

{

int num, score1, score2;

char name[20];

while ( 1 )

{

num = 0;

fscanf( fp1, "%d%s%d%d", &num, name, &score1, &score2 );

if ( num == 0 )

____(1)____;

if ( ____(2)____ )

fprintf( fp2, "%3d %-7s %3d %3d\n", num, name,

score1, score2 );

}

fprintf( fp2, "0" );

}

void main()

{

FILE *fp1, *fp2;

int x;

fp1 = fopen( "student.txt", "r" );

fp2 = fopen( "studentD.txt", ____(3)____ );

if ( fp1==NULL || fp2==NULL )

{ /* 文件打开失败 */

printf( "File Open Error!\n" );

return; }

scanf( "%d", &x );

select( ____(4)____ );

fclose( fp1 );

fclose( fp2 );

}

以下程序输入一个10进制整数,转换为16进制,计算16进制的各个位数,并从高位到低位依次输出。

如输入:687

则输出:2 A F

例示说明:10进制687等于16进制2AF,输出时2、A、F中间包含空格

源程序:

#include

void main()

{

int a[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] );

}

三、程序调试题(本大题2小题,第1题4分,第2题6分,共10分)

1. 程序调试题1(D_3_1.C)

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

功能说明:以下程序计算并输出等差数列的累加和,数列的首项为a0,公差为d,项数为n。

如输入:-3 5 4

则输出:sumx=18

例示说明:-3为首项,5为公差,4为项数,前4项之和为18

原程序(见C:\KS\D_3_1.C):

#include

int sumx( int a0, d, n )

{

int i, k, s=0;

k = a0;

for ( i=0; i

s += k;

k += d;

return s;

}

void main()

{

int a0, d, n; scanf( "%d%d%d", &a0, &d, &n );

printf( "sumx=%d\n", sumx(a0,d,n) );

}

2. 程序调试题2(D_3_2.C)

调试要求:下列程序有3处错误,请按题中的功能要求,在不改变程序结构(不增加、删除语句,不调整语句顺序)的情况下调试并修改该程序(在所修改语句后加/*******/字样的注释),使其运行能得到正确的结果。将结果(包括D_3_2.c文件和D_3_2.exe文件)保存到目录C:\KS\中。

功能说明:以下函数length返回字符串中字母A到字母Z所包含字符的长度。主程序输入一行字符串,调用length函数输出该字符串中大写字母A到Z的子串长度。

如输入:Z2009-AShanghaiZ

则输出:Length=8

例示说明:从A到Z的子串为Shanghai,其长度为8

原程序(见C:\KS\D_3_2.C):

#include

int length( char *p )

{

char *q, *r;

for ( q=p; *q!='\0' || *q!='A'; q++ )

;

for ( r=q; *r!='\0' && *r!='Z'; r++ )

;

return r-q;

}

void main()

{

char str[81];

int n;

gets( str[0] );

n = length( str );

printf( "Length=%d\n", n );

}

五、编程题(本大题2小题,每题18分,共36分)

1.编程题1(D_5_1.C)

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

功能说明:键盘输入5个整数,按由小到大的顺序排序后输出。

如输入:10 0 20 -5 31

则输出:-5 0 10 20 31