| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 斐波拉契数列、冒泡排序、转置矩阵、杨辉三角、数组反转、插入排序(C语言描述) -> 正文阅读 |
|
[数据结构与算法]斐波拉契数列、冒泡排序、转置矩阵、杨辉三角、数组反转、插入排序(C语言描述) |
斐波拉契数列、冒泡排序、转置矩阵、杨辉三角、数组反转、插入排序(C语言描述)一、斐波拉契数列#include<stdio.h> ? int main(int argc, char* argv[]) { ? ?int n,i; ? ?scanf("%d",&n);//由用户决定打印 n 个数 ? ?while(n<=0) scanf("%d",&n);//n不能为负数 ? ?int a[n]; ? ?if(n>2) { ? ? ? ?a[0] = a[1] = 1;//前两位是1 ? ? ? ?for(i=2;i<n;i++) ? ? ? ? ? ?a[i] = a[i-2] + a[i-1];//当前的数为前两个数之和 ? } ? ?//前两位数为1 ? ?else if(n == 1) a[0]=1; ? ?else if(n == 2) a[0]=a[1]=1; ? ?//输出: ? ?for(i=0;i<n;i++) { ? ? ? ?if(i%5==0) //五个数换一行 ? ? ? ? ? ?printf("\n"); ? ? ? ?printf("%d\t",a[i]); ? } ? ? ?return 0; } 输入:
输出:
二、冒泡排序很经典的排序了,这张图很形象: (图片来自于冒泡排序(超详细)_hcz666的博客-CSDN博客_冒泡排序) 代码如下: #include<stdio.h> ? int main(int argc, char* argv[]) { ? ?int a[10] = {9,8,7,6,5,4,3,2,1,0}; ? ?int i,j; ? ?//n个数字只用比较n-1轮 ? ?for(i=0;i<9;i++) { ? ? ? ?//每比较一轮就有一个数字排好了,所以只用比较9-i次 ? ? ? ?for(j=0;j<9-i;j++) { ? ? ? ? ? ?if(a[j] > a[j+1]) { ? ? ? ? ? ? ? ?//交换值 ? ? ? ? ? ? ? ?int t = a[j]; ? ? ? ? ? ? ? ?a[j] = a[j+1]; ? ? ? ? ? ? ? ?a[j+1] = t; ? ? ? ? ? } ? ? ? } ? } ? ?//输出看效果 ? ?for(i=0;i<10;i++){ ? ? ? ?printf("%d\n",a[i]); ? } ? ? ?return 0; } 输出:
三、转置矩阵
把正对角线的两边的值交换后
代码如下: #include<stdio.h> ? int main(int argc, char** argv) { ? ?int a[3][3]; ? ?//假如有一个3*3的矩阵 ? ?int i,j; ? ? ? ?//分别控制行和列 ? ?for(i=0;i<3;i++) { ? ? ? ?for(j=0;j<3;j++){ ? ? ? ? ? ?scanf("%d",&a[i][j]); ? ? ? } ? } ? ?//转置 ? ?for(i=0;i<3;i++) { ? ? ? ?for(j=0;j<3;j++){ ? ? ? ? ? ?//将对角线两边值交换 ? ? ? ? ? ?if(j>i) { ? ? ? ? ? ?int t = a[i][j]; ? ? ? ? ? ?a[i][j] = a[j][i]; ? ? ? ? ? ?a[j][i] = t; ? ? ? ? ? } ? ? ? } ? } ? ?//输出看效果 ? ?for(i=0;i<3;i++){ ? ? ? ?for(j=0;j<3;j++) ? ? ? ? ? ?printf("%d ",a[i][j]); ? ? ? ?printf("\n"); ? } ? ? ?return 0; } 输入:
输出:
还有一种方法,更简单,但空间复杂度高一些,时间和空间不能兼得嘛。 建立一个新的数组接受转置后的数组。 代码如下: #include<stdio.h> ? int main(int argc, char** argv) { ? ?int a[3][3]; ? ?//假如有一个3*3的矩阵 ? ?int b[3][3]; ? ?//存放转置后的矩阵 ? ?int i,j; ? ? ? ?//分别控制行和列 ? ?for(i=0;i<3;i++) { ? ? ? ?for(j=0;j<3;j++){ ? ? ? ? ? ?scanf("%d",&a[i][j]); ? ? ? } ? } ? ?//转置 ? ?for(i=0;i<3;i++) { ? ? ? ?for(j=0;j<3;j++){ ? ? ? ? ? ?b[i][j] = a[j][i]; ? ? ? } ? } ? ?//输出看效果 ? ?for(i=0;i<3;i++){ ? ? ? ?for(j=0;j<3;j++) ? ? ? ? ? ?printf("%d ",b[i][j]); ? ? ? ?printf("\n"); ? } ? ? ?return 0; } 输入:
输出:
四、杨辉三角简易版的杨辉三角 代码如下: #include<stdio.h> ? int main(int argc, char** argv) { ? ?int a[10][10]; ?//打印十行 ? ?int i,j; ? ? ? ?//控制行和列 ? ?for(i=0;i<10;i++) { ? ? ? ?//初始化两腰为 1 ? ? ? ?a[i][0] = 1; ? ? ? ?a[i][i] = 1; ? ? ? ?for(j=1;j<i;j++) { ? ? ? ? ? ?a[i][j] = a[i-1][j-1] + a[i-1][j]; ? ? ? } ? } ? ?//输出看效果 ? ?for(i=0;i<10;i++) { ? ? ? ?for(j=0;j<=i;j++) { ? ? ? ? ? ?printf("%-4d ",a[i][j]); ? ? ? } ? ? ? ?printf("\n"); ? } ? ? ?return 0; } 输出:
五、数组反转两种方法
#include<stdio.h> #define N 10 ? int main(int argc, char** argv) { ? ?int a[N] = {0,1,2,3,4,5,6,7,8,9}; ? ?int i; ? ? ? ?for(i=0;i<N/2;i++) { ? ? ? ?int t = a[i]; ? ? ? ?a[i] = a[9-i]; ? ? ? ?a[9-i] = t; ? } ? ? ?for(i=0;i<N;i++) ? ? ? ?printf("%d ",a[i]); ? ? ?return 0; } 输出:
#include<stdio.h> #define N 10 ? int main(int argc, char** argv) { ? ?int a[N] = {0,1,2,3,4,5,6,7,8,9}; ? ?int b[N]; ? ?int i; ? ? ? ?for(i=0;i<N;i++) { ? ? ? ?b[i] = a[N-1-i];//数组下标从0开始,小心越界 ? } ? ? ?for(i=0;i<N;i++) ? ? ? ?printf("%d ",b[i]); ? ? ?return 0; } ? 输出:
六、插入排序也是很经典的算法 图看明白了代码也就不难理解了: 代码如下: #include<stdio.h> #define MAX 100 ? int main(int argc, char** argv) { ? ?int a[MAX] = {0}; ? ?int length; ? ?int n; ? ?scanf("%d",&length);//顺序表长度 ? ?for(n=0;n<length;n++) ? ? ? ?scanf("%d",&a[n]);//逐个输入 ? ?for(n=1;n<length;n++) { ? ? ? ?int p = a[n]; ? ? ? ?int i = n-1; ? ? ? ?while(i>=0 && a[i] > p) { ? ? ? a[i+1] = a[i]; ? ? ? i--; ? ? ? } ? a[i+1] = p; ? } ? ?for(n=0;n<length;n++) ? printf("%d ",a[n]); ? ? ? ?return 0; } 输入:
输出:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:42:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |