1、计算机二级(C)上机考试 28 及答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 请补充 main 函数,该函数的功能是:把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。 例如:当 strN=“123 abcdef ABCDEF!”,结果输出:“123 ABCDEF ABCDEF!”。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #include #define N 80 void main()
2、 int j; char strN=“ 123abcdef ABCDEF!“; char *pf=str; clrscr(); printf(“*original string */n“); puts(str); 【1】; while(*(pf+j) if(*(pf+j)=a j+; else 【3】; printf(“*new string*/n“); puts(str); system(“pause“); (分数:-1.00)_正确答案:(【1】j=0 【2】*(pf+j)-32 【3】j+ )解析:填空 1:变量 j 声明时没有初始化,而后面程序用到 j,所以在这里对 j 初始化为 0。
3、填空 2:将小写字母转换为对应的大写字母的方法是,小写字母的 ASCII 码减去 32,得到对应的大写字母的 ASCII 码。填空 3:如果当前字符不是小写字母,则不做任何处理,使指针指向下一个字符,准备进行判断。2.改错题 下列给定的程序中,函数 fun()的功能是:用选择法对数组中的 n 个元素按从大到小的顺序进行排序。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #define N 20 void fun(int a,int n) int i,j,t,p; /*found*/ for(j=
4、0;jap) p=i; t=ap; ap=aj; /*found*/ ap=t; main() int aN=11,32,-5,2,14,i,m=5; printf(“排序前的数据:“); for(i=0;i_正确答案:((1)错误:for(j=0;j解析:错误 1:根据 C 语言语法,for 循环中循环条件后不加分号,除非做空操作。 错误 2:将两数进行交换的常用语句,借助第三个变量。 3.编程题 程序定义了 NN 的二维数组,并在主函数中自动赋值。请编写函数 fun(int a N ,int n),该函数的功能是使数组左下半三角元素中的值加上 n。 例如:若 n 的值为 3,a 数组中的值
5、为 a=2 5 4 1 6 9 5 3 7 则返回主程序后 a 数组中的值应为 5 5 4 4 9 9 8 6 10 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define N 5 fun(int a N, int n) main() int aNN,n, i,j; clrscr(); printf(“* The array */n“); for(i=0; i=5); printf(“n=%4d/n“,n); fun(a, n); printf(“*THE RESULT*/n“); for(i=0; i_正确答案:(fun(int a N, int n) int i, j; for(i=0; i=i; j+) aij=aij+n; /*使数组左下半三角元素中的值加上 n*/ )解析:首先从数组中找出要被加上 n 的那部分元素,找的过程其实就是找出将被挑出的那部分元素在原数组中的分布规律的过程。通过观察得出,要被处理的那部分元素的下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得合乎要求的元素,然后再加上n。