当前位置: 首页 > article >正文

C 语言学习-05【数组】

1、一维数组元素的操作

输入一个数,按原来排序的规律将它插入到一个一排列好的数组中:

#include <stdio.h>

int main() {
    int i, data, a[10] = {2, 3, 6, 9, 11, 12, 14, 17, 19};
    printf("Primitive series: \n");
    for (i = 0; i < 9; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    printf("Please enter the data you want to insert: \n");
    scanf("%d", &data);
    for (i = 8; i >= 0; i--) {
        if (a[i] < data) {
            for (int j = 8; j > i; j--) {
                a[j + 1] = a[j];
            }
            a[i + 1] = data;
            break;
        } else {
            continue;
        }
    }
    printf("The sequence after inserting data: \n");
    for (i = 0; i < 10; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}
  • 运行结果:
    在这里插入图片描述

对某城市五月份每天的气温进行统计,找出最大值及对应的是那一天

#include <stdio.h>

int main() {
    int i, index, max, a[31];
    printf("enter data: \n");
    for (i = 0; i < 31; i++) {
        scanf("%d", &a[i]);
    }
    max = a[0];
    index = 0;
    for (i = 1; i < 31; i++) {
        if (a[i] > max) {
            max = a[i];
            index = i;
        }
    }
    printf("max = %d, index = %d", max, index + 1);
    return 0;
}
  • 运行结果:
    在这里插入图片描述

有 10 个同学的成绩,要求把他们的成绩从高到低排序

#include <stdio.h>

int main() {
    int score[10];
    int i, j, t;
    printf("Please enter the scores of 10 students: \n");
    for (i = 0; i < 10; i++) {
        scanf("%d", &score[i]);
    }
    printf("\n");
    for (j = 0; j < 9; j++) {
        for (i = 0; i < 9 - j; i++) {
            if (score[i] < score[i + 1]) {
                t = score[i];
                score[i] = score[i + 1];
                score[i + 1] = t;
            }
        }
    }
    printf("Well-ranked grades: \n");
    for (i = 0; i < 10; i++) {
        printf("%d ", score[i]);
    }
    printf("\n");
}
  • 运行结果:
    在这里插入图片描述

2、一维数组应用举例

统计获选人的选票:

#include <stdio.h>

void main () {
    int x, n[4] = {0};
    printf("Please enter the candidate number: ");
    scanf("%d", &x);
    while (x) {
        n[x]++;
        printf("Please enter the candidate number: ");
        scanf("%d", &x);
    }
    printf("\nStatistical result: \n");
    for (x = 1; x <= 3; x++) {
        printf("The number %d candidate has %d votes\n", x, n[x]);
    }
}
  • 运行结果:
    在这里插入图片描述

有一个大小为 50 的整数数组,里面的数字是随机生成的,均介于 1 到 99 之间,但是数字有重复,需要去除数组中的数字进行存储

#include <stdio.h>
#include <stdlib.h> // srand(), rand()
#include <time.h> // time()

int main() {
    int a[50], b[50], i, j, temp, t, count;
    srand((unsigned int)time(NULL)); // 设置当前时间为种子
    for (i = 0; i < 50; i++) {
        a[i] = rand() % 100 + 1;
    }
    printf("Randomly generated array: \n");
    for (i = 0; i < 50; i++) {
        printf("%4d", a[i]);
        if ((i + 1) % 10 == 0) {
            printf("\n");
        }
    }
    for (i = 0; i < 49; i++) {
        for (j = 0; j < 50; j++) {
            if (a[i] > a[j]) {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    printf("The array is sorted from smallest to largest: \n");
    for (i = 0; i < 50; i++) {
        printf("%4d", a[i]);
        if ((i + 1) % 10 == 0) {
            printf("\n");
        }
    }
    t = 0;
    for (i = 0; i < 50;) {
        b[t++] = a[i];
        for (j = 1;;j++) {
            if (a[i] == a[i + j]) {
                continue;
            }
            if (a[i] != a[i + j]) {
                break;
            }
        }
        i += j;
    }
    count = t;
    printf("The array after deduplication contains %d data\n", count);
    for (i = 0; i < count; i++) {
        printf("%4d", b[i]);
        if ((i + 1) % 10 == 0) {
            printf("\n");
        }
    }
    return 0;
}
  • 运行结果:
    在这里插入图片描述

3、字符数组的初始化

讲一句话中的每个英文单词的瘦子米转换成大写:

#include <stdio.h>

int main() {
    char str[10] = {'g', 'o', 'o', 'd', ' ', 'l', 'u', 'c', 'k', '!'};
    int i, t = 0;
    for (i = 0; i < 10; i++) {
        printf("%c", str[i]);
    }
    printf("\n");
    for (i = 0; i < 10; i++) {
        if (t == 0) {
            if (str[i] == ' ') {
                t = 0;
                continue;
            } else {
                str[i] -= 32;
                t = 1;
            }
        } else {
            if (str[i] == ' ') {
                t = 0;
                continue;
            }
        }
    }
    for (i = 0; i < 10; i++) {
        printf("%c", str[i]);
    }
    return 0;
}
  • 运行结果
    在这里插入图片描述

4、字符串和字符串结束标志

输出字符串的有效长度:

#include <stdio.h>

int main() {
    char str[] = "I am a student.";
    int i, count = 0;
    for (i = 0; str[i] != '\0'; i++) {
        putchar(str[i]);
        count++;
    }
    printf("\nThe valid length of the string is %d", count);
    return 0;
}
  • 运行结果:
    在这里插入图片描述

5、字符串输入函数

输入一段话,同级其中单词的个数

#include <stdio.h>

int main() {
    char str[100];
    int i = 0, count = 0, flag = 0;
    puts("Please enter a paragraph: ");
    gets(str);
    while (str[i] != '\0') {
        if (flag == 0) {
            if (str[i] == ' ') {
                flag = 0;
            } else {
                count++;
                flag = 1;
            }
        } else {
            if (str[i] == ' ') {
                flag = 0;
            }
        }
        i++;
    }
    printf("There are %d English words in this passage\n", count);
    return 0;
}
  • 运行结果:
    在这里插入图片描述

6、字符串操作方法

原型功能
int strlen(char *d)返回字符串 d 的长度,不包括终止符 NULL
char *strcat(char *d,char *s)把字符串 s 接到字符串 d 后面,返回字符串 d
char *strncat(char *d,char *s,int n)把字符串 s 中至多 n 个字符接到字符串 d 后面;
如果 s 小于 n 个字符,用 ‘\0’ 补上,返回字符串 d
char *strcpy(char *d,char *s)复制字符串 s 到字符串 d,返回字符串 d
char *strncpy(char *d,char *s,int n)复制字符串 s 中至多 n 个字符到字符串 d;
如果 s 小于 n 个字符,用 ’\0’ 补上,返回字符串 d
void *memcpy(void *d,void *s,int n)从 s 复制 n 个字符到 d,返回字符串 d
void *memmove(void *d,void *s,int n)和 memcpy 相同,即使 d 和 s 部分相同也运行
int strcmp(char *d,char *s)比较字符串 d 和字符串 s。
如果 d < s,返回 -1;
如果 d > s,返回 1;
如果 d == s,返回 0.
int strncmp(char *d,char *s,int n)比较字符串 d 中至多 n 个字符和字符串 s。
如果 d < s,返回 -1;
如果 d > s,返回 1;
如果 d == s,返回 0.
int memcmp(void *d,void *s,int n)比较字符串 d 的前 n 个字符与 s,和 strcmp 返回值相同
char *strchr(char *d,char c)返回一个指向字符串 d 中字符 c 第 1 次出现的指针;
或者如果没有找到 c,则返回指向 NULL 的指针
char *strstr(char *d,char *s)返回一个指向字符串 d 中字符串 s 第 1 次出现的指针;
或者如果没有找到 s,则返回指向 NULL 的指针
void *memchr(void *d,char c,int n)返回一个指向被 d 所指向的 n 个字符中 c 第 1 次出现的指针;
或者如果没有找到 c,则返回指向 NULL 的指针
void *memset(void *d,char c,int n)使用 n 个字符 c 填充 void* 类型变量 d
void *strupr(char *p)字符串中字母转换成大写字母
void *strlwr(char *p)字符串中字母转换成小写字母

7、字符数组应用

输入 5 个同学的姓名,按字典顺序从小到大排序

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

int main() {
    char stu[5][20];
    char name[20];
    int i, j, t;
    puts("Please enter student name: ");
    for (i = 0; i < 5; i++) {
        gets(stu[i]);
    }
    puts("Lexicographic ordering: ");
    for (i = 1; i < 5; i++) {
        for (j = 0; j < 5 - i; j++) {
            if (strcmp(stu[j], stu[j + 1]) > 0) {
                strcpy(name, stu[j]);
                strcpy(stu[j], stu[j + 1]);
                strcpy(stu[j + 1], name);
            }
        }
    }
    for (i = 0; i < 5; i++) {
        puts(stu[i]);
    }
    return 0;
}
  • 运行结果:
    在这里插入图片描述

http://www.kler.cn/a/385931.html

相关文章:

  • 千益畅行,共享旅游卡市场乱象解析与未来展望
  • 编译原理(手绘)
  • NPOI 实现Excel模板导出
  • 「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024
  • STM32芯片EXIT外部中断的配置与原理
  • Flutter实现绝对定位学习
  • multiprocessing
  • [MySQL]索引
  • RK3568平台开发系列讲解(字符设备驱动篇)创建设备节点实验
  • ENAS和DARTs的比较
  • 1、了解家庭网络历史
  • InfluxDB性能优化指南
  • 用 Collections.synchronizedSet 创建线程安全的 HashSet
  • 健尔康在A股上市:市值84亿元,陈国平、陈麒宇父女成大赢家
  • 机器学习之集成学习算法
  • Mac M1下运行端到端语音模型Mini-Omni
  • 虚拟化数据恢复—XenServer虚拟机中SQL Server数据库数据恢复案例
  • STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
  • GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数
  • 蓝桥杯 Python组-神奇闹钟(datetime库)
  • 深入了解 curl:使用和功能详解
  • Android OpenGL ES详解——纹理过滤GL_NEAREST和GL_LINEAR的区别
  • 数据分析-41-时间序列预测之机器学习方法XGBoost
  • Spark Plan 之 SQLMetric
  • 电影插曲《牧羊曲》
  • 推荐一款面向增材制造的高效设计平台:nTopology