文档库 最新最全的文档下载
当前位置:文档库 › C语言经典例题

C语言经典例题

1、写一个函数并调用,解决一个小球从h米高度自由落下,每次落下后反弹回原高度的 一半再落下,求它在第n次落地时共经过多少米?
void sm(float s)
{
int i;
float h=100;
for(i=1;i<=10;i++)
{
h=h/2;
s=s+h*2;
}
printf("\nh=%f\ns=%f\n",h,s);
return(s);
}
main()
{
float sum;
sm(sum);
}
2、写一个函数并调用,求数列2/1,3/2,5/3,8/5,13/8.21/13……求前n项之和。
void sum(float s)
{
int a=2,b=1,n=2,t;
s=a/b;
while(n<=20)
{
t=a;
a=a+b;
b=t;
s=s+(float)a/b;
n++;
}
printf("\n s=%f \n",s);
return(s);
}
main()
{
float su;
sum(su);
}
3、写一个函数,求S=a+aa+aaa+aaaa+…..+aaa…aaaa(n个 a)中的第n项,通过调用计算S的值。
#include
#include
void total(long sum)
{
int a,n,t,i,s=0;
sum=0;
scanf("%d,%d",&a,&n);
for(i=1;i<=n;i++)
{
t=a*pow(10,(i-1));
s=s+t;
sum+=s;
}
printf("\n sum=%d \n",sum);
return(sum);
}

main()
{
long su;
total(su);
}
4、写一个 函数,求方程ax2+bx+c=0的根,从主函数中输入a、b、c的值。
#include
#include
void abc(int a,int b,int c)
{ float x,i,x1,x2;
i=pow(b,2)-4*a*c;
if(a==0)
{x=-(c/b);
printf("x=%f",x);}
else
{
if (i>=0)
{
x1=(-b+sqrt(i))/(2*a);
x2=(-b-sqrt(i))/(2*a);
printf("x1=%.2f,x2=%.2f\n",x1,x2);
}
else
printf("wrong\n");
}
}
main()
{
int a,b,c;
scanf("%d,%d,%d",&a,&b,&c);
abc(a,b,c);
}
5、编写程序,计算下面公式并输出结果。

要求:(1)编写一个函数计算n!
(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算。
(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。
#include
long power(int n)
{
long f;
if (n>1)
f=power(n-1)*n;
else
f=1;
return(f);
}
main()
{
int n,m;
long c;
scanf("%d,%d",&n,&m);
if ((n-m)>0)
{
c=power(n)/(power(n-m)*power(m));
printf("c=%ld \n",c);
}
else
printf("please put into new number \n");
}
6、写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出“1└┘9└┘9└┘0”。
#include
char num(int n)
{
int n1,n2,n3,n4;
n4=n%10;
n3=n/10%10;
n2=n/100%10;
n1=n/1000;
printf("%d %d %d %d\n",n1,n2,n3,n4);
}
main()
{
int n;
char num1;
scanf("%d",&n);
num1=num(n);
printf("%c",num1);
}
7、写一个函数并调用,判断一个5位数,是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同,然后打印结果。
n(int a)
{
int a1,a2,a3,a4,a5;
a5=a%10;
a4=a/10%10;
a3=a/100%10;
a2=a/1000%10;
a1=a/10000;
if (a5

==a1 && a4==a2)
printf("The num %d is 'huiwen'\n",a);
else
printf("It is not 'huiwen'\n");
}
main()
{
int aa,num;
scanf("%d",&num);
aa=n(num);
}
8、写一个函数并调用,对某个浮点数h中的值保留2位小数,并对第三位进行四舍五入(规定浮点数都是正数)。例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。 (因为printf函数本身当打印 %.2f时可四舍五入,本题不可以直接输入,打印,而需要进行截取位数等运算,然后再输出)
#include
void n(float a)
{
int b,c,e;
float d;
b=(a*1000)/10;
c=b/10;
e=b%10;
if (e>5)
{
c=c+1;
d=c*0.01;
}
else
d=c*0.01;
printf("the num is %f\n",d);
}
main()
{
float a;
scanf("%f",&a);
n(a);
}
9、写一个函数,将一个字符变成距离它的第3个字符,(例:输入a ,变成c,输入b,变成d),从键盘上输入一行字符,通过函数调用实现转换。
#include
void ch(char c)
{
while((c=getchar())!='\n')
{
if (c>='a'&&c<='x' || c>='A'&&c<='X')
c=c+2;
else if (c=='y'||c=='z'||c=='Y'||c=='Z')
c=c-24;
printf("%c",c);
}
return?;
}
main()
{
char a;
a=getchar();
ch(a);
}
10、两个乒乓球队进行比赛,各出3人。甲队队员为A、B、C,乙队队员X、Y、Z,已抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X打,C说他不和X、Z打,请编程找出3对赛手的比赛名单。
main()
{
char jia[3]={'A','B','C'};
char yi[3]={'X','Y','Z'};
int i,j;
printf("\n the list is: \n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==0 && j==2 ||i==2 && j==0 || i==2 && j==2)
;
else
printf(" %c : %c\n",jia[i],yi[j]);
}
11、有n(n>3)个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号。n的值从键盘输入。
main()
{
int a[50];
int i,n,num,counter;
printf("\nPlease input n:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
a[i]=1;
i=1,num=0,counter=n;
while(counter>1)
{
if(i==n+1)
i=1;
if(a[i]==1)
num++;
if(num==3)
a[i]=0,num=0,counter--;
i++;
}
for(i=1;i<=n;i++)
if(a[i]==1)
printf("\nThe last one is No. %d\n",i);
}
12、输入一个字符串,将其中的大写字母复制到另一个字符串。
main()
{ char str1[50],str2[50];
int i=0,j=0;
printf("\nplease input a string :\n");
scanf("%s",&str1);
while(str1[i]!='\0')
{ if(str1[i]>='A' && str1[i]<='Z')
{ str2[j]=str1[i];
j++;
}
i++;
}
str2[j]='\0';
printf("\nthe first string is :%s\nthe second string is :%s\n",str1,str2);
}
13、口袋中有红、绿、白、黑4种颜色的球若干个。每次从口袋中先后取出2个球,问得到2种不同色的球的可能

取法,输出每种排列的情况。
main()
{ int b1,b2,num=0;
printf("num\tball1\tball2:\n");
for(b1=1;b1<=4;b1++)
for(b2=1;b2<=4;b2++)
if(b2!=b1)
{num++;
printf("%d\t",num);
switch(b1)
{case 1:printf("red\t");break;
case 2:printf("green\t");break;
case 3:printf("white\t");break;
case 4:printf("black\t");break;
}
switch(b2)
{case 1:printf("red\t");break;
case 2:printf("green\t");break;
case 3:printf("white\t");break;
case 4:printf("black\t");break;
}
printf("\n");
}

printf("\ntotal:%d\n",num);
getch();
}
14、关于素数。
(1)、输入一个数字判断是否是素数。
#include
#include
sushu(int m)
{
int i,k;
printf("Please input a number bigger than zero:");
scanf("%d",&m);
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
printf("%d is sushu\n",m);
else
printf("%d isn't sushu\n",m);
}
main()
{
int num;
sushu(num);
}
(2)、求n以内所有的素数。
#include
#include
sushu(int n)
{
int i,k,m=1;
printf("\nPlease input a number bigger than one:");

scanf("%d",&n);
for(m=1;m<=n;m++)
{
k=(int)sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>k)
printf("%d\t",m);
else
;
m++;
}
}
main()
{
int num;
sushu(num);
}
15、现有一个整数数组,其中的元素按照从小到大的顺序已经排好序,现再输入一个数,要求按原来的规律将它插入数组中。(注意:插入数的时候,需要将要插入位置及以后的内容向后移动一个位置,空出当前位置放置新的数值)
main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("original array is:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert a new number:");
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else
{for(i=0;i<10;i++)
{ if(a[i]>number)
{temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
for(i=0;i<11;i++)
printf("%6d",a[i]);
}
16、输入行数,打印 n行的一个由数字组成的三角形,三角型如下
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 5 6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
#include
main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>0;j--)
printf("%d",j);
printf("\n");
}
}
17、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n

,当输入n为奇数时,调用函数 1/1+1/3+...+1/n
f1(int x)
{
float s=0;
int i;
if(x!=1)
{
if(x%2==0)
{
for(i=1;is=s+1.0/(2*i);
}
if((x%2)!=0 && x!=1)
{
for(i=1;is=s+1.0/(2*i-1);
}
}
else
s=1;
printf("the total is %.2f\n",s);
}
main()
{
int n;
printf("\nPlease input the number is ");
scanf("%d",&n);
f1(n);
}
18、编写一个函数,分别对整型数组的下标为偶数的元素和下标为奇数的元素求和
main()
{ int i,js=0,os=0;
int arr[10]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<10;i++)
if(i%2==0)
os=os+arr[i];
else
js=js+arr[i];
printf("\n js=%d os=%d",js,os);
}
19、编写一个程序,实现两个字符串的连接
#include
main()
{ char a1[50],a2[50];
int i,j;
printf("\n please the first string :");
scanf("%s",a1);
printf("\n please the second string :");
scanf("%s",a2);
for(i=0;a1[i]!='\0';i++);
for(j=0;a2[j]!='\0';j++)
a1[i+j]=a2[j];
a1[i+j]='\0';
printf("\n %s",a1);
}
20、已知年、月、日,求它是当年的第几天
#include
#include
main()
{
int day,month,year,sum,leap;
printf("\nplease input
year,month,day\n");
scanf("%d,%d,%
d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data
error");break;
}
sum=sum+day;
if(year%400==0||(year%
4==0&&year%100!=0))
leap=1;
else
leap=0;
if(leap==1&&month>2)
sum++;
printf("It is the %dth
day.",sum);
getch();
}

相关文档