电脑桌面
添加文秘网到电脑桌面
安装后可以在桌面快捷访问

C语言上机试题.doc

栏目:指导讲话发布:2010-11-09浏览:2345下载213次收藏

一、填空题  

请补充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

点击下载
分享:
热门文章
    热门标签
    确认删除?
    QQ
    • QQ点击这里给我发消息
    回到顶部