二级C语言机试-117

  • 格式:doc
  • 大小:6.48 KB
  • 文档页数:3

二级C语言机试-117

(总分:100.00,做题时间:90分钟)

一、填空题(总题数:1,分数:30.00)

1.请补充函数fun(),该函数的功能是判断一个数是否为素数。该数是素数时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include "conio.h"

#include "stdio.h"

【1】

int i, m;

m=1;

for(i= 【2】 ;i<n; i++)

if ( 【3】 )

m=0;

break;

if(m==1&&n>1)

return("yes!");

else

return("no!");

main()

int k=0;

clrscr();

printf("Input:");

scanf("%d",&k);

printf("%s/n",fun(k));

(分数:30.00)

填空项1:__________________ (正确答案:[1] char *fun(int n) [2] 2 [3] n%i==0或!(n%i))

解析:[解析] 填空1:根据main()中调用的函数fun(k),可知函数fun的形参为int型变量,函数的返回值为字符型指针。填空2:判断一个数是否为素数时,也就是判断这个数是否有除了1和其自身之外的因子,所以for循环的变量从2开始,直到这个数的前一个数。填空3:如果一个数能被除了1和其自身之外的数整除,即余数为0,则这个数不是素数。

二、改错题(总题数:1,分数:30.00)

2.下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:Not found! 请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include<stdio.h>

#include <conio.h>

#include <string.h>

char *fun(char *s,char *t)

char *p,*r,*a;

/*************found**************/

a=Null;

while(*s)

p=s;r=t;

while(*r)

/*************found**************/

if(r= =p) r++;p++;

else break;

if(*r=='/0') a=s;

s++;

return a;

main()

char s[100],t[100],,*p;

clrscr();

printf("/nPlease enter string S: ");

scanf("%s",s);

printf("/nPlease enter substring t: ");

scanf("%s",t);

p=fun(S,t);

if(p) printf("/nThe result is:%s/n",p);

else printf("/nNot found!/n ");

(分数:30.00)

填空项1:__________________ (正确答案:错误:a=NuLL; 正确:a=NULL;

(2) 错误;if(r==p){r++;p++;} 正确:if(*r==*p){r++;p++;})

解析:[解析] 题目要求将最后一次出现的输入字符后面的字符串做一复制处理,并在主函数中输出从此地址开始的字符串。 a=NuLL;是明显的常识性错误。题目中已经定义了指针变量chaf *p,*r,*a;,循环条件应该是if(*r==*p){r++;p++;},而非iRf(r==p) {r++;p++;}。

三、编程题(总题数:1,分数:40.00)

3.编写函数fun(),它的功能是;根据以下公式求p的值,结果由函数值带回。m与n为两个正数且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8时,运行结果为495.000000。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include <conio.h> #include <stdio.h>

float fun (int m, int n)

main()

clrscr() ;

printf ("p=%f/n", fun (12,8) ) ;

(分数:40.00)

__________________________________________________________________________________________

正确答案:(float fun (int m, int n)

{

int i;

double p=1.0;

for(i=1;i<=m;i++) p=p*i; /*求m!*/

for(i=1;i<=n;i++) p=p/i; /*求m!/n!*/

for(i=1;i<=m-n;i++) p=p/i; /*求m!/(n!(m-n)!)*/

return p;

})

解析:[解析] 本题中,欲求P的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。注意阶乘值应当是double类型,若定义x,y,z为整型变量,则p=x/(y*z)中的除法为整数除法。