国家二级(C语言)机试模拟试卷989
程序填空题
1.使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blankl.c。在此程序中,函数fun()的功能是在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数列,并将中间数作为函数值返回。
例如,有9个正整数:
1 5 7 23 87 5 8 21 45
按升序排列时的中间数:
8
处理后主函数中输出的数列:
8 8 8 23 87 8 8 21 45
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的文件blankl.c中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#define N 9
int fun(int x[])
{int i,j,k,t,mid,b[N];
for(i=0;i<N;i++)
b[i]=x[i];
for(i=0;i<=N/2;i++)
{k=i;
for(j=i+1;j<N;j++)
if(b[k]>b[j])k=j;
if(k!=i)
{
/*********found*********/
t=b[i];b[i]=【1】;
b[k]=t;
}
}
/*********found*********/
mid=b【2】;
for(i=0;i<N;i++)
/*********found*********/
if(x[i]【3】mid)x[i]=mid;
return mid;
}
main()
{int i,x[N]={1,5,7,23,87,5,8,21,45};
for(i=0;i<N;i++)
printf(\\
(1)b[k] (2)4或N/2 (3)<
解析:数组x中9个元素任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,所以不必对整个数组进行排序,只需排列出数组的前半部分。找到中间数后,遍历原数组,对小于中间数的元素进行替换。
填空1:利用选择算法排序。先指定一个元素为最小,用这个数与其后的所有数进行比较,若小于此数,则进行替换。此处考查替换操作。故空1处应该填b[k]。
填空2:元素mid存放中间位置的数,数组长度为9,因此中间元素数为b[4]。故空2处应该填4或N/2。
填空3:遍历数组,当元素小于中间位置的数(mid)时,进行替换。故空3处应该填<。
程序修改题
2.使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,fun()函数的功能是删除b所指数组中小于10的数据。在主函数中输出删除后数组中余下的数据。
请改正函数fun()中指定部位的错误,使它能得出正确的结果。
注意:部分源程序在文件modil.c中。不要改动main()函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <stdlib.h>
#define N 20
int fun(int *b)
{
/*********found*********/
int t[N],i,num
for(i=0;i<N;i++)
if(b[i]>=10)
/*********found*********/
t[++num]=b[i];
/*********found*********/
for(i=0;i<nun;i++)
b[i]=t[i];
return(num);
}
main()
{int a[N],i,num;
printf(\\
(1)int t[N],i,num=0;
(2)t[num++]=b[i];或{t[num]=b[i];num++;}
(3)for(i=0;i<num;i++)
解析:要删除数组b中小于10的数,应遍历数组依次取出数组b中的元素与10进行比较,若不小于10,则将其存入数组t中,遍历完成后,数组t中的元素即为所求,再将数组t中的元素保存到数组b中即可。
(1)元素num存放不小于10的元素的个数,应将其初始化为0。
(2)将数组b中不小于10的元素存入数组t中,同时使数组t的下标加1。
(3)语法错误,没有num这个变量,应改为num。
程序设计题
3.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(),其功能是统计s所指字符串中的数字字符个数,并将其作为函数值返回。
例如,s所指字符串中的内容是2def35adh253kjsdf7/kj8655x,函数fun()返回值为11。
注意:部分源程序在文件progl.c中。
请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
void NONO();
int fun(char *s)
{
}
main()
{char *s=\\
int fun(char *s)
{
int i,n=0;
for(i=0;s[i]!=’\0’;i++)
if(s[i]>=’0’&&s[i]<=’9’)
n++;
return n;
}
解析:要统计字符串中数字字符的个数,首先应定义变量n,并将其初始化为0,然后遍历字符串,逐个判断字符是否为数字字符。判断条件为该元素的ASCII值在字符0到9的ASCII值之间,若判断条件成立,则使n的值加1,否则继续判断下一个字符,直到字符串结束。
本文档预览:3600字符,共3267字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载