二级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)中的除法为整数除法。