第三届全国大学生C语言程序设计大赛练习题

第一题  程序改错

题目:

功能:根据整型形参 m,计算某一数据项的值。 y = 1/(100*100)+1/(200*200)+1/(300*300)+ …… +1/(m*m) 例如:若m = 2000,则应输出: 0.000160。

请修改下列程序,使其输出正确结果 /***********FOUND***********/ 后是有问题的代码

答案:

1.函数类型为double型

2.for循环内为;

3.除法符号错误

#include <stdio.h>

/**********FOUND**********/
double fun ( int m )
{
  double y = 0, d ;
  int i ;
  /**********FOUND**********/
  for( i = 100; i <= m; i += 100 ) 
  {
    d = (double)i * (double)i;
    /**********FOUND**********/
    y+= 1.0/d;
  }
  return y ;
} 

int main( )
{
  int n = 2000 ;
  printf( "\nThe result is %lf\n", fun ( n ) ) ;
}

第二题   程序改错

题目:

功能:从键盘输入十个学生的成绩,统计最高分,最低分和平均分。max代表最高分,min代表最低分,avg代表平均分。

请修改下列程序,使其输出正确结果 /***********FOUND***********/ 后是有问题的代码

答案:

1.数组长度为10

2.输入时的取地址符号

3.求最小值时,如果现有的最小值大于遍历的数,就把这个数赋值给min

#include <stdio.h>
int main( ){
  int i;
  /***********FOUND***********/
  float a[10],min,max,avg;
  printf("input 10 score:\n");
  for(i=0;i<=9;i++)  {
    /***********FOUND***********/
    scanf("%f",&a[i]);
  } 
  max=min=avg=a[0];
  for(i=1;i<=9;i++) {
    /***********FOUND***********/
    if(min>a[i])  
      min=a[i];
    if(max<a[i])
      max=a[i];
    avg=avg+a[i];
  }
  avg=avg/10;
  printf("max:%f\nmin:%f\navg:%f\n",max,min,avg);
}

第三题  程序改错

题目:

功能:判断m是否为素数,若是返回1,否则返回0。

请修改下列程序,使其输出正确结果 /***********FOUND***********/ 后是有问题的代码

答案:

1.fun函数的输出值为0或1,所以fun函数为int型,void型函数无输出值

2.fun函数的输入值为n,但是后面函数处理的值为m,把fun括号内的n改成m或把函数内部所有的m改为n

3.已经有m=1的情况,for循环起始条件为i=2

4.if语句判断条件,=为赋值,应该为==

5.函数输出值应该为k

#include <stdio.h>
/**********FOUND**********/
int fun( int m)
{
  int i,k=1;
  if(m<=1) k=0;
  /**********FOUND**********/
  for(i=2;i<m;i++)
    /**********FOUND**********/
    if(m%i==0) k=0;
      /**********FOUND**********/
  return k;
}

int main()
{
  int m,k=0;
  for(m=1;m<100;m++)
    if(fun(m)==1)
    {
      printf("%4d",m);k++;
      if(k%5==0) printf("\n");
    }
}

第四题  程序填空

题目:

功能:以每行5个数来输出300以内能被7或17整除的偶数,并求出其和。

请补充下列程序,使其输出正确结果(【?】的部分需要填写代码,注意,需要将【?】先删掉)

答案:

1.缺少计数器n的初始化

2.因为题目要求的范围是1到300,所以for循环终止条件为i<=300

3.if语句的判断条件,按题目要求,i%7==0或i%17==0

4.题目要求每行输出五个数值,即计数器n整除5时

#include <stdio.h>
int main()
{
  int i,n,sum;
  sum=0;
  /***********SPACE***********/
  n=0;
  /***********SPACE***********/
  for(i=1;i<=300;i++)
  /***********SPACE***********/
    if(i%7==0||i%17==0)
      if(i%2==0)
      {
         sum=sum+i;
         n++;
         printf("%6d",i);
         /***********SPACE***********/
         if(n%5==0)  
            printf("\n");
      }
   printf("\ntotal=%d",sum);
}

第五题  程序填空

题目:

功能:输出Fibonacci数列的前15项,要求每行输出5项。 Fibonacci数列:1,1,2,3,5,8,13...........

请补充下列程序,使其输出正确结果(【?】的部分需要填写代码,注意,需要将【?】先删掉)

答案:

1.数组名fib

2.斐波那契数列从第三项开始,这一项等于前两项的和

3.每五个输出一行,但是本题第一项i=0,所以判定条件i+1%5

#include <stdio.h>

int main()
{
  /***********SPACE***********/
  int fib[14],i;                                
  fib[0]=1;fib[1]=1;
  for (i=2;i<15;i++)
    /***********SPACE***********/
    fib[i]=fib[i-1]+fib[i-2];                                        
  for(i=0;i<15;i++)
  {
    printf("%d\t",fib[i]);
    /***********SPACE***********/
    if ((i+1)%5==0) printf("\n");                        
  }
}

第六题  程序填空

题目:

功能:调用函数fun计算m=1-2+3-4+……+9-10,并输出结果。

请补充下列程序,使其输出正确结果(【?】的部分需要填写代码,注意,需要将【?】先删掉)

 

答案:

1.for循环判断条件,按题目要求最大可取10,i<=10或i<11均可

2.一加一减,每次f取自己的负值,再进行循环,实现加减的变换

3.函数返回值m

#include <stdio.h>
int fun( int n)
{
  int m=0,f=1,i;
  /***********SPACE***********/
  for(i=1;i<=10;i++)
  {
    m+=i*f;
    /***********SPACE***********/
    f=-1*f;
  }
  /***********SPACE***********/
  return m;
}

int main()
{
  printf("m=%d\n", fun(10));
}

 第七题  程序设计

题目:

功能:编写函数用选择排序法对数组中的数据进行从小到大的排序。

请补充下列程序,使其输出正确结果。

答案:

选择排序法:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

#include <stdlib.h>
#include<stdio.h>

void sort(int a[],int n)
{
  /**********Program**********/
    int i, t, j;
    for(i=0; i<n-1; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(a[j]<a[i])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
  /**********  End  **********/
}

int main()
{
  int a[13],i;
  for(i=0;i<13;i++)
    a[i]=5;
  for(i=0;i<13;i++)
    printf("%3d",a[i]);
  printf("\n-------------------\n");
  sort(a,13);
  for(i=0;i<13;i++)
    printf("%3d",a[i]);
}

第八题  程序设计

题目:

功能:编写函数fun将一个数组中的值按逆序存放,并在main()函数中输出。 例如:原来的顺序为8,6,5,4,1。要求改为:1,4,5,6,8。

请补充下列程序,使其输出正确结果。

 答案:

#include <stdio.h>
#define N 5

void  fun(int arr[],int n)
{
  /**********Program**********/
  int l = 0, r = n - 1;
    while (l < r)
    {
        int tmp = arr[l];
        arr[l++] = arr[r];
        arr[r--] = tmp;
    }
  /**********  End  **********/
}

int main()
{
  int a[N]={8,6,5,4,1},i;
  for(i=0;i<N;i++)
    printf("%4d",a[i]);
  printf("\n");
  fun(a,N);
  for(i=0;i<N;i++)
    printf("%4d",a[i]);
}

第九题  程序设计

题目:

功能:编写函数求表达式的和(n的值由主函数输入)。 1-1/2+1/3-1/4+......+1/m 例如:当n=20时,表达式的值为0.668771。

请补充下列程序,使其输出正确结果。

答案:

#include <stdio.h>

float sum(int n)
{
  /**********Program**********/
  float num=0.0;
  for(int i=1;i<=n;i++){
    if(i%2==0){
      num=num-1.0/i;//注意1.0,如果使用1那么1/i会自动取整
    }
    else{
      num=num+1.0/i;//同上
    }
  }
  return num;
  /**********  End  **********/
}

int main()
{
  int n;
  scanf("%d",&n);
  printf("sum=%f\n",sum(n));
}

第十题   程序设计

题目:

功能:求一批数中最大值和最小值的积。

请补充下列程序,使其输出正确结果。

答案:

#define N 30
#include "stdlib.h"
#include <stdio.h>
int max_min(int a[],int n)
{
  /**********Program**********/
  int max,min;
  max=a[0];
  min=a[0];//初始化
  for(int i=1;i<n;i++){
    if(max<a[i]){
      max=a[i];//最大值
    }
    if(min>a[i]){
      min=a[i];//最小值
    }
  }
  int res;//定义结果
  res = max*min;
  return res;//返回答案
  /**********  End  **********/
}

int main()
{
  int a[N],i,k;
  for(i=0;i<N;i++)
    a[i]=10;
  for(i=0;i<N;i++)
  {
    printf("%5d",a[i]);
    if((i+1)%5==0) printf("\n");
  }
  k=max_min(a,N);
  printf("the result is:%d\n",k);
}

 第十一题  程序设计

题目:

编写函数fun(),它的功能是求n以内(不包括n)同时能被5与11整 除的所有自然数之和的平方根s,并作为函数值返回。

例如:n为1000时,函数值应为s=96.979379。

注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。

请补充下列程序,使其输出正确结果。

 答案:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>

double  fun(int n)
{
    double  s = 0.0;
    int  i;
    /**********Program**********/
    for(int i=0;i<n;i++){
        if(i%5==0&&i%11==0){
            s=s+i;
        }
    }
    s=sqrt(s);
    return s;
    /**********  End  **********/
}

int main()
{
    FILE *wf;
    //system("CLS");
    printf("s=%f\n", fun(1000));
    wf=fopen("out.txt", "w");
    fprintf(wf, "%f", fun(1000));
    fclose(wf);
}
  • 42
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值