第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 52页
| 68人阅读
| 0人下载
精品

内容正文:

6.3节:字符数组 C语言程序设计 电子工业出版社 掌握字符数组的定义、初始化、输入输出及常用函数 运用字符数组解决实际问题,阅读分析程序 培养逻辑思维与规范的编程习惯 知识目标 能力目标 素养目标 01 01 01 学习目标 目录 Part 01 教学导入 Part 02 知识讲授 Part 03 师生互动 Part 04 课堂练习 Part 05 课堂小结 教学导入:从问题到思考 我们知道单个字符变量无法存储完整的字符串,那么如何高效地存储和处理像'Hello, World!'这样的字符序列呢?答案就是——字符数组。 教学导入 代码示例 charstr[] ="Hello"; 概念解析 这就是一个字符数组,它可以用来存储字符串。 在 C 语言中,字符串本质上是由一系列字符组成的数组,以'\0'作为结束标志。 关键点:字符数组是处理文本数据的基础,理解它对于掌握字符串操作至关重要。 教学导入 字符串 "Hello" 在内存中是如何存储的呢?我们通过下图来直观理解: 💡 关键点:每个字符连续存储,末尾自动添加结束标志 '\0' 知识讲授 字符数组 字符数组的定义、引用及输入输出 字符串处理函数及字符数组应用实例 第一部分 字符数组的定义、引用及输入输出 知识讲授 知识讲授:字符数组的定义 一维字符数组 定义格式:char 数组名[常量表达式]; chara[5];// 定义一个长度为5的字符数组a 二维字符数组 定义格式:char 数组名[常量表达式1][常量表达式2]; chara[2][3];// 定义一个2行3列的字符数组a 核心提示:字符数组的定义与普通数组类似,但元素类型固定为char。一维数组用于存储单个字符串,二维数组可看作字符串的数组。 知识讲授:字符数组的初始化 方式一:逐个元素初始化 char a[10] = {'H', 'e', 'l', 'l', 'o'}; 逐个赋值时,未赋值的元素系统会自动补为'\0'。 方式二:用字符串常量初始化 char a[] = "Hello"; 使用双引号时,系统自动在末尾添加'\0',数组长度为6。 关键点总结: '\0' 是字符串的结束标志,占用一个字节的存储空间。使用第二种方式(字符串常量)比第一种更简洁,也是编程中最常用的方式。 知识讲授:字符数组元素的引用 引用格式 通过下标访问单个字符,下标从 0 开始: 数组名[下标]; 代码示例 char str[] = "Hello"; printf("%c", str[0]);// 输出 'H' printf("%c", str[1]);// 输出 'e' 内存结构可视化 'H' str[0] 'e' str[1] 'l' str[2] 'l' str[3] 'o' str[4] 字符数组在内存中是连续存储的。每个字符占用一个字节。通过下标访问时,实际上是计算相对于数组起始地址的偏移量。 知识讲授:字符串和字符串结束标志 核心作用 标识字符串的结束位置,告诉程序在哪里停止读取字符。 存储特性 占用1个字节存储空间,但不计入字符串的实际长度。 自动添加 使用双引号 "" 定义字符串常量时,系统会自动在末尾追加。 内存存储示意图:以 "Hello" 为例 注意:如果没有 '\0',程序可能会读取到内存中的随机垃圾值 知识讲授:字符数组的输入/输出(单个字符) 输入单个字符 char c; // 定义字符变量 scanf("%c", &c); // 使用 %c 格式符输入 输出单个字符 // 假设 c 已被赋值 printf("%c", c); // 使用 %c 格式符输出 应用场景:结合循环处理字符数组 通过循环结构(如 for 循环),利用上述单个字符的输入输出方法,可以遍历整个字符数组,实现逐个读写。 for (int i = 0; i < len; i++) { scanf("%c", &arr[i]); } // 逐个输入数组元素 知识讲授:字符数组的输入/输出(字符串) 输入字符串 charstr[10]; scanf("%s", str); // 注意:str前不需要加 & 符号 输出字符串 printf("%s", str); // 直接输出整个字符串,直到遇到 '\0' ⚠️ 重要注意事项 函数scanf("%s")在读取字符串时,遇到空格、制表符或回车键会自动停止输入。因此,它无法读取包含空格的字符串。 背诵记忆 字符数组的定义格式 格式:char 数组名[长度]; 例如:char str[10]; 初始化方式 1. 逐个赋值:char s[3] = {'a','b','c'}; 2. 字符串赋值:char s[] = "abc"; 字符串结束标志 标志:'\0' (ASCII码值为0) 特点:使用字符串赋值时由系统自动添加。 输入输出方法 单个字符:使用格式符%c 整个字符串:使用格式符%s Tip:使用字符串初始化时,数组长度需预留一位给结束标志'\0'。 课堂问答 问题 1:字符数组和普通数组有什么区别? 字符数组是数组的一种特殊形式,其元素类型为 char,专门用于存储字符数据。普通数组可以存储 int、float 等多种类型的数据。 问题 2:为什么需要字符串结束标志 '\0'? '\0' 用于标识字符串的结束,使得程序能够正确识别字符串的长度和范围,避免访问数组越界。 例题分析(一) 程序文本【6.8】输出一个字符串 #include<stdio.h> intmain() { char c[10]={'I',' ','a','m',' ','h','a','p','p','y'}; //定义并初始化字符数组 c[10] int i; for(i=0; i<10; i++)//使用 for 循环遍历数组索引 0-9 printf("%c", c[i]);//通过 printf("%c", c[i]) 逐个输出字符 printf(" "); } /*字符数组的本质是一系列连续的字符存储单元。本程序演示了如何不依赖字符串结束符 '\0' 而仅通过下标控制来输出字符串*/ 例题分析(一) 例题分析(二) 程序文本【6.9】由键盘输入字符串“china”并输出。 #include <stdio.h> main() { int i; char c[5]; //定义字符数组,内含5个元素 for(i=0; i<5; i++) scanf("%c", &c[i]); /*循环逐个读取用户输入的字符并存储到字符数组 c 中*/ for(i=0; i<5; i++) printf("%c", c[i]); /*循环遍历数组,将存储的字符逐个输出到控制台*/ printf(" "); } 例题分析(二) 课堂练习 题目要求 任务描述: 输入一个字符串,输出其长度。 核心限制: 禁止直接使用标准库中的strlen()函数。 考察目标: “数组遍历”与“循环计数”。 提示:可以通过scanf或gets读取字符串,利用while循环检查字符串结束符'\0'来计算长度。 假 输出长度:len 假 len++; str[len] !='\0' 结束 输入:数组元素 char str[100]; int len=0; 开始 课堂练习 程序文本 #include <stdio.h> main() { char str[100]; int len = 0; scanf("%s", str); while(str[len] !='\0') len++; printf("字符串长度为:%d ", len); } 课堂练习 第二部分 知识讲授 字符串处理函数及字符数组应用实例 知识讲授:puts()和gets() 知识讲授:字符串输出函数——puts( ) 函数格式:puts(字符数组名); 核心功能: 将指定字符数组中的字符串输出到显示器,并自动在末尾添加换行符。 代码示例: char str[] = "Hello";// 定义字符串 puts(str);// 输出 "Hello" 并自动换行 知识讲授:字符串输入函数——gets( ) 函数格式:gets(字符数组名); 功能说明:从键盘输入一个字符串到字符数组中,直到遇到回车为止。 代码示例: char str[100]; gets(str); // 可以输入包含空格的字符串,如 "Hello World" 知识讲授:字符串连接函数——strcat( ) 知识讲授:字符串连接函数——strcat( ) 函数格式:strcat(字符数组名1, 字符数组名2); 核心功能:将字符数组2的字符串追加到字符数组1末尾,并覆盖结束符。 重要注意事项:在连接时,系统会自动删除字符串s1后的‘\0’,然后将字符串s2的内容连接起来,并在连接后的字符串末尾添加‘\0’标志。 代码示例 char s1[12]=“thank”; s2[ ]=“you”; strcat(s1,s2); puts(str1); s1 t h a n k \0 \0 \0 \0 \0 \0 \0 s2 y o u \0 \0 \0 \0 strcat(s1,s2) t h a n k y o u \0 \0 \0 \0 知识讲授:字符串复制函数——strcpy( ) 知识讲授:字符串复制函数——strcpy( ) 代码示例 char s1[12]="thank you! ", char s2[ ]="hello!"; strcpy (s1, s2 ); puts(str1); s1 t h a n k □ y o u ! \0 \0 s2 h e l l o ! \0 strcpy(s1,s2) h e l l o ! \0 o u ! \0 \0 函数格式 strcpy(字符数组名1, 字符数组名2); 函数功能 将字符数组2中的字符串(含'\0')完整复制到字符数组1中。 注意:目标字符数组(数组1)必须定义足够的长度,以容纳源字符串,防止内存溢出。 知识讲授:字符串比较函数——strcmp( ) 知识讲授:字符串比较函数——strcmp( ) 函数格式 strcmp(字符数组名1, 字符数组名2); 功能与返回值规则 按ASCII码顺序逐字符比较,直到出现不同字符或结束。 返回0:字符串1 等于 字符串2 返回正数:字符串1 大于 字符串2 返回负数:字符串1 小于 字符串2 程序文本【6.15】 #include <stdio.h> #include<string.h> main() { int k; char st1[15],st2[]="c Language"; printf("input a string: "); gets(st1); k=strcmp(st1,st2); if(k==0) printf("st1=st2 "); if(k>0) printf("st1>st2 "); if(k<0) printf("st1<st2 "); } 知识讲授:字符串比较函数——strcmp( ) 知识讲授:字符串长度函数——strlen( ) 知识讲授:字符串长度函数——strlen( ) 程序文本【6.16】 #include <stdio.h> #include<string.h> main() { int k; static char st[]="c language"; k=strlen(st); printf("The length of the string is %d ",k); } 函数格式 strlen(字符数组名); 核心功能 返回字符串的实际长度,不包括结束标志 '\0'。 代码示例 char str[] = "Hello";// 实际存储: 'H','e','l','l','o','\0' int len = strlen(str);// len = 5,仅统计有效字符 知识讲授:字符串长度函数——strlen( ) 例题分析(一) 题目要求: 由键盘输入一个字符串,复制到另一字符数组后显示出来。 核心知识点分析 通过while循环逐个字符复制,最后手动添加'\0'结束标志,模拟了标准库函数strcpy的底层实现逻辑。 例题分析(一) 程序文本【6.17】由键盘输入一个字符串,复制到另一字符数组后显示出来 #include<stdio.h> #include<string.h> main() { char str1[30], str2[30];// 定义两个字符数组 int i;// 初始化循环变量 printf("Input a string: "); scanf("%s", str1); i=0; while(str1[i]!='\0') { str2[i] = str1[i]; i++; } // 循环复制字符 str2[i] ='\0'; printf("%s ", str2); } 例题分析(一) 例题分析(二) 题目要求:由键盘输入一个字符串,要求从该字符串中删去一个指定的字符。 核心思路分析: 1. 双数组处理:利用两个字符数组,一个存储原始输入,一个存储处理后的结果。 2. 遍历与筛选:通过循环遍历原字符串,判断当前字符是否为目标删除字符。若不是,则将其复制到新数组中。 3. 注意事项:操作完成后,务必在新字符串末尾手动添加字符串结束符 `\0`,否则可能导致输出乱码。 例题分析(二) 程序文本【6.18】由键盘输入一个字符串,要求从该字符串中删去一个字符。 #include<stdio.h> #include<string.h> main() { char str1[50],str2[50]; int i=0;int k=0;char ch; gets(str1); printf(" delete?"); scanf("%c",&ch); for(i=0;str1[i]!='\0';i++) { if(str1[i]!=ch) str2[i-k]=str1[i]; else k=k+1; } str2[i-k]='\0'; printf(" %s ",str2); } 例题分析(二) 背诵记忆 puts() 输出字符串并换行 gets() 输入字符串(注意安全) strcat() 连接两个字符串 strcpy() 复制字符串 strcmp() 比较两个字符串 strlen() 获取字符串长度 提示:熟练掌握这些核心函数是编写高效 C 语言程序的基础,请务必结合实际案例多加练习。 课堂问答 问题 1:strcpy 和 strcat 函数有什么区别? 答案:strcpy 是将一个字符串复制到另一个字符串中,会覆盖目标字符串的原有内容;strcat 是将一个字符串连接到另一个字符串的末尾,目标字符串的原有内容会保留。 问题 2:如何比较两个字符串是否相等? 答案:使用 strcmp 函数,如果返回值为 0,则两个字符串相等。 课堂练习 题目要求: 输入两个字符串,比较它们的大小并输出结果(提示:可使用 strcmp 函数)。 课堂练习 程序文本 #include<stdio.h> #include<string.h> main() { char str1[100], str2[100]; int result; printf("请输入第一个字符串:"); scanf("%s", str1); printf("请输入第二个字符串:"); scanf("%s", str2); result = strcmp(str1, str2); if(result= =0) printf("两个字符串相等。 "); else if(result>0) printf("第一个字符串更大。 "); else printf("第二个字符串更大。 "); } 课堂练习 课堂小结 字符数组基础 掌握字符数组的定义、初始化方法,以及数组元素的引用、输入和输出操作。 字符串结束标志 '\0' 理解 '\0'(空字符)在C语言字符串中的核心作用,它是系统判断字符串结束的依据。 常用字符串处理函数 熟练使用 puts, gets, strcat, strcpy, strcmp, strlen 等标准库函数进行操作。 字符数组综合应用 能够结合循环、判断结构,运用字符数组和处理函数解决简单的编程实际问题。 核心目标:掌握基础,理解原理,灵活运用函数解决实际问题 课堂小结 课后任务 作业 1:字符统计 编写程序,统计一个字符串中某个指定字符出现的次数。 作业 2:字符串拼接 编写程序,将两个字符串拼接起来(要求不使用 strcat 函数)。 作业 3:回文字符串判断 编写程序,判断一个字符串是否为回文字符串(即正读和反读都一样)。 谢谢观看 THANKS $

资源预览图

第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
1
第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
2
第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
3
第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
4
第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
5
第6章 第3节:字符数组(课件)-《C语言程序设计》(电子工业出版社)上好课
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。