C语言的10大基础算法
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。也许他们能在你的毕业设计或者面试中派上用场。
1、计算Fibonacci数列
Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。
C语言实现的代码如下:
/*DisplayingFibonaccisequenceuptonthtermwherenisenteredbyuser.*/ #includeintmain() { intcount,n,t1=0,t2=1,display=0; printf("Enternumberofterms:"); scanf("%d",&n); printf("FibonacciSeries:%d+%d+",t1,t2);/*Displayingfirsttwoterms*/ count=2;/*count=2becausefirsttwotermsarealreadydisplayed.*/ while(count 结果输出:
Enternumberofterms:10 FibonacciSeries:0+1+1+2+3+5+8+13+21+34+也可以使用下面的源代码:
/*DisplayingFibonacciseriesuptocertainnumberenteredbyuser.*/ #includeintmain() { intt1=0,t2=1,display=0,num; printf("Enteraninteger:"); scanf("%d",&num); printf("FibonacciSeries:%d+%d+",t1,t2);/*Displayingfirsttwoterms*/ display=t1+t2; while(display 结果输出:
Enteraninteger:200
FibonacciSeries:0+1+1+2+3+5+8+13+21+34+55+89+144+2、回文检查
源代码:
/*Cprogramtocheckwhetheranumberispalindromeornot*/ #includeintmain() { intn,reverse=0,rem,temp; printf("Enteraninteger:"); scanf("%d",&n); temp=n; while(temp!=0) { rem=temp%10; reverse=reverse*10+rem; temp/=10; } /*Checkingifnumberenteredbyuserandit'sreversenumberisequal.*/ if(reverse==n) printf("%disapalindrome.",n); else printf("%disnotapalindrome.",n); return0; } 结果输出:
Enteraninteger:12321
12321isapalindrome.3、质数检查
注:1既不是质数也不是合数。
源代码:
/*Cprogramtocheckwhetheranumberisprimeornot.*/ #includeintmain() { intn,i,flag=0; printf("Enterapositiveinteger:"); scanf("%d",&n); for(i=2;i<=n/2;++i) { if(n%i==0) { flag=1; break; } } if(flag==0) printf("%disaprimenumber.",n); else printf("%disnotaprimenumber.",n); return0; } 结果输出:
Enterapositiveinteger:29
29isaprimenumber.4、打印金字塔和三角形
使用*建立三角形
*
**
***
****
*****
源代码:
#includeintmain() { inti,j,rows; printf("Enterthenumberofrows:"); scanf("%d",&rows); for(i=1;i<=rows;++i) { for(j=1;j<=i;++j) { printf("*"); } printf("\n"); } return0; } 如下图所示使用数字打印半金字塔。
1
12
123
1234
12345
源代码:
#includeintmain() { inti,j,rows; printf("Enterthenumberofrows:"); scanf("%d",&rows); for(i=1;i<=rows;++i) { for(j=1;j<=i;++j) { printf("%d",j); } printf("\n"); } return0; } 用*打印半金字塔
*****
****
***
**
*源代码:
#includeintmain() { inti,j,rows; printf("Enterthenumberofrows:"); scanf("%d",&rows); for(i=rows;i>=1;--i) { for(j=1;j<=i;++j) { printf("*"); } printf("\n"); } return0; } 用*打印金字塔
*
***
*****
*******
*********源代码:
#includeintmain() { inti,space,rows,k=0; printf("Enterthenumberofrows:"); scanf("%d",&rows); for(i=1;i<=rows;++i) { for(space=1;space<=rows-i;++space) { printf(""); } while(k!=2*i-1) { printf("*"); ++k; } k=0; printf("\n"); } return0; } 用*打印倒金字塔
*********
*******
*****
***
*源代码:
#includeintmain() { introws,i,j,space; printf("Enternumberofrows:"); scanf("%d",&rows); for(i=rows;i>=1;--i) { for(space=0;space 5、简单的加减乘除计算器
源代码:
/*Sourcecodetocreateasimplecalculatorforaddition,subtraction,multiplicationanddivisionusingswitch...casestatementinCprogramming.*/ #includeintmain() { charo; floatnum1,num2; printf("Enteroperatoreither+or-or*ordivide:"); scanf("%c",&o); printf("Entertwooperands:"); scanf("%f%f",&num1,&num2); switch(o){ case'+': printf("%.1f+%.1f=%.1f",num1,num2,num1+num2); break; case'-': printf("%.1f-%.1f=%.1f",num1,num2,num1-num2); break; case'*': printf("%.1f*%.1f=%.1f",num1,num2,num1*num2); break; case'/': printf("%.1f/%.1f=%.1f",num1,num2,num1/num2); break; default: /*Ifoperatorisotherthan+,-,*or/,errormessageisshown*/ printf("Error!operatorisnotcorrect"); break; } return0; } 结果输出:
Enteroperatoreither+or-or*ordivide:-
Entertwooperands:3.4
8.4
3.4-8.4=-5.06、检查一个数能不能表示成两个质数之和
源代码:
#includeintprime(intn); intmain() { intn,i,flag=0; printf("Enterapositiveinteger:"); scanf("%d",&n); for(i=2;i<=n/2;++i) { if(prime(i)!=0) { if(prime(n-i)!=0) { printf("%d=%d+%d\n",n,i,n-i); flag=1; } } } if(flag==0) printf("%dcan'tbeexpressedassumoftwoprimenumbers.",n); return0; } intprime(intn)/*Functiontocheckprimenumber*/ { inti,flag=1; for(i=2;i<=n/2;++i) if(n%i==0) flag=0; returnflag; } 结果输出:
Enterapositiveinteger:34
34=3+31
34=5+29
34=11+23
34=17+177、用递归的方式颠倒字符串
源代码:
/*Exampletoreverseasentenceenteredbyuserwithoutusingstrings.*/ #includevoidReverse(); intmain() { printf("Enterasentence:"); Reverse(); return0; } voidReverse() { charc; scanf("%c",&c); if(c!='\n') { Reverse(); printf("%c",c); } } 结果输出:
Enterasentence:margorpemosewa
awesomeprogram8、实现二进制与十进制之间的相互转换
/*Cprogrammingsourcecodetoconverteitherbinarytodecimalordecimaltobinaryaccordingtodataenteredbyuser.*/ #include#include intbinary_decimal(intn); intdecimal_binary(intn); intmain() { intn; charc; printf("Instructions:\n"); printf("1.Enteralphabet'd'toconvertbinarytodecimal.\n"); printf("2.Enteralphabet'b'toconvertdecimaltobinary.\n"); scanf("%c",&c); if(c=='d'||c=='D') { printf("Enterabinarynumber:"); scanf("%d",&n); printf("%dinbinary=%dindecimal",n,binary_decimal(n)); } if(c=='b'||c=='B') { printf("Enteradecimalnumber:"); scanf("%d",&n); printf("%dindecimal=%dinbinary",n,decimal_binary(n)); } return0; } intdecimal_binary(intn)/*Functiontoconvertdecimaltobinary.*/ { intrem,i=1,binary=0; while(n!=0) { rem=n%2; n/=2; binary+=rem*i; i*=10; } returnbinary; } intbinary_decimal(intn)/*Functiontoconvertbinarytodecimal.*/ { intdecimal=0,i=0,rem; while(n!=0) { rem=n%10; n/=10; decimal+=rem*pow(2,i); ++i; } returndecimal; } 结果输出:
9、使用多维数组实现两个矩阵的相加
源代码:
#includeintmain(){ intr,c,a[100][100],b[100][100],sum[100][100],i,j; printf("Enternumberofrows(between1and100):"); scanf("%d",&r); printf("Enternumberofcolumns(between1and100):"); scanf("%d",&c); printf("\nEnterelementsof1stmatrix:\n"); /*Storingelementsoffirstmatrixenteredbyuser.*/ for(i=0;i 10、矩阵转置
源代码:
#includeintmain() {inta[10][10],trans[10][10],r,c,i,j; printf("Enterrowsandcolumnofmatrix:"); scanf("%d%d",&r,&c); /*Storingelementofmatrixenteredbyuserinarraya[][].*/ printf("\nEnterelementsofmatrix:\n"); for(i=0;i 总结
以上所述是小编给大家介绍的C语言的10大基础算法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!