2013年上海市计算机二级考试C语言试题

  • 格式:doc
  • 大小:125.50 KB
  • 文档页数:20

1 B试卷

1、以下程序的功能是:

输入任意整数n〔0

构成的三角形字符阵列图形,例如,输入整数6时,程序运行结果如下:

请填空完成该程序。

#include

main()

{

int i,j,n;

char (1) ;

printf("Please input n:");

scanf("%d",&n);

for(i=1;i<=n;i++)

{

for(j=1; (2) ;j++)

{ printf("%2c",ch);

(3) ;

}

(4) ;

}

} 2 2. 以下程序的功能是:

从一个字符串中截取前面给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。例如,str1="ABCDEF",n=4,截取后的字符数组str2="ABCD"。请填空完成该程序。

#include

#include

#define LEN 80

main()

{

char str1[LEN],str2[LEN];

int n,i;

printf("输入字符串:\n");

gets(str1);

printf("输入子字符串的长度:");

scanf( "%d", (1) );

for(i=0;i

(2) ;

str2[i]= (3) ;

printf("子字符串是:%s\n", (4) );

}

3

〔一〕程序调试题〔3小题,第1、2小题各3处错,第3小题4处错,每改正1处得3分,共30分〕

1. 程序调试题1

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

功能说明:程序的功能是输入一个正整数,判断该数从高位到低位各位数字是否按值从小到大排列并输出相应提示。例如,输入12234,则输出各位数字是从小到大排列。又如,输入12354,则输出各位数字不是从小到大排列。

带错误原程序〔见〕:

#include

int main()

{ int n,k,a;

printf("请输入一个正整数: ");

scanf("%d", n);

k=1;

do {

a=n%10;

n=n/10;

if ( n%10 <= a ) k=0;

}while ( n!=0 );

if ( k = 1 )

printf("各位数字是从小到大排列\n");

else

printf("各位数字不是从小到大排列\n");

return 0;

} 4

2. 程序调试题2

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

功能说明:输入一个以回车符结束的字符串〔少于30个字符〕,假设其中的第偶数个字符是小写英文字母,则转换成对应的大写英文字母,最后输出处理后的字符串。例如输入:jdk-7u25-win7,则输出:jDk-7U25-WiN7 。

带错误原程序〔见〕:

#include

#include

int main()

{ char str[30];

int i, n;

printf("请输入一个字符串:");

gets(&str);

n = strlen(str);

for (i=0; i

if ( str[i]>='a' && str[i]<='z' )

str[i] = str[i] + ('a' - 'A');

puts(str);

return 0;

} 5

3. 程序调试题3

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

功能说明:以下程序的数组t中存放了某城市7月15日到8月15日共32天每一天的日最高气温,程序的功能是统计并输出最高温度到达40℃或以上的超高温天的天数,以及最高温度在35℃或以上的连续高温天最多有多少天。针对程序中给出的原始数据,程序应输出:

最高温度到达40℃或以上的超高温天有6天

最高温度在35℃或以上的连续高温天最多有12天

带错误原程序〔见〕:

#include

int fun(int a[], int n, int *p)

{ int i, c = d40 = d = 0;

for (i=1; i

{ if ( a[i]>=35 )

{ c++;

if ( c>d ) d=c;

if ( a[i]>=40 ) d40++;

}

else c=0;

}

p = d;

return d40;

}

int main()

{ int t[32]={40,36,34,35,36,37,36,37,38,40,39,

38,37,36,34,36,37,38,36,34,36,

37,38,39,40,40,41,40,39,38,37,36};

int d40,d;

d40=fun(t, 32, d);

printf("最高温度到达40℃或以上的超高温天有%d天\n", d40);

printf("最高温度在35℃或以上的连续高温天最多有%d天\n", d);

return 0;

}

6

〔二〕编程题〔2小题,共35分,其中第1小题15分,第2小题20分〕

1.编程题1

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

程序功能:输入整数n〔设1000≤n≤9999〕,将n按十进制位分解为各乘式的累加和,格式参见例如,不输出系数为0的乘式。

运行例如1:

输入:1234

输出:1234=1*1000+2*100+3*10+4*1

运行例如2:

输入:2030

输出:2030=2*1000+3*10

2.编程题2

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

程序功能:按例如格式完成以下要求。

〔1〕 输入10个整数,保存在数组中。

〔2〕 计算并输出10个整数的最小值〔注:数组中可能存在多个最小值〕。

〔3〕 输出数组中每个最小值的下一个元素及其下标〔如果数组的最后一个元素正好为最小值,不输出该元素的下一个元素〕。

〔4〕 计算并输出上述元素的平均值〔保留小数点后一位小数,如果数组只有一个最小值且正好是最后一个元素,不输出平均值〕

运行例如1:

输入:9 0 2 0 0 1 0 3 6 1

输出:

说明:10个元素的最小值为0,共出现4次,元素0的下一个元素依次为2、0、1、3,这4个元素的平均值为。

运行例如2:

输入:60 39 81 90 60 39 90 70 78 39

输出:

说明:10个元素的最小值为39,共出现3次,元素39的下一个元素依次为81、90〔最后一个39不存在下一个元素〕,81与90的平均值为。

运行例如3:

输入:9 0 2 0 0 1 0 3 6 -1

输出:min=-1

说明:最小值为-1,是最后一个元素且只出现一次,不存在下一个元素,也没有平均值。

7 C试卷

1、以下程序的功能是:

将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。

例如, 假设输入18和2, 则应输出10010(即十进制数18转换成二进制表示是10010)。

#include

void fun( int m, int k )

{

int a[20], i;

for( i = 0; m>0; i++ ) {

a[i] = _____(1)____

m /= k;

}

for( ; i>0; _____(2) _____)

printf( "%d", _____ (3) _____ );

}

main()

{

int b, n;

printf( "\nPlease enter a number and a base:\n" );

scanf( "%d %d", &n, &b );

fun(_____(4_____ );

}

以下程序的功能是:输出以下10行10列的矩阵。请填空完成该程序。