C语言程序10题

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

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

【程序设计】

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

题目:请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子

      (不包括1与自身)之和。规定n的值不大于1000。

例如:若主函数从键盘给n输入的值为856,则输出为sum=763。

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

      所编写的若干语句。

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

#include  <stdio.h>

void wwjt();

int fun(int n)

{

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

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

}

void main()

{

        int  n,sum;

        printf("Input  n:");

        scanf("%d", &n);

        sum=fun(n);

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

        wwjt();

}

void wwjt()

{

        FILE *in, *out;

        int i, n, sum;

        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);

                sum=fun(n);

                fprintf(out,"%d\n",sum);

        }

        fclose(in);

        fclose(out);

}

答案: int s=0,i;

for(i=2;i<=n-1;i++)                                                                  /*将n减1累加*/

if(n%i==0)

s+=i;

return s;

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

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

【程序设计】

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

功能:求一个给定字符串中的字母的个数。

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

#include <stdio.h>

void wwjt();

    

int fun(char s[])

{

  

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

  

  

  

  

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

  

}

main()

{

  char str[]="Best wishes for you!";

  int k;

  k=fun(str);

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

  wwjt();

  

}

void wwjt()

{

  FILE *IN,*OUT;

  char sin[80];

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

  {    

    fscanf(IN,"%s",sin);

    iOUT=fun(sin);

  }

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

  fclose(IN);

  fclose(OUT);

}

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

int i,k=0;

   for(i=0;s[i]!='\0';i++)

    if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')

     k++;

    return k;

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

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

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

【程序设计】

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

功能:判断一个整数w的各位数字平方之和能否被5整除,

      可以被5整除则返回1,否则返回0。

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

#include <stdio.h>

#include"conio.h"

void  wwjt();

  

int fun(int w)

{

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

  

  

  

  

  

  

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

  

}

main()   

{

  int m;

  printf("Enter m: ");

  scanf("%d", &m);

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

  wwjt();

}

void wwjt()

{

  FILE *IN,*OUT;

  int c ;

  int t;

  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(c=1;c<=5;c++)

  {

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

    o=fun(t);

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

  }

  fclose(IN);

  fclose(OUT);

}

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

int k,s=0;

 do

 {s=s+(w%10)*(w%10);

  w=w/10;

  }while(w!=0);

 if(s%5==0)k=1;

 else k=0;

 return(k);

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

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

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

【程序设计】

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

题目:编写函数fun,其功能是:求Fibonacci数列中大于t的最小的数,结果由函数返回。

      Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)

例如:当t=1000时,函数值为1597。

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

      你编写的若干语句。

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

#include <math.h>

#include <stdio.h>

void wwjt (  );

int  fun( int  t)

{

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

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

}

void main()   /* 主函数 */

{

        int  n;

        n=1000;

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

        wwjt( );

}

void wwjt (  )

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

        FILE *in, *out ;

        int i, n, 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, "%d\n", s) ;

        }

        fclose(in) ;

        fclose(out) ;

}

答案: int f0 = 0, f1 = 1, f ;

do

{

f = f0 + f1 ;

f0 = f1 ;

f1 = f ;

}

while(f < t) ;

return f ;

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

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

【程序设计】

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

题目:输入正整数m和n(设100≤m≤n≤999),输出m到n之间满足下列条件的三位数:它的

      个位数的立方加十位数的平方再加上百位数等于该数的本身

     (例如135=1+3*3+5*5*5)。

      如输入:135  600

      则输出:135  175  518  598

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

#include <stdio.h>

main()

{

    int  m,n;

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

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

}

答案:    int  i,a,b,c;

    scanf( "%d%d", &m, &n );

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

    {

        a = i%10;

        b = i/10%10;

        c = i/100%10;

        if ( i==c+b*b+a*a*a )

            printf( "%d  ", i );

    }

第65题 (20.0分)        题号:527        难度:中        第1章

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

【程序设计】

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

题目:从键盘上输入一个字符串,放在数组中,要求将字符串中

      的大写字母转换成小写字母,小写字母转换成大写字母,

      非字母字符不变,并输出

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

#include <stdio.h>

#include <string.h>

#include <conio.h>

#define N 80

void wwjt();

char fun(char a[])

{

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

         

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

}

void main()

{

    char a[80];

    char s;

    gets(a);

    s=fun(a);

    puts(a);

    wwjt();

}

void wwjt()

{

    FILE *IN,*OUT;

    char sin[N];

    char 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");

    }

    fscanf(IN,"%s",sin);

    iOUT=fun(sin);

    fprintf(OUT,"%s\n",sin);

    fclose(IN);

    fclose(OUT);

}

答案:    int i;

    for(i = 0; i < (strlen(a)); i ++)

    if(a[i] >= 'A' && a[i] <= 'Z')

        a[i] = a[i] + 32;

    else if(a[i] >= 'a' && a[i] <= 'z')

        a[i] = a[i] - 32;

    return a[i];

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

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

【程序设计】

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

题目:学生的记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组s中,

      请编写函数fun,其功能是:按分数降序排列学生的记录,高分在前,低分在后。

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

      你编写的若干语句。

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

#include <stdio.h>

#define   N   16

void wwjt ( );

typedef  struct

{  

        char  num[10];

        int   s;

} STREC;

void  fun( STREC  a[] )

{

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

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

}

void main()

{  

        STREC  s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

                {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

                {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

                {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

        int i;

        fun( s );

        printf("The data after sorted :\n");

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

        {  

                if( (i)%4==0 )printf("\n");

                printf("%s  %4d  ",s[i].num,s[i].s);

        }

        printf("\n");

        wwjt( );

        

}

void wwjt( )

{

        FILE *in, *out ;

        STREC  s[N];

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

        {

                fscanf(in,"%s %d",&s[j].num,&s[j].s);

        }

        fun(s);

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

        {  

                if( (i)%4==0 && i)

                        fprintf(out, "\n");

                        fprintf(out, "%4d  ",s[i].s);

        }

        fprintf(out,"\n");

        fclose(out) ;

}

答案: int i,j;

STREC t;

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

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

if(a[j].s<a[j+1].s)

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

第67题 (20.0分)           难度:中        第95章

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

【程序设计】

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

题目:找出1000以内的所有完数。(一个数若恰好等于它的真因子(即除了本身以外的约数)之和,

      这个数就称为完数,如6=1+2+3)。

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

#include <stdio.h>

void main( )

{   

        int i,j,s=1;

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

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

}

答案: for(i=2;i<=1000;i++)

{   

s=1;

for(j=2;j<=i/2;j++)

if(i%j==0)

s+=j;  

if(s==i)  

printf("%d\n",i);          

}

第68题 (20.0分)        题号:670        难度:难        第1章

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

【程序设计】

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

函数fun的功能:对一个任意位数的正整数n,,从十位起计算隔位数字之和,即十位、

千位、……等数字之和。例如输入1234567,6+4+2的结果为12。

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

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

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

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

int fun(int n)

{

    int sum=0;

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

    n=【?】;

     【?】(n>0)

     {  

          【?】+=【?】;

    

          n=【?】;

     }

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

    return sum;

}

#include <stdio.h>

int main()

{

    int n;

    printf("输入一个正整数: ");

    scanf("%d",&n);

    printf("从十位起,隔位数字之和是%d\n",fun(n));

    return 0;

}

答案: n=n/10;

 while(n>0)

{  sum=sum+n%10;

    n=n/100;

}

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

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

【程序设计】

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

题目:规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串的

      前导*号不得多于n个,若多于n个,则删除多余的*号;若少于或等n个,则不做处

      理,字符串中间和尾部的*号不删除。

例如:字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的

      内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍

      为:*******A*BC*DEF*G****。n的值在主函数中输入。在编写函数时,

      不得使用C语言提供的字符串函数。

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

      你编写的若干语句。

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

#include <stdio.h>

void  wwjt ( );

void  fun( char *a, int  n )

{

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

        

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

}

void main()

{  

        char  s[81];  int  n;

        printf("Enter a string:\n");

        gets(s);

        printf("Enter n :  ");

        scanf("%d",&n);

        fun( s,n );

        printf("The string after deleted:\n");

        puts(s);

        wwjt( );

}

void wwjt ( )

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

        FILE *in, *out ;

        int i, n ; char s[81] ;

        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, "%s", s) ;

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

                fun(s,n) ;

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

        }

        fclose(in) ;

        fclose(out) ;

}

答案: int i=0;

int k=0;

char *p,*t;

p=t=a;

while(*t=='*')

{

k++;

t++;

}

if(k>n)

{

while(*p)

{

a[i]=*(p+k-n);

i++;

p++;

}

a[i]='\0';

}

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

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

【程序设计】

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

题目:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的

      功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。

例如:若a 数组中的值为: 0 1 2 7 9                     

                         1 9 7 4 5               

                         2 3 8 3 1              

                         4 5 6 8 2               

                         5 9 1 4 1

      则返回主程序后s的值应为3.375。

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

      所编写的若干语句。

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

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#define  N  5

void wwjt();

double fun (int w[][N])

{

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

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

}

void main()

{

        int a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};

        int i, j;

        double s;

        system("CLS");

        printf("*****The array*****\n ");

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

        {

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

                {

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

                }

                printf("\n ");

        }

        s=fun(a);

        printf("*****THE RESULT*****\n ");

        printf("The sum is : %lf\n ",s);

        wwjt();

}

void wwjt()

{

        FILE *in, *out;

        int a[N][N];

        int i, j;

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

        {

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

                {

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

                }

        

        }

        s=fun(a);

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

        fclose(in);

        fclose(out);

}

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

double av=0.0;

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

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

if(i==0||i==N-1||j==0||j==N-1)             

{

av=av+w[i][j];                                                              

k++;

}

return av/k;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值