1、
2013年计算机二级考试:《C语言》上机试题及答案二
填空题
请补充函数FUN,它的功能是:计算并输出N(包括N)以内能被3或7整除的所有自然数的倒数之和。
例如,在主函数中从键盘给N输入30后,输出为:S=1.226323。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
试题程序: #include
2、0 ___2___ i%7==0) sum += ___3___/i; return sum; } main() { int n; double s; printf(“ Input n: “); scanf(”%d“, &n); s = fun(n); printf(” s=%f “, s); } 第1处填空:i<=n或n>=i 第2处填空:|| 第3处填空:1.0或(double)1 改错题 下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输
3、入:AaaaBBb123CCccccd,则应输出结果:upper=6,lower=8
请改正程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
4、 a++; /********found********/ if (*s>=‘a’ && *s<=‘z’) b++; s++; } } main() { char s[100]; int upper = 0, lower = 0; printf(” Please a string : “); gets(s); fun(s, &upper, &lower); printf(” upper=%d lower=%d “, upper, lower); } 第1处:void fun (char *s,in
5、t a,int b)应改为void fun(char *s,int *a,int *b) 第2处:a++;应改为(*a)++; 第3处:b++;应改为(*b)++; 编程题 请编写一个函数void fun(char*tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次存放在pp所指数组中。 例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填
6、入所编写的若干语句。
试题程序:# include
7、f(” “); fun(”a bosom friend afar brings a distant land near“, bb); out = fopen(”out.dat“, “w”); for (k = 0; k < 26; k++) fprintf(out, “%d “, bb[k]); fclose(out); } 答案是: void fun(char *tt,int pp[]) { int I; for(i=0;i<26;i++) pp[i]=0; while(*tt) {switch(*tt)
8、 { case ’a’:pp[0]++;break; case ’b’:pp[1]++;break; case ’c’:pp[2]++;break; case ’d’:pp[3]++;break; case ’e’:pp[4]++;break; case ’f’:pp[5]++;break; case ’g’:pp[6]++;break; case ’h’:pp[7]++;break; case ’i’:pp[8]++;break; case ’j’:pp[9]++;break; case ’k’:pp[10]++;break
9、 case ’l’:pp[11]++;break; case ’m’:pp[12]++;break; case ’n’:pp[13]++;break; case ’o’:pp[14]++;break; case ’p’:pp[15]++;break; case ’q’:pp[16]++;break; case ’r’:pp[17]++;break; case ’s’:pp[18]++;break; case ’t’:pp[19]++;break; case ’u’:pp[20]++;break; case ’v’:pp[21]++;break; case ’w’:pp[22]++;break; case ’x’:pp[23]++;break; case ’y’:pp[24]++;break; case ’z’:pp[25]++;break; } tt++; } }






