【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef

news2024/11/18 20:14:07

目录

前言

六、批量数据组织——数组

6.1~3 数组基础知识

6.4 线性表——分类与检索

6.5  带学号的成绩排序—数组初值

6.6 表示姓名—字符串

6.6.0 字符串、字符数组和字符串数组

6.6.1 字符串操作(复制、连接、比较)

6.6.2 回文字

6.6.3 成绩单(字符串数组)

字符串数组

结构体

6.7 类型定义


 

 

前言

        本文介绍了C语言:数组初值;字符串、字符数组、字符串数组;类型定义 typedef 

 

六、批量数据组织——数组

6.1~3 数组基础知识

【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133580645?spm=1001.2014.3001.5502

6.4 线性表——分类与检索

【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501

6.5  带学号的成绩排序—数组初值

        编程序,输入一个班50名学生的”程序设计基础”课程成绩,按成绩由高到低的顺序输出,要求同时输出每个成绩是哪个学生的:

#include <stdio.h>

void bubbleSort(int studentIDs[], float scores[], int n) {
    int i, j;
    for (i = 0; i < n-1; i++) {
        for (j = 0; j < n-i-1; j++) {
            if (scores[j] < scores[j+1]) {
                // 交换两个学生的成绩
                float tempScore = scores[j];
                scores[j] = scores[j+1];
                scores[j+1] = tempScore;

                // 交换两个学生的学号
                int tempID = studentIDs[j];
                studentIDs[j] = studentIDs[j+1];
                studentIDs[j+1] = tempID;
            }
        }
    }
}

int main() {
    int studentIDs[50];
    float scores[50];
    int i;

    // 输入学生的学号和成绩
    for (i = 0; i < 50; i++) {
        printf("请输入第%d个学生的学号和成绩:", i+1);
        scanf("%d %f", &studentIDs[i], &scores[i]);
    }

    // 对成绩进行排序
    bubbleSort(studentIDs, scores, 50);

    // 输出排序后的成绩和学生信息
    printf("按成绩由高到低排序后的结果为:\n");
    for (i = 0; i < 50; i++) {
        printf("学生学号:%d,成绩:%.2f\n", studentIDs[i], scores[i]);
    }

    return 0;
}

 

6.6 表示姓名—字符串

        在C语言中,字符串是由字符组成的数组。可以使用字符数组来表示姓名。例如,可以定义一个字符数组来存储姓名,并对其进行操作和处理。

#include <stdio.h>
#include <string.h>

int main() {
    char name[50]; // 定义一个字符数组来存储姓名,数组大小根据实际情况确定

    printf("请输入姓名:");
    scanf("%s", name); // 从用户输入中读取姓名并存储到字符数组中

    printf("您输入的姓名是:%s\n", name); // 输出姓名

    int length = sizeof(name) / sizeof(name[0]); // 计算数组的长度
    printf("姓名数组的长度是:%d\n", length);
    int length1 = strlen(name); // 计算姓名字符串的长度
    printf("姓名占用的长度是:%d\n", length1);

    return 0;
}

 

1bcfe3e2a5944931928c894fbf974ebd.png

d9ce33c694124df8b60e3e23cda70799.png

 

6.6.0 字符串、字符数组和字符串数组

  • 字符串(String):

    • 字符串是由字符组成的字符数组。
    • 字符串以null字符('\0')作为结束符,表示字符串的结束。
    • 字符串可以使用双引号括起来表示,例如:"Hello, World!"。
    • C语言提供了一系列的字符串操作函数,如strcpystrcmp等,用于处理字符串。
  • 字符数组(Character Array):

    • 字符数组是一维数组,每个元素都是字符类型
    • 字符数组可以存储一串字符,但没有结束符来标识字符串的结束
    • 字符数组可以用于存储单个字符串,或者作为其他数据结构的组成部分。
  • 字符串数组(String Array):

    • 字符串数组是一个二维字符数组,每个元素都是一个字符串(字符数组)
    • 字符串数组用于存储多个字符串,每个字符串占据数组的一个元素。
    • 字符串数组的每个元素(字符串)可以具有不同的长度。
    • 字符串数组可以用于存储一系列相关的字符串,例如存储学生的姓名、存储文件中的多行文本等。
    • 字符串操作函数可以对字符串数组的每个元素进行操作。
#include <stdio.h>
#include <string.h>

int main() {
    // 字符串
    char str[] = "Hello, World!";
    printf("字符串: %s\n", str);

    // 字符数组
    char charArr[] = {'H', 'e', 'l', 'l', 'o', '\0'};
    printf("字符数组: %s\n", charArr);

    // 字符串数组
    char strArr[][20] = {"Apple", "Banana", "Orange"};
    int numStrings = sizeof(strArr) / sizeof(strArr[0]);
    printf("字符串数组:\n");
    for (int i = 0; i < numStrings; i++) {
        printf("%s\n", strArr[i]);
    }

    return 0;
}

       

76c1bedbe3394fe59566355bde4e8bb6.png

 

6.6.1 字符串操作(复制、连接、比较)

        C语言提供了许多用于字符串操作的库函数,例如字符串的复制、连接、比较等。可以使用这些函数来对字符串进行各种操作。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "Hello";
    char str2[50] = "World";

    // 字符串复制
    strcpy(str1, str2);
    printf("复制后的字符串: %s\n", str1);

    // 字符串连接
    strcat(str1, str2);
    printf("连接后的字符串: %s\n", str1);

    // 字符串比较
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("字符串相等\n");
    } else if (result < 0) {
        printf("字符串1小于字符串2\n");
    } else {
        printf("字符串1大于字符串2\n");
    }

    return 0;
}

 

3c0a0201e3b6431688b5d681060dec0f.png

6.6.2 回文字

        回文字是指正序和逆序相同的字符串。可以编写一个函数来判断一个字符串是否为回文字:

#include <stdio.h>
#include <string.h>

int isPalindrome(char str[]) {
    int len = strlen(str);
    int i, j;

    for (i = 0, j = len - 1; i < j; i++, j--) {
        if (str[i] != str[j]) {
            return 0; // 不是回文字,返回0
        }
    }

    return 1; // 是回文字,返回1
}

int main() {
    char str[50];

    printf("请输入一个字符串:");
    scanf("%s", str);

    if (isPalindrome(str)) {
        printf("是回文字\n");
    } else {
        printf("不是回文字\n");
    }

    return 0;
}

85ff03ab32944a579116d5d6be14b0ea.png

 

6.6.3 成绩单(字符串数组)

字符串数组

        编程序,输入一个班50名学生的成绩,按成绩由高到低的顺序  输出每名学生的学号、 姓名、成绩:

#include <stdio.h>
#include <string.h>

#define MAX_STUDENTS 50
#define MAX_NAME_LENGTH 50

void sortStudents(char students[][MAX_NAME_LENGTH+1], int scores[], int numStudents) {
    int i, j;
    char temp[MAX_NAME_LENGTH+1];
    int tempScore;

    for (i = 0; i < numStudents - 1; i++) {
        for (j = 0; j < numStudents - i - 1; j++) {
            if (scores[j] < scores[j + 1]) {
                strcpy(temp, students[j]);
                strcpy(students[j], students[j + 1]);
                strcpy(students[j + 1], temp);

                tempScore = scores[j];
                scores[j] = scores[j + 1];
                scores[j + 1] = tempScore;
            }
        }
    }
}

int main() {
    char students[MAX_STUDENTS][MAX_NAME_LENGTH+1];
    int scores[MAX_STUDENTS];
    int numStudents, i;

    printf("请输入学生人数(最多50人):");
    scanf("%d", &numStudents);

    if (numStudents > MAX_STUDENTS) {
        printf("学生人数超过最大限制。\n");
        return 0;
    }

    for (i = 0; i < numStudents; i++) {
        printf("请输入第%d名学生的学号:", i + 1);
        scanf("%s", students[i]);
        printf("请输入第%d名学生的成绩:", i + 1);
        scanf("%d", &scores[i]);
    }

    sortStudents(students, scores, numStudents);

    printf("\n按成绩由高到低的顺序输出学生信息:\n");
    printf("学号\t成绩\n");
    for (i = 0; i < numStudents; i++) {
        printf("%s\t%d\n", students[i], scores[i]);
    }

    return 0;
}

 

1da4f2fc88c34fc697f65156648f2994.png

        

结构体

        可以使用结构体来表示成绩单,结构体可以包含姓名、科目和成绩等信息:

#include <stdio.h>

struct Score {
    char name[50];
    char subject[50];
    int score;
};

int main() {
    struct Score score1;

    printf("请输入姓名:");
    scanf("%s", score1.name);

    printf("请输入科目:");
    scanf("%s", score1.subject);

    printf("请输入成绩:");
    scanf("%d", &score1.score);

    printf("姓名:%s\n", score1.name);
    printf("科目:%s\n", score1.subject);
    printf("成绩:%d\n", score1.score);

    return 0;
}

 

6f1fcc120f2f47509f05d24769d983bf.png

       (关于结构体的具体使用详见本系列后文)

 

6.7 类型定义

  • C提供了丰富的数据类型,包括简单数据类型、构造型数据类型等。这些数据类型有些是基本数据类型,有些是用户自定义的数据类型。
  • 到目前为止,对用户自定义的数据类型,都是直接定义它的结构,并直接说明相应类型的变量。
  • 类型定义以保留字 typedef 为引导
    • 可以给用户自定义类型定义名字
    • 或给已经有名字的类型定义别名
#include <stdio.h>

typedef int Length; // 定义类型别名 Length,代表长度

int main() {
    Length len = 10; // 使用类型别名 Length

    printf("长度:%d\n", len);

    return 0;
}

输出:

长度:10

 

注意:一定要把类型名与变量名区别开

  • 一个类型可以有名字,它只是表示一种数据结构的一个框架,而不存在一个实体,不给它分配存储空间。
  • 只有变量才是一个实体,它具有一块存储空间,并且该块存储空间的结构是相应数据类型的。任何一个类型可以有多个变量,每个变量都具有一块存储空间。
  • 类型定义只定义一个标识符是某类型的名字,只定义了相应框架的一个同义语。即所定义的标识符具有相应类型表示的框架结构。但它没有一个实体,没有一块存储空间,亦即没有具体表示一个变量。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电机的基础知识

一、电机的定义&#xff1a; 电机&#xff08;Electric machinery&#xff09;&#xff0c;俗称“马达”&#xff0c;是指依据电磁感应定律实现电能转换或传递的一种电磁装置。分为电动机&#xff08;符号为M&#xff09;和发电机&#xff08;符号为G&#xff09;。 二、电机的…

Ant Design of React组件引用及路由跳转

Ant Design of React 学习笔记&#xff08;2&#xff09; Ant Design of React组件引用及路由跳转&#xff0c;接着笔记(1)继续 这里我们主要3点&#xff1a;1.使用Ant的组件&#xff1b;2&#xff0c;如何引用页面组件&#xff1b;3&#xff0c;路由导航跳转 这是我的目录结…

R/S nomenclature for chiral center

Ideas:  Carbon atoms that are bound to four different atoms or groups are said to be asymmetric (chiral)  The bonds formed by an asymmetric carbon can be arranged in two different mirror images (stereoisomers) of each other  Stereoisomers are eith…

Android 自定义PopupWindow,实现下拉框

1、效果图 2、前言 1、页面由 MagicIndicator ViewPager2 Fragment 实现&#xff1b; 2、下拉框是基于WindowManager实现&#xff1b; 3、我使用PopupWindow实现下拉框时&#xff0c;发现一个问题&#xff0c;PopupWindow 在窗口显示的情况下&#xff0c;无法直接从外部修…

​力扣:LCR 122. 路径加密​ 题目:剑指Offer 05.替换空格(c++)

本文章代码以c为例&#xff01; 力扣&#xff1a;LCR 122. 路径加密 题目&#xff1a; 代码&#xff1a; class Solution { public:string pathEncryption(string path) {for(int i0;i<path.size();i){if(path[i].){path[i] ;}}return path;} }; 难度升级&#xff08;原…

C++对象模型(4)-- 数据语义学:数据成员的内存布局

1、数据成员的声明顺序和内存布局 变量的布局顺序与它的声明顺序是一致的。 我们先来看一段代码&#xff1a; class Base { public:// 变量地址void print() {cout << " this:" << this << endl;cout << " &i1:" << …

Nacos 监控手册

Nacos 0.8.0版本完善了监控系统&#xff0c;支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态&#xff0c;目前支持prometheus、elastic search和influxdb&#xff0c;下面结合prometheus和grafana如何监控Nacos。与elastic search和influxdb结合可自己查找相关资料…

小视频APP源码选择指南:挑选最适合你的开发框架

在如今蓬勃发展的小视频APP行业中&#xff0c;源码的选择是打造一款成功应用的关键步骤。然而&#xff0c;面对众多开发框架的选择&#xff0c;如何挑选最适合你的小视频APP源码呢&#xff1f;作为这一领域的专家&#xff0c;我将为你提供一份详尽的指南&#xff0c;助你在源码…

一个rar压缩包如何分成三个?

一个rar压缩包体积太大了&#xff0c;想要将压缩包分为三个&#xff0c;该如何做到&#xff1f;其实很简单&#xff0c;方法就在我们经常使用的WinRAR当中。 我们先将压缩包内的文件解压出来&#xff0c;然后查看一下&#xff0c;然后打开WinRAR软件&#xff0c;找到文件&…

SpringBoot的创建与配置文件【.properties与.yml】

SpringBoot的优点&#xff1a; 1.快速添加外部jar包 2.内置运行容器&#xff0c;无需Tomcat 3.可以快速部署&#xff0c;不依赖外部容器 4.抛弃繁琐的XML 5.拥有更多监控指标 SpringBoot 项目创建 SpringBoot的创建步骤 1. 通过 idea 创建 a.专业版直接创建&#xff0c;无需插…

SSL证书一次性购买多年期,有什么好处?

根据国际标准要求&#xff0c;2020 年 9 月 1 日起&#xff0c;全球信任的SSL证书最长有效期不能超过一年&#xff08;398天&#xff09;。一方面SSL证书有效期缩短可以大大提升SSL证书的安全性&#xff0c;但另一方面也意味着&#xff0c;用户每年都需要重复采购、付款、验证等…

【Linux基础】Linux的基本指令使用(超详细解析,小白必看系列)

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunnyll 目录 &#x1f4a6; ls 指令 &#x1f4a6; pwd指令 &#x1f4a6;cd指令 &#x1f4a6;touch指令 &#x1f4a6;mkdir指令&#xff08;重要&#xff09; &#x1f4a6;rmdir指令…

信息增益,经验熵和经验条件熵——决策树

目录 1.经验熵 2.经验条件熵 3.信息增益 4.增益比率 5.例子1 6.例子2 在决策树模型中&#xff0c;我们会考虑应该选择哪一个特征作为根节点最好&#xff0c;这里就用到了信息增益 通俗上讲&#xff0c;信息增益就是在做出判断时&#xff0c;该信息对你影响程度的大小。比…

服务器上部署python脚本

1.查看服务器上的python是否自带&#xff0c;一般都自带 2.将本地脚本上传到服务器 3.直接运行一下脚本看报什么错误 代码错误&#xff0c; 将f删除后报别的错误 上面是未安装依赖的错误。我们安装一下依赖 下面是编码的解决 #!/usr/bin/python # -*- coding: utf-8 -*- 先把…

Java多线程篇(9)——AQS之读写锁(ReentrantReadWriteLock)

文章目录 1、读写锁的实现1.1、state的分割与HoldCounter1.2、写锁的获取/释放1.3、读锁的获取/释放 2、写锁降级成读锁的使用场景 1、读写锁的实现 1.1、state的分割与HoldCounter ReentrantReadWriteLock 内部维护了读锁和写锁两个锁&#xff0c;这两个锁内部都依赖于同一个…

全网最新最全的软件测试面试题

一、前言 与开发工程师相比&#xff0c;软件测试工程师前期可能不会太深&#xff0c;但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中&#xff0c;主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试…

线性代数小例子

这样做有什么问题呢&#xff1a; A 2 A > A ( A − E ) 0 > A E A 0 A^2 A > A(A - E) 0> A E \quad A 0 A2A>A(A−E)0>AEA0 上述做法是错误的&#xff0c;这是因为两个矩阵的乘积结果为0&#xff0c;并不能说明这两个矩阵就是0&#xff0c;即上述…

chromadb 0.4.0 后的改动

本文基于一篇上次写的博客&#xff1a;[开源项目推荐]privateGPT使用体验和修改 文章目录 一.上次改好的ingest.py用不了了&#xff0c;折腾了一会儿二.发现privateGPT官方更新了总结下变化效果 三.others 一.上次改好的ingest.py用不了了&#xff0c;折腾了一会儿 pydantic和c…

Web自动化测试的详细流程和步骤

一、什么是web自动化测试 自动化&#xff08;Automation&#xff09;是指机器设备、系统或过程&#xff08;生产、管理过程&#xff09;在没有人或较少人的直接参与下&#xff0c;按照人的要求&#xff0c;经过自动检测、信息处理、分析判断、操纵控制&#xff0c;实现预期的目…

国内机械臂产业的现状

机械臂作为一种重要的工业自动化设备&#xff0c;具有高效、精准、灵活等特点&#xff0c;被广泛应用于制造业、物流、医疗、农业等领域。随着中国制造业的快速发展和自动化水平的提高&#xff0c;国内机械臂产业也迎来了快速发展的机遇。本文将对国内机械臂产业的现状进行综述…