【经典】113道C语言题目(二)

本文提供了一组C语言编程题目,包括计算Fibonacci数列、字符转换、闰年判断等,旨在提升C语言编程技能。涵盖字符串处理、数学计算、排序算法等多个方面。

1.求Fibonacci数列前40个数,每行输出5个,将40个Fibonacci数输出。

#include <stdio.h>
long f(int);
void main()
{
 int n,i=0;
 for (n=1;n<41;n++)
 {
  printf ("%ld\t",f(n));
  i++;
  if (i%5==0) printf("\n");
 }
}
long f(int m)
{
 if (m==0)
  return 0;
 if (m==1)
  return 1;
 else
  return f(m-1)+f(m-2);
}



2.按以下规律翻译密码:
  将每一个字母变成它后面的字母,例如,将A变成B,B变成C,…,Z变成A,非字母字符不变,“!”作为电文结束标志。

#include <stdio.h>
void main()
{
 char ch;
 printf("输入字符串:\n");
 while ((ch=getchar())!='!')
 {
  if ((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
   if (ch=='z') ch='a';
   else if (ch=='Z') ch='A';
   else ch=ch+1;
        printf("%c",ch);
 }
 printf("\n");
}


3.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变,请编程。

#include <stdio.h>
void main()
{
 char ch;
 ch=getchar();
 if ((ch>=65)&&(ch<=90)) ch=ch+32;
 else if ((ch>=97)&&(ch<=122)) ch=ch-32;
 printf("%c\n",ch);
}


4.编程判断对输入的任何一个年份是否是闰年,将结果输出。

#include <stdio.h>
void main()
{
 int n;
 printf("输入年份:");
 scanf("%d",&n);
 if (n%4==0&&n%100!=0||n%400==0) printf("闰年\n");
 else printf ("不是闰年\n");
}


5.编程实现:计算1到100之间的奇数之和及偶数之和。

#include <stdio.h>
void main ()
{
 int n,even=0,odd=0;
 for(n=1;n<=50;n++)
 {
  even+=2*n;
  odd+=2*n-1;
 }
 printf("1到100间的偶数的和为%d:\n",even);
 printf("1到100间的奇数的和为%d:\n",odd);
}


6.请编程实现:对任意100个整数,统计0的个数及正数的累加和。

#include <stdio.h>
#define N 100
void main ()
{
 int a,sum=0,i,frequency=0;
 int s[N];
 printf("请输入数据:\n");
 for(i=0;i<N;i++)
  scanf("%d",&s[i]);
 printf("\n原始数据为:\n");
 for(i=0;i<N;i++)
  printf("%d\n",s[i]);

 for(i=0;i<N;i++)
 {
  if(s[i]==0)
   frequency+=1;
  if(s[i]>0)
  {
   a=s[i];
   sum+=a;
  }
 }
 printf("这些数中0的个数为%d\n",frequency);
 printf("这些数中所有正数的和为%d\n",sum);
}


7.从键盘输入一行字符,统计出输入的字符个数(注:不要使用strlen函数编程)

#include <stdio.h>
void main()
{   int alphabet=0,i=0;
 char str[100];
 printf ("请输入一个字符串\n");
 gets(str);
 for (i=0;str[i]!='\0';i++)
  ++alphabet;
 printf ("有%d个字母\n",alphabet);
}


8.编程实现:对键盘输入的任意一个四位正整数,计算各位数字平方和。

#include <stdio.h>
#include <math.h>
 void main ()
 {
        printf ("请输入一个四位数\n");
        int x,a,b,c,d,s;
        scanf ("%d",&x);
       
        a=x/1000;
        b=x/100-10*a;
        c=x/10-100*a-10*b;
        d=x%10;
        
        printf ("a=%d\n",a);
        printf("b=%d\n",b);
        printf ("c=%d\n",c);
        printf ("d=%d\n",d);
 s=a*a+b*b+c*c+d*d;
 printf("各位数字的平方和是%d\n",s);
}


9.编函数isprime判断正整m是否为素数;如果是素数,返回正整数1,否则返回0;主函数中调用isprime,找出2到1000之间的所有素数。

#include<stdio.h>
#include<math.h>
int isprime(int);
void main()
{
 int m;
 for(m=2;m<=1000;m++)
  if(isprime(m))
   printf("%5d",m);
}

int isprime(int a)
{
 int i;
 for(i=2;i<=sqrt(a);i++)
  if(a%i==0) return 0;
  return 1;
}


10.一维数组a中的若干个数已按从小到大的顺序有序;在主函数中输入一个数,将其插入到该数组中,使得原数组依然按原序有序,分别输入原数组和插入新元素之后的数组。

#include<stdio.h>
void main()
{
 int a[21],i,j,n,p,temp;
 printf("请输入数组元素的个数:");
 scanf("%d",&n);
 printf("请输入%d个整数:\n",n);
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
 for(i=1;i<=n-1;i++)
 {
  for(j=0;j<=n-1-i;j++)
   if(a[j]>a[j+1])
   {
    temp=a[j];
    a[j]=a[j+1];
    a[j+1]=temp;
   }
 }
 printf("原数组为:\n");
 for(i=0;i<=n-1;i++)
  printf("%5d",a[i]);
 
 printf("\n请输入插入的数:");
 scanf("%d",&p);
 for(i=0;i<=n-1;i++)
  if(p<a[i])
  {
   temp=a[i];
   a[i]=p;
   p=temp;
  
  }
 a[n]=p;
 printf("插入元素后的数组为:\n");
 for(i=0;i<=n;i++)
  printf("%5d",a[i]);
}


11.有5个国家名,编程实现按字母先后顺序排序,然后分别输出原数组和排序之后的数组。

#include<stdio.h>
#include<string.h>
void main()
{
 char name[5][15],temp[15];
 int i,j;
 printf("请输入国家名:\n");
 for(i=0;i<5;i++)
  gets(name[i]);
 for(i=0;i<5;i++)
  for(j=0;j<4-i;j++)
   if(strcmp(name[i],name[j+1])>0)
   {
    strcpy(temp,name[j]);
    strcpy(name[j],name[j+1]);
    strcpy(name[j+1],temp);
   }
 printf("国家名排序后为:\n");
 for(i=0;i<5;i++)
  printf("%s\n",name[i]);
}


12.有一行文字,要求删去其中的某个字符,此行文字和要删的字符均由键盘输入,分别输出原文字和删除之后的文字(注:原文字中的所有和要删除字符相同的字符完全删除)。

#include<stdio.h>
void main()
{
 int i,j;
 char a[10],N='n';
 printf("请输入一行9个的文字:\n");
 gets(a);
 printf("原文字为:\n");
 puts(a);
 for(i=0;i<=9;i++)
  if(a[i]==N) 
   for(j=i;j<=9;j++)
    a[j]=a[j+1];
 printf("删除后文字为:\n");
 puts(a);
}


13.打印如图所示的杨辉三角,要求打印出n行,n由键盘输入。

1

1 1

1 2 1

1 3 3  1

1 4 6  4  1

1 5 10 10 5 1
………

#include<stdio.h>
void main()
{
 int i,j,N,a[21][21];
 printf("请输入打印的行数:\n");
 scanf("%d",&N);
 for(i=1;i<N+1;i++)
 {
  a[i][1]=1;
  a[i][i]=1;
 }
 for(i=3;i<N+1;i++)
  for(j=2;j<=i-1;j++)
   a[i][j]=a[i-1][j-1]+a[i-1][j];
  for(i=1;i<N+1;i++)
  {
   for(j=1;j<=i;j++)
    printf("%6d",a[i][j]);
   printf("\n");
  }
  printf("\n");
}


14.编一个函数实现将一个整型的一维数组中的数逆序存放,不使用辅助数组。主函数输入一个整型的一维数组,调用上述函数,将该数组逆置,将结果输出。

#include<stdio.h>
#define N 10
void main()
{
 int a[N],i,temp;
 printf("enter array a:\n");
 for(i=0;i<N;i++)
  scanf("%d",&a[i]);
 printf("array a:\n");
 for(i=0;i<N;i++)
  printf("%4d",a[i]);
 for(i=0;i<N/2;i++)
 {
  temp=a[i];
  a[i]=a[N-i-1];
  a[N-i-1]=temp;
 }
 printf("\nNow,array a:\n");
 for(i=0;i<N;i++)
  printf("%4d",a[i]);
 printf("\n");
}


15.编写一个函数convert,求一个方阵的转置矩阵;主函数中输入方阵的阶数和方阵,在主函数中将原矩阵和转置矩阵按原格式输出。

#include<stdio.h>
void main()
{
    void convert(int [10][10]);
 int a[10][10],p,q,i,j;
 printf("请输入矩阵的行和列:\n");
 scanf("%d",&p);
 scanf("%d",&q);
    printf("请输入矩阵的元素值:\n");
 for(i=0;i<p;i++)
  for(j=0;j<q;j++)
   scanf("%d",&a[i][j]);
 printf("原矩阵为:\n");
    for(i=0;i<p;i++)
 {
  for(j=0;j<q;j++)
   printf("%5d",a[i][j]);
  printf("\n");
 }
 convert(a);
 printf("转置矩阵为:\n");
    for(i=0;i<q;i++)
 {
  for(j=0;j<p;j++)
   printf("%5d",a[i][j]);
  printf("\n");
 }
    
}

void convert(int a[10][10])
{
 int i,j,t;
 
    for(i=0;i<10;i++)
     for(j=i+1;j<10;j++)
  {
   t=a[i][j];
   a[i][j]=a[j][i];
   a[j][i]=t;
  }
}


16.用公式计算:e≈1+1/1!+1/2! …+1/n!,精度为10-6。

#include<stdio.h>
float fun(int);
void main()
{
 int i;
    float e=1.0;

 for(i=1;fun(i)>0.00000001;i++)
     e+=fun(i);
 printf("e=%f\n",e);
 
}

float fun(int n)
{
 int i;
    float term=1.0;
 for(i=1;i<=n;i++)
  term/=i;
 return term;
}


17.编一个子函数GCD,求两个正整数的最大公约数,主程序输入n个自然数,调GCD,求出这n个数的最大公约数。

#include<stdio.h>
int GCD(int,int);
void main()
{
 int a[100],i,n,k;
 printf("请输入数组元素的个数:\n");
 scanf("%d",&n);
 printf("请输入%d个正整数:\n",n);
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
    k=GCD(a[0],a[1]);
 for(i=2;i<n;i++)
  k=GCD(k,a[i]);
 printf("输入的%d个正整数的最大公约数是:%d\n",n,k);
}

int GCD(int x,int y)
{
 int i,min,p,q,gcd;
 if(x<=y)
  min=x;
 else
  min=y;
 for(i=1;i<=min;i++)
 {
  p=x%i;
  q=y%i;
  if(p==0&&q==0)
   gcd=i;
 }
 return gcd;
}


18.编一函数使用冒泡法对若干个整数按从小到大的顺序排序,主函数中输入若干个整数到一个一维数组中,调用排序函数,将其排序,最后将原数组和排好序的数组输出。

#include<stdio.h>
#define N 10
void main()
{
 int a[N],i,j,temp;
 printf("请输入10个整数:\n");
 for(i=0;i<N;i++)
  scanf("%d",&a[i]);
 printf("\n");
 printf("原始数据为:\n");
 for(i=0;i<N;i++)
  printf("%d",a[i]);
 for(i=1;i<=N-1;i++)
 {
  for(j=0;j<=N-i-1;j++)
   if(a[j]>a[j+1])
   {
    temp=a[j];
    a[j]=a[j+1];
    a[j+1]=temp;
   }
 }
 printf("\n排序后的数据为:\n");
 for(i=0;i<N;i++)
  printf("%d",a[i]);
 printf("\n");
}


19.编写一个函数求给定字符串长度,主函数中输入一个字符串,调用该子函数,求出该字符串的长度,输出。

#include<stdio.h>
void main()
{
 int length(char*p);
 int len;
 char str[20];
 printf("input string:");
 scanf("%s",str);
 len=length(str);
 printf("The length of string is %d.\n",len);
}

int length(char*p)
{
 int n;
 n=0;
 while(*p!='\0')
 {
  n++;
  p++;
 }
 return(n);
}


20.编写一个函数将给定字符串复制到另一个字符串中去,主函数中输入一个字符串,调用该子函数,复制出另一字符串,将两个串输出。

#include<stdio.h>
#include<string.h>
void main()
{
 void copystr(char*,char*,int);
 int m;
 char str1[20],str2[20];
 printf("\ninput string:");
 gets(str1);
 printf("which character that begin to copy?");
 scanf("%d",&m);
 if(strlen(str1)<m)
  printf("input error!");
 else
 {
  copystr(str1,str2,m);
  printf("result:%s\n",str2);
 }
}

void copystr(char*p1,char*p2,int m)
{
 int n;
 n=0;
 while(n<m-1)
 {
  n++;
  p1++;
 }
 while(*p1!='\0')
 {
  *p2=*p1;
  p1++;
  p2++;
 }
 *p2='\0';
}


21.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

#include<stdio.h>
int letter,digit,space,others;
void main()
{
 void count(char[]);
 char text[80];
 printf("输入字符串:\n");
 gets(text);
 printf("字符串是:");
 puts(text);
 letter=0;
 digit=0;
 space=0;
 others=0;
 count(text);
 printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);

}
   void count(char str[])
   {int i;
     
  for(i=0;str[i]!='\0';i++)
   if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
     letter++;
   else if(str[i]>='0'&&str[i]<='9')
   digit++;
   else if(str[i]==32)
   space++;
   else
   others++;
   }


22.定义一个含有30个整形元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每五个数求出一个平均值,放在另一个数组中并输出,请编程。

#include<stdio.h>
void main()
{
 int a[30] ,i,j=0,b[6][5],p,k;
 int c[6];
 for(i=0;i<30;i++)
  a[i]=2*(i+1);
    for(i=0;i<30;i++)
     
 {
   printf("%3d",a[i]);
          j++;
          if(j%5==0) printf("\n");}
 for(p=0;p<5;p++)
        for(k=0;k<6;k++)
 b[k][p]=a[5*k+p];
        for(k=0;k<6;k++)
 c[k]=(b[k][0]+b[k][1]+b[k][2]+b[k][3]+b[k][4])/5;
        for(k=0;k<6;k++)
 {printf("%3d",c[k]);}    
 printf("\n");
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值