国家二级(C语言)机试模拟试卷981
程序填空题
1.使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blankl.c。在此程序中,函数fun()的功能是判断形参s所指字符串是否是回文(palin drome),若是,函数返回值为1;若不是,函数返回值为0。回文是正读和反读都一样的字符串(不区分大小写字母)。
例如,LEVEL和Level是回文,而LEVLEV不是回文。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序在文件blankl.c中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int fun(char *s)
{char *lp,* rp;
/*********found*********/
lp=【1】;
rp=s+strlen(s)-1;
while((toupper(*lp)==toupper
(*rp))&&(p<rp)){
/*********found*********/
lp++;rp【2】;}
/*********found*********/
if(ip<rp)【3】;
else return 1;
}
main()
{char s[81];
printf(\\
(1)s (2)-- (3)return 0
解析:填空1:本题判断字符串是否是回文,需要比较字符串的首尾字符是否相等,若相等再比较第2个字符与倒数第2个字符是否相等。以此类推,直到前后字符都相等,则为回文。指针变量lp指向字符串s的首字符,指针变量rp指向字符串s的最后一个字符。故空1处应该填s。
填空2:while循环中需要比较字符串前半部分和后半部分的每个字符,这时需要移动指针变量,lp++,rp--。故空2处应该填--。
填空3:循环结束,如果指针lp大于等于指针rp,则表示字符串是回文,否则不是。如果字符串是回文,函数返回1,否则返回0。故空3处应该填0。
程序修改题
2.使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是求出如下分数数列的前n项之和。
(1)double fun(int n)
(2)s=s+(double)a/b;
解析:(1)由函数fun()的返回值s可知:因为变量s为double型,所以函数fun()类型定义为double。
(2)c语言规定所有关键字都必须用小写英文字母表示,所以s=s+(Double)a/b;应改为s=s+(double)a/,b;。
程序设计题
3.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.C。在此程序中,请编写一个函数fun(),该函数的功能是将大于整数m且紧靠m的k个素数存入所指的数组中。
例如,若输入17、5,则应输出19、23、29、31、37。
注意:部分源程序在文件progl.c中。
请勿改动主函数nmin()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void fun(int m,int k,int xx[])
{
}
void main()
{
FILE *wf;
int m,n,zz[1000];
system(\\
void fun(int m,int k,int xx[])
{
int i,j,n=0;
for(i=m+1;n<k;i++)/*找大于m的素数,循环k次,即找出紧靠m的k个素数*/
{for(j=2;j<i;j++)/*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/
if(i%j==0)break;
if(j>=i)/*如果是素数,存入数组xx中*/
xx[n++]=i;
}
}
解析:本题主要考查素数的判定方法。如果一个数不能被除了1和其自身以外的数整除,则这个数为素数。本程序使用循环语句控制需要判断的数,在循环体中判断该数是否为素数,若是则存入数组xx中。当数组xx的素数个数为k个时,退出循环。
本文档预览:3600字符,共2523字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载