我的c语言程序Word下载.docx
《我的c语言程序Word下载.docx》由会员分享,可在线阅读,更多相关《我的c语言程序Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
n;
i++)
if((n%i)==0)s=s+i;
if(s==n)
{
printf("
%ditsfactorsare"
n);
for(i=1;
if((n%i)==0)printf("
%d"
i);
putchar('
\n'
);
}
3.近似求π的值,同时输出最后一位循环精度以及循环次数
inti;
doublej=1,t,s=0;
1/j>
=1e-8;
i=i+2)//此精度可以改
j=i;
//必须要这样做,要把i变为double型才能分之一
if(i%4==1)t=1/j;
elset=-1/j;
s=s+t;
i=i/2+1;
π=%15.14f\n循环精度%15.14f\n循环次数%d\n"
s*4,t,i)
}//我的这个程序(for语句)显然比书上的算法简单
4.输出100到200之间的所有素数
for(n=101;
=200;
n++)//数据范围可以更改
//每次必须将s赋值为0
for(i=2;
i+=2)
if(n%i==0)s=s+i;
if(s==0)printf("
putchar('
5.输入两个数,求其最大公约数与最小公倍数
intm,n,i,t;
%d,%d"
m,&
n);
if(m<
n)
{t=m;
m=n;
n=t;
=n;
{if((n%i==0)&
&
(m%i==0)){t=i;
break;
}}
最大公约数为%d\n"
t);
for(i=m;
;
if((i%n==0)&
(i%m==0))
{t=i;
最小公倍数为%d\n"
6.用二分法求方程的根
doublexa,xb,fa,fb;
for(xa=-10,xb=10;
(xb-xa)>
=1e-15;
)//范围可以改变
fa=2*xa*xa*xa-4*xa*xa+3*xa-6;
//方程可以改变
fb=2*xb*xb*xb-4*xb*xb+2*xb-6;
if((fa+fb)/2<
=0)xa=(xa+xb)/2;
elseif((fa+fb)/2>
0)xb=(xa+xb)/2;
方程的解为x=%f\n"
xa);
6.几个数从小到大排序(用数组)选择法
请输入五个整数:
\n"
inta[5];
//数的个数可以改
inti,j,m;
for(i=0;
5;
scanf("
%d"
a[i]);
for(i=0;
for(j=i+1;
j<
j++)
if(a[j]<
a[i])
{m=a[j];
a[j]=a[i];
a[i]=m;
a[i]);
}//又比老师的程序简单
冒泡法排序
inti,j,m,o;
//定义o简化算法
4;
o=0;
for(j=0;
4-i;
if(a[j]>
a[j+1])
a[j]=a[j+1];
a[j+1]=m;
o++;
if(o==0)break;
7.求矩阵的转制
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
arraya:
for(i=0;
=1;
for(j=0;
=2;
{printf("
%5d"
a[i][j]);
b[j][i]=a[i][j];
arrayb:
i++)
printf("
b[i][j]);
}//优化讲义上所得
8.用筛选法求10000以内所有素数
inti,j,n,a[10001];
//范围可改
a[1]=0;
for(i=2;
=sqrt(10000);
for(j=2;
j*i<
=10000;
j++)a[j*i]=0;
for(i=1,n=0;
if(a[i]!
=0){printf("
%6d"
n++;
}//用n计数,每十个换行
if(n==10){putchar('
n=0;
9.输出杨辉三角
#defineN10//符号常量N为输出杨辉三角的行数,可一改全改
intmain()//上面的几个可改数字的程序也可以如此做,方便简单
inti,j,a[N+1][N+1];
=N;
a[i][1]=1;
for(j=1;
a[i][j]=1;
for(i=3;
i;
a[i][j]=a[i-1][j-1]+a[i-1][j];
=i;
putchar('
10.得意之作!
打印2014年年历表。
inti,j,k,n=2;
//i月份,j天数,k每月前空格,n列数计数
intm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//m数组记每月天数
2014年年历表\n\n"
=12;
switch(i)
case1:
printf("
一月\n"
case2:
二月\n"
case3:
三月\n"
case4:
四月\n"
case5:
五月\n"
case6:
六月\n"
case7:
七月\n"
case8:
八月\n"
case9:
九月\n"
case10:
十月\n"
case11:
十一月\n"
case12:
十二月\n"
\n一二三四五六日\n"
for(k=1;
k<
k++)printf("
"
=m[i];
%3d"
j);
n++;
if(n==7)
{putchar('
\n\n"
}
11.hanoi移盘子问题,运用函数递归,难!
!
voidmove(charx,chary)
%c-->
%c\n"
x,y);
voidhanoi(intn,chara,charb,charc)
if(n==1)move(a,c);
else
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
intm;
hanoi问题,将n个盘子从A借助B移动到C。
\n请输入盘子数n:
"
m);
移动方法为:
hanoi(m,'
A'
'
B'
C'
12.函数求最大公约数与最小公倍数
intY(inta,intb)//最大公约数用递归函数的辗转相除法求得
intc,d,x;
c=a/b,d=a%b;
if(d==0)x=b;
elsex=Y(b,d);
returnx;
}
intB(inta,intb)
return(a*b/Y(a,b));
//两数乘积等于其最大公约数与最小公倍数相乘
inta,b;
请输入两个整数:
%d%d"
a,&
b);
最大公约数为%d\n最小公倍数为%d\n"
Y(a,b),B(a,b));
13,用函数求方程的根,判别式的情况都要考虑
voidroot(doublea,doubleb,doublec);
voidroot1(doublea,doubleb,doublec);
voidroot2(doublea,doubleb,doublec);
voidroot3();
doublea,b,c;
%lf%lf%lf"
b,&
c);
root(a,b,c);
voidroot(doublea,doubleb,doublec)
doublex=b*b-4*a*c;
if(x>
0)root1(a,b,c);
elseif(x==0)root2(a,b,c);
elseroot3();
voidroot1(doublea,doubleb,doublec)
doublex=sqrt(b*b-4*a*c);
Therootsis%f,%f\n"
(-b-x)/(2*a),(-b+x)/(2*a));
voidroot2(doublea,doubleb,doublec)
Therootis%f\n"
-b/(2*a));
voidroot3()
无实根\n"
}//并不高级,但是对于练习函数的用法有很大帮助
14.算法:
n个人围成一圈1,2,3报数,报到3退出,问最后剩下的人是原来的第几个?
(经过耗费脑细胞的优化算法,终于得到最简单的程序!
累死!
)
#definen10
inta[n+1],i,j;
i++)a[i]=1;
for(i=1,j=0;
j!
=3*n;
if(i==n+1)i=1;
=0)j++;
if(j%3==0)a[i]=0;
%d\n"
i-1);
#definet3
=t*n;
if((j%t==0)&
(a[i]!
=0)){a[i]=0;
%3d\n"
15.关于四个学生五门成绩的一些处理(没什么的,只是它长,练习之用,留下以作纪念)。
P29215题
voidaverage1(int(*a)[5]);
voidsearch1(int(*a)[5]);
voidsearch2(int(*a)[5]);
inta[4][5]={{77,88,99,44,55},{65,54,98,78,23},{85,95,96,94,100},{45,100,100,100,15}};
for(int*p=*a,i=1;
p<
=*a+19;
p++,i++)
%4d"
*p);
if(i%5==0)putchar('
average1(a);
search1(a);
search2(a);
intaverage(int*p)
for(inti=1,s=0;
=5;
i++,p++)s=s+*p;
return(s/5);
voidaverage1(int(*a)[5])
=4;
i++,a++)s=s+**a;
average=%d\n"
s/5);
voidsearch1(int(*a)[5])
i++,a++)
for(intj=0,t=0;
j++)if(*(*a+j)<
60)t++;
if(t>
1)
%dfail.\nher/hisscoresis:
i+1);
for(intj=0;
j++)printf("
*(*a+j));
\naveragescore:
average(*a));
voidsearch2(int(*a)[5])
for(intj=0,t1=0,t2=0;
j++)
{
if(*(*a+j)>
=85)t1++;
=95)t2++;
if(t1>
1||t2>
0)printf("
%dwins\n"