您的位置:首页 > 职场人生

10个经典的ç语言面试基础算法及代码

2016-11-18 22:05 696 查看
由。本文码农网  -小峰原创,转载请看清文末的转载要求,参与欢迎我们的付费投稿计划

算法是一个程序和软件的灵魂,一名作为优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文是近百个Ç语言算法系列的第二篇,包括了经典的斐波那契数列,简易计算器,回文检查,质数检查等算法。也许他们能在你的毕业设计或者面试中派上用场。


1,计算斐波那契数列

斐波那契数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1,1,2,35,8,13,21。

ç语言实现的代码如下:
/ *显示斐波那契高达其中n是由用户输入的第n项。* /
#包括 <stdio.h>中
INT  主要()
{
INT数,N,T1 = 0,T = 1,显示= 0 ;
printf的(“输入项数:”);
scanf函数(“%d个”,&N );
printf的(“斐波纳契数列数:%d +%D +”,T1,T2); / *显示前两项* /
数= 2 ;     / *计数= 2,因为前两项已经显示出来。* /
而(计数<N)
{
显示器= T1 + T2;
T1 = T2;
T2 =显示;
++计数;
的printf(“%D +” ,显示);
}
返回 0 ;
}


结果输出:
输入数字的计算:10
斐波纳契数列:0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 +


也可以使用下面的源代码:
/ *显示Fibonacci序列到由用户输入一定次数。* /

#包括 <stdio.h>中
INT  主要()
{
INT T1 = 0,T = 1,显示= 0,NUM;
的printf(“请输入一个整数:”);
scanf函数(“%D” ,与NUM);
printf的(“斐波纳契数列数:%d +%D +“,T1,T2); / *显示前两项* /
显示器= T1 + T2;
而(显示<NUM)
{
的printf(“%D +” ,显示);
T1 = T2;
T2 =显示;
显示器= T1 + T2;
}
返回 0 ;
}


结果输出:
输入的整数:200
斐波系列:0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89 + 144 +


2,回文检查

源代码:
/ * C程序检查一个数是否是回文与否* /

#包括 <stdio.h>中
INT  主要()
{
INT N,反向= 0,REM,温度;
的printf(“请输入一个整数:”);
scanf函数(“%d个”,&N);
TEMP = N;
而(温度!= 0)
{
REM =气温%10 ;
反向=反向* 10 + REM;
温度/ = 10 ;
}
/ *检查,如果用户输入的数字,它的反向号码相等。* /
如果(反== N)
的printf(“%d是一个回文”,N);
其他
的printf(“%d不回文”,N);
返回 0 ;
}


结果输出:
输入一个整数:12321
12321  是回文。


3,质数检查

注:1既不是质数也不是合数。

源代码:
/ * C程序检查一个数是否是素与否。* /

#包括 <stdio.h>中
INT  主要()
{
INT N,I,标志= 0 ;
printf的(“请输入一个正整数:”);
scanf函数(“%d个”,&N);
为(i = 2 ; I < = N / 2 ; ++ I)
{
如果(N%我== 0)
{
标志= 1 ;
打破 ;
}
}
如果(标志== 0)
printf的(“%d是一个质数。”中,n);
其他
的printf(“%d为不是素数”,正);
返回 0 ;
}


结果输出:
输入一个正整数:29
29  是一个质数。


4,打印金字塔和三角形

使用*建立三角形
*
* *
* * *
* * * *
* * *  * *


源代码:
#包括 <stdio.h>中
INT  主()
{
诠释 I,J,行;
printf的(“输入行数:”);
scanf函数(“%d个”,&行);
对于(ⅰ= 1 ; I <=行++ I)
{
为(J = 1 ;Ĵ<= I; ++ j)条
{
的printf(“*”);
}
的printf(“\ n”);
}
返回 0 ;
}


如下图所示使用数字打印半金字塔。
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5


源代码:
#包括 <stdio.h>中
INT  主()
{
诠释 I,J,行;
printf的(“输入行数:”);
scanf函数(“%d个”,&行);
对于(ⅰ= 1 ; I <=行++ I)
{
为(J = 1 ;Ĵ<= I; ++ j)条
{
的printf(“%D”,J);
}
的printf(“\ n”);
}
返回 0 ;
}


用*打印半金字塔
* * *  * *
* * * *
* * *
* *
*


源代码:
#包括 <stdio.h>中
INT  主要()
{
诠释 I,J,行;
的printf(“请输入行数:”);
scanf函数(“%d个”,&行);
对于(i =行;我> = 1 ; -我)
{
为(J = 1 ;Ĵ<= I; ++ j)条
{
的printf(“*”);
}
的printf(“\ n”);
}
返回 0 ;
}


用*打印金字塔
*
* * *
* * * * *
* *  * *  * * *
* * *  * *  * *  * *


源代码:
#包括 <stdio.h>中
INT  主()
{
诠释我,空间,行中,k = 0 ;
printf的(“输入行数:”);
scanf函数(“%d个”,&行);
对于(ⅰ= 1 ; I <=行++ I)
{
对于(空格= 1 ;空间<=行,我++空间)
{
的printf(“”);
}
而(K!= 2 * I -1)
{
的printf(“*”);
++ K表;
}
K = 0 ;
printf的(“\ n”);
}
返回 0 ;
}


用*打印倒金字塔
* * *  * *  * *  * *
* *  * *  * * *
* * * * *
* * *
*


源代码:
#包括<stdio.h>中
INT  主要()
{
INT行,I,J,空间;
的printf(“请输入行数:”);
scanf函数(“%d个”,&行);
对于(i =行;我> = 1 ; -一)
{
为(空间= 0 ;空间<行-i的++空间)
的printf(“,”);
为(J =;Ĵ<= 2 * I -1 ; ++ j)条
的printf(“*”);
对于( J = 0 ;Ĵ的<i -1 ++ j)条
的printf(“*”);
printf的(“\ N”);
}
返回 0 ;
}


5,简单的加减乘除计算器

源代码:
/ *源代码C语言编程使用开关... case语句来创建加法,减法,乘法和除法一个简单的计算器。* /

#包括<stdio.h>中
INT  主要()
{
字符 O;
浮球 NUM1,NUM2;
的printf( “请输入操作符+或-或*鸿沟:”);
scanf函数( “%C” ,&O);
printf的( “请输入两个操作数:”);
scanf函数( “%F%F” ,与NUM1,NUM2和);
开关(O){
案 '+' :
printf的( “%.1F +%.1F =%.1F”,NUM1,NUM2,NUM1 + NUM2);
突破 ;
案例 ' - ':
printf的( “%.1F - %.1F =%.1F”,NUM1,NUM2,NUM1 - NUM2);
打破 ;
案 “*” :
printf的( “%* .1F%.1F =% .1F“,NUM1,NUM2,NUM1 * NUM2);
打破 ;
案例 '/' :
printf的( ”%.1F /%.1F =%.1F“,NUM1,NUM2,NUM1 / NUM2);
打破 ;
默认:
/ *如果操作者不为+, - ,*或/,错误消息显示* /
printf的( “错误!运算符是不正确的”);
打破 ;
}
返回 0 ;
}


结果输出:
进入运营商无论是+ 或 - 或 * 或者鸿沟: -
输入两个操作数:3.4
8.4
3.4 - 8.4 = -5.0


6,检查一个数能不能表示成两个质数之和

源代码:
#包括 <stdio.h>中
INT  素(INT N) ;
INT  主要()
{
INT N,I,标志= 0 ;
printf的(“请输入一个正整数:”);
scanf函数(“%d个”,&N);
为(I = 2 ;我<= N / 2 ; ++ I)
{
如果(素(ⅰ)!= 0)
{
如果(素(NI)!= 0)
{
的printf(“%D =%D +%d个\ N”,N,I,NI);
标志= 1 ;
}

}
}
如果(标志== 0)
printf的(“%D不能被表示为两个素数的总和。”中,n);
返回 0 ;
}
INT  素(INT N)      / *函数来检查素数* /
{
的int我,标志= 1 ;
对于(i = 2 ;我<= N / 2 ; ++ I)
如果(N%我== 0)
标志= 0 ;
返回标志;
}


结果输出:
输入一个正整数:34
34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17


7,用递归的方式颠倒字符串

源代码:
/ *例扭转由用户输入的句子,而不使用字符串。* /

#包括 <stdio.h>中
无效 反转() ;
INT  主要()
{
printf的(“请输入一个句子:”);
相反();
返回 0 ;
}
无效 反向()
{
字符 ℃;
scanf函数( “%C” ,&C);
如果(!c = '\ n' )
{
相反();
的printf(“%C”,C);
}
}


结果输出:
输入了一句:margorp emosewa
真棒程序


8,实现二进制与十进制之间的相互转换

/ * C编程源代码,根据用户输入的数据或者二进制到十进制或十进制转换为二进制。* /

#包括 <stdio.h>中
#包括 <math.h>中
INT  binary_decimal (INT N) ;
INT  decimal_binary (INT N) ;
INT  主要()
{
INT N;
焦炭 ℃;
的printf(“说明:\ n”);
printf的(“1.输入字母”D“,以二进制转换为十进制\ n”);
printf的(“2.输入字母”b“,以十进制转换为二进制\ n”);
scanf函数(“%C” ,&C);
如果(C == 'D' ||ç== 'D')
{
的printf(“请输入一个二进制数:”);
scanf函数(“%d个”,&N);
printf的(“%d在十进制二进制=%d个”,正,binary_decimal(N));
}
如果(C == 'B' ||ç== 'B')
{
的printf(“请输入一个十进制数” ;)
scanf函数(“%D” ;,&N)
的printf(“十进制%D =二进制%D” N,N,decimal_binary());
}
返回 0 ;
}

INT  decimal_binary (INT N)  / *功能将十进制转换为二进制* /。
{
INT REM,I = 1,二进制= 0 ;
而(N!= 0)
{
REM = N%2 ;
N / = 2 ;
二进制+ = REM *我;
我* = 10 ;
}
返回二进制;
}

INT  binary_decimal (INT N) / *功能,以二进制转换为十进制。* /

{
INT十进制= 0,I = 0,REM;
而(N!= 0)
{
REM = N%10 ;
N / = 10 ;
十进制+ = REM * POW(2,I);
++我;
}
返回小数;
}


结果输出:




9,使用多维数组实现两个矩阵的相加

源代码:
#包括 <stdio.h>中
INT  主要() {
INT R,C,A [ 100 ] [ 100 ],B [ 100 ] [ 100 ],总和[ 100 ] [ 100 ],I,J;
的printf(“请输入号码行(1至100)的:“);
scanf函数(”%d个“,&R);
printf的(”输入列(1至100之间的数字):“);
scanf函数(”%d个“,&amp; C);
printf的(“第一个矩阵的\ n输入元素:\ n”);

/ *存储由用户输入的第一矩阵的元素。* /

对于(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
{
的printf(“输入元件的%D:”,I + 1,J + 1);
scanf函数(“%d个”,&一个由[i] [j]的);
}

/ *存储由用户输入的第二矩阵的元素。* /

的printf(“请输入第二个矩阵的元素:\ n”);
为(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
{
的printf(“请输入元素的%D:” ,我+ 1,J + 1);
scanf函数(“%d个”,&B [I] [J]);
}

/ *添加两个矩阵* /

对于(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
总和[I] [J] = a [i] [j]的+ B [I] [J]。

/ *显示产生的和矩阵。* /

的printf(“\关于两个矩阵的nSum为:\ n \ n”);
为(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
{
的printf(“%d个”,总和[I] [J]);
如果(J == c审核-1)
的printf(“\ n \ n”);
}

返回 0 ;
}


结果输出:




10,矩阵转置

源代码:
#包括 <stdio.h>中
INT  主()
{
诠释一个[ 10 ] [ 10 ],反式[ 10 ] [ 10 ],R,C,I,J;
printf的(“输入行和矩阵的列:”);
scanf函数(“%D” ,&R&C);

/ *存储由用户在阵列[] []输入矩阵的元素。* /
printf的(“矩阵\ n输入元素:\ n”);
为(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
{
的printf(“输入元件的%D:”,I + 1,J + 1);
scanf函数(“%d个”,&一个由[i] [j]的);
}
/ *显示矩阵[] [] * /
printf的(“\ nEntered矩阵:\ N”);
对于(ⅰ= 0 ;我<R ++ⅰ)
为(J = 0 ;Ĵ<C ++ j)条
{
的printf(“%d个”,一个由[i] [j]的);
如果(J == c审核-1)
的printf(“\ n \ n”);
}

/ *矩阵[] []并将其存储在阵列跨[] []中查找转。* /
为(i = 0 ;我<R; ++ I)
为(J = 0 ;Ĵ<C ++ j)条
{
转[J] [I] = a [i] [J]。
}

/ *显示转置,即,显示阵列反[] []。* /
printf的(“矩阵\ nTranspose:\ n”);
为(i = 0 ;我<C ++ I)
为(J = 0 ;Ĵ<R,+ j)条
{
的printf(“%d个”,反式[I] [J]);
如果(J == - [R -1)
的printf(“\ n \ n”);
}
返回 0 ;
}


结果输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: