上海计算机二级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