C语言常用算法文档格式.docx
- 文档编号:17068943
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:23
- 大小:28.53KB
C语言常用算法文档格式.docx
《C语言常用算法文档格式.docx》由会员分享,可在线阅读,更多相关《C语言常用算法文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
(int)(x/y)==x/y
fmod(x,y)==0
1.素数(质数)
#include<
math.h>
voidmain()
{
intm,i,n=0;
do{
scanf(“%d”,&
m);
n=sqrt(m);
for(i=2;
i<
i++)
if(m%i==0)break;
if(i>
n)
printf(“%d”,m);
while(m!
=0);
/*输入0结束*/
[素数2]
intprime(intm)
{intk,p;
p=sqrt(m);
for(k=2;
=p;
if(m%k==0)return0;
return1;
if(prime(m))
printf(“%d是素数.”,m);
else
printf(“%d不是素数.”,m);
2.水仙花数:
若某数等于各位数字的立方和,则称该数为水仙花数
for(i=100;
=999;
{a=i%10;
b=i/10%10;
c=i/100;
if(a*a*a+b*b*b+c*c*c==i)
printf(“%d”,&
i);
}
输入一个整数判断是否是水仙花数.
t=0;
n=m;
while(n>
0)
{k=n%10;
t=t+k*k*k;
n=n/10;
if(m==t)printf(“%d是水仙花数.”,m);
[水仙花数]
intf(intm)
{intk,n,t;
t=0;
if(m==t)return1;
elsereturn0;
intm;
do
{scanf(“%d”,&
if(f(m))printf(“%d是水仙花数.”,m);
elseprintf(“%d不是水仙花数.”,m);
}while(m!
3.完数:
某数等于其诸因子之和则该数为完数,如6=1+2+3,28=1+2+4+7+14则6、28就是完数。
stdlib.h>
{intn,i,s;
for(n=6;
n<
=1000;
n++)
{s=0;
for(i=1;
=n/2;
if(n%i==0)s+=i;
if(n==s)fprintf(p,"
%6d"
n);
4.数位截取:
输入一个长整型数,求各位数字的平方和
{intdigit;
longin,s;
scanf(“%ld”,in);
if(in<
0)in=-in;
s=0;
while(in>
{digit=in%10;
s=s+digit*digit
in=in/10;
}
printf(“sum=%ld\n”,s);
5.最大公约数、最小公倍数
{intm,n,k,t,p;
%d%d"
&
m,&
if(m>
n){k=m;
p=n;
else{k=n;
p=m;
while((t=(k%p))!
=0)
{
k=p;
p=t;
printf("
gongyueshu=%d\n"
p);
gongbeishu=%d\n"
m*n/p);
6.亲密数对:
说明:
若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。
如:
220、284是1对亲密数,284、220也是1对亲密数。
inta,b,c,i;
for(a=6;
a<
=5000;
a++)
{
b=c=0;
for(i=1;
a/2;
if(a%i==0)
b=b+i;
b;
if(b%i==0)
c=c+i;
if(a==c&
&
a!
=b)
printf("
%6d,%6d\n"
a,b);
}
方法2:
用函数
longs(intm)
intj;
longsum=0;
for(j=1;
j<
=m/2;
j++)
if(m%j==0)sum=sum+j;
returnsum;
inta,b;
longc1,c2;
scanf(“%d%d”,&
a,&
b);
c1=s(a);
c2=s(b);
if((a!
=b)&
(c1==b)&
(c2==a))
三、最大最小
1.从输入的若干个正数中选出最小数
floatx,min;
%f"
x);
min=x;
while(x>
=0){
if(x<
min)
min=x;
theminiumnumberis%f"
min);
2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。
voidmax_min(intx[],intn,int*max,int*min)
{inti;
*max=x[0];
*min=x[0];
//max=&
x[0],min=&
x[0];
if(*max<
x[i])
*max=x[i];
if(x[i]<
*min)
*min=x[i];
{intx[10],i,min,max;
for(i=0;
10;
i++)
%d"
x+i);
max_min(x,10,&
max,&
min);
MAX=%dMIN=%d\n"
max,min);
四、双重循环
1.求
(n由输入决定)
inti,j,n;
longintt=1,sum=0;
i++){
t=1;
for(j=1;
=2*i-1;
t=t*j;
sum=sum+t;
n!
=%ld"
sum);
2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。
inta[3][6],i,j,m,n,max;
3;
for(j=0;
6;
scanf("
a[i][j]);
max=a[0][0];
if(a[i][j]>
max)
{
max=a[i][j];
m=i;
n=j;
}
themaxnumis%d,row%dline%d\n"
max,m,n);
3.鞍点问题:
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小
#defineN10
#defineM10
{
inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;
m;
a[n][m]);
a[n][m]);
printf("
\n"
);
flag2=0;
max=a[i][0];
maxj=j;
for(k=0,flag1=1;
n&
flag1;
if(max>
a[k][maxj])
flag1=0;
if(flag1)
{
\n第%d行,第%d列的%d是鞍点"
,i,maxj,max);
flag2=1;
if(!
flag2)printf("
\n矩阵中无鞍点"
五、三种排序
1.选择排序:
函数sort使用选择法将一维整型数组中各元素按值从大到小排序。
#defineN10
voidsort(inta[],intn)
{inti,j,k,temp;
n-1;
i++){
k=i;
for(j=i+1;
j<
j++)
if(a[k]<
a[j])k=j;
temp=a[k];
a[k]=a[i];
a[i]=temp;
inta[N],i;
N;
a[i]);
sort(a,N);
%d"
a[i]);
2.冒泡法
inta[10],i,j,t;
Input10numbers:
);
for(i=0;
10;
i++)/*输入排序数*/
a[i]);
for(j=0;
9;
j++)/*控制比较趟数*/
for(i=0;
9-j;
i++)/*控制比较对数*/
if(a[i]>
a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
Thesortednumber:
\n"
i++)/*输出已排序的数*/
a[i]);
3.插入排序:
将x插入到已从小到大排序好的数组a中,插入x后数组中的元素仍然有序
#defineN5
voidmain()
inta[N],i,x,j;
a[0]);
for(j=i-1;
j>
=0;
j--)
if(a[j]>
x)
a[j+1]=a[j];
elsebreak;
a[j+1]=x;
六、二种查找
1.顺序查找
设a是一个整型数组,n和x都是整数,数组a中各元素的值互异。
请编写函数find(a,n,x),在数组a的前n个元素中查找x,如果找到,返回x在数组a中的位置;
如果没有找到,返回0。
intfind(int*a,intn,intx)
intk=0,y=0;
k<
k++)
if(a[k]==x)y=k+1;
intn,x,a[N],i;
pleaseinputxandn\n"
x,&
while(x!
if((i=find(a,n,x))!
%disthe%dthnumber"
x,i);
else
notfound"
scanf("
%d,%d"
2.二分法查找(要求查找的数据要有序)
intf(intx,inta[],intn)
intlow,high,mid;
low=0;
high=n-1;
inty=-1;
while(low<
=high){
mid=(low+high)/2;
if(x>
a[mid])low=mid+1;
elseif(x<
a[mid])high=mid-1;
else{y=mid;
break;
inti,x,n,a[N];
pleaseinputxandn"
%d\n"
f(x,a,n));
七.三种遍历
1.数组遍历
1)字符串与整数转换
说明】函数atoi的功能是将字符串转换成整数,如“atoi("
-123"
)”将返回-123。
intatoil(chars[])
{
intk=0,sign,digit;
sign=1;
digit=0;
while(s[k]<
'
0'
||s[k]>
9'
)
if(s[k]=='
-'
sign=-1;
k++;
while(s[k]>
='
s[k]<
='
)
digit=digit*10+s[k]-'
;
k++;
returnsign*digit;
chars[80];
intd;
%s"
s);
d=atoil(s);
d);
2)数组逆置
(1)for(i=0;
{t=a[i];
a[i]=a[n-i-1];
a[n-i-1]=t;
(2)for(i=0,j=n-1;
j;
i++,j--)
{t=a[i];
a[i]=a[j];
a[j]=t;
如何用指针表示?
3)strcpy,strcmp,strlen,strcat这四个函数用数组,指针实现
voidstrcpy1(char*to,char*from)
while((*to=*from)!
\0'
to++;
from++;
charto[20],from[10];
%s%s"
from,to);
strcpy1(to,from);
%s\n"
to);
4)进制转换
函数xtoi的功能是将放在字符串中的十六进制数(可以出现’0’~’9’、’a’~’f)转换成十进制整数。
例如:
调用xtoi("
1f"
)将返回31。
intxtoi1(chars[])
intk=0,d=0;
while(s[k]>
&
s[k]<
||s[k]>
a'
f'
)
if(s[k]>
d=d*16+s[k]-'
d=d*16+s[k]-87;
}
returnd;
d=xtoi1(s);
2.链表遍历
链表的建立、插入、删除和输出
3.文件遍历
(1)下列程序将当前目录下的文本文件a.txt复制到b.txt,要求将a.txt中每1个非英文字符后的第1个小写英文字母改为大写字母写到文件b.txt中,其它字符复制时不变。
ctype.h>
{FILE*f1,*f2;
intflag=1;
charch;
if((f1=fopen("
a.txt"
"
r"
))==NULL){
不能打开文件a.txt\n"
exit(0);
if((f2=fopen("
b.txt"
w"
不能打开文件b.txt\n"
while(!
feof(f1)){
ch=fgetc(f1);
if(flag==1&
ch>
ch<
z'
fputc(ch-32,f2);
else
fputc(ch,f2);
if(!
isalpha(ch))flag=1;
elseflag=0;
fclose(f1);
fclose(f2);
八.函数调用
1,值传递,地址传递
intx,y,z;
voidp(int*x,inty){++*x;
y--;
z=*x+y;
2
%d,%d,%d--"
*x,y,z);
}voidmain(){x=2;
y=3;
z=4;
p(&
x,y);
x,y,z);
y,x);
%d,%d,%d\n"
}2.静态局部变量
(1)函数f定义如下,执行语句“sum=f(5)+f(3);
”后,sum的值应为(35)。
intf(intm)
{staticinti=0;
ints=0;
for(;
=m;
i++)s+=i;
returns;
A、21B、16C、15D、8
(2)写出下列程序的输出结果:
#include<
intf(intx)
{staticy=1;
x+=y;
y++;
returnx;
{intk;
k=f(3);
%d%d\n"
k,f(k));
3.递归调用
(1)函数f定义如下,执行语句“m=f(5);
”后,m的值应为B。
intf(intk)
{if(k==0||k==1)return1;
elsereturnf(k-1)+f(k-2);
A、3B、8C、5D、13
九.其他算法1.数学类问题(上机题)
1.程序设计题:
考生目录下有Design.c程序,请完成以下功能:
数组元素x[i]、y[i]表示
平面上某点坐标,统计10个点中同处在圆(x-1)*(x-1)+(y+0.5)*(y+0.5)=25与
(x-0.5)*(x-0.5)+y*y=36内的点数k,并将变量k的值以格式"
写到考生目录下
新建文件design.dat。
{FILE*p;
inti,k=0;
floatx[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
floaty[]={-6,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常用 算法