C语言的10大基础算法
C语言的10大基础算法
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。也许它们能在你的毕业设计或者面试中派上用场。
1、计算Fibonacci数列
Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。
C语言实现的代码如下:
/* 显示用户输入n的fibonacci序列,直至n项. */
#include <stdio.h>
int main()
{
int count, n, t1=0, t2=1, display=0;
printf("Enter number of terms: ");
scanf_s("%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+
也可以使用下面的源代码:
/* 显示用户输入的一定值的斐波那契级数. */
#include <stdio.h>
int main()
{
int t1=0, t2=1, display=0, num;
printf("Enter an integer: ");
scanf_s("%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+
/*输入n,显示第n个斐波那契数值,并输出前n项之和.*/
源代码:
#include<stdlib.h>
#include<string>
#include<math.h>
#include<iostream>
using namespace std;
int fib(int x);
int main()
{
int n, sum = 0;
int ret = 0;
printf("输入第n项:");
scanf_s("%d", &n);
printf("Fibonacci数列的第%d项为:%d\n", n, fib(n));
for (int i = 1; i <= n; i++)
{
ret = fib(i);
sum += ret;
}
printf("前%d项之和= %d\n", n, sum);
return 0;
}
int fib(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
return (fib(n - 1) + fib(n - 2));
}
输出结果:

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_s("%d", &n);
temp=n;
while(temp!=0)
{
rem=temp%10;
reverse=reverse*10+rem;
temp/=10;
}
/* 检查数字是否为回文的C程序. */
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_s("%d",&n);
for(i=2;i<=n/2;++i)
{
if(n%i==0)
{
flag=1;
break;
}
}
if (flag==0)
printf("%d 是质数.",n);
else
printf("%d 不是质数.",n);
return 0;
}
结果输出:

Enter a positive integer: 29
29 是质数.
4、打印金字塔和三角形
使用 * 建立三角形
*
* *
* * *
* * * *
* * * * *
源代码:
#include <stdio.h>
int main()
{
int i,j,rows;
printf("Enter the number of rows: ");
scanf_s("%d",&rows);
for(i=1;i<=rows;++i)
{
for(j=1;j<=i;++j)
{
printf("* ");
}
printf("\n");
}
return 0;
}
如下图所示使用数字打印半金字塔。
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
源代码:
#include <stdio.h>
int main()
{
int i,j,rows;
printf("Enter the number of rows: ");
scanf_s("%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_s("%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_s("%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_s("%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_s("%c",&o);
printf("Enter two operands: ");
scanf_s("%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_s("%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、用递归的方式颠倒字符串
源代码:
/* 不使用字符串反转用户输入的句子的示例. */
#include <stdio.h>
void Reverse();
int main()
{
printf("Enter a sentence: ");
Reverse();
return 0;
}
void Reverse()
{
char c;
scanf_s("%c",&c);
if( c != '\n')
{
Reverse();
printf("%c",c);
}
}
结果输出:
Enter a sentence: margorp emosewa
awesome program
8、实现二进制与十进制之间的相互转换
/* c根据用户输入的数据将二进制数转换成十进制数或十进制数转换成二进制数的程序源代码. */
#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. 输入字母'd'将二进制转换为十进制.\n");
printf("2. 输入字母'b'将十进制转换为二进制.\n");
scanf_s("%c",&c);
if (c =='d' || c == 'D')
{
printf("输入二进制数: ");
scanf_s("%d", &n);
printf("%d in binary = %d in decimal", n, binary_decimal(n));
}
if (c =='b' || c == 'B')
{
printf("输入一个十进制数字: ");
scanf_s("%d", &n);
printf("%d in decimal = %d in binary", n, decimal_binary(n));
}
return 0;
}
int decimal_binary(int n) /* 函数将十进制转换为二进制。*/
{
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) /* 将二进制转换为十进制的函数.*/
{
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_s("%d",&r);
printf("Enter number of columns (between 1 and 100): ");
scanf_s("%d",&c);
printf("\n输入第一个矩阵中的元素:\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_s("%d",&a[i][j]);
}
/* Storing elements of second matrix entered by user. */
printf("输入第二个矩阵的元素:\n");
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
printf("Enter element a%d%d: ",i+1,j+1);
scanf_s("%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("\n两个矩阵之和为: \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("输入矩阵的行和列: ");
scanf_s("%d %d", &r, &c);
/* 将用户输入的矩阵元素存储在数组A[]中。*/
printf("\n输入矩阵元素:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("Enter elements a%d%d: ",i+1,j+1);
scanf_s("%d",&a[i][j]);
}
/* 显示矩阵 a[][] */
printf("\n输入矩阵: \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");
}
/* 求矩阵a[][]的转置并存储在数组trans[][]中. */
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
trans[j][i]=a[i][j];
}
/* 显示转置,即显示数组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;
}
输出结果:

————————————————
让你的指尖跳跃出一行行代码精灵,希望对你有所帮助。
本文博主:翻斗街扛把子胡图图
本文出处:https://www.cnblogs.com/dxg123/p/11458404.html
本文版权归作者和博客园共有,欢迎转载,转载请附上原文出处链接及本声明。
C语言的10大基础算法的更多相关文章
- C语言实现九大排序算法
C语言实现九大排序算法 直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序 C语言实现九大排序算法 直接插入排序 将数组分为两个部分,一个是有序部分,一 ...
- 机器学习10大经典算法.doc
详见 F:\工程硕士\d电子书\26 数据挖掘 小结: 1. C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面 ...
- 10大排序算法——Java实现
算法与实现 选择排序 算法思想 从数组中选择最小元素,将它与数组的第一个元素交换位置.再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置.不断进行这样的操作,直到将整个数组排序. 动 ...
- 10个经典的C语言面试基础算法及代码
10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- 数据挖掘10大算法(1)——PageRank
1. 前言 这系列的文章主要讲述2006年评出的数据挖掘10大算法(见图1).文章的重点将偏向于算法的来源以及算法的主要思想,不涉及具体的实现.如果发现文中有错,希望各位指出来,一起讨论. 图1 来自 ...
- 贝叶斯公式由浅入深大讲解—AI基础算法入门
1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...
- 贝叶斯公式由浅入深大讲解—AI基础算法入门【转】
本文转载自:https://www.cnblogs.com/zhoulujun/p/8893393.html 1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生, ...
- c/c++面试总结---c语言基础算法总结2
c/c++面试总结---c语言基础算法总结2 算法是程序设计的灵魂,好的程序一定是根据合适的算法编程完成的.所有面试过程中重点在考察应聘者基础算法的掌握程度. 上一篇讲解了5中基础的算法,需要在面试之 ...
随机推荐
- 在C++工程上添加CUDA编译环境
1.直接在新建工程的时候选择CUDA,这样的工程既能编译C++也能编译CU 2.在已有的C++工程上添加CUDA编译环境 右键工程-->生成依赖项-->生成自定义-->勾选CUDA ...
- ACM-ICPC 2018 南京网络赛
题目顺序:A C E G I J L A. An Olympian Math Problem 打表,找规律,发现答案为n-1 C. GDY 题意: m张卡片,标号1-13: n个玩家,标号1-n:每个 ...
- 01_javaSE面试题:自增变量
开启刷面试题,都是根据视频进行刷面试题的 自增变量,只要记住两点 i++ 是先赋值后计算 ++i 是先计算后赋值 看下面的代码 int i = 1; i = i++; int j = i++; int ...
- 《Zabbix》
https://github.com/itnihao/zabbix-rpm https://github.com/itnihao/zabbix-book 一.zabbix支持的主要监控方式: zabb ...
- hdu6470 矩阵快速幂+构造矩阵
http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意 \(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n] 题 ...
- Luogu P4068 [SDOI2016]数字配对
反正现在做题那么少就争取做一题写一题博客吧 看到题目发现数字种类不多,而且结合价值的要求可以容易地想到使用费用流 但是我们如果朴素地建图就会遇到一个问题,若\(i,j\)符合要求,那么给\(i,j\) ...
- 5个你可能不知道的html5语义化标签
1.<ruby>:该标签作用为注释(中文注音或字符),比如可实现下面样式 详见:https://www.w3cschool.cn/html5/html5-ruby.html 2.< ...
- 转 Yolov3转化Caffe框架详解
转自https://blog.csdn.net/watermelon1123/article/details/82083522 前些日子因工程需求,需要将yolov3从基于darknet转化为基于Ca ...
- 基于OpenCV.Net投影法进行文本分块切割
假设有如下一张图,如何把其中的文本分块切割出来,比如“华普超市朝阳门店”.“2015-07-26”就是两个文本块. 做图像切割有很多种方法,本文描述一种最直观的投影检测法.先来看看什么是投影,简单来说 ...
- LiveBOS Webservice传参类型为list数组
昨天有使用soap传输数据到Webservice,其中字符串类型的都已经传输成功,但是有几个参数传输失败,java服务器端收到的空值. 因为我是php的,然后接收端是java制作的,其中有几个参数是l ...