国家二级C语言机试(操作题)模拟试卷674
程序填空题
1.给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<string.h>
#define N5
#define M8
void fun(char(*ss)[1])
{
char*ps[N],*tp;int i,j,k;
for(i=0;i<N;i++)
ps[i]=ss[i];
for(i=0;i<N-1;i++)
{
/******found******/
k=___1___;
for(j=i+1;j<N;j++)
/******found******/
if(strlen(ps[k])<strlen(___2___))
k=j;
tp=ps[i];
ps[i]=ps[k];
/******found******/
ps[k]=___3___;
}
printf(\\
(1)i
(2)ps[j]
(3)tp
解析:本题考查:按字符串的长短进行排序。
填空1:外循环每循环一次,k应保存当前的i值,所以应填i。
填空2:使用内循环对i+1后面的字符串长度进行比较,所以应填ps[j]。
填空3:此处的作用是交换两个变量的值,所以应填tp。
程序修改题
2.下列给定程序中,函数fun的功能是:在整数10到55之间,查找能被3整除且有一位上的数值是5的数,把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定函数中a1放个位数,a2放十位数。
请改正程序中的错误,使它能得出正确的结果。
注意:不得增行或删行,也不得更改的程序的结构!
试题程序:
#include<stdio.h>
int fun(int*b)
{
int k,a1,a2,i=0;
for(k=10;k<=55;k++)
{
/******found******/
a2=k/10;
a1=k-a2*10:
if((k%3==0&&a2==5)||
(k%3==0&&a1==5))
{b[i]=k;i++;}
}
/******found******/
return k;
}
main()
{
int a[100],k,m;
m=fun(a);
printf(\\
(1)a2=k/10;
(2)return i;
解析:本题考查:取数值n的各个位;return语句,将需要返回的函数值返回给函数main。
(1)a2存放十位数,所以是a2=k/10,此处是一个书写错误。
(2)根据题意,要返回能被3整除的数的个数,从循环体中可以知道其个数是由i来计算的,所以返回的是i。
程序设计题
3.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a [][N]),该函数的功能是:将数组左下半三角元素中的值全部置0。例如a数组中的值为:
1 9 7
2 3 8
4 5 6
则返回主程序后a数组中的值应为:
0 9 7
0 0 8
0 0 0
注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<(20hio.h>
#include<stdio.h>
#include<stdlib.h>
#define N5
void fun(int a[][N])
{
}
void main()
{
FILE*wf;
int a[N][N],i,j;
int b[N][N]={1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4};
system(\\
void fun(int a[][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=0;/*将数组左下半三角元素中的值全部置0*/
}
解析:本题考查:for循环语句,使用嵌套循环语句遍历二维数组的各个元素;二维数组元素的引用。对于N×N二维数组,如何表示其左下半三角元素,可以通过以下语句实现:
for(i=0;i<n;i++)
for(j=0;j<=i;j++)
外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以j的范围是0~i。
本文档预览:3600字符,共2721字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载