C语言程序10题

第11题 (20.0分)             难度:中        第20章

#include <stdio.h>

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

【程序设计】

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

题目:用while语句求1~100的累计和。

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

void  wwjt();

int  fun(int n)

{

  

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

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

  

}

void  main()

{  

  int  sum = 0;

  sum=fun(100);

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

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int i;

  int iIN,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<5;i++)

  {        

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

    iOUT=fun(iIN);

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

  }

  fclose(IN);

  fclose(OUT);

}

答案:  int i=1,sum=0;

  while(i<=n)     

  {

sum=sum+i;    

    i++;    

  }

  return sum;

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

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

【程序设计】

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

题目:函数fun的功能是:将a、b中的两个正整数合并形成一个新的整数放在c中。

      合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中

      的十位和个位数依次放在变量c的个位和百位上。

例如:当a=45,b=12。调用该函数后,c=5241。

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

      你编写的若干语句。

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

#include <stdio.h>

void wwjt (  );

void fun(int  a, int  b, long  *c)

{

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

        

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

}

void main()

{

        int  a,b; long  c;

        printf("Input a, b:");

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

        fun(a, b, &c);

        printf("The result is: %ld\n", c);

        wwjt( );

}

void wwjt (  )

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

        FILE *in, *out ;

        int i, a,b ; long c ;

        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,%d", &a, &b) ;

                fun(a, b, &c) ;

                fprintf(out, "a=%d,b=%d,c=%ld\n", a, b, c) ;

        }

        fclose(in) ;

        fclose(out) ;

}

答案: *c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);

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

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

【程序设计】

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

功能:统计出若干个学生的平均成绩,最高分以及得最高

      分的人数。

例如:输入10名学生的成绩分别为92,87,68,56,92,

      84,67,75,92,66,则输出平均成绩为77.9,

      最高分为92,得最高分的人数为3人。

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

#include <stdio.h>

void wwjt();

   

float Max=0;

int J=0;

float fun(float array[],int n)

{

  

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

  

  

  

  

  

  

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

  

}

main(  )

{

  float  a[10],ave;

  int i=0;

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

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

  ave=fun(a,10);

  printf("ave=%f\n",ave);

  printf("max=%f\n",Max);

  printf("Total:%d\n",J);

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  float iIN[10],iOUT;

  int iCOUNT;

  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(iCOUNT=0;iCOUNT<10;iCOUNT++)

    fscanf(IN,"%f",&iIN[iCOUNT]);

  iOUT=fun(iIN,10);

  fprintf(OUT,"%f %f\n",iOUT,Max);

  fclose(IN);

  fclose(OUT);

}

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

int i;float sum=0,ave;

 Max=array[0];

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

{  if(Max<array [i]) Max=array [i];

        sum=sum+array [i];  }

      ave=sum/n;

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

 if(array [i]==Max) J++;

return(ave);

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

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

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

【程序设计】

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

功能:产生20个[30,120]上的随机整数放入二维数组

      a[5][4]中, 求其中的最小值。

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

#include "stdlib.h"

#include <stdio.h>

void  wwjt();

int amin(int a[5][4])

{

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

  

  

  

  

  

  

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

}

main()

{

  int a[5][4],i,j;

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

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

      a[i][j]=random(120-30+1)+30;

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

    {

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

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

      printf("\n");

    }

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

    wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int m,n;

  int i[5][4];

  int 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(m=0;m<5;m++)

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

    {    

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

    }

    o=amin(i);

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

    fclose(IN);

    fclose(OUT);

}

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

int i,j,s;

 s=a[0][0];

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

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

     if(s>a[i][j])s=a[i][j];

  return(s);

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

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

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

【程序设计】

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

题目:编写程序,实现矩阵(3行、3列)的转置(即行列互换)。

例如:若输入下面的矩阵:

                         100 200 300                 

                         400 500 600           

                         700 800 900

      则程序输出:           

                         100 400 700     

                         200 500 800       

                         300 600 900

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

      你编写的若干语句。

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

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void wwjt();

void fun (int array[3][3])

{

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

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

}

void main()

{

        int i,j;

        int array [3][3]={{100,200,300},{400,500,600},{700,800,900}};

        system("CLS");

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

        {

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

                        printf("%7d ",array[i][j]);

                 printf("\n");

        }

        fun(array);

        printf("Converted array:\n ");

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

        {

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

                        printf("%7d ",array[i][j]);

                printf("\n ");

        }   

        wwjt();

}

void wwjt()

{

        FILE *in, *out;

        int array [3][3],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<3;i++)

        {

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

                        fscanf(in,"%d",&array[i][j]);

        }

        fun(array);

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

        {

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

                        fprintf(out,"%7d ",array[i][j]);

                fprintf(out,"\n");

        }

        fclose(in);

        fclose(out);

}

答案: int i,j,t;

for(i=0;i<3;i++)                                               /*将右上三角和左下三角对换,实现行列互换*/

for(j=i+1;j<3;j++)

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

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

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

【程序设计】

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

功能:编写函数判断一个整数能否同时被3和5整除,若能

      则返回值为1,否则为0。调用该函数求出15~300之

      间能同时被3和5整除的数的个数。

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

#include <stdio.h>

void  wwjt();

int sum(int n)

{

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

  

  

  

  

  

  

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

}

main()

{

  int i,s=0;

  for(i=15;i<=300;i++)

    if(sum(i)==1) s=s+1;

    printf("s=%d\n",s);

    wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int n;

  int i[12];

  int 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<5;n++)

  {    

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

  }

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

  {    

    o = sum(i[n]);

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

  }

  fclose(IN);

  fclose(OUT);

}

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

if(n%3==0&&n%5==0) return(1);

 return(0);

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

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

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

【程序设计】

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

功能:计算并输出给定整数n的所有因子之和(不包括1与

      自身)。

注意:n的值不大于1000。

例如:n的值为855时,应输出704。

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

#include <stdio.h>

void wwjt();

   

int fun(int n)

{

  

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

  

  

  

  

  

  

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

  

}

main()

{

  printf("s=%d\n",fun(855));

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int iIN,iOUT,i;

  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<5;i++)

  {

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

    iOUT=fun(iIN);

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

  }

  fclose(IN);

  fclose(OUT);

}

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

int s=0,i;

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

    if(n%i==0)s=s+i;

     return s;

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

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

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

【程序设计】

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

功能:根据整型参数n,计算如图公式的值。

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

#include <stdio.h>

#include"conio.h"

void  wwjt();

    

double fun(int n)

{

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

  

  

  

  

  

  

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

  

}

main()   

{

  int  m;

  printf("Enter m: ");

  scanf("%d", &m);

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

  wwjt();

}   

void wwjt()

{

  FILE *IN,*OUT;

  int s ;

  int 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,"%d",&t);

    o=fun(t);

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

  }

  fclose(IN);

  fclose(OUT);

}

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

double a=1;int i;

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

a=1.0/(1+a);

return a;

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

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

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

【程序设计】

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

题目:N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。

      请编写函数fun,其功能是:求出平均分,并由函数值返回。

例如:若学生的成绩是:85 76 69 85 91 72 64 87,则平均分应当是:78.625。

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

      编写的若干语句。

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

#include <stdio.h>

#include <stdlib.h>

#define   N   8

void wwjt (  );

struct  slist

{  

        double   s;

        struct slist  *next;

};

typedef  struct slist  STREC;

double  fun( STREC *h  )

{

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

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

}

STREC * creat( double *s)

{

        STREC  *h,*p,*q;   int  i=0;

        h=p=(STREC*)malloc(sizeof(STREC));p->s=0;

        while(i<N)

        {        

                q=(STREC*)malloc(sizeof(STREC));

                q->s=s[i]; i++;  p->next=q; p=q;

        }

        p->next=0;

        return  h;

}

outlist( STREC *h)

{

        STREC  *p;

        p=h->next; printf("head");

        do

        {

                printf("->%4.1f",p->s);p=p->next;

        }

        while(p!=0);

        printf("\n\n");

}

main()

{  

        double  s[N]={85,76,69,85,91,72,64,87},ave;

        STREC  *h;

        h=creat( s );   

        outlist(h);

        ave=fun( h );

        printf("ave= %6.3f\n",ave);

        wwjt();

}

void wwjt()

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

        FILE *in, *out ;

        int i,j ; double  s[N],ave;

        STREC *h ;

        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 < N; j++)

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

                h=creat( s );

                ave=fun( h );

                fprintf(out, "%6.3lf\n", ave) ;    

        }

        fclose(in) ;

        fclose(out) ;

}

答案: double ave=0.0;

STREC *p=h->next;

while(p!=NULL)

{

ave=ave+p->s;

p=p->next;

}

return ave/N;

第20题 (20.0分)             难度:中        第20章

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

【程序设计】

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

功能:编写程序打印如图1所示图形。

   *

  ***

 *****

*******      

 *****

  ***

   *

要求:要求使用abs()。

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

#include <stdio.h>

#include "math.h"   

void  wwjt();

void fun(int i)

{

  int m,n;

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

  

  

  

  

  

  

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

  

}

main( )

{

  fun(3);

}

答案:  for(m=-i;m<=i;m++)

  {  

     for(n=0;n<abs(m);n++) printf(" ");

     for(n=0;n<7-2*abs(m);n++) printf("*");

     printf("\n");

  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值