2013年9月计算机二级C语言上机题库及答案(破译版) 下载本文

int i, m; m = 1;

for (i=___2___; i

m=0; break; }

if (m==1 && n>1) return(\ else

return(\}

main() {

int k = 0;

printf(\ scanf(\

printf(\}

第1处填空:char*fun(int n) 第2处填空:2

第3处填空:n%i==或!(n%i)或0==n%i

改错题

下列给定程序中,FUN函数的功能是:根据形参M,计算如下公式的值。

1111???...?T=1+234m

例如,若输入5,则应输出2.283333.

请改正程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。 注意:不要改动MAIN函数,不得增行或删行,也不要更改程序的结构! 试题程序:#include #include double fun(int m) {

double t = 1.0; int i;

/********found********/ for (i=2; i<=m; i++) t += 1.0/k;

/********found********/ ___ì???___ }

main() {

int m;

printf(\ scanf(\

printf(\}

第1处:t += 1.0/k;应改为t+=1.0/i; 第2处:应填return t;

编程题

请编写一个函数void fun(int tt[M][N]),tt提向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中赋予。 注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:

#include #include #define M 3 #define N 4

void fun ( int tt[M][N],int pp[N] ) { }

main( ) {

int t [ M ][ N ]={{22,45, 56,30}, {19,33, 45,38}, {20,22, 66,40}};

int p [ N ], i, j, k; FILE *out;

printf ( \ for( i=0; i

printf ( \ printf(\ }

fun ( t, p );

printf( \ for ( k = 0; k < N; k++ )

printf ( \ printf(\

out = fopen(\ for ( k = 0; k < N; k++ )

fprintf (out, \ fclose(out); }

答案是:

vid fun(int tt[M][N] ,int pp[N]) {

int i,j,min; for(j=0;j

min=tt[0][j]; for(i=0;i

if(tt[i][j]

pp[j]=min; } }

第14套

填空题

请补充fun函数, 该函数的功能是:依次取出字符串中所有小写字母,形成新的字符串,并取代原字符串.

注意:部分源程序给出如下。 仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其他任何内容。 试题程序:#include #include void fun(char *s) {

int i = 0; char *p = s; while (___1___) {

if (*p>='a' && *p<='z') {

s[i] = *p; ___2___; } p++; }

s[i] = ___3___; }

main() {

char str[80];

printf(\ gets(str);

printf(\ fun(str);

printf(\}

第1处填空:*p或*p!=‘\\0‘或*p!=0 第2处填空:i++或++i或i+=1或i=i+1 第3处填空:‘\\0‘或0

改错题

下列给定程序中,函数FUN和FUNX的功能是:用二分求方程2

x3?4x?3x?6?0

2的一个根,并要求绝对误差不超过0.001。例如,若出给m输入100,给n输入90,则函数求得的一个根值为2.000。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动MAIN函数,不得增行或删行,也不要更改程序的结构! 试题程序:#include #include

double funx(double x) {

return (2*x*x*x - 4*x*x + 3*x - 6); }

double fun(double m, double n) {

/********found********/

int r;

r = (m+n)/2;

/********found********/ while (fabs(n-m) < 0.001) {

if (funx(r)*funx(n) < 0) m = r; else

n = r; r = (m+n)/2; }

return r; }

main() {

double m, n, root;

printf(\ scanf(\ root = fun(m, n);

printf(\}

第1处:int r;应改为double r;

第2处:while (fabs(n-m)<0.001)应改为while (fabs(n-m)>0.001)

编程题

请编写fun函数,函数的功能是求出二维数组周边的元素之和,作为函数值返回,二维数例如:若二维数组中的值为: 13579 29994 69998 13570 则函数为61。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:

#include #include #define M 4 #define N 5

int fun ( int a[M][N] ) { }

main( ) {

int aa[M][N]={{1,3,5,7,9}, {2,9,9,9,4}, {6,9,9,9,8}, {1,3,5,7,0}}; int i, j, y; FILE *out;

printf ( \