国家二级C语言机试(操作题)模拟试卷272
程序填空题
1.给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是\\
(1)0
(2)‖
(3)1
解析:填空1:本题考查为变量赋初值,在这里row+=a[i][j]代表是每行的总和,colum+=a[j][i]代表的是每列的总和,因而row,colum在初始化时应该为零,此空应该填0。
填空2:本题考查了if条件语句,此句if判断代表每行的总和与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返回0,因而此空应该填写‖。
填空3:题目要求若矩阵是“幻方”,则函数返回值为1,因而此空应该填写1。
程序修改题
2.下列给定程序中函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>
#define MAXLINE 20
fun(char*pstr[6])
{
int i,j;
char*P;
for(i=0;i<5;i++)
{
/*********found*********/
for(j=i+1,j<6,j++)
{
if(strcrnp(*(pstr+i),(pstr+j))>0)
{
P=*(pstr+i);
/*********found*********/
*(pstr+i)=pstr+j;
*(pstr+j)=p;
}
}
}
}
void main()
{
int i;
char*pstr[6],str[6][MAxLINE];
system(\\
(1)for(j=i+l;j<6;j++)
(2)*(pstr+i)=*(pstr+j);
解析:本题考查:冒泡排序算法;for循环语句格式;指针数组。
(1)此处考查for语句的格式,各表达式之间应用“;”隔开。
(2)此处考查用指针表示数组元素的方法,*(pstr+i)表示pstr所指向数组的第i个元素,同理*(pstr+j)表示pstr所指向数组的第j个元素。
冒泡排序算法,其基本思想是:将待排序的元素看做是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理两遍之后,“次轻”的元素就浮到了次高位置。依此类推,完成排序。
实现数组s[N]的升序排列代码如下:
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(s[i]>s[j])
{ t=s[i];s[i]=s[j];
s[j]=t;)
程序设计题
3.请编写函数fun,其功能县将形参s所指字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。
注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
试题程序:
#include<stdio.h>
#defitie N 20
void NONO();
void fun(char*a,char*s)
{
}
main()
{char s1[N],*s2=\\
void fun(char*a,char*s)
{while(*s!=’\0’)
{*a=*s;
a++;
s++;
}
*a=’\0’;
}
解析:要将s所指的字符串存入a所指的字符串中,程序要求不能使用系统提供的字符串函数,本题可以使用循环语句,依次取出a所指字符串中的元素,将其存入s所指的字符串中,最后为s所指的字符串添加结束标识’\0’。
本文档预览:3600字符,共2425字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载