13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串
13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串
char str1[30]={“people′s republic of”};
char str2[]={“china”};
printf(“%s”,strcat(str1,str2));
输出:people′s republic of china
说明:1)字符串1必须足够大,以便能容纳连接后的新字符串。
功能:测试字符串长度,函数值为字符串中实际长度,不包括‘\0’。例如:
char str[10]={“china”};
printf(“%d”,strlen(str));
结果为: 5
(7)字符串小写函数
格式:strlwr(字符串)
功能:将字符串中大写字母转换成小写字母。lwr是lowercase(小写)的缩写。
(8)字符串大写成大写字母。upr是uppercase(大写)的缩写。
(9)字符数组程序举例
1)输入一个字符串,将其中的大写字母均变成小写字母。
# include <stdio.h>
# include <string.h>
main()
{
char s[40],c;
4)可以用strcpy函数将字符串中前面若干个字符拷贝到字符数组中去。
例如:strcpy(str1,str2,2);
将str2中前面2个字符拷贝到str1中去,然后再加一个‘\0’。
(5)字符串比较函数
格式:strcmp(字符串1,字符串2)
功能:比较字符串1和字符串2的大小。
说明:
按照ASCII码值大小比较,将两个字符串自左至右逐个字符比较,直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同字符的比较结果为准。
C语言 字符数组与字符串
name1=“Apple”; ×
char name1[5], name2[3]; name1=name2; × strcpy(符号串, name1); ×
28
说明:
①在向name1复制时,字符串结束标志’\0‟一起被复制到name1中。 ②数组2的大小不能大于数组1的大小。 ③可以用strcpy将字符串2中前面若干个字符复制到字符数组1中。 strcpy(str1,str2,2);(参见P137)
符),将终止输入。
11
Program main(){ char word1[40], word2[40], word3[40], word4[40]; printf("Enter text:\n"); scanf("%s %s", word1, word2); scanf("%s", word3); scanf("%s", word4); printf("\n"); printf("word1 = %s\nword2= %s\n", word1, word2); printf("word3 = %s\nword4= %s\n", word3, word4); }
例:char
printf(“%s”,name);
• 功能:以name为起始输出字符,直到遇到’\0‟结束
说明: ① 只需写出数组名,不用带下标。 ② 不会输出’\0‟ ③ 不论有多少个’\0‟,遇到第一个就结束输出。
20
• 输出整个字符串(这是输出字符串特有的方式)
Ⅱ
用puts函数 name[9]; puts(name);
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
《C语言程序设计》教案
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写
注:此页针对具体授课内容填写。
《C语言程序设计课件》第四章-数组
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
C语言字符数组和字符串
#include <stdio.h> int main(){ puts("C Lang\0 is funny!"); return 0; } 运行结果: C Lang 可以发现,'\0' 后面的字符都没有输出。 当把字符串存入字符数组时,也应该把结束符 '\0' 存入数组, 并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用 字符数组的长度来判断字符串的长度了。 C 语言允许用字符串的方式对数组作初始化赋值。例如: char c[]={'c', ' ','p','r','o','g','r','a','m'}; 可写为: char c[]={"C program"}; 或去掉{}写为:
13《C语言程序设计》教案第四章数组—字符数组和字符串
图 6-7 指针引用一维数组元 素 根据以上所述,引用一维数 组元素,可以用两种 方法: ①下标法,如 a[i]或 p[i]形式; ②指针法, 如*(a+i)或* (p+i)。
所以有:(1)p+i 和 a+i 就是 a[i]的地址,或者说,它们指向 a 数组的第 i 个元素(2)*(p+i) 或*(a+i)就是 p+i 或 a+i 所指向的 数组元素,即 a[i]。例如:
#inclu de <stdio .h>
main()
{
char s1[40],s2[40];
int i=0,m; print f(“\n 输入要截取子串的母 串:”);
gets(s2); print f(“\n 输入要截取子串的长 度:”); scanf (“%d”,&m); while (i<m)
执行后 st r1的内容 为:
china \0\0\0\0\0
说明:
1)字符数组必须足够大,以便能容纳被拷贝的字 符串。
2)拷贝时连同字符串后面 的„\0‟一起拷贝到字符数组中 。
3)不能用赋值语句将一个字符串常量或字符数组直接赋给一 个字符数组 。
下面的用法 是错误的:str1={“china ”};str1=str2;而只能用拷 贝函数 st rcpy 处 理。
p=a; /*把数组的起始地址赋给 指针变量 p */ p=&a[0];把 a[0]元素的地址赋给指针变 量p。因为 a[0]是数组第 1 个元素,指 向数组的指针示意图 如图 6-6 所示。
c语言中的字符数组与字符串
c语言中的字符数组与字符串一、字符数组的定义一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。
char str[20];二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。
char country[10][20];country[i]:第i个字符串二.字符数组的初始化字符数组的初始化.1.可以通过为每个数组元素指定初值字符来实现。
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};char str[ ]={"I am happy"}; 可以省略花括号,如下所示char str[ ]="I am happy";char country[10][20]={“china”,”japanese”,……};注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的char str[15];str="I am happy";strcpy(str, "I am happy");不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。
‘a’“a”区别三、字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。
(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。
例如:char str[10];…… for(i=0; i<10; i++){ scanf(\"%c\", &str);fflush(stdin); /*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。
电大C语言程序设计 第4章 数组和字符串
Байду номын сангаас
第4章 数组和字符串 4.4 使用typedef语句定义数组类型 2. 二维数组类型的定义语句 格式: typedef <元素类型关键字> <数组类型名> [<常量表达式1>] [<常 量表达式2>]; 格式举例: (1) typedef int Matrix[5][5]; (2) typedef char nameTable[10][NN]; (3) typedef double DataType[M+1][N+1]; 定义对象: (1) Matrix mx={{0}}; (2) nameTable nt={""}; (3) DataType dd={{0.0}};
第4章 数组和字符串 4.2 一维数组 3. 数组元素访问 数组元素可以象普通变量一样使用。如: (1) int a[5]={0,1,2,3,8}; (2) a[0]=4; (3) a[1]+=a[0]; (4) a[3]=3*a[2]+1; (5) printf("%d",a[a[0]]);
第4章 数组和字符串 4.1 数组的概念 一维数组可以表示和存储和一维相关的数据。 二维数组可以表示和存储和二维相关的数据。 三维数组可以表示和存储和三维相关的数据。 假定一个数列为a1,a2,…,an,可以用一维数组来 存储。一个矩阵可以用二维数组来存储。
第4章 数组和字符串 4.2 一维数组 1. 定义格式 <类型关键字><数组名>[<常量表达式>][={<初 值表>}] <类型关键字>:已存在的一种数据类型。 <数组名>:用户定义的标识符。 <常量表达式>只能含有通过#define命令定义的 符号常量,不能含有通过const语句定义的符号 常量,初值表为用逗号分开的一组表达式。
数组与字符串PPT课件
-15-
二维数组的定义和引用
定义二维数组,描述国际象棋棋盘,棋盘8行8列, 每个方格要么为黑色,要么为白色。
int board[8][8];
访问二维数组中的数据元素,需要使用2个下标
board[0][3]
行和列下标都从0开始,与1维数组相同。 C++中规定,先指定行下标,再指定列下标。
-16-
二维数组的使用
cin>>name只能读取空格前的第一段字符串。
-28-
读取字符串示例
#include <iostream> int main() {
char name[50]; std::cout<<"What is your name: "; std::cin.getline(name, 49); std::cout<<"Your name is: "<<name<<"\n"; return 0; }
二维数组的初始化
情况四:顺序初始化,缺省的初始化为0 int a[3][3]={1,2,4,5,6};
1 a[0][0]
2 a[0][1] a[0]
4 a[0][2]
5 a[1][0]
6 a[1][1] a[1]
0 a[1][2]
0
a[2][0]
0 a[2][1] a[2]
0 a[2][2]
二维数组示例
-7-
篱笆桩错误
访问数组元素时,最大下标应该为数组元素个数减 1,越过此边界,会导致程序的异常行为。
int score[10]; score[10] = 94;
-8-
C语言字符数组和字符串
C语言字符数组和字符串C语言字符数组和字符串C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是语言编写的。
那么大家知道C语言字符数组和字符串是什么呢?下面一起来看看!用来存放字符的数组称为字符数组,例如:char a[10]; //一维字符数组char b[5][10]; //二维字符数组char c[20]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; // 给部分数组元素赋值char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' }; //对全体元素赋值时可以省去长度字符数组实际上是一系列字符的集合,也就是字符串(String)。
在C语言中,没有专门的'字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。
C语言规定,可以将字符串直接赋值给字符数组,例如:char str[30] = {""};char str[30] = ""; //这种形式更加简洁,实际开发中常用数组第0个元素为'c',第1个元素为'.',第2个元素为'b',后面的元素以此类推。
也可以不指定数组长度,例如:char str[] = {""};char str[] = ""; //这种形式更加简洁,实际开发中常用在C语言中,字符串总是以''作为串的结束符。
c语言程序设计4数组字符串
}
}
P89 例3:每年中央电视台都要举办青年歌手大奖 赛。假设有13位评委参与评分工作。计算每位歌手 最终得分的方法是:首先去掉一个最高分和一个最 低分,然后计算剩余11个分数的平均值,所得结果 就是选手的最终得分。希望编写一个程序,帮助工 作人员计算每个歌手的分数。
问题分析
用一维数组存储 13位评委给出的分数
vote[code-1] = vote[code-1]+1; /* 累加票数 */
}
} while (code!=0);
/* 输出选票 */ printf("\n The amount of votes is :"); for (i=0; i<NUM; i++) { printf("%4d", vote[i]); } /* 计算最高得票数量 */ winner = 0; /*记录得票数量最多的候选人下标*/ for (i=1; i<NUM; i++) { if (vote[i]>vote[winner]) winner = i; } /* 输出得票最高的所有候选人 */ printf("\nThe winner :"); for (i=winner; i<NUM; i++) { if (vote[i]==vote[winner]) printf("%3d",i+1); }
1. 数组元素的引用 数组变量名[下标表达式] 注意:下标不能越界, 逐个引用
2. 数组的赋值 利用赋值语句为数组赋值 for (i=0; i<10; i++){ vote[i] = 0; } 调用标准输入函数为数组赋值 for (i=0; i<13; i++) { scanf(“%f”, &score[i]); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
下面的用法是错误的:str1={“china”};str1=str2;而只能用拷贝函数strcpy处理。
用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
如下面是合法的:char a[5],c1,c2;c1=‘A’;c2=‘B’;a[0]=‘c’;a[1]=‘h’;a[2]=‘i’;a[3]=‘n’;a[4]=‘a’;
int i;
for(i=0;i<10;i++)
printf(″%d″,*(a+i));
}
运行结果:
1 2 3 4 5 6 7 8 9 10
方法三:用指针法
main()
{
int a[10]; int i,*p;
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
for(p=a;p<(a+10);p++)
板书:puts(str);与printf(”%s\n”,str)等价或puts(“OK!”);与printf(“%s\n”,”OK!”)或printf(“OK!\n”)等价
(2)字符串输入函数
格式:gets(字符数组)
功能:从终端输入一个字符串(可包含空格)以回车为输入结束标志,将接受到的字符依次赋值给字符数组各个元素,并自动在字符串末尾加结束标记‘\0’。例如:gets(str);
格式:strcpy(字符数组,字符串)
功能:将字符串拷贝到字符数组中去。
例如:
char str1[10],str2[]={“china”};
strcpy(str1,str2); /*或strcpy(str1,“china”); */
执行后str1的内容为:china\0\0\0\0\0
说明:
1)字符数组必须足够大,以便能容纳被拷贝的字符串。
int i=0;
printf(“输入一个字串:”);
gets(s);
strlwr(s);
printf(“输出转换后的字串:”);
puts(s);
}
2)从字符串中取出指定长度的子串。
#include <stdio.h>
main()
{
char s1[40],s2[40];
int i=0,m;
printf(“\n输入要截取子串的母串:”);
例如:
char str1[30]={“people′s republic of”};
char str2[]={“china”};
printf(“%s”,strcat(str1,str2));
输出:people′s republic of china
说明:1)字符串1必须足够大,以便能容纳连接后的新字符串。
2)连接前两个字符串后面都有一个‘\0’,连接时将字符串1后面的‘\0’取消,只在新串的最后保留一个‘\0’。
思考:以下程序是正确的char c; c=’A’+’B’;那么,下面的程序呢?char c[10];c=”A”+”B”;是不正确的,必须用strcat()函数来连接。
(4)字符串拷贝函数strcpy
#include<string.h>
(1)字符串输出函数
格式:puts(字符串)
功能:将一个字符串(以‘\0’为结束标志)输出到终端。输出的字符串中可以包含转义字符。例如: char str[]={“China\nBei jing”};puts(str);
输出:China
Bei jing
在输出时将字符串结束标志‘\0’转换成‘\n’,即输出完字符串后换行。
功能:测试字符串长度,函数值为字符串中实际长度,不包括‘\0’。例如:
char str[10]={“china”};
printf(“%d”,strlen(str));
结果为: 5
(7)字符串小写函数
格式:strlwr(字符串)
功能:将字符串中大写字母转换成小写字母。lwr是lowercase(小写)的缩写。
main()
{
char string[20],str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]); /*输入3个字符串*/
if(strcmp(str[0],str[1])>0)/*用字符串比较函数*/
strcpy(string,str[0]);
else
strcpy(string,str[1]);
str[2]:India\0
可以把str[0],str[1],str[2]看做三个一维字符数组,它们各有20个元素。把它们如同一维数组那样进行处理。可以用gets函数分别读入三个字符串。经过二次比较,就可得到值最大者,把它放在一维字符数组string中。
#include<stdio.h>
#include<string.h>
注意:用puts和gets函数只能输入或输出一个字符串,不能写成:puts(str1,str2);或:gets(str1,str2);说明:字符串可以是字符数组或字符串常量。
而scanf()是以回车、空格或tab键做分隔符的。
例:void main()
{
char s[100];
printf(“请输入一个字符串:”);
printf(″%d″,*p);
}
运行结果:
1 2 3 4 5 6 7 8 9 10
三种方法比较:以上方法(1)与(2)相同。因为系统把a[i]按*(a+i)处理的,需要计算元素的地址,然后再取数据。方法(3)是直接从地址中取数据,不需计算,所以速度快。但方法(1)比较直观。
在数组中使用指针应注意以下几点:(1)可以p++,不能a++,因为数组名a是一个不可以改变值的地址常量。(2)要注意指针变量的当前值。(3)在定义数组时,若用指针变量,可以不指定数组的长度。
(1)数组的指针和指向数组的指针变量
1)指向一维数组的指针
C语言中,数组名代表该数组的首地址,即数组中第一个元素的地址。将一维数组的名字或某个数组元素的地址赋给指针变量,指针变量即指向该一维数组或数组元素。
例如:int a[10],*p;
p=a; /*把数组的起始地址赋给指针变量p */
p=&a[0];把a[0]元素的地址赋给指针变量p。因为a[0]是数组第1个元素,指向数组的指针示意图如图6-6所示。
《C语言程序设计》课程教案表
授课题目
第四章数组(3)——字符数组和字符串
课时安排
2
授课时间
教学目的和要求
1.掌握:几种常用的字符串处理函数
2.熟悉:指针与数组。
教学内容
1.基本内容:(1)几种常用的字符串处理函数(2)指针与数组。
2.重点:几种常用的字符串处理函数
3.难点:指针与数组
讲课进程和时间分配
1.字符串1==字符串2,函数值=0;
2.字符串1>字符串2,函数值>0;
3.字符串1<字符串2,函数值<0。
两个字符串的比较,不能用以下形式str1==str2或str1>str2只能用strcmp(str1,str2)>0或==0或<0来判断
(6)测试字符串长度函数
格式:strlen(字符数组)
if(c==‘m’|| c==‘M’)
a++;
else
b++;
}
printf(“男生数为%d\n女生数为%d\n”,a,b);
}
4)有三个字符串,要求找出其中最大者
分析:有一个二维的字符数组str[3][20],大小为3×20。即有3行20列,每一行可以容纳20个字符。
str[0]:China\0
str[1]:Japan\0
int *p,a[];
p=a;
用指针变量来读取数组元素,需要注意指针的++与--运算,例:若int a[10] ,*p; p=a;则:
1)p++(或p+=1)操作
指针p指向下一元素,即a[1];若再执行*p,则取数组元素a[1]的值。
2)*p++;等价于*(p++)
由于++和*同优先级,自右向左结合,则实现的功能是先得到p所指向的数组元素值(即*p),然后再执行p++操作。
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf(“\n the largest string is: %s\n”,string);
}
3、指针与数组(35分钟)
在C语言中,指针和数组的关系非常密切,引用数组元素既可以通过下标,也可以通过指针来进行。正确地使用数组的指针来处理数组元素,能够产生高质量的目标代码。
设有以下语句:
int a[10],*p;
p=a;
把p置为指向数组a的第1个元素,即p包含了a[0]的地址。*p为a[0]的值。
如果指针p+1,则指向a的下一个元素,如图6-7所示。
图6-7指针引用一维数组元素
根据以上所述,引用一维数组元素,可以用两种方法:
①下标法,如a[i]或p[i]形式;
②指针法,如*(a+i)或*(p+i)。
4)可以用strcpy函数将字符串中前面若干个字符拷贝到字符数组中去。
例如:strcpy(str1,str2,2);