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

}

printf(\}

main() {

NODE *head;

head = Creatlink(8, 22); outlink(head); }

第1处:p->next=NULL;应改为p=s;

第2处:s->data=rand()%m;应改为s->data=rand()%(m-1) 第3处:return p;应改为return h;

编程题

请编写一个函数float fun(double h),函数的功能是对变量h 中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)

例如:若h值为8.32433,则函数返回8.32,若h值为8.32533,则函数返回8.33

#include #include

float fun ( float h ) { }

main( ) {

float a; FILE *out;

printf ( \ scanf ( \

printf ( \ printf ( \

printf ( \ out = fopen(\

fprintf(out, \ fclose(out); }

答案是:

float fun(float h) {

long t; float s; h=h*1000; t=(h+5)/10; s=(float)t/100.0; return s; }

第17套

填空题

给定程序的功能是将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各

分段的人数存到b数组中:成绩为60到69的人数存到b[0]中,成绩为70到79的人数存到b[1],成绩为80到89的人数存到 b[3],成绩为100的人数存到b[4],成绩为60分以下的人数存到b[5]中

例如,当a数组中的数据是:93、85、77、68、59、43、94、75、98。调用该函数后,b数组中存放的数据应是1、2、1、3、0、2。 注意:部分源程序给出如下

请勿改动主函数main和其他函数中的任何内容,仅在横线上填如所编写的若干表达式或语句。

试题程序:

#include

void fun(int a[], int b[], int n) {

int i;

for (i=0; i<6; i++) b[i] = 0;

for (i=0; i<___1___; i++) if (a[i]<60) b[5]++; ___2___

b[(a[i]-60)/10]++; }

main() {

int i, a[100] = {93, 85, 77, 68, 59, 43, 94, 75, 98}, b[6]; fun(___3___, 9);

printf(\ for (i=0; i<6; i++)

printf(\ printf(\

}

第1处填空:n 第2处填空:else 第3处填空:a,b

改错题

下列给定程序中,函数FUN的功能是:计算并输出K以内最大的10个能被13或17整除的自然数之和。K的值由主函数传入,若K的值为500,则函数值为4622。

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

int m = 0, mc = 0;

while ((k>=2) && (mc<10)) {

/********found********/ if ((k=0) || (k=0)) {

m = m+k; mc++; } k--;

}

return m;

/********found********/ ___ì???___ main() {

printf(\}

第1处:if((k=0)||(k=0))应改为if((k==0)||(k==0)) 第2处:应填}

编程题

请编写一个函数fun(char *s)该函数的功能是把字符串中的内容逆置。

例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba. 注意:部分源程序给出如下。

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

#include #include #include #define N 81

void fun ( char *s) { }

main() {

char a[N]; FILE *out;

printf ( \ gets ( a );

printf ( \ puts( a ); fun ( a ); printf(\

printf ( \ puts ( a );

strcpy(a, \ fun(a);

out = fopen(\ fprintf(out, \ fclose(out); }

答案是:

void fun (char *s) {

char ch; int i,m,n; i=0;

m=n=strlen(s)-1; while(i<(n+1)/2) {

ch=s[i]; s[i]=s[m]; s[m]=ch; i++; m--; } }

第18套

填空题

Str为一个字符序列.请补充FUN函数的功能是:查找STR中值为X 的元素,返回找到值为X的元素个数,并把这些值为X的元素下标依次保存在数组BB中.

例如,在‖abcdefahij‖中查找‘A’,结果为:2个‘A’,下标依次为0、6。

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

请勿改动主函数main和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。

试题程序:#include #include #define N 20 int bb[N];

int fun(char *str, char ch) {

int i = 0, n = 0; char t = ch; char *p = str; while (*p) {

if (___1___) ___2___; p++; i++; }

return ___3___; }

main() {

char str[N]; char ch; int i, n;

printf(\ gets(str);

printf(\ puts(str);

printf(\ scanf(\ n = fun(str, ch);

printf(\ printf(\ for (i=0; i

printf(\

} 第1处填空:*p==t或t==*p 第2处填空:bb[n++]=i 第3处填空:n