第一篇:2018年大学c语言机期未试考题
1#####
在考生文件夹下的给定程序modi53.c中,函数fun的功能是:将从键盘上输入的每个单词的第一个字母写为大写字母,输入时各单词必须用空格隔开,用'.'结束输入。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
int fun(char *c,int status){ /************found************/
if(c==' ')return 1;
else
{
if(status && *c<='z' && *c>='a')/************found************/
c+='A'-'a';
return 0;
} }
main(){
int flag=1;
char ch;
printf(“请输入一字符串,用点号结束输入!n”);
do
{
ch=getchar();
flag=fun(&ch,flag);
putchar(ch);
}while(ch!='.');
printf(“n”);} 第1 处内容填写有误
第[1]处操作错误
题面要求操作:内容为[if(*c==' ')return 1;]
实际操作结果:内容为[if(c=='')return1;] 第2 处内容填写有误
第[2]处操作错误
题面要求操作:内容为[*c+='A'-'a';]
实际操作结果:内容为[c+='A'-'a';]
2##### 请编写函数fun,其功能是:计算并输出3到n之间所有素数的平方根之和。
例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。
注意:要求n的值大于2但不大于100。
部分源程序在考生文件夹下的文件prog192.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句
#include
} main(){ int n;
double sum;
printf(“nnInput n: ”);scanf(“%d”,&n);
sum=fun(n);
printf(“nnsum=%fnn”,sum);
NONO();} NONO(){/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/
FILE *rf, *wf;int n, i;double s;
rf = fopen(“bc192.in”, “r”);
wf = fopen(“bc192.out”, “w”);
for(i = 0;i < 10;i++){
fscanf(rf, “%d”, &n);
s = fun(n);
fprintf(wf, “%lfn”, s);
}
fclose(rf);fclose(wf);}
本题的考核点是查找素数的算法以及开根函数的应用。
解题思路:从3到指定数n,找出所有的素数,素数的判断方法是:只能被1和其自身整除,而不能被其它任何数整除的数;sqrt(x)函数是计算x的平方根。
#include
for(i=3;i<=n;i++)
{ for(j=2;j
if(i%j==0)break;
/*如果i能被j整除就说明i不是素数,继而退出循环体*/
if(j==i)s=s+sqrt(i);/*sqrt(i)函数是计算i的平方根*/
}
return s;/*返回结果*/
3#
给定程序的功能是求k!(k<13)并通过函数名传回主函数。
例如:若k = 10,则应输出:3628800。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的blank20.c中。
不得增行或删行,也不得更改程序的结构!#include
k){ /************found************/
if(k>0)/************found************/
return(k*fun(___2___));/************found************/
else if(k==0)
return 1L;}
main(){ int k = 10;
printf(“%d!=%ldn”, k, fun(k));}
本题主要考查的是函数的递归调用。
题中第一个空填“>”:此处为递归调用结束的条件。
题中第二个空填“k-1”:此处为递归调用时返回给调用函数的实参值。
题中第三个空填“==”:此处判断k是否为0,若是则将值返回给主函数。
本评析仅供参考。
4在考生文件夹下的给定程序modi31.c中,函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include if(strlen(sp) sp=sq[i];/************found************/ return sq;} main(){char str[N][M],*longest;int i;printf(“Enter %d lines :n”,N);for(i=0;i 程序中的重要思想如下: 1、建立了一个二维字符串数组,用于存放用户输入的6个字符串; 2、建立了一个指针数组,目的是用6个指针分别指向6个字符串; 3、函数fun()的形参只有一个,即指针数组pstr[],这表明要想在函数fun()中对6个字符串进行操作,只能通过pstr[]中的6个指针。 题中第一个空填“*(pstr+j)”:观察源程序可以发现,在程序中使用strcmp()函数是为了判断字符串str[i]与str[i+1]两者的大小,在fun()函数中只能通过指针来表达各个字符串,所以应当填“*(pstr+j)”。 题中第二个空填“pstr[j]”:对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]中的字符赋给pstr[i]。 题中第三个空填“p”:对两个字符进行比较后,若pstr[i]中的字符比pstr[j]中的字符大,则将pstr[j]和pstr[i]的内容进行交换。 5请编写函数fun,其功能是:计算并输出下列多项式的值: S=(1─)+…+(──1]);"。 1、程序填空题 给定的程序的功能是调用fun函数建立班级通讯录。通讯录中记录 每位学生的编号、姓名和电话号码班级的人数和学生的信息从键盘 读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制中。填空:(1)STYPE (2)FILE (3)fp 改错:(1)for(i=0;i<=sl;i++)(2)t[2*sl]=' '或t[sl+sl]=' ' 编程: *c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10); 2、程序填空题 给定程序的功能是:从键盘输入若干文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输出输入的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和Writetext实现。填空:(1)*fw(2)str(3)str 改错:(1)void fun(long s,long *t)(2)s1=s1*10;编程:int i,j=0,min=a[0].s;for(i=0;i 3、程序填空题 给定程序中,函数fun的功能是:讲自然数1~10以及它们的平方根写到名为myfile3.txt的文本中,然后再按顺序读出显示在屏幕上。填空:(1)fp(2)fclose(fp)(3)myfile3.txt 改错:(1)for(i=j+1;i 4、程序填空题 给定程序中,函数fun的功能是:找出形参s所指字符串出现频率最高的字母(不区分大小写),并统计出其出现的次数,例如,形参s所指的字符串为:abcAbsmaxiess,程序执行后的输出结果为: letter 'a':3 times letter 's':3 times 填空:(1)“r”(2)fs (3)ft 改错:(1) if(d%2==0) (2)s/=10;编程: int i = 0, j = 0; t[j++] = s[i]; 5、程序填空题 while(s[i]){ if(i % 2 == 0 && s[i] % 2 == 0) i++;} t[j] = 0;给定程序中已经建立一个带有头结点的单向链表,链表中的各结点数据域中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。填空:(1)x(2)p (3)s 改错:(1)long k=1;(2)num/=10;编程:int i;float aver=0.0;for(i=0;i 6、程序填空题 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部节点中的数据,并释放该节点,使链表缩短。填空:(1)next(2)t->data(3)t 改错:(1)void fun(char *a)(2)print(“%c”,*a);编程:int i;char *p=s,*q=t;int n=0,m=0;while(*p)/*计算串s的长度n,其中p为临时指针*/ { n++;p++;} while(*q)/*计算串t的长度m,其中q为临时指针*/ { m++;q++;} if(n>=m)/*比较m和n的值,设置p指向较大的指针*/ p=s;else p=t;return p; 7、程序填空题 给定程序中建立一个带有头结点的单向链表,链表中的各节点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的节点,使之只保留一个。填空:(1)q (2)next (3)next 改错:(1)缺分号 (2)p = i;编程:*n=0;int i;for(i=1;i<=m;i++)if(i%7==0||i%11==0)a[*n++]=i; 8、程序填空题 给定的程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在 链表所处的顺序号;如不存在值为ch的结点,函数返回0值。填空:(1)0或NULL (2)n(3)head,ch 改错:(1)for(i=0,t=0;p[i];i++)(2)c[t]=' ';编程: int i; for(i=1;i If((ss[i]>='a'&&ss[i]<='z')ss[i]-=32; 9、程序填空题 给定程序中,函数fun的功能是:统计出带有头结点的单向链表中节点的个数,存放在形参n所指的存储单元中。 填空:(1)*n (2)next (3)head 改错:(1)a=NULL; (2)if(*r==*p)编程: int i,j=0;for(i=0;i第二篇:C语言机试试题