C语言上机试题.doc
一、填空题
请补充fun函数,fun函数的功能是求m的阶乘。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:部分源程序给出如下。
# include <stdio.h>
long fun(int m)
{
if(___m>1___)
return (m*fun(__m-1 __));
return ___1
___;
}
main()
{
printf("8!=%ld\n",fun(8));
}
二、改错题
下列给定程序的功能是:读入一个整数n(2≤n≤5000),打印它的所有为素数的因子。例如,若输入整数1234,则应输出:2、617。
请修改程序中的错误,使程序能得出正确的结果。
注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。
# include <conio.h>
# include <stdio.h>
/*******error*********/
prime(int m);
{
int j,p;
p=1;
/*******error*********/
for(j=2;j<m;j++)
if!(m%j)
{
p=0;
break;
}
return(p);
}
main()
{
int i,n;
printf("\nplease enter an integer number between 2 and 5000:");
scanf("%d",&n);
printf("\n\nthe prime factor(s) of %d is(are):",n);
for(i=2;i<n;i++)
if((!(n%i)) && (prime(i)))
printf(" %4d,",i);
printf("\n");
}
三、编程题
数组point中存放着m个人的成绩,请编写函数fun,它的功能是:返回高于平均分的人数,并将高于平均分的分数放在high所指的数组中。
例如,当point数组中的数据为50、60、65、70、75、80、88、90、95时,函数返回的人数应该是5,high中的数据应为75、80、88、90、95。
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
注意:部分源程序给出如下。
# include <conio.h>
# include <stdio.h>
# include <string.h>
int fun(int point[],int n,int high[])
{
}
main()
{
int j,m,high[9];
int point[9]={50,60,65,70,75,80,
88,90,95};
file *out;
m=fun(point,9,high);
printf("\nhigh the average point are :");
out=fopen("outfile.dat","w");
for(j=0;j<m;j++)
{
printf("%d ",high[j]);
fprintf(out,"%d\n0",high[j]);
}
fclose(out);
}
答案
一、填空题
【答案及难度指数】★★
(1)m>1 (2)m-1 (3)1
【一起来审题】
(1)该程序功能是对阶乘的实现。其中,阶乘的计算公式定义为:
公式分为参数m是1和大于1的两种情况,例如,1的阶乘1!=1;5的阶乘5!=5×4×3×2×1。
(2)从已给部分源程序的main主函数开始入手,主函数执行printf输出语句,该语句调用自定义的fun函数,并将数值8传递给fun函数的m参数。其中fun函数就是对阶乘算法的实现。
(3)进入fun函数,根据前面的定义,它对阶乘算法的实现可以分为两种情况,一是当m>1时,应该用什么程序来实现阶乘的计算;二是当m=1时,函数直接返回1即可。
【解题思路】
第一空:if(___1___)是要根据m的取值来判断使用何种阶乘的计算公式的。这里根据第2句递归调用语句,可知该语句是用来计算当m>1时的阶乘。因此第一空if语句里面的条件应该是满足m>1。所以,第一空应填m>1。
第二空:return (m*fun(___2___))很显然是采用递归函数来实现阶乘的计算,所以,第二空应填m-1。
第三空:return ___3___该语句是要实现当m=1时的阶乘计算。所以,第三空应填1。
【主要考点】递归函数。
二、改错题
【答案及难度指数】★★
(1)prime(int m) (2)if(!(m%j))
【一起来审题】
(1)整数n的素数因子为整除n的所有素数,但不含n本身。
素数是指能被1和本身整除的正整数(>1),所以判别n是否为素数,只要用2、3、…、n-1这些数逐个去除n,观察余数是否为0即可,只要有一次相除余数为0,n就不是素数,否则n为素数。
因此,求整数n的素数因子,要从求整数n的因子和判断该因子是否为素数的两方面来看。
(2)从已给定源程序的main主函数开始入手,核心部分是循环判断if((!(n%i)) && (prime(i))),"!(n%i)"为判断i是否是n的因子,prime自定义函数的功能是判断i是否为素数,&&与逻辑是指当两个判断条件都为真的时候,i即为n的素因子。
【解题思路】
(1)第一个标识下面的"prime(int m);"在程序中显然是一个函数,因此应将后面的分号去掉。
(2)第二个标识下面的for语句最简单的应用形式为:for(循环变量赋初值;循环条件;循环变量增值)语句。显然if语句后面缺少括号,因此,if !(m%j)改为if(!(m%j))。
该题主要考查标点符号、运算符、基本定义。
【主要考点】if条件语句;函数定义。
三、编程题
【答案及难度指数】★★
int j,k=0,average=0;
for(j=0;j<n;j++)
average+=point[j]; //统计总分数
average/=n;//求平均分
for(j=0;j<n;j++)
if(point[j]>average)
//逐个判断每个分数是否大于平均分
{
high[k]=point[j];
//将高于平均分的人放入high数组
k++; //统计大于平均分的人数
}
return k;
【一起来审题】
(1)该程序功能是返回高于平均分的人数。它的解题思路可以分解为以下几步:求总分→求平均分→逐个元素与平均分比较→统计高于平均分的人数。
(2)从已给部分源程序的main主函数开始入手,核心函数fun(point,9,high)中的参数由题目可知,point存放着m个人的成绩,high存放高于平均分的分数。另外,根据point的定义,可知9为point数组中元素的个数,传给函数fun中的参数n。
【解题思路】
进入fun函数,根据前面的分析:
首先,定义变量average,通过循环,用average+=point[j]计算总分数,然后通过average/=n;语句来计算平均分。
其次,通过循环,让每个分数和平均分比较,高于平均分数的分数给high[](high[k]=point[j];)。在进行以上循环的同时,定义了一个变量k,每当发现一个大于平均分的分数,k自动加1(k++;)。
最后,返回k值,即是数组point[]中高于平均分的元素个数。
【主要考点】数组操作;if条件语句;for循环语句。
C语言上机试题.doc
本文2010-11-09 09:56:23发表“指导讲话”栏目。
本文链接:https://www.wenmi123.com/article/180546.html
- 2025 年《建设工程项目管理》模考卷一.pdf
- 座谈会发言:体系抓好思政课教育做好贯彻落实下篇文章(02-19).docx
- 组织部机关支部书记2024年度抓基层党建工作述职报告(02-19).docx
- 在县委理论中心组暨2024年度民主生活会学习研讨会上的发言(02-19).docx
- 在2025年市人代会分组讨论会上的发言(02-19).docx
- 医院党委选人用人工作自查报告(02-19).docx
- 宣传部2024年民主生活会个人对照检查发言(02-19).docx
- 行政服务中心民族团结进步创建工作经验材料(02-19).docx
- 校长在中学2025春季开学典礼上的讲话:撷一抹祈望春风掬一程锦绣花开(02-19).docx
- 乡镇领导班子2024年民主生活会对照检查发言材料(五个带头+典型案例)(02-19).docx