国家二级(C语言)机试模拟试卷855
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun( )的功能是将a所指4×3矩阵中第k行的元素与第0行元素交换。
例如,有下列矩阵:
1 2 3
4 5 6
7 8 9
10 11 12
若k为2,程序执行结果为
7 8 9
4 5 6
1 2 3
10 11 12
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#define N 3
#define M 4
/*********found*********/
void fun(int(*a)[N],int【1】)
{int i,temp;
/*********found*********/
for(i=0;i<【2】;i++)
{temp=a[0][i];
/*********found*********/
a[0][i]=【3】;
a[k][i]=temp;
}
}
main( )
{int x[M][N]={{1,2,3),(4,5,6),{7,8,9),{10,11,12)),i,j;
printf(\\
(1)k(2)N(3)a[k][i]
解析:填空1:变量k在函数fun( )中已经使用,表示变量k已经是定义过的变量。但在函数中没有定义,表示变量k是函数fun( )的形参k。故空1处应该填k。
填空2:函数fun( )中,for循环完成第k行元素与第0行元素的交换,因为数组共N列,所以变量i小于N,空2处应该填N。
填空3:第0行的第i个元素与第k行的第k个元素交换,故空3处应该填a[k][i]。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun( )的功能是读入一个字符串(长度<20),将该字符串中的所有字符按ASCII值升序排列后输出。
例如,若输入\\
(1)for(i=strlen(t)-1;i;i–)或fbr(i=strlen(t)-1;i>0;i–)(2)if(t[j]>t[j+1])
解析:(1)本题利用选择排序对数组元素进行升序排列。选择排序是一种简单、直观的排序算法。它的工作原理是第1次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后从剩余的未排序元素中选出最小(大)元素,放到已排列的序列的末尾。以此类推,直到全部待排序的数据元素的个数为0。strlen( )函数所求得的字符串长度要减1,因为数组最大下标表示为字符串长度减1。(2)这里是一个逻辑分析错误,题中要求按升序排列,所以应改为if(t[j]>t[j+1])。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数fun( ),它的功能是将ss所指字符串中所有下标为奇数的字母转换为大写字母(若该位置上不是字母,则不转换)。
例如,若输入\\
void fun(char*ss)
{
int i;
for(i=0;ss[i]!=’\0’;i++)
/*将ss所指字符串中所有下标为奇数的字母转换为大写字母*/
if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)
ss[i]=ss[i]-32;
}
解析:本题要求将给定字符串ss中下标为奇数的字母转换为大写字母。需要先判断下标为奇数的字母是否是小写字母,如果是再通过其转换方法进行转换。
从C语言的学习中知道,只要将小写字母减去32即转换成大写字母,将大写字母加上32即换转成小写字母。本程序用if语句实现转换功能。
本文档预览:3600字符,共2374字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载