C语言必背经典程序.docx
《C语言必背经典程序.docx》由会员分享,可在线阅读,更多相关《C语言必背经典程序.docx(18页珍藏版)》请在冰豆网上搜索。
C语言必背经典程序
C语言必背经典程序
LT
intx,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("smalltobig:
%d%d%d\n",x,y,z);}
==============================================================
【程序8】
题目:
输出9*9口诀。
1.程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include"stdio.h"
main()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
==============================================================
【程序11】
题目:
古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
main()
{
longf1,f2;
inti;
f1=f2=1;
for(i=1;i<=20;i++)
{printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
}
==============================================================
【程序12】
题目:
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
#include"math.h"
main()
{
intm,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap){printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThetotalis%d",h);
}
==============================================================
【程序13】
题目:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
main()
{
inti,j,k,n;
printf("'waterflower'numberis:
");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
==============================================================
【程序15】
题目:
利用条件运算符的嵌套来完成此题:
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示。
1.程序分析:
(a>b)?
a:
b这是条件运算符的基本例子。
2.程序源代码:
main()
{
intscore;
chargrade;
printf("pleaseinputascore\n");
scanf("%d",&score);
grade=score>=90?
'A':
(score>=60?
'B':
'C');
printf("%dbelongsto%c",score,grade);
}
==============================================================
【程序17】
题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:
利用while语句,条件为输入的字符不为'\n'.
2.程序源代码:
#include"stdio.h"
main()
{charc;
intletters=0,space=0,digit=0,others=0;
printf("pleaseinputsomecharacters\n");
while((c=getchar())!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("allinall:
char=%dspace=%ddigit=%dothers=%d\n",letters,
space,digit,others);
}
==============================================================
【程序18】
题目:
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制。
1.程序分析:
关键是计算出每一项的值。
2.程序源代码:
main()
{
inta,n,count=1;
longintsn=0,tn=0;
printf("pleaseinputaandn\n");
scanf("%d,%d",&a,&n);
printf("a=%d,n=%d\n",a,n);
while(count<=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}
printf("a+aa+...=%ld\n",sn);
}
==============================================================
【程序19】
题目:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程
找出1000以内的所有完数。
1.程序分析:
请参照程序<--上页程序14.
2.程序源代码:
main()
{
staticintk[10];
inti,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i{
if((j%i)==0)
{n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%disawanshu",j);
for(i=0;iprintf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
==============================================================
【程序24】
题目:
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:
请抓住分子与分母的变化规律。
2.程序源代码:
main()
{
intn,t,number=20;
floata=2,b=1,s=0;
for(n=1;n<=number;n++)
{
s=s+a/b;
t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/
}
printf("sumis%9.6f\n",s);
}
==============================================================
【程序25】
题目:
求1+2!
+3!
+...+20!
的和
1.程序分析:
此程序只是把累加变成了累乘。
2.程序源代码:
main()
{
floatn,s=0,t=1;
for(n=1;n<=20;n++)
{
t*=n;
s+=t;
}
printf("1+2!
+3!
...+20!
=%e\n",s);
}
==============================================================
【程序26】
题目:
利用递归方法求5!
。
1.程序分析:
递归公式:
fn=fn_1*4!
2.程序源代码:
#include"stdio.h"
main()
{
inti;
intfact();
for(i=0;i<5;i++)
printf("\40:
%d!
=%d\n",i,fact(i));
}
intfact(j)
intj;
{
intsum;
if(j==0)
sum=1;
else
sum=j*fact(j-1);
returnsum;
}
==============================================================
【程序30】
题目:
一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
1.程序分析:
同29例
2.程序源代码:
main()
{
longge,shi,qian,wan,x;
scanf("%ld",&x);
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/
printf("thisnumberisahuiwen\n");
else
printf("thisnumberisnotahuiwen\n");
}
==============================================================
【程序36】
题目:
求100之内的素数
1.程序分析:
2.程序源代码:
#include
#include"math.h"
#defineN101
main()
{
inti,j,line,a[N];
for(i=2;ifor(i=2;i for(j=i+1;j {
if(a[i]!
=0&&a[j]!
=0)
if(a[j]%a[i]==0)
a[j]=0;}
printf("\n");
for(i=2,line=0;i{
if(a[i]!
=0)
{printf("%5d",a[i]);
line++;}
if(line==10)
{printf("\n");
line=0;}
}
}
==============================================================
【程序37】
题目:
对10个数进行排序
1.程序分析:
可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
2.程序源代码:
#defineN10
main()
{inti,j,min,tem,a[N];
/*inputdata*/
printf("pleaseinputtennum:
\n");
for(i=0;i{
printf("a[%d]=",i);
scanf("%d",&a[i]);}
printf("\n");
for(i=0;iprintf("%5d",a[i]);
printf("\n");
/*sorttennum*/
for(i=0;i{min=i;
for(j=i+1;jif(a[min]>a[j])min=j;
tem=a[i];
a[i]=a[min];
a[min]=tem;
}
/*outputdata*/
printf("Aftersorted\n");
for(i=0;iprintf("%5d",a[i]);
}
==============================================================
【程序38】
题目:
求一个3*3矩阵对角线元素之和
1.程序分析:
利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
2.程序源代码:
main()
{
floata[3][3],sum=0;
inti,j;
printf("pleaseinputrectangleelement:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("duijiaoxianheis%6.2f",sum);
}
==============================================================
【程序39】
题目:
有一个已经排好序的数组。
现输入一个数,要求按原来的规律将它插入数组中。
1.程序分析:
首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
2.程序源代码:
main()
{
inta[11]={1,4,6,9,13,16,19,28,40,100};
inttemp1,temp2,number,end,i,j;
printf("originalarrayis:
\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insertanewnumber:
");
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]);
}
==============================================================
【程序40】
题目:
将一个数组逆序输出。
1.程序分析:
用第一个与最后一个交换。
2.程序源代码:
#defineN5
main()
{inta[N]={9,6,5,4,1},i,temp;
printf("\noriginalarray:
\n");
for(i=0;i printf("%4d",a[i]);
for(i=0;i {temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
printf("\nsortedarray:
\n");
for(i=0;i}
==============================================================
/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,
请在空白处完善程序。
*/
main()
{inta[4][4],b[4][4],i,j;/*a存放原始数组数据,b存放旋转后数组数据*/
printf("input16numbers:
");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{scanf("%d",&a[i][j]);
b[3-j][i]=a[i][j];
}
printf("arrayb:
\n");
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%6d",b[i][j]);
printf("\n");
}
}
/*通过键盘输入3名学生4门课程的成绩,
分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。
*/
#include
#include
main()
{floata[4][5],sum1,sum2;
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
{sum1=0;
for(j=0;j<4;j++)
sum1+=a[i][j];
a[i][4]=sum1/4;
}
for(j=0;j<5;j++)
{sum2=0;
for(i=0;i<3;i++)
sum2+=a[i][j];
a[3][j]=sum2/3;
}
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
printf("%6.2f",a[i][j]);
printf("\n");
}
}
8、/*完善程序,实现将输入的字符串反序输出,
如输入windows输出swodniw。
*/
#include
main()
{charc[200],c1;
inti,j,k;
printf("Enterastring:
");
scanf("%s",c);
k=strlen(c);
for(i=0,j=k-1;i{c1=c[i];c[i]=c[j];c[j]=c1;}
printf("%s\n",c);
}
/*下面程序的功能是从字符数组s中删除存放在c中的字符。
*/
#include
main()
{chars[80],c;
intj,k;
printf("\nEnterastring:
");
gets(s);
printf("\nEnteracharacter:
");
c=getchar();
for(j=k=0;s[j]!
='\0';j++)
if(s[j]!
=c)
s[k++]=s[j];
s[k]='\0';
printf("\n%s",s);
}
11、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列*/
main()
{inta[10]={0,12,17,20,25,28,30};/*a[0]为工作单元,从a[1]开始存放数据*/
intx,i,j=6;/*j为元素个数*/
printf("Enteranumber:
");
scanf("%d",&x);
a[0]=x;
i=j;/*从最后一个单元开始*/
while(a[i]>x)
{a[i+1]=a[i];i--;}/*将比x大的数往后移动一个位置*/
a[++i]=x;
j++;/*插入x后元素总个数增加*/
for(i=1;i<=j;i++)printf("%8d",a[i]);
printf("\n");
}
17、/*冒泡排序,从小到大,排序后结果输出到屏幕*/
#include
voidfun(inta[],intn)
{inti,j,t;
for(i=0;i<=n-1;i++)
for(j=0;j
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
main()
{inta[10]={12,45,7,8,96,4,10,48,2,46},n=10,i;
fun(a,10);
for(i=0;i<10;i++)
{printf("%4d",a[i]);
}
}
18、编写函数countpi,利用公式
计算π的近似值,当某一项的值小于10-5时,认为达到精度要求,请完善函数。
将结果显示在屏幕上。
#include
doublecountpi(doubleeps)/*eps为允许误差*/
{
intm=1;
doubletemp=1.0,s=0;
while(temp>=eps)
{s+=temp;
temp=temp*m/(2*m+1);
m++;
}
return(2*s);
}
main()
{doubleeps=1e-5,pi;