| |
|
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2026年1日历 | -2026/1/2 8:09:11- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |