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

1、计算Fibonacci数列

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

C语言实现的代码如下:

/* Displaying Fibonacci sequence up to nth term where n is entered by user. */

#include <stdio.h>

int main()

{

int count, n, t1=0, t2=1, display=0;

printf("Enter number of terms: ");

scanf("%d",&n);

printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */

count=2;    /* count=2 because first two terms are already displayed. */

while (count<n)

{

display=t1+t2;

t1=t2;

t2=display;

++count;

printf("%d+",display);

}

return 0;

}

结果输出:

Enter number of terms: 10

Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+

也可以使用下面的源代码:

/* Displaying Fibonacci series up to certain number entered by user. */

#include <stdio.h>

int main()

{

int t1=0, t2=1, display=0, num;

printf("Enter an integer: ");

scanf("%d",&num);

printf("Fibonacci Series: %d+%d+", t1, t2); /* Displaying first two terms */

display=t1+t2;

while(display<num)

{

printf("%d+",display);

t1=t2;

t2=display;

display=t1+t2;

}

return 0;

}

结果输出:

Enter an integer: 200

Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+55+89+144+

2、回文检查

源代码:

/* C program to check whether a number is palindrome or not */

#include <stdio.h>

int main()

{

int n, reverse=0, rem,temp;

printf("Enter an integer: ");

scanf("%d", &n);

temp=n;

while(temp!=0)

{

rem=temp%10;

reverse=reverse*10+rem;

temp/=10;

}

/* Checking if number entered by user and it's reverse number is equal. */

if(reverse==n)

printf("%d is a palindrome.",n);

else

printf("%d is not a palindrome.",n);

return 0;

}

结果输出:

Enter an integer: 12321

12321 is a palindrome.

3、质数检查

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

源代码:

/* C program to check whether a number is prime or not. */

#include <stdio.h>

int main()

{

int n, i, flag=0;

printf("Enter a positive integer: ");

scanf("%d",&n);

for(i=2;i<=n/2;++i)

{

if(n%i==0)

{

flag=1;

break;

}

}

if (flag==0)

printf("%d is a prime number.",n);

else

printf("%d is not a prime number.",n);

return 0;

}

结果输出:

Enter a positive integer: 29

29 is a prime number.

4、打印金字塔和三角形

使用 * 建立三角形

 

源代码:

#include <stdio.h>

int main()

{

int i,j,rows;

printf("Enter the number of rows: ");

scanf("%d",&rows);

for(i=1;i<=rows;++i)

{

for(j=1;j<=i;++j)

{

printf("* ");

}

printf("\n");

}

return 0;

}

如下图所示使用数字打印半金字塔。

 

源代码:

#include <stdio.h>

int main()

{

int i,j,rows;

printf("Enter the number of rows: ");

scanf("%d",&rows);

for(i=1;i<=rows;++i)

{

for(j=1;j<=i;++j)

{

printf("%d ",j);

}

printf("\n");

}

return 0;

}

用 * 打印半金字塔

 

源代码:

#include <stdio.h>

int main()

{

int i,j,rows;

printf("Enter the number of rows: ");

scanf("%d",&rows);

for(i=rows;i>=1;--i)

{

for(j=1;j<=i;++j)

{

printf("* ");

}

printf("\n");

}

return 0;

}

用 * 打印金字塔

 

源代码:

#include <stdio.h>

int main()

{

int i,space,rows,k=0;

printf("Enter the number of rows: ");

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");

}

return 0;

}

用 * 打印倒金字塔

 

源代码:

#include<stdio.h>

int main()

{

int rows,i,j,space;

printf("Enter number of rows: ");

scanf("%d",&rows);

for(i=rows;i>=1;--i)

{

for(space=0;space<rows-i;++space)

printf("  ");

for(j=i;j<=2*i-1;++j)

printf("* ");

for(j=0;j<i-1;++j)

printf("* ");

printf("\n");

}

return 0;

}

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

源代码:

/* Source code to create a simple calculator for addition, subtraction, multiplication and division using switch...case statement in C programming. */

# include <stdio.h>

int main()

{

char o;

float num1,num2;

printf("Enter operator either + or - or * or divide : ");

scanf("%c",&o);

printf("Enter two operands: ");

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:

/* If operator is other than +, -, * or /, error message is shown */

printf("Error! operator is not correct");

break;

}

return 0;

}

结果输出:

Enter operator either + or - or * or divide : -

Enter two operands: 3.4

8.4

3.4 - 8.4 = -5.0

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

源代码:

#include <stdio.h>

int prime(int n);

int main()

{

int n, i, flag=0;

printf("Enter a positive integer: ");

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("%d can't be expressed as sum of two prime numbers.",n);

return 0;

}

int prime(int n)      /* Function to check prime number */

{

int i, flag=1;

for(i=2; i<=n/2; ++i)

if(n%i==0)

flag=0;

return flag;

}

结果输出:

Enter a positive integer: 34

34 = 3 + 31

34 = 5 + 29

34 = 11 + 23

34 = 17 + 17

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

源代码:

/* Example to reverse a sentence entered by user without using strings. */

#include <stdio.h>

void Reverse();

int main()

{

printf("Enter a sentence: ");

Reverse();

return 0;

}

void Reverse()

{

char c;

scanf("%c",&c);

if( c != '\n')

{

Reverse();

printf("%c",c);

}

}

结果输出:

Enter a sentence: margorp emosewa

awesome program

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

/* C programming source code to convert either binary to decimal or decimal to binary according to data entered by user. */

#include <stdio.h>

#include <math.h>

int binary_decimal(int n);

int decimal_binary(int n);

int main()

{

int n;

char c;

printf("Instructions:\n");

printf("1. Enter alphabet 'd' to convert binary to decimal.\n");

printf("2. Enter alphabet 'b' to convert decimal to binary.\n");

scanf("%c",&c);

if (c =='d' || c == 'D')

{

printf("Enter a binary number: ");

scanf("%d", &n);

printf("%d in binary = %d in decimal", n, binary_decimal(n));

}

if (c =='b' || c == 'B')

{

printf("Enter a decimal number: ");

scanf("%d", &n);

printf("%d in decimal = %d in binary", n, decimal_binary(n));

}

return 0;

}

int decimal_binary(int n)  /* Function to convert decimal to binary.*/

{

int rem, i=1, binary=0;

while (n!=0)

{

rem=n%2;

n/=2;

binary+=rem*i;

i*=10;

}

return binary;

}

int binary_decimal(int n) /* Function to convert binary to decimal.*/

{

int decimal=0, i=0, rem;

while (n!=0)

{

rem = n%10;

n/=10;

decimal += rem*pow(2,i);

++i;

}

return decimal;

}

————————————

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

源代码:

#include <stdio.h>

int main(){

int r,c,a[100][100],b[100][100],sum[100][100],i,j;

printf("Enter number of rows (between 1 and 100): ");

scanf("%d",&r);

printf("Enter number of columns (between 1 and 100): ");

scanf("%d",&c);

printf("\nEnter elements of 1st matrix:\n");

/* Storing elements of first matrix entered by user. */

for(i=0;i<r;++i)

for(j=0;j<c;++j)

{

printf("Enter element a%d%d: ",i+1,j+1);

scanf("%d",&a[i][j]);

}

/* Storing elements of second matrix entered by user. */

printf("Enter elements of 2nd matrix:\n");

for(i=0;i<r;++i)

for(j=0;j<c;++j)

{

printf("Enter element a%d%d: ",i+1,j+1);

scanf("%d",&b[i][j]);

}

/*Adding Two matrices */

for(i=0;i<r;++i)

for(j=0;j<c;++j)

sum[i][j]=a[i][j]+b[i][j];

/* Displaying the resultant sum matrix. */

printf("\nSum of two matrix is: \n\n");

for(i=0;i<r;++i)

for(j=0;j<c;++j)

{

printf("%d  ",sum[i][j]);

if(j==c-1)

printf("\n\n");

}

return 0;

}

————————————

10、矩阵转置

源代码:

#include <stdio.h>

int main()

{

int a[10][10], trans[10][10], r, c, i, j;

printf("Enter rows and column of matrix: ");

scanf("%d %d", &r, &c);

/* Storing element of matrix entered by user in array a[][]. */

printf("\nEnter elements of matrix:\n");

for(i=0; i<r; ++i)

for(j=0; j<c; ++j)

{

printf("Enter elements a%d%d: ",i+1,j+1);

scanf("%d",&a[i][j]);

}

/* Displaying the matrix a[][] */

printf("\nEntered Matrix: \n");

for(i=0; i<r; ++i)

for(j=0; j<c; ++j)

{

printf("%d  ",a[i][j]);

if(j==c-1)

printf("\n\n");

}

/* Finding transpose of matrix a[][] and storing it in array trans[][]. */

for(i=0; i<r; ++i)

for(j=0; j<c; ++j)

{

trans[j][i]=a[i][j];

}

/* Displaying the transpose,i.e, Displaying array trans[][]. */

printf("\nTranspose of Matrix:\n");

for(i=0; i<c; ++i)

for(j=0; j<r; ++j)

{

printf("%d  ",trans[i][j]);

if(j==r-1)

printf("\n\n");

}

return 0;

}

结果输出:

 

看到这里你是不是对C语言又有了一点新的认知呢~

如果你喜欢这篇文章的话,动动小指,点个赞再走~

如果你想学编程,小编推荐一个C语言/C++编程学习基地【 点击进入】!

 

一个活跃、高逼格、高层次的编程学习殿堂;编程入门只是顺带,思维的提高才有价值!

涉及:编程入门、游戏编程、网络编程、Windows编程、Linux编程、Qt界面开发、黑客等等....

【自学编程】新手经常遇到的10大C语言基础算法,珍藏版源码值得收藏!的更多相关文章

  1. 贝叶斯公式由浅入深大讲解—AI基础算法入门

    1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...

  2. 贝叶斯公式由浅入深大讲解—AI基础算法入门【转】

    本文转载自:https://www.cnblogs.com/zhoulujun/p/8893393.html 1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生, ...

  3. 十大基础排序算法[java源码+动静双图解析+性能分析]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...

  4. 【转】如何在Ubuntu11.10(32位)下编译Android4.0源码(图文)

    原文网址:http://blog.csdn.net/flydream0/article/details/7046612 关于如何下载Android4.0的源码请参考我的另一篇文章: http://bl ...

  5. Thinkphp各大支付平台在线支付集成源码

    用Thinkphp给客户开发网站的时候需要用到各大平台付款功能,下面就免费分享给大家,此类是个成熟类,网上down下来的,经过修改测试了(可以直接拿来使用,附带使用方法,有需要的朋友请拿走.),如果有 ...

  6. Android拓展系列(10)--使用Android Studio阅读整个Android源码

    之前一直在windows下用source insight阅读android源码,效果非常好.后来远程异地服务器,网络限制,一直用ssh + vim,现在主要还是以这种方式.最近发现一个不错的东西(早就 ...

  7. 第10课:[实战] Redis 网络通信模块源码分析(3)

    redis-server 接收到客户端的第一条命令 redis-cli 给 redis-server 发送的第一条数据是 *1\r\n\$7\r\nCOMMAND\r\n .我们来看下对于这条数据如何 ...

  8. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  9. 10大IT社区

    技术社区导航 http://tooool.org/ 1. cnblogs 人多内容质量最高 2.csdn csdn的注册人数多,但新手多 3.java eye java eye注册用户刚突破10万,但 ...

随机推荐

  1. why哥被阿里一道基础面试题给干懵了,一气之下写出万字长文。

    这是why的第 65 篇原创文章 荒腔走板 大家好,我是 why,欢迎来到我连续周更优质原创文章的第 65 篇.老规矩,先荒腔走板聊聊技术之外的东西. 上面这图是去年的成都马拉松赛道上,摄影师抓拍的我 ...

  2. 2020重新出发,JAVA高级,JVM

    JVM的基本概念 JVM是可运行java代码的假想计算机,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆和一个存储方法域.JVM是运行在操作系统之上的,它与硬件没有直接的交互. [外链图片 ...

  3. centos7新增用户并授权root权限、非root用户启动tomcat程序

    一.centos7新增用户并授权root权限 cat /etc/redhat-release查看centos版本号 1.禁用root账户登录 vim /etc/ssh/sshd_config 找到这一 ...

  4. get、post请求方式区别

    1.get请求只有请求头,没有请求体,它的参数只能写在url里面,post请求数据放在请求体里面 (HTTP协议:两台电脑交互url请求头Request Headers:一些额外的信息,比如用的什么浏 ...

  5. visual studio项目多级引用不拷贝dll的问题

    最近碰到一个visual studio项目多级引用不拷贝dll的问题,花了很久查了很多资料,特此记录 A项目引用B项目, B项目引用C项目,C项目引用ef及oracle.ef using Oracle ...

  6. [程序员代码面试指南]数组和矩阵-数组的partition调整

    题目 补充问题:数组只含0,1,2,对数组排序,要求时间复杂度O(n),额外空间复杂度O(1) 题解 维护三个变量,l,idx,r.左区间[0,l],中间区间[l+1,idx],右区间[idx+1,r ...

  7. 程序员你是如何降低NPE的?

    程序员,如果系统突然报了一个空指针异常,你肯定像吞了一只苍蝇一样尴尬. 那么如何在日常开发过程中降低NPE? 问题 回答 现状 返回空值会出现大量的空指针异常 目的 改进方法的返回值,降低出现空指针异 ...

  8. Spring基于XML的IOC环境搭建及入门

    一.使用Maven构建Java项目 * 项目目录结构 1. 在sun.service包下创建UserDao接口和接口实现类: UserDao接口: package sun.service; /** * ...

  9. CSAPP 第一章 计算机系统漫游

    第一章 计算机系统漫游 C语言的起源:(系统级编程的首选) C语言与Unix操作系统关系密切 C语言小而简单:其设计由一个人掌控 C语言是为实践目的设计的:其设计用来实现Unix操作系统 C语言程序编 ...

  10. Oracle学习(二)SQL高级--表数据相关

    SQL高级语句 top / limit / rownum / percent (前XXX条数据) --top(SQL Server / MS Access) select top 条数 from 表; ...