0910南航C语言常用算法总结Word下载.docx
《0910南航C语言常用算法总结Word下载.docx》由会员分享,可在线阅读,更多相关《0910南航C语言常用算法总结Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
a=c=0;
for(i=0;
i<
=10;
i=i+2)
{
a+=i;
b=i+1;
c+=b;
}
sumoftheeven=%d\n"
a);
sumoftheodd=%d\n"
c-11);
实验五2求1!
+2!
+3!
+4!
+5!
+…
ints=0,i,t=1;
for(i=1;
=5;
i++)
t=t*i;
s=s+t;
1!
+2!
+3!
+4!
+5!
=%d\n"
s);
下面程序的功能是:
有一个分数序列,
求出这个序列的前20项之和,请填空。
#include<
{floata=2,b=1,sum=0,t;
inti;
for(i=1;
i<
=20;
{sum+=a/b;
t=a;
a+=b;
b=t;
sum=%f\n"
sum);
下面pi函数的功能是根据以下的公式,返回满足精度要求的的值,请填空。
{doubleeps=1e-6,s=0,t=1.0;
intn;
for(n=1;
t>
eps;
n++)
s+=t;
t=t*n/(2*n+1);
PI=%f\n"
2*s);
(2)求素数(判断素数);
math.h>
inti,m,k;
m);
k=sqrt(m);
for(i=2;
=k;
if(m%i==0)break;
if(i==k+1)printf("
%disaprime.\n"
m);
elseprintf("
%disnotaprime.\n"
(3)数的分解,如水仙花数,完数等;
*用数组和循环实现数的分解
#include<
voidmain()
{longn;
inta[5],i=0,k;
scanf(“%d”&
n);
while(n>
0)
{a[i]=n%10;
n=n/10;
i++;
printf(“ws=%d\n”,i);
for(k=i-1;
k>
=0;
k--)
printf(“%4d”,a[k]);
printf(“\n”);
for(k=0;
k<
i;
k++)
printf(“%4d”,a[k]);
*打印出所有的“水仙花数”。
{inti,a,b,c;
/*a百位,b十位,c个位*/
for(i=100;
1000;
i++)
{a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf(“%4d”,i);
*完数(一个数为其因子之和)
inti,j,s;
i++)
s=0;
for(j=1;
j<
j++)
if(i%j==0)s+=j;
if(i==s)
%ditsfactorsare1"
i);
for(j=2;
if(i%j==0)printf("
%4d"
j);
\n"
);
(4)求最大公约数和最小公倍数。
求最大公约数、最小公倍数
iostream.h>
intgys(intm,intn)//用辗转相除法求最大公约数
{
intd,x,u;
d=m>
n?
m:
n;
x=m<
u=d%x;
while(u!
=0)
{d=x;
x=u;
return(x);
intgys(intm,intn)//用辗转相除法求最大公约数的优化算法
{intr;
while((r=m%n)!
{m=n;
n=r;
return(n);
intgbs(intm,intn)//求最小公倍数
intmaxy;
maxy=gys(m,n);
return(m*n/maxy);
intgys(intm,intn)//根据定义求最大公约数
inti,x;
for(i=x;
i>
=1;
i--)
if(m%i==0&
n%i==0)break;
return(i);
intgbs(intm,intn)//根据定义求最小公倍数
inti,d;
for(i=d;
=m*n;
if(i%m==0&
i%n==0)break;
intgys(intm,intn)//求最大公约数:
大数减小数直至两数相等
{
while(m!
=n)
if(m>
n)m=m-n;
elsen=n-m;
return(m);
intm,n;
%d%d"
m,&
gongyueshu:
%4d\n"
gys(m,n));
gongbeishu:
gbs(m,n));
}三、第七章常用算法总结
(1)数组运算,如找最大,最小值问题,累加和,求平均值;
见函数调用例,非函数调用略,二维数组略。
(2)排序运算,如冒泡法,选择排序;
见函数调用例
(3)字符串操作:
strcpy,strcat,strlen。
四、第八章常用算法总结
能以函数的形式完成第五章、第六章、第七章的常用算法。
一、以下程序的功能是:
从键盘输入n的值,计算1+1/2+1/3+1/4+…+1/n的值,并将和值返回主调函数,请填空。
floatsum(intn);
floati=2;
floats=1.0;
while(i<
=n)
{
s=s+1/i;
i++;
return(s);
{floatm;
floats;
scanf("
%f"
s=sum(m);
printf("
s=%f\n"
二、P38实验五2求1!
intjc(intm)
inti,w=1;
=m;
w=w*i;
returnw;
inti,n,s=0;
for(i=1;
=n;
s=s+jc(i);
s=%d\n"
三、求素数判断x是否是素数,若是素数,返回1;
若不是素数,返回0。
intprime1(intx)/*解1*/
intk,i;
k=sqrt(x);
for(i=2;
if(x%i==0)break;
if(i==k+1)return
(1);
elsereturn(0);
intprime2(intx)/*解2*/
if(x%i==0)return(0);
return
(1);
inti,m;
if(prime(m)==1)printf("
四、打印出所有的“水仙花数”。
inths(intm)
inta,b,c;
a=m/100;
b=m/10%10;
c=m%10;
if(a*a*a+b*b*b+c*c*c==m)return1;
elsereturn0;
inti,a,b,c;
for(i=100;
if(hs(i))printf("
%4d"
五、完数
intws(intm)
inti,s=0;
m;
if(m%i==0)s+=i;
if(s==m)return1;
if(ws(i)==1)
六、最大公约数和最小公倍数略
七、求一维数组最大、最小、平均值
解1:
通过全局变量返回数组的最大值和最小值,通过函数的返回值返回数组的平均值。
floatmax,min;
floataverage(floatarray[],intn)
{inti;
floataver,sum;
max=min=sum=array[0];
{if(array[i]>
max)max=array[i];
elseif(array[i]<
min)min=array[i];
sum=sum+array[i];
aver=sum/n;
return(aver);
{floatave,score[10];
inti;
for(i=0;
10;
i++)scanf("
score[i]);
ave=average(score,10);
max=%f\n"
max);
min=%f\n"
min);
average=%f\n"
ave);
解2:
通过指针做函数参数,返回数组的最大值、最小值和平均值。
//推荐使用此方法
voidaverage(floatarray[],intn,float*maxp,float*minp,float*averp)
{inti;
floatsum;
sum=array[0];
*maxp=*minp=array[0];
*maxp)*maxp=array[i];
*minp)*minp=array[i];
*averp=sum/n;
floatscore[10],max,min,aver;
i++)
average(score,10,&
max,&
min,&
aver);
aver);
八、一维数组排序(选择法、冒泡法)
例1:
将n个整数按由小到大排列
voidsort(inta[],intn)//选择法排序
inti,j,p,t;
for(i=0;
n-1;
p=i;
for(j=i+1;
j<
j++)
if(a[j]<
a[p])p=j;
if(p!
=i){t=a[i];
a[i]=a[p];
a[p]=t;
voidsort(inta[],intn)//冒泡法排序
{inti,j,t;
for(j=0;
n-1-i;
if(a[j]>
a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
{inti,a[10];
i++)scanf("
a[i]);
sort(a,10);
printf("
a[i]);
九、字符串操作(不用系统函数,完成strlen,strcpy,strcat功能)
intmystrlen(char*p)/*strlen函数功能*/
inti,n=0;
while(*p!
=0){n++;
p++;
returnn;
{charstr[10];
gets(str);
mystrlen(str));
voidmystrcpy(char*to,char*from)
/*strcpy函数功能*/
from[i]!
='
\0'
;
to[i]=from[i];
to[i]='
{charstr1[10],str2[10];
gets(str2);
mystrcpy(str1,str2);
puts(str1);
voidmystrcat(char*s1,char*s2)
/*strcat函数功能*/
{inti=0,j=0;
while(s1[i]!
)i++;
while(s2[j]!
)
s1[i++]=s2[j++];
s1[i]='
;
{charstr1[20],str2[10];
gets(str1);
mystrcat(str1,str2);
//*****P85.20*****/