C语言常用算法大全.docx
《C语言常用算法大全.docx》由会员分享,可在线阅读,更多相关《C语言常用算法大全.docx(62页珍藏版)》请在冰点文库上搜索。
C语言常用算法大全
1.十进制数转二进制数
#include
main()
{
inti,n,m;
inta[16]={0};
printf("pleaseinputthedecimalismnumber(0~32767):
\n");
scanf("%d",&n);
for(m=0;m<15;m++)
i=n%2;
n=n/2;
a[m]=i;
}
for(m=15;m>=0;m--)
printf("%d",a[m]);
if(m%4==0)
printf("");
printf("\n");
2.十进制转十六进制数
1)用格式控制的方式
inti;
printf("pleaseinputdecimalismnumber:
scanf("%d",&i);
printf("thehexnumberis%x\n",i);
2)除以基数取余法
inta[4]={0};
for(m=0;m<4;m++)
i=n%16;
n=n/16;
for(m=3;m>=0;m--)
3.十进制转八进制数
printf("thehexnumberis%o\n",i);
inta[8]={0};
for(m=0;m<8;m++)
i=n%8;
n=n/8;
for(m=7;m>=0;m--)
4.十进制转任意进制数
inti,n,m,j;
printf("pleaseinput基数:
");
scanf("%d",&j);
i=n%j;
n=n/j;
5.n进制数转十进制数
longt1;
inti,n,t,t3;
chara[100];
printf("pleaseinputanumberstring:
gets(a);
strupr(a);//小写转大写
t3=strlen(a);
t1=0;
printf("pleaseinputn(2or8or16):
for(i=0;i{if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n){printf("dataerror!!");exit(0);}if(a[i]>='0'&&a[i]<='9')t=a[i]-'0';elseif(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))t=a[i]-'A'+10;t1=t1*n+t;}printf("thedecimalis%ld\n",t1);}6.输入任意三个整数,按照从小到大的顺序排列并输出#includemain(){inta,b,c,t;printf("pleaseinputa,b,c,:\n");scanf("%d%d%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("theorderofthenumberis:\n");printf("%d,%d,%d",a,b,c);}7.判断闰年#includemain(){intyear;printf("pleaseinputtheyear:\n");scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("%disaleapyear",year);elseprintf("%disnotaleapyear",year);}8.随机函数进行加减运算#include#include#includemain(){inta,b,c,sign,max;charsign1;printf("pleaseselectsign(1orother,1:-,other:+):\n");scanf("%d",&sign);printf("pleaseselectthemaxnumber(<10000):\n");scanf("%d",&max);srand((unsignedlong)time(0));a=rand()%max;b=rand()%max;while((a{a=rand()%max;b=rand()%max;}sign1=(sign==1?'-':'+');printf("\n%d%c%d=",a,sign1,b);scanf("%d",&c);if((sign==1)&&(a-b==c)||(sign!=1)&&(a+b==c))printf("OK!\n");elseprintf("Theresultiswrong\n");//getch();}9.模拟ATM机界面程序#include#include#includeintsystem(constchar*string);main(){charKey,CMoney;intpassword,password1=123,i=0,a=1000;while(1){do{system("cls");printf("******************************\n");printf("*Pleaseselectkey:*\n");printf("*1.password*\n");printf("*2.getmoney*\n");printf("*3.Return*\n");printf("******************************\n");Key=getch();}while(Key!='1'&&Key!='2'&&Key!='3');/*当输入的值不是1,2,3中任意值时显示do循环体中的内容*/switch(Key){case'1':system("cls");do{i++;printf("pleaseinputpassword:");scanf("%d",&password);if(password1!=password){if(i>3){printf("Wrong!Pressanykeytoexit...");getch();exit(0);}elseputs("wrong,tryagain!");}}while(password1!=password&&i<3);/*如果密码不正确且输入次数小于等于3次,执行do循环体中的语句*/printf("OK!Pressanykeytocontinue...");//密码正确返回初始界面开始其他操作getch();break;case'2':do{system("cls");if(password1!=password)//如果在case1中密码输入不正确将无法进行后面操作{printf("pleaseloggingin,pressanykeytocontinue...");getch();break;}else{printf("******************************\n");printf("Pleaseselect:\n");printf("*1.$100*\n");printf("*2.$200*\n");printf("*3.$300*\n");printf("*4.Return*\n");printf("******************************\n");CMoney=getch();}}while(CMoney!='1'&&CMoney!='2'&&CMoney!='3'&&CMoney!='4');//当输入值不是1,2,3,4中任意数将继续执行do循环体中语句switch(CMoney){case'1':system("cls");a=a-100;printf("**********************************************\n");printf("*YourCreditmoneyis$100,Thankyou!*\n");printf("*Thebalanceis$%d.*\n",a);printf("*Pressanykeytoreturn...*\n");getch();break;case'2':system("cls");a=a-200;printf("**********************************************\n");printf("*YourCreditmoneyis$200,Thankyou!*\n");printf("*Thebalanceis$%d.*\n",a);printf("*Pressanykeytoreturn...*\n");getch();break;case'3':system("cls");a=a-300;printf("**********************************************\n");printf("*YourCreditmoneyis$300,Thankyou!*\n");printf("*Thebalanceis$%d.*\n",a);printf("*Pressanykeytoreturn...*\n");getch();break;case'4':break;}break;case'3':printf("*****************************************\n");printf("*Thankyouforusing!*\n");printf("*Goodbye!*\n");printf("*****************************************\n");getch();exit(0);}continue;}}10.输出三角形图案#includemain(){inti,j,k;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("#");printf("\n");}}//三重循环,最外层控制行数,次外层控制每行空格数,最里层控制输出的符号的个数11.输出菱形#includemain(){inti,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf("");for(k=1;k<=2*i-1;k++)printf("*");printf("\n");}for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf("");for(k=1;k<=2*(4-i)-1;k++)printf("*");printf("\n");}}12.打印乘法口诀表#includemain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}13.打印杨辉三角下标从1开始#includemain(){inti,j,a[11][11];for(i=1;i<11;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<11;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<11;i++){for(j=1;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}下标从0开始#includemain(){inti,j,a[11][11];for(i=0;i<11;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<11;i++)for(j=1;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<11;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}14.求阶层1)用while循环:#includemain(){inti=2,n;floatfac=1;printf("pleaseinputaninterger>=0.\n");scanf("%d",&n);if(n==0||n==1){printf("factorialis1.\n");return0;}while(i<=n){fac=fac*i;i++;}printf("factorialof%dis:%.2f\n",n,fac);}2)用递归:#includefloatf(intn){inti=1;if(n==0||n==1)return1;elsereturnn*f(n-1);}main(){intn;printf("pleaseinputaninterger>=0.\n");scanf("%d",&n);printf("factorialof%dis:%.2f\n",n,f(n));}15.求一个数的因子#includemain(){inti,j;printf("Pleaseinput:\n");scanf("%d",&i);for(j=1;j<=i;j++)if(i%j==0)printf("%d,",j);}16.一元钱兑换问题(兑换成一角两角五角)#includemain(){inti,j,k;for(i=0;i<=10;i++)for(j=0;j<=5;j++)for(k=0;k<=2;k++)if(i+2*j+5*k==10)printf("yijiao%d,liangjiao%d,wujiao%d\n",i,j,k);}17.对调数问题(找出两个正整数之和等于各自对调之后的数之和)#includemain(){intx,y,z,x1,y1,z1,i,k,n,j=0;while(1){printf("Pleaseinputaninterger(11~99):\n");scanf("%d",&n);if(n<=10||n>=100)//当输入的数小于10或者大于100时输出错误{printf("dataerror!\n");continue;}elseif(n%10==0){printf("dataerror!\n");continue;}else{x=n/10;y=n%10;z=10*y+x;break;}}for(i=11;i<100;i++){if(i%10==0)continue;else{x1=i/10;y1=i%10;z1=10*y1+x1;if(n+i==z+z1&&n!=z1)//当满足n加i等于n的对调数加i的对调数且n和i不互为对调数{printf("%d+%d=%d+%d\n",n,i,z,z1);j++;}elsecontinue;}}if(j==0)//j为0表示不存在这样的数printf("inexistance");}18.对调最大数和最小数#includemain(){inta[20],max,min,i,j,k,n;//j记录每次比较中较小的数的下标,k记录每次比较中较大的数的下标printf("pleaseinputthenumberofelements(<20):\n");scanf("%d",&n);printf("pleaseinputtheelement:\n");for(i=0;iscanf("%d",&a[i]);max=min=a[0];for(i=1;i{if(a[i]{min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}a[k]=min;//在最大数的位置放置最小数a[j]=max;//在最小数的位置放置最大数printf("thepositionofminis:%3d\n",j);printf("thepositionofmaxis:%3d\n",k);printf("Nowthearrayis:\n");for(i=0;iprintf("%5d",a[i]);}19.二维数组行列互换#includemain(){inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("pleaseinputthenumberofrows(<=100)\n:");scanf("%d",&i1);printf("pleaseinputthenumberofcolumns(<=100)\n:");scanf("%d",&j1);printf("pleaseinputtheelem
if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n)
printf("dataerror!
!
exit(0);
if(a[i]>='0'&&a[i]<='9')
t=a[i]-'0';
elseif(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))
t=a[i]-'A'+10;
t1=t1*n+t;
printf("thedecimalis%ld\n",t1);
6.输入任意三个整数,按照从小到大的顺序排列并输出
inta,b,c,t;
printf("pleaseinputa,b,c,:
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;}
printf("theorderofthenumberis:
printf("%d,%d,%d",a,b,c);
7.判断闰年
intyear;
printf("pleaseinputtheyear:
scanf("%d",&year);
if((year%4==0&&year%100!
=0)||year%400==0)
printf("%disaleapyear",year);
else
printf("%disnotaleapyear",year);
8.随机函数进行加减运算
inta,b,c,sign,max;
charsign1;
printf("pleaseselectsign(1orother,1:
-,other:
+):
scanf("%d",&sign);
printf("pleaseselectthemaxnumber(<10000):
scanf("%d",&max);
srand((unsignedlong)time(0));
a=rand()%max;
b=rand()%max;
while((a
sign1=(sign==1?
'-':
'+');
printf("\n%d%c%d=",a,sign1,b);
scanf("%d",&c);
if((sign==1)&&(a-b==c)||(sign!
=1)&&(a+b==c))
printf("OK!
printf("Theresultiswrong\n");
//getch();
9.模拟ATM机界面程序
intsystem(constchar*string);
charKey,CMoney;
intpassword,password1=123,i=0,a=1000;
while
(1)
do{
system("cls");
printf("******************************\n");
printf("*Pleaseselectkey:
*\n");
printf("*1.password*\n");
printf("*2.getmoney*\n");
printf("*3.Return*\n");
Key=getch();
}while(Key!
='1'&&Key!
='2'&&Key!
='3');
/*当输入的值不是1,2,3中任意值时显示do循环体中的内容*/
switch(Key)
case'1':
do
i++;
printf("pleaseinputpassword:
scanf("%d",&password);
if(password1!
=password)
if(i>3)
printf("Wrong!
Pressanykeytoexit...");
getch();
puts("wrong,tryagain!
}while(password1!
=password&&i<3);
/*如果密码不正确且输入次数小于等于3次,执行do循环体中的语句*/
Pressanykeytocontinue...");//密码正确返回初始界面开始其他操作
break;
case'2':
//如果在case1中密码输入不正确将无法进行后面操作
printf("pleaseloggingin,pressanykeytocontinue...");
printf("Pleaseselect:
printf("*1.$100*\n");
printf("*2.$200*\n");
printf("*3.$300*\n");
printf("*4.Return*\n");
CMoney=getch();
}while(CMoney!
='1'&&CMoney!
='2'&&CMoney!
='3'&&CMoney!
='4');
//当输入值不是1,2,3,4中任意数将继续执行do循环体中语句
switch(CMoney)
a=a-100;
printf("**********************************************\n");
printf("*YourCreditmoneyis$100,Thankyou!
printf("*Thebalanceis$%d.*\n",a);
printf("*Pressanykeytoreturn...*\n");
a=a-200;
printf("*YourCreditmoneyis$200,Thankyou!
case'3':
a=a-300;
printf("*YourCreditmoneyis$300,Thankyou!
case'4':
printf("*****************************************\n");
printf("*Thankyouforusing!
printf("*Goodbye!
continue;
10.输出三角形图案
inti,j,k;
for(i=1;i<=5;i++)
for(j=1;j<=5-i;j++)
for(k=1;k<=2*i-1;k++)
printf("#");
//三重循环,最外层控制行数,次外层控制每行空格数,最里层控制输出的符号的个数
11.输出菱形
for(i=1;i<=4;i++)
for(j=1;j<=4-i;j++)
printf("*");
for(i=1;i<=3;i++)
for(j=1;j<=i;j++)
for(k=1;k<=2*(4-i)-1;k++)
12.打印乘法口诀表
inti,j;
for(i=1;i<=9;i++)
printf("%d*%d=%d",i,j,i*j);
13.打印杨辉三角
下标从1开始
inti,j,a[11][11];
for(i=1;i<11;i++)
a[i][i]=1;
a[i][1]=1;
for(i=3;i<11;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%4d",a[i][j]);
下标从0开始
for(i=0;i<11;i++)
a[i][0]=1;
for(i=2;i<11;i++)
for(j=1;j<=i-1;j++)
for(j=0;j<=i;j++)
14.求阶层
1)用while循环:
inti=2,n;
floatfac=1;
printf("pleaseinputaninterger>=0.\n");
if(n==0||n==1)
printf("factorialis1.\n");
return0;
while(i<=n)
fac=fac*i;
printf("factorialof%dis:
%.2f\n",n,fac);
2)用递归:
floatf(intn)
{inti=1;
return1;
returnn*f(n-1);
intn;
%.2f\n",n,f(n));
15.求一个数的因子
printf("Pleaseinput:
if(i%j==0)
printf("%d,",j);
16.一元钱兑换问题(兑换成一角两角五角)
for(i=0;i<=10;i++)
for(j=0;j<=5;j++)
for(k=0;k<=2;k++)
if(i+2*j+5*k==10)
printf("yijiao%d,liangjiao%d,wujiao%d\n",i,j,k);
17.对调数问题(找出两个正整数之和等于各自对调之后的数之和)
intx,y,z,x1,y1,z1,i,k,n,j=0;
printf("Pleaseinputaninterger(11~99):
if(n<=10||n>=100)//当输入的数小于10或者大于100时输出错误
elseif(n%10==0)
x=n/10;
y=n%10;
z=10*y+x;
for(i=11;i<100;i++)
if(i%10==0)
x1=i/10;
y1=i%10;
z1=10*y1+x1;
if(n+i==z+z1&&n!
=z1)//当满足n加i等于n的对调数加i的对调数且n和i不互为对调数
printf("%d+%d=%d+%d\n",n,i,z,z1);
j++;
if(j==0)//j为0表示不存在这样的数
printf("inexistance");
18.对调最大数和最小数
inta[20],max,min,i,j,k,n;//j记录每次比较中较小的数的下标,k记录每次比较中较大的数的下标
printf("pleaseinputthenumberofelements(<20):
printf("pleaseinputtheelement:
for(i=0;iscanf("%d",&a[i]);max=min=a[0];for(i=1;i{if(a[i]{min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}a[k]=min;//在最大数的位置放置最小数a[j]=max;//在最小数的位置放置最大数printf("thepositionofminis:%3d\n",j);printf("thepositionofmaxis:%3d\n",k);printf("Nowthearrayis:\n");for(i=0;iprintf("%5d",a[i]);}19.二维数组行列互换#includemain(){inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("pleaseinputthenumberofrows(<=100)\n:");scanf("%d",&i1);printf("pleaseinputthenumberofcolumns(<=100)\n:");scanf("%d",&j1);printf("pleaseinputtheelem
scanf("%d",&a[i]);
max=min=a[0];
for(i=1;i{if(a[i]{min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}a[k]=min;//在最大数的位置放置最小数a[j]=max;//在最小数的位置放置最大数printf("thepositionofminis:%3d\n",j);printf("thepositionofmaxis:%3d\n",k);printf("Nowthearrayis:\n");for(i=0;iprintf("%5d",a[i]);}19.二维数组行列互换#includemain(){inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("pleaseinputthenumberofrows(<=100)\n:");scanf("%d",&i1);printf("pleaseinputthenumberofcolumns(<=100)\n:");scanf("%d",&j1);printf("pleaseinputtheelem
if(a[i]{min=a[i];j=i;}if(a[i]>max){max=a[i];k=i;}}a[k]=min;//在最大数的位置放置最小数a[j]=max;//在最小数的位置放置最大数printf("thepositionofminis:%3d\n",j);printf("thepositionofmaxis:%3d\n",k);printf("Nowthearrayis:\n");for(i=0;iprintf("%5d",a[i]);}19.二维数组行列互换#includemain(){inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("pleaseinputthenumberofrows(<=100)\n:");scanf("%d",&i1);printf("pleaseinputthenumberofcolumns(<=100)\n:");scanf("%d",&j1);printf("pleaseinputtheelem
min=a[i];
j=i;
if(a[i]>max)
max=a[i];
k=i;
a[k]=min;//在最大数的位置放置最小数
a[j]=max;//在最小数的位置放置最大数
printf("thepositionofminis:
%3d\n",j);
printf("thepositionofmaxis:
%3d\n",k);
printf("Nowthearrayis:
for(i=0;iprintf("%5d",a[i]);}19.二维数组行列互换#includemain(){inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值printf("pleaseinputthenumberofrows(<=100)\n:");scanf("%d",&i1);printf("pleaseinputthenumberofcolumns(<=100)\n:");scanf("%d",&j1);printf("pleaseinputtheelem
printf("%5d",a[i]);
19.二维数组行列互换
inti,j,i1,j1,a[100][100],b[100][100];//i1,j1用来存放行数和列数的最大值
printf("pleaseinputthenumberofrows(<=100)\n:
scanf("%d",&i1);
printf("pleaseinputthenumberofcolumns(<=100)\n:
scanf("%d",&j1);
printf("pleaseinputtheelem
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2