首页 > 其他分享 >七天学会C语言-第四天(数组)

七天学会C语言-第四天(数组)

时间:2023-09-19 21:01:47浏览次数:35  
标签:10 七天 name 字符 int 第四天 C语言 数组 printf

1. 定义一维数组

在C语言中,一维数组是具有相同数据类型的元素的有序集合。定义一维数组的基本语法如下:

data_type array_name[array_size];

其中:

  • data_type 是数组元素的数据类型,可以是整数、浮点数、字符等。
  • array_name 是数组的名称,你可以自定义。
  • array_size 是数组的大小,指定了数组可以容纳的元素数量。

例 1:对 10 个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9并按倒序输出。

#include <stdio.h>

int main() {
    int i;
    int a[10];  // 定义一个包含10个整数的数组

    // 使用循环为数组元素赋值
    for (i = 0; i < 10; i++) {
        a[i] = i; // 数组的每个元素赋值为它的索引
    }

    // 倒序输出数组元素
    for (i = 9; i >= 0; i--) {
        printf("%d\t", a[i]); // 输出数组元素的值
    }
    printf("\n");

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C++

例 2:输入 10 个地区的面积(面积为整数),对它们由小到大排序并输出排序后的结果。

用两种不同的排序算法,一种是选择排序,另一种是冒泡排序。

选择法(选择排序):

#include<stdio.h>

int main()
{
    int a[10];
    int i, j, t;

    // 输入10个面积值
    printf("请输入10个面积:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    // 选择排序算法
    for (i = 0; i < 9; i++) {
        for (j = i + 1; j < 10; j++) {
            if (a[i] > a[j]) {
                // 交换元素
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }

    // 输出排序后的面积值
    printf("排序后的面积依次是:\n");
    for (i = 0; i < 10; i++)
        printf("%d\t", a[i]);
    printf("\n");

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C_02

冒泡法(沉底法、冒泡排序):

#include<stdio.h>

int main()
{
    int a[10];
    int i, j, t;

    // 输入10个面积值
    printf("请输入10个面积:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    // 冒泡排序算法
    for (j = 0; j < 9; j++) {
        for (i = 0; i < 9 - j; i++) {
            if (a[i] > a[i + 1]) {
                // 交换元素
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    }

    // 输出排序后的面积值
    printf("排序后的面积依次是:\n");
    for (i = 0; i < 10; i++)
        printf("%d\t", a[i]);
    printf("\n");

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_数组_03

选择排序的原理是从未排序部分找到最小值,然后与未排序部分的第一个元素交换,然后将未排序部分缩小,继续这个过程,直到整个数组排序完成。而冒泡排序的原理是比较相邻的元素,如果顺序不对则交换它们,这个过程一直重复,直到整个数组排序完成。

两者的核心思想不同,选择排序每轮只选择一个最小值,而冒泡排序每轮都可能有多次交换操作。这两种算法都可以正确地对输入的面积值进行排序,但选择排序在每轮中只交换一次元素,而冒泡排序可能在每轮中交换多次元素。

2. 定义二维数组

与一维数组类似,二维数组是一个具有两个维度的数组。它通常用于表示矩阵或表格数据。定义二维数组的语法如下:

data_type array_name[row_size][column_size];

其中:

  • data_type 是数组元素的数据类型,同样可以是整数、浮点数、字符等。
  • array_name 是数组的名称。
  • row_size 和 column_size 分别表示二维数组的行数和列数。

例如,定义一个3x3的整数二维数组:

int matrix[3][3];

例1:将一个二维数组

七天学会C语言-第四天(数组)_i++_04


的行列元素互换,存到另一个二维数组 b 中并输出。

#include <stdio.h>

int main() {
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int b[3][2];
    int i, j;

    // 使用循环将数组a转置为数组b
    for (i = 0; i <= 1; i++) {
        for (j = 0; j <= 2; j++) {
            b[j][i] = a[i][j];
        }
    }

    // 输出数组b
    printf("数组 b 为:\n");
    for (j = 0; j <= 2; j++) {
        for (i = 0; i <= 1; i++) {
            printf("%d\t", b[j][i]);
        }
        printf("\n");
    }

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C_05

例 2:已知矩阵

七天学会C语言-第四天(数组)_字符数组_06


,请编程求出其中值最大的那个元素。

#include <stdio.h>

int main() {
    int i, j, max;
    int a[3][3] = {{1, 2, 3}, {9, 8, 7}, {-10, 10, -5}};

    // 假设最大值为数组的第一个元素
    max = a[0][0];

    // 使用嵌套循环遍历数组,找到最大值
    for (i = 0; i <= 2; i++) {
        for (j = 0; j <= 2; j++) {
            if (a[i][j] > max) {
                max = a[i][j];
            }
        }
    }

    // 输出最大值
    printf("最大元素的值为 %d\n", max);

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C++_07

3. 定义字符数组

字符数组是一种特殊的数组,用于存储字符串。字符串是字符的序列,以空字符 '\0' 结尾。定义字符数组的方式如下:

char string_name[length];

其中:

  • char 表示字符数组的元素类型。
  • string_name 是字符数组的名称。
  • length 是字符数组的长度,包括字符串末尾的空字符 '\0'

例如,定义一个存储名字的字符数组:

char name[20];

例1:定义一个存储名字的字符数组

#include <stdio.h>

int main() {
    // 声明并初始化一个字符数组来存储名字
    char name[20]; // 假设名字最多包含19个字符,留一个位置给空字符 '\0'

    // 输入名字
    printf("请输入你的名字: ");
    scanf("%19s", name); // 限制输入的字符数不超过19个,并自动在末尾添加 '\0'

    // 打印名字
    printf("你好,%s!\n", name);

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_字符数组_08

4. 输出字符数组

要输出字符数组,你可以使用C语言的标准库函数 printf()。以下是一个示例:

char name[] = "John";
printf("Name: %s\n", name);

这将输出:Name: John

例1:定义一个字符串“Hi,Everybody!!”,然后输出这个字符串。

#include<stdio.h>

int main() {
    char c[15] = {'H', 'i', ',', ' ', 'E', 'v', 'e', 'r', 'y', 'b', 'o', 'd', 'y', '!', '!'};

    int i;
    for (i = 0; c[i] != '\0'; i++) {
        printf("%c", c[i]);
    }

    printf("\n");
    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C_09

例2:输出一个

七天学会C语言-第四天(数组)_字符数组_10


图案

#include<stdio.h>

int main() {
    char c[3][3] = {{' ', '*', ' '}, {'*', ' ', '*'}, {' ', '*', ' '}};

    int i, j;
    for (i = 0; i <= 2; i++) {
        for (j = 0; j <= 2; j++) {
            printf("%c", c[i][j]);
        }
        printf("\n");
    }

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_C_11

5. 输入字符数组

要从用户那里接收输入并存储到字符数组中,可以使用标准库函数 scanf() 或 gets()。以下是一个示例:

使用 scanf()

char name[20];
printf("Enter your name: ");
scanf("%s", name);

使用 gets()(注意:不建议使用,因为它存在安全问题):

char name[20];
printf("Enter your name: ");
gets(name);

例1:输入一行由空格和单词组成的字符(字符数在 80 以内), 请统计有多少个单词。

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

int main() {
    char input[80]; // 声明一个字符数组来存储输入
    int wordCount = 0; // 用于统计单词数量
    bool inWord = false; // 用于标记是否在单词中

    // 提示用户输入字符数组
    printf("请输入一行由空格和单词组成的字符 (最多80个字符):\n");

    // 使用fgets函数获取用户输入
    fgets(input, sizeof(input), stdin);

    // 去掉输入中的换行符
    size_t len = strlen(input);
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }

    // 遍历输入的字符数组来统计单词数量
    for (int i = 0; i < len; i++) {
        if (input[i] == ' ' || input[i] == '\t') {
            // 遇到空格或制表符,标记不在单词中
            inWord = false;
        } else {
            if (!inWord) {
                // 进入新单词,增加单词数量
                wordCount++;
                inWord = true;
            }
        }
    }

    // 输出统计结果
    printf("输入的字符包含 %d 个单词。\n", wordCount);

    return 0;
}

运行结果:

七天学会C语言-第四天(数组)_字符数组_12


标签:10,七天,name,字符,int,第四天,C语言,数组,printf
From: https://blog.51cto.com/u_15747017/7529019

相关文章

  • C语言 数据类型范围打印
    C语言中的数据类型有不同的范围,这些范围可以通过标准库中的头文件<limits.h>或<float.h>来查看。测试代码:voidlimits_test(void){/*limits.h*//*bit*/printf("%s=\t+%d\n",STR(CHAR_BIT),CHAR_BIT);/*char*/printf("%s=\t%d\n",STR......
  • 素数判定的C语言程序
    ```c#include<stdio.h>intmain(void){  inti,n;  printf("请输入一个数字:");  scanf_s("%d",&n);  for(i=2;i<n;i++)    if(n%i==0)      break;  if(i<n)    printf("%disdivi......
  • c语言之操作符下篇
    前言......
  • 学习C语言的第五天
    分支语句if分支语句,我第二天的文章好像把它放在循环里了。。。和if搭配使用的是else,比如:if(1)  printf("真");else  printf("假"); //这种都是用于两个分支的如果有三个或者三个以上的分支,可使用if,elseif,else写代码的一个小tip当判断一个变量的值的时候,把常数写在后面,变......
  • 基于C语言的串口AT指令发送实例解析
    一知识点1AI指令后面一定要加\n\r2注意AT指令里面待双引号的这种,要使用斜杠隔开。二源码:voidSet_Pdu_Mode(void){u8a=1;if(atKey==1)//允许发送AT指令{atKey=0;UartSendStr("teststart\r\n");//串口1输出开始提示......
  • C语言操作符 上篇
    前言......
  • 创建第一个C语言文件
    创建第一个C语言文件新建=>项目=>空项目创建.c文件我们学的是C语言,c++就不写了调整字体快捷键:Ctlr+鼠标滚轮通过工具调整工具库与main()函数打开一个工具库#include<stdio.h>主函数程序的入口,有且只有一个,必须有一个#include<stdio.h>//打开工具库......
  • C语言学习记录---函数3
    函数的声明与定义头文件(.h)#ifndef_ADD_H_//防止头文件被多次引用,占用空间,引起浪费#define_ADD_H_intAdd(intx,inty);//声明#endif函数定义(源文件.c)intAdd(intx,inty){returnx+y;}执行任务(源文件1.c)#include"add.h"//引用头文件intmain(){inta......
  • 记第一节C语言实验课
    时间2023.9.18上午C语言机房第一次实战实验:  实验过程: 将文档里代码完整粘贴到VS2022,发现主函数main没有设置类型以及(),大括号里没有返回值,pi的数值类型为double类型而非intprintf括号里缺少双引号scanf返回值未处理,数值类型不对,应为&r体积和表面积S,V应为小写......
  • c语言以及高级语言中的float到底是什么以及IEEE754
    对内存里float4字节的好奇初学计算机都要学那个什么二进制十进制什么补码反码那些玩意儿哈,由于最近要做一个单片机往另外一个单片机发数据的需求,直接c语言指针然后float4字节传过去不就得了吗,麻烦就麻烦在这里另一端编程机是个啥鸟lua麻烦的一逼,integer这种我们就不说了哈因为......