首页 > 其他分享 >第六章,数组1.0

第六章,数组1.0

时间:2024-09-20 19:51:48浏览次数:3  
标签:1.0 数组 temp int ++ str printf 第六章 include

第六章,数组

例6.1 对10个数组元素赋值0-9,按要求逆序输出

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int str[10];
    for (int i = 0; i < 10; i++) {//下标0-9
        str[i] = i;
    }
    for (int j = 9; j >= 0; j--) {//下标从9开始,逆序输出
        printf("%d ", str[j]);//输出数组元素
    }
    return 0;
}

例6.2,用数组实现斐波那契数列,算40个数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int str[100];
    str[0] = str[1] = 1;//前两个数先初始化一下
    int sum = 0;
    for (int i = 2; i < 40; i++) {
        str[i] = str[i - 1] + str[i - 2];//这个i-1,i-2太妙了
    }
    for (int j = 0; j < 40; j++) {
        
        if (j % 5 == 0&&j!=0) {//要排除掉0%5的情况,第一行不能空一行
            printf("\n");
        }
            printf("%d ", str[j]);

    }
    return 0;
}

有十个数要求从小到大排序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>//rand()的头文件
int main() {
    int str[20];
    int temp;//中间变量
    for (int i = 0; i < 10; i++) {
        str[i] = rand();//随机生成数,不想自己写数了,要写头文件
    }
    for (int i = 0; i < 10; i++) {
        for (int j = i; j < 10; j++) {
            if (str[i] > str[j]) {
                temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
    for (int i = 0; i < 10; i++) {
        printf("%d ", str[i]);//从小到大输出
    }
    return 0;
}

例6.4将一个二行三列的二维数组行列互换

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int str[2][3];//还有一个方法是建立两个二维数组,把a[i][j]=b[j][i];    
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            scanf("%d", &str[i][j]);    //输入一个二维数组
        }    
    }
    printf("交换前:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", str[i][j]);
        }
        printf("\n");
    }

    printf("交换后:\n");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", str[j][i]);//把下标都写下来找规律
        }
        printf("\n");
    }
    return 0;
}

例6.5,有一个3*4的二维数组,找出最大的数,并输出他的行列下标

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
    int str[3][4];
    int max;//保存最大值
    int row, col;//行标和列标
    int temp;//中间变量
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            scanf("%d", &str[i][j]);//输入三行四列数
        }
    }

printf("输出数组\n");
    for (int i = 0; i < 3; i++) {//一定要先输出,再去找最大值,因为在比较的过程中会交换值
        for (int j = 0; j < 4; j++) {
            printf("%d ", str[i][j]);//先把输入的数按顺序输出一下,好看结果
        }
        printf("\n");
    }

printf("\n");
    max = str[0][0];//把第一个值给最大值
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            if (str[i][j] > max) {
                temp = str[i][j];
                str[i][j] = max;
                max = temp;
                row = i;
                col = j;
            }
        }
    }
    printf("%d %d %d", max, row, col);
    return 0;
}

例6.6输出一个已知的字符串

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
    char str[] = { 'I','a','m','.' };//每一个字符用单引号和逗号隔开
    //int n = strlen(str);(只能求字符串长度,里面不能有别的符号
    int n = sizeof(str) / sizeof(str[0]);//计算字符串长度
    for (int i = 0; i < n; i++) {
        printf("%c ", str[i]);//输出字符串
    }
    return 0;
}

常用字符串函数
strcpy(复制),strcmp(比较),srlen(长度),strlwr(转小写字母),strupr(转大写), strcat(连接)
 isalpha(是字母),isdigit(是数字),isspace(是空格)加头文件ctype.h


 例6.8输入一行字符,统计其中有多少个单词

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>
int main() {
    char str[100];
    int sum = 0;
    fgets(str, 100, stdin);
    int n = sizeof(str) / sizeof(str[0]);
    for (int i = 0; str[i] != '\0'; i++) {
        if (isalpha(str[i]) && !isalpha(str[i + 1])){//这个判断是不是字母的函数要记住isalpha
            sum++;
}
    }
    printf("%d", sum);
    return 0;
}

例6.9有三个字符串,比较

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//上一个是用二维数组做的,虽然可能更简单,但没有一维好想
int main() {
    char str1[20]="";
    char str2[20]="";
    char str3[20]="";
    scanf("%s", &str1);//会给一个返回值被忽略的警告,但我不知道什么意思
    scanf("%s", &str2);
    scanf("%s", &str3);
    char max[20]="";
    if (strcmp(str1, str2) > 0) {//比较函数,大于0则前面的那个大
        strcpy(max, str1);
    }
    else {
        strcpy(max, str2);//数组不能整体给,要用strcpy
    }
    if (strcmp(max, str3) < 0) {
        strcpy(max, str3);
    }
    int i;
    i = 0;//输出方式一,要想结尾有\必须将字符串初始化
    while (max[i] != '\0') {
        printf("%c", max[i]);
        i++;
    }
    printf("\n");
    printf("%s", max);//输出方式二,直接输出
    return 0;
}

/*选择法排序是指:如果要把一个数组从小到大排列,那么就从该数组中依次选择最小的数字来排序。
从第一个数字开始,将第一个数字与数组中剩下数字中最小的那一个交换位置,
然后将第二个数字与剩下数字中最小的那个交换位置,以此类推,直到最后一个数字。*/


题2,用选择法对十个数排序,从大到小

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>//生成随机数的头文件
int main() {
    int str[20];
    int i;
    int j;
    int min;
    int temp;
    for (i = 0; i < 10; i++) {
        str[i] = rand();//生成随机数,不想自己写数了
        //scanf("%d", &str[i]);
    }
    for (i = 0; i < 10; i++) {//定义了一个min始终指向最左边的数,但不定义也可以吧
        min = i;
        for (j = i; j < 10; j++) {
            if (str[j] > str[min]) {
                temp = str[j];
                str[j] = str[min];
                str[min] = temp;
            }
            /*if (str[j] > str[i]) {//不用min直接用i,j比较,也没问题
                temp = str[j];
                str[j] = str[i];
                str[i] = temp;
            }*/
        }
    }
    for (i = 0; i < 10; i++) {
        printf("%d ", str[i]);
    }
    return 0;
}

/*冒泡法排序是指:在排序时,每次比较数组中的相邻两个数组元素的值,
将较小的数排在较大的数前面。*/


扩展:冒泡排序

//个人觉得冒泡不如选择好理解哎,但冒泡好写

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
    int str[100];
    int temp;
    for (int i = 0; i < 10; i++) {
        str[i] = rand();
    }
    for (int i = 0; i < 9; i++) {//管从头到尾排几趟的
        for (int j = 0; j < 9 - i; j++) {
            if (str[j] > str[j + 1]) {//自己跟自己的下一个比
                temp = str[j];
                str[j] = str[j + 1];
                str[j + 1] = temp;
            }
        }
    }
        for (int i = 0; i < 10; i++) {
            printf("%d ", str[i]);
        }
    

    return 0;
}

标签:1.0,数组,temp,int,++,str,printf,第六章,include
From: https://blog.csdn.net/qq_63279386/article/details/142368294

相关文章

  • 【理论篇】数据挖掘 第六章 挖掘频繁模式、关联和相关性:基本概念和方法(上)
    说明:文章为《数据挖掘:概念与技术原书第03版》的学习笔记,该书是数据挖掘领域的经典之作,想了解更多内容请参阅原著。一、频繁模式基本概念        模式:通常指的是数据中的一种规律、趋势或特征,可以是单一的特征、属性,也可以是多个特征之间的关系或组合;      ......
  • asp.net webapi 控制器中获取appsettings.json 中的数组对象
    appsettings.json文件内容: {"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"MyConfigKey":"MyConfigValue"......
  • js数组合并与对象合并的方法汇总
    ......
  • vue3中设置响应式对象和数组
    <template><divclass="persion"><h2>姓名:{{name}}</h2><h2>年龄:{{age}}</h2><h2>性别:{{sex}}</h2><button@click="nameTel">点击姓名</button>......
  • 【力扣刷题】2090.半径为k的子数组平均值(定长滑动窗口)
    题目:给你一个下标从 0 开始的数组 nums ,数组中有 n 个整数,另给你一个整数 k 。半径为k的子数组平均值 是指:nums 中一个以下标 i 为 中心 且 半径 为 k 的子数组中所有元素的平均值,即下标在 i-k 和 i+k 范围(含 i-k 和 i+k)内所有元素的平均......
  • JS数组的shift/unshift pop/push
    前端数组里面的,shift头部删除,unshift 头部添加,pop尾部删除,push尾部添加头部删除:使用shift方法。这个方法会移除并返回数组的第一个元素,常用于实现队列的出队操作。示例代码:letqueue=[1,2,3];letfirstElement=queue.shift();//firstElement=1,queue=[......
  • 敏感词 v0.21.0 白名单支持单个编辑,修正白名单包含黑名单时的问题
    敏感词系列sensitive-word-admin敏感词控台v1.2.0版本开源sensitive-word-adminv1.3.0发布如何支持分布式部署?01-开源敏感词工具入门使用02-如何实现一个敏感词工具?违禁词实现思路梳理03-敏感词之StopWord停止词优化与特殊符号04-敏感词之字典瘦身05-敏感词之DFA......
  • w1r3s.v1.0 打靶记录
    https://www.vulnhub.com/entry/w1r3s-101,220/思路:红队笔记主机发现端口扫描使用nmap扫描网段类存活主机因为靶机是我最后添加的,所以靶机IP是133nmap-sP192.168.75.0/24//StartingNmap7.93(https://nmap.org)at2024-09-2009:09CSTNmapscanreportfor19......
  • 代码随想录 -- 二叉树 -- 将有序数组转换为二叉搜索树
    108.将有序数组转换为二叉搜索树-力扣(LeetCode)思路:(注意题目要求是平衡二叉树!!!)递归出口:当传入数组为空时,返回空。单层递归逻辑:找到数组中间的值,令其为root,数组左边为root的左子树,数组右边为root的右子树。最后返回root。classSolution(object):defsortedArrayTo......
  • C#|.net core 基础 - 扩展数组添加删除性能最好的方法
    今天在编码的时候遇到了一个问题,需要对数组变量添加新元素和删除元素,因为数组是固定大小的,因此对新增和删除并不友好,但有时候又会用到,因此想针对数组封装两个扩展方法:新增元素与删除元素,并能到达以下三个目标:1、性能优异;2、兼容性好;3、方便使用;这三个目标最麻烦的应该就是性......