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

被折叠的 条评论
为什么被折叠?



