国家二级C语言机试(操作题)模拟试卷421
程序填空题
1.给定程序中,函数fun的功能是建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。
例如,若N=5,生成的矩阵为:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 l
1 2 2 2 1
1 1 1 1 1
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include < stdio.h >
#define N 7
/*********found*********/
void fun (int (* a) 【1】)
{ int i, j , k,m;
if (N%2 ==0) m=N/2 ;
else m = N/2 +1;
for(j =【2】; j < N一i; j ++)
a[i][j]=a[N一i一1][j]=i+1;
for (k =1 +1; k < N 一i; k++)
/*********found*********/
a[k][i]=a[k][N一i一1]=【3】;
}
}
main ()
int x[N] [N] = {0 },i,j;
fun (x);
printf (\\
(1)[N]
(2)i
(3)i+1
解析:填空1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,因此该空应该填写[N]。
填空2:第二重for循环中a[i][j]和a[N 一i一1] [j]表示第一行和最后一行数组a[N][N]的值,因而此空应该填写i。
填空3:第三重for循环代表的是a[N][N]中每一列的值,因此此空应该填写i+1。
程序修改题
2.下列给定程序中,函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动maln函数,不得增行或删行,也不得更改程序的结构!
试题程序:
for(i=0;m;i++)
{
/*********found*********/
aa[i] =m/k;
m/=k;
}
for (;i;i 一一 )
/*********found*********/
printf (\\
(1)void fun(int m, int k)
(2)aa[i]=m%k;
(3)printf(\\
解析:(1)函数定义的格式错误,不应带有”;”。
(2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数n译出它的各位k进制数值,需采用除k取余的方法,即求n除k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的状况下循环,能顺序求出n的k进制的各个位上的数。
(3)在进行for(i一0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。
程序设计题
3.编写一个函数,其功能是:从传入的
num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标识)。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include < conio.h >
#include < stdio.h >
#include < string.h >
#include < stdlib.h >
char* fun (char (* a)[81], int
num, char *max)
{
}
void main()
{
FILE *wf;
char ss[10][81], *ps =NULL;
char s[3] [81] ={\\
char *fun (char(*a) [81], int num,
char *max)
{
int i=0;
max=a[0];
for(i=0;i < num;i++)/*找出最长的一个字符串*/
if (str1en (max) < str1en (a
[i]))
max =a[i];
return max;/*传回最长字符串的地址*/
}
解析:解答本题之前,首先应该明白ss是一个指向一维数组的指针变量,max是指向指针的变量,所以引用变量时要注意加上*。本程序使用循环语句遍历字符串数组,使用条件语句判断该字符串是否最长。
本文档预览:3600字符,共2840字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载