10个经典的C语言面试基础算法及代码.docx
- 文档编号:4644575
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:20
- 大小:242.79KB
10个经典的C语言面试基础算法及代码.docx
《10个经典的C语言面试基础算法及代码.docx》由会员分享,可在线阅读,更多相关《10个经典的C语言面试基础算法及代码.docx(20页珍藏版)》请在冰点文库上搜索。
10个经典的C语言面试基础算法及代码
10个经典的C语言面试基础算法及代码
本文是码农网原创整理,转载请看清文末的转载要求,谢谢合作!
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。
本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。
也许他们能在你的毕业设计或者面试中派上用场。
1、计算Fibonacci数列
Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:
1、1、2、3、5、8、13、21。
C语言实现的代码如下:
/*DisplayingFibonaccisequenceuptonthtermwherenisenteredbyuser.*/
#include
intmain()
{
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 { display=t1+t2; t1=t2; t2=display; ++count; printf("%d+",display); } return0; } 结果输出: Enternumberofterms: 10 FibonacciSeries: 0+1+1+2+3+5+8+13+21+34+ 也可以使用下面的源代码: /*DisplayingFibonacciseriesuptocertainnumberenteredbyuser.*/ #include intmain() { intt1=0,t2=1,display=0,num; printf("Enteraninteger: "); scanf("%d",&num); printf("FibonacciSeries: %d+%d+",t1,t2);/*Displayingfirsttwoterms*/ display=t1+t2; while(display { printf("%d+",display); t1=t2; t2=display; display=t1+t2; } return0; } 结果输出: Enteraninteger: 200 FibonacciSeries: 0+1+1+2+3+5+8+13+21+34+55+89+144+ 2、回文检查 源代码: /*Cprogramtocheckwhetheranumberispalindromeornot*/ #include intmain() { 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.*/ #include intmain() { 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、打印金字塔和三角形 使用 * 建立三角形 * ** *** **** ***** 源代码: #include intmain() { 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 源代码: #include intmain() { 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; } 用*打印半金字塔 ***** **** *** ** * 源代码: #include intmain() { inti,j,rows; printf("Enterthenumberofrows: "); scanf("%d",&rows); for(i=rows;i>=1;--i) { for(j=1;j<=i;++j) { printf("*"); } printf("\n"); } return0; } 用*打印金字塔 * *** ***** ******* ********* 源代码: #include intmain() { 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; } 用*打印倒金字塔 ********* ******* ***** *** * 源代码: #include intmain() { introws,i,j,space; printf("Enternumberofrows: "); scanf("%d",&rows); for(i=rows;i>=1;--i) { for(space=0;space printf(""); for(j=i;j<=2*i-1;++j) printf("*"); for(j=0;j printf("*"); printf("\n"); } return0; } 5、简单的加减乘除计算器 源代码: /*Sourcecodetocreateasimplecalculatorforaddition,subtraction,multiplicationanddivisionusingswitch...casestatementinCprogramming.*/ #include intmain() { 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.0 6、检查一个数能不能表示成两个质数之和 源代码: #include intprime(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+17 7、用递归的方式颠倒字符串 源代码: /*Exampletoreverseasentenceenteredbyuserwithoutusingstrings.*/ #include voidReverse(); intmain() { printf("Enterasentence: "); Reverse(); return0; } voidReverse() { charc; scanf("%c",&c); if(c! ='\n') { Reverse(); printf("%c",c); } } 结果输出: Enterasentence: margorpemosewa awesomeprogram 8、实现二进制与十进制之间的相互转换 /*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、使用多维数组实现两个矩阵的相加 源代码: #include intmain(){ 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 for(j=0;j { printf("Enterelementa%d%d: ",i+1,j+1); scanf("%d",&a[i][j]); } /*Storingelementsofsecondmatrixenteredbyuser.*/ printf("Enterelementsof2ndmatrix: \n"); for(i=0;i for(j=0;j { printf("Enterelementa%d%d: ",i+1,j+1); scanf("%d",&b[i][j]); } /*AddingTwomatrices*/ for(i=0;i for(j=0;j sum[i][j]=a[i][j]+b[i][j]; /*Displayingtheresultantsummatrix.*/ printf("\nSumoftwomatrixis: \n\n"); for(i=0;i for(j=0;j { printf("%d",sum[i][j]); if(j==c-1) printf("\n\n"); } return0; } 结果输出: 10、矩阵转置 源代码: #include intmain() { 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 for(j=0;j { printf("Enterelementsa%d%d: ",i+1,j+1); scanf("%d",&a[i][j]); } /*Displayingthematrixa[][]*/ printf("\nEnteredMatrix: \n"); for(i=0;i for(j=0;j { printf("%d",a[i][j]); if(j==c-1) printf("\n\n"); } /*Findingtransposeofmatrixa[][]andstoringitinarraytrans[][].*/ for(i=0;i for(j=0;j { trans[j][i]=a[i][j]; } /*Displayingthetranspose,i.e,Displayingarraytrans[][].*/ printf("\nTransposeofMatrix: \n"); for(i=0;i for(j=0;j { printf("%d",trans[i][j]); if(j==r-1) printf("\n\n"); } return0; } 结果输出:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 经典 语言 面试 基础 算法 代码