C语言程序10题

第21题 (20.0分)          难度:中        第2章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:编写函数fun对主程序中用户输入的具有10

      个数据的数组a按由大到小排序,并在主程序中输出

      排序结果。

------------------------------------------------*/

#include <stdio.h>

void  wwjt();

int fun(int array[], int n)

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

}

main()

{

  int a[10],i;

  printf("请输入数组a中的十个数:\n");

  for (i=0;i<10;i++)

    scanf("%d",&a[i]);

  fun(a,10);

  printf("由大到小的排序结果是:\n");

  for (i=0;i<10;i++)

    printf("%4d",a[i]);

  printf("\n");  

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int n;

  int i[10];

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

  for(n=0;n<10;n++)

  {    

    fscanf(IN,"%d",&i[n]);

  }

  fun(i,10);

  for(n=0;n<10;n++)

  {    

    fprintf(OUT,"%d\n",i[n]);

  }

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

int  k,j,t;

  for (k=0;k<n-1;k++)

    for (j=k+1;j<n;j++)

      if (array[k]<array[j])

    {

    t=array[k];

    array[k]=array[j];

    array[j]=t;

    }

----------------------

第22题 (20.0分)          难度:易        第2章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:实现两个整数的交换。

例如:给a和b分别输入:60和65,输入为:a=65 b=60

------------------------------------------------*/

#include<stdio.h>

#include<conio.h>

void  wwjt();

void fun(int *a,int *b)

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

}

main()

{

  int a,b;

  printf("Enter a,b:");

  scanf("%d%d",&a,&b);

  fun(&a,&b);

  printf("a=%d b=%d\n",a,b);

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int a,b,n;

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

  for(n=0;n<5;n++)

  {   

    fscanf(IN,"%d%d",&a,&b);

    fun(&a,&b);

    fprintf(OUT,"a=%d b=%d\n",a,b);

  }

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

 int t;

 t=*a;*a=*b;*b=t;

----------------------

第23题 (20.0分)           难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项

      小于0.0005时停止迭代)。

      程序运行后,若输入精度0.0005,则程序应输出为3.14…。

注意:请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

      你编写的若干语句。

-------------------------------------------------------*/

#include <stdio.h>

#include <math.h>

void wwjt();

double  fun ( double  eps)

{

        double s=1.0,s1=1.0;

        int n=1;

        /**********Program**********/

        /**********  End  **********/

}

main( )

{

        double  x;

        printf("Input eps:") ;

        scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));

        wwjt();

}

void wwjt()

{

        FILE *IN,*OUT;

        int i;

        double iIN;

        double iOUT;

        IN=fopen("in.dat","r");

        if(IN==NULL)

        {

                printf("Please Verify The Currernt Dir..it May Be Changed");

        }

        OUT=fopen("out.dat","w");

        if(OUT==NULL)

        {

                printf("Please Verify The Current Dir.. it May Be Changed");

        }

        for(i=0;i<10;i++)

        {        

                fscanf(IN,"%lf",&iIN);

                iOUT=fun(iIN);

                fprintf(OUT,"%lf\n",iOUT);

        }

        fclose(IN);

        fclose(OUT);

}

答案:    while(s1>=eps)       

    {

        s1=s1*n/(2*n+1);    

        s=s+s1;            

        n++;

    }

    return 2*s;

第24题 (20.0分)              难度:难        第1章

/*------------------------------------------------------------------------

【程序设计】

--------------------------------------------------------------------------

程序功能:从键盘输入三个整数,比较三个数并显示相应信息,具体如下:

(1)如果三个数都相等,显示"***";

(2)如果三个数中只有某两个数相等,显示"$$";

(3)如果三个数互不相等,则显示"#"。

(输出要换行)

------------------------------------------------------------------------

注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在

      Program-End之间删除【?】填入若干语句。不要删除标志否则不得分。

----------------------------------------------------------------------*/

#include<stdio.h>

int main()

{

    int a,b,c;

    scanf("%d%d%d",&a,&b,&c);

    /**********Program**********/

    if(【?】)  printf("【?】");

    else if(【?】)  printf("【?】");

    else  printf("【?】");

    /**********  End  **********/

    return 0;

}

答案:if(a==b && b==c)  printf("***\n");

else if(a==b || b==c || c==a)  printf("$$\n");

else  printf("#\n");

第25题 (20.0分)        题号:376        难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:请编写函数fun,该函数的功能是:计算并输出n(包括n)以内所有能被5或9整除的

      自然数的倒数之和。

例如:若主函数中从键盘给n输入20后,则输出为S= 0.583333。

注意:n的值要求不大于100。。

      请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入

      你编写的若干语句。

-------------------------------------------------------*/

#include <stdio.h>

void wwjt();

double fun(int n)

{

        /**********Program**********/

        /**********  End  **********/

}

void main()

{

        int n;

        double s;

        printf("\nInput n:");

        scanf("%d",&n);

        s=fun(n);

        printf("\n\ns=%f\n",s);

        wwjt();

}

void wwjt()

{

        FILE *in, *out;

        int i, n;

        double s;

        in=fopen("in.dat","r");

        if(in==NULL)

        {

                printf("Please Verify The Currernt Dir..It May Be Changed");

        }

        out=fopen("out.dat","w");

        if(out==NULL)

        {

                printf("Please Verify The Current Dir.. It May Be Changed");

        }

        for(i=0;i<10;i++)

        {

                fscanf(in,"%d",&n);

                s=fun(n);

                fprintf(out,"%lf\n",s);

        }

        fclose(in);

        fclose(out);

}

答案: int i;

double sum=0.0;

for(i=1;i<=n;i++)                    

if(i%5==0||i%9==0)

sum+=1.0/i;

return sum;

第26题 (20.0分)         难度:难        第2章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:编写函数fun求sum=d+dd+ddd+……+dd...d(n个d),

      其中d为1-9的数字。

例如:3+33+333+3333+33333(此时d=3,n=5),d和n在主函

      数中输入。

------------------------------------------------*/

#include <stdio.h>

void  wwjt();

long int fun(int d,int n)

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

}

main()

{

  int d,n;

  long sum,fun();

  printf("d=");

  scanf("%d",&d);

  printf("n=");

  scanf("%d",&n);

  sum=fun(d,n);

  printf("sum=%ld\n",sum);

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int n;

  int i[2];

  long o;

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

  for(n=0;n<2;n++)

  {    

    fscanf(IN,"%d",&i[n]);

  }

  o = fun(i[0],i[1]);

  fprintf(OUT,"%ld\n",o);

  

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

long int s=0,t=0;

  int i;

  for(i=1;i<=n;i++)

    { t=t+d;

      s=s+t;

      d=d*10;

    }

  return s;

----------------------

第27题 (20.0分)         难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后

      求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个

      数(n>2)。例如:若输入9.9  8.5  7.6  8.5  9.3  9.5  8.9  7.8  8.6  8.4十

      个得分,则输出结果为:8.687500。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入

      所编写的若干语句。

-------------------------------------------------------*/

#include  <stdio.h>

void wwjt( );

double fun(double  a[ ] , int  n)

{

        /**********Program**********/

        /**********  End  **********/

}

main()

{  

        double  b[10],  r;  

        int  i;

        printf("输入10个分数放入b数组中 :  ");

        for (i=0; i<10; i++)

                scanf("%lf",&b[i]);

        printf("输入的10个分数是 :  ");

        for (i=0; i<10; i++)  

                printf("%4.1lf ",b[i]);   

        printf("\n");

        r = fun(b, 10);

        printf("去掉最高分和最低分后的平均分 :  %f\n", r );

        wwjt( );

}

void wwjt( )

{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

        FILE *in, *out ;

        int i, j ;

        double b[10], r ;

        in=fopen("in.dat","r");

        if(in==NULL)

        {

                printf("Please Verify The Currernt Dir..It May Be Changed");

        }

        out=fopen("out.dat","w");

        if(out==NULL)

        {

                printf("Please Verify The Current Dir.. It May Be Changed");

        }

        for(i = 0 ; i < 10 ; i++)

        {

                for(j = 0 ; j < 10 ; j++)

                {

                        fscanf(in, "%lf ", &b[j]) ;

                }

                r = fun(b, 10) ;

                fprintf(out, "%f\n", r) ;

        }

        fclose(in) ;

        fclose(out) ;

}

答案: double sum=0,max,min;

int i;

max=min=a[0];

for(i=0;i<n;i++)

{

sum=sum+a[i];

if(max<a[i])

max=a[i];

if(min>a[i])

min=a[i];

}

sum=sum-max-min;

return(sum/(n-2));

第28题 (20.0分)           难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:请编写函数fun,该函数的功能是:计算并输出如“样张”的值。

例如:若主函数从键盘给n输入20后,则输出为S=534.188884。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入

      你编写的若干语句。

-------------------------------------------------------*/

#include<math.h>

#include<stdio.h>

void wwjt();

double fun(int n)

{

        /**********Program**********/

        /**********  End  **********/

}

void main()

{

        int n;

        double s;

        printf("\n\nInput n: ");

        scanf("%d",&n);

        s=fun(n);

        printf("\n\ns=%f\n\n",s);

        wwjt();

}

void wwjt()

{

        FILE *in, *out;

        int i,n;

        double s;

        in=fopen("in.dat","r");

        if(in==NULL)

        {

                printf("Please Verify The Currernt Dir..It May Be Changed");

        }

        out=fopen("out.dat","w");

        if(out==NULL)

        {

                printf("Please Verify The Current Dir.. It May Be Changed");

        }

        for(i=0; i<10; i++)

        {

                fscanf(in,"%d",&n);

                s=fun(n);

                fprintf(out,"%lf\n",s);

        }

        fclose(in);

        fclose(out);

}

答案: int i;

double s=0.0,s1=0.0;

for(i=1;i<=n;i++)

{

s1=s1+pow(i,0.5);   /*求每一项*/

s=s+s1;             /*按公式求出s*/

}

return s;

第29题 (20.0分)          难度:中        第1章

/*-------------------------------------------------------

【程序设计】

---------------------------------------------------------

题目:请编写函数fun,该函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依

      次放到一个字符串中。

例如:若二维数组中的数据为                

                           W W W W                    

                           S S S S                     

                           H H H H

      则字符串中的内容应是:  WSHWSHWSHWSH。

注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入

      所编写的若干语句。

-------------------------------------------------------*/

#include<stdio.h>

#define  M  3

#define  N  4

void wwjt();

void fun(char (*s)[N],char *b)

{

        /**********Program**********/

        /**********  End  **********/

}

void main()

{

        char a[100];

        char w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},

                     {'H', 'H', 'H', 'H'}};

        int i,j;

        printf("The matrix:\n");

        for(i=0;i<M;i++)

        {

                for(j=0;j<N;j++)

                        printf("%3c",w[i][j]);

                printf("\n");

        }

        fun(w,a);

        printf("The A string:\n");

        puts(a);

        printf("\n\n");

        wwjt ();

}

void wwjt( )

{

        FILE *in, *out;

        char a[100];

        char w[M][N]={{ 'W', 'W', 'W', 'W'},{'S', 'S', 'S', 'S'},

                      {'H', 'H', 'H', 'H'}};

        int i,j;

        in=fopen("in.dat","r");

        if(in==NULL)

        {

                printf("Please Verify The Currernt Dir..It May Be Changed");

        }

        out=fopen("out.dat","w");

        if(out==NULL)

        {

                printf("Please Verify The Current Dir.. It May Be Changed");

        }

    

        for(i=0;i<4;i++)

                for(j=0;j<4;j++)

                        fscanf(in,"%c",&w[i][j]);

        fun(w,a);

        fprintf(out,"%s",a);

        fclose(in);

        fclose(out);

}

答案: int i,j,k=0;

for(i=0;i<N;i++)         /*按列的顺序依次放到一个字符串中*/

for(j=0;j<M;j++)

b[k++]=s[j][i];

b[k]='\0';

第30题 (20.0分)            难度:易        第2章

/*------------------------------------------------

【程序设计】

--------------------------------------------------

功能:对某一正数的值保留2位小数,并对第三位进行四舍

      五入。

------------------------------------------------*/

#include <stdio.h>

#include"conio.h"

void  wwjt();

  

double fun(float h)

{

  /**********Program**********/

  

  

  

  

  

  

  /**********  End  **********/

  

}

main()   

{

  float  m;

  printf("Enter m: ");

  scanf("%f", &m);

  printf("\nThe result is %8.2f\n", fun(m));

  wwjt();

}   

void wwjt()

{

  FILE *IN,*OUT;

  int s ;

  float t;

  double o;

  

  IN=fopen("in.dat","r");

  if(IN==NULL)

  {

    printf("Read FILE Error");

  }

  OUT=fopen("out.dat","w");

  if(OUT==NULL)

  {

    printf("Write FILE Error");

  }

  for(s=1;s<=5;s++)

  {

    fscanf(IN,"%f",&t);

    o=fun(t);

    fprintf(OUT,"%8.2f\n",o);

  }

  fclose(IN);

  fclose(OUT);

}

答案:----------------------

int i;

i=(int)(h*1000)%10;

if(i>=5)

return(int)(h*100+1)/100.0;

else

return(int)(h*100)/100.0;

----------------------

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值