第7章 字符数组与字符串

合集下载

字符数组和字符串

字符数组和字符串
printf(“%c”,diamond[i][j]); printf(“\n”); }
* ** ** ** *
}
main() a
{ char a[5]; int i=0;
b
while(i<=4)
c
{ scanf(“%c”,&a[i]);
c
i
{ char a[5]; int i=0
跳格分隔。因此不要试图利用scanf函数从键盘输入
How are you? 赋给一个字符串。
1.5 字符数组处理函数
1.字符串输入gets()函数 使用形式: gets(字符数组) 功能:从终端输入一个字符串(直到回车键) 到字符数组中。
例如:char str[20]; gets(str); 若从键盘输入:Hello World! 则将字符串“Hello World!”送到字符数组str中。
输出:10 char str[80]={“ab\n\0y\012/\\\””} ; printf(“%d”,strlen(str)) ;
输出:3
4.字符串连接strcat()函数
使用形式: strcat(字符数组1,字符串2)
如:“china” 占内存6个字节,但字符串长度 是5 在C语言中用字符数组来处理字符串,每个 元素存放一个字符型数据。
字符型数组可用一般数组的初始化方式初始化 外,还可以使用字符串常量初始化:
如:char message[]={“Hello”}; √ 或 char message[]=“Hello”; √
说明:字符数组本身并不要求它的最后一个元素一
定是‘\0’,例如:char ch[2]={‘A’, ‘B’};是合法的。 当定义字符数组用字符串常量赋初值时,最后有一 个元素其值为‘\0’。为了使处理方法一致,在字符 数组中也常常人为地加上一个值为‘\0’的元素。

C语言开发基础教程(Dev-C++) 第7章 字符串

C语言开发基础教程(Dev-C++) 第7章 字符串


7.1.2 字符串
小提示:'\0'字符 字符串其实就是一个以空字符'\0'结尾的字符数组,在定义存储字符 串的数组时,要手动在数组末尾加上'\0',或者直接使用字符串对数 组进行初始化。

7.1.2 字符串
字符数组的输出: 字符数组可以通过%s格式化输出,直接输 出数组名。 char char_array[6] = {"hello"}; printf("%s", char_array); //结果为hello

7.2.1 常见的输入函数
2、getchar()函数 getchar()函数用于从标准输入中读取一个字符,其函数声明如下: int getchar(void); getchar()没有参数,可直接使用,其返回值为读取到的字符。

7.2.1 常见的输入函数
3、gets()函数 gets()函数用于读取一个字符串,其函数声明如下: char *gets(char *str); gets()函数读取换行符之前的所有字符(不包括换行符本身),并在字 符串的末尾添加一个空字符‘\0’用来标记字符串的结束,读取到的字 符串会以指针形式返回。

第7章 字符串
·字符数组与字符串 · 字符串指针 · 字符串的输入输出
· 字符串操作函数 · 数字与字符串转换 · 阶段案例

7.1 字符数组和字符串
字符数组是由字符类型的元素所组成 的数组,字符串就存储在字符数组中, 在访问字符数组时,可使用下标法读 取指定位置的字符,也可使用%s格式 将字符数组中的元素以字符串的形式 全部输出。

7.3.1 字符串比较函数

第七章 数组

第七章  数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。

第七章字符数组与指针练习题参考答案(2)

第七章字符数组与指针练习题参考答案(2)

第七章字符数组与字符串【题7.29】下面是对s的初始化,其中不正确的是。

A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”;【题7.30】下面程序段的运行结果是。

char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};printf(“%s”,c);A)‘a’‘b’B)abC)ab c【题7.31】对两个数组a和b进行如下初始化char a[]=“ABCDEF”;char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’};则以下叙述正确的是。

A)a与b数组完全相同B)a与b长度相同C)a和b中都存放字符串D)a数组比b数组长度长提示:‘\0’是字符串结束的标志【题7.32】有两个字符数组a、b,则以下正确的输入格式是。

A)gets(a,b); B)scanf(“%s %s”,a,b);C)scanf(“%s %s”,&a,&b); D)gets(“a”),get(“b”);【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。

A)puts(a,b); B)printf(“%s %s”,a[],b[]);C)putchar(a,b); D)puts(a),puts(b);【题7.34】下面程序段的运行结果是。

char a[7]=“abcdef”;char b[4]=“ABC”;strcpy(a,b);printf(“%c”,a[5]);A)空格B)\0 C)e D)f提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’,a[4]=‘e’,a[5 ]=‘f’,a[6]=‘\0’,【题7.35】有下面的程序段char a[3],b[]=“China”;a=b;printf(“%s”,a);则。

A)运行后将输出China B)运行后将输出ChC)运行后将输出Chi D)编译出错提示:数组名是常量【题7.36】下面程序段的运行结果是。

C语言程序设计数组

C语言程序设计数组
第七章 数组
课程名称:C语言程序设计 课型与教法:讲授,经过程序扩展,进行对比学习 课时:2课时 讲课题目:
第7章 数组 基本教材:C语言程序设计(高等教育出版社)廖雷主编 教学目旳与要求:经过本章旳学习使学生了解数组旳意义和 基本概念,掌握数组旳定义和元素旳引用,掌握数组在实际 问题处理中旳应用。 教学难点:二维数组概念旳了解 教学要点:数组旳定义和元素旳引用、数据旳排序
例 int data[5a][;1]=7p8r.0in; tf(“%d”,a);
()
data[5]必=1p须0ri;nt/f/f(没o“r%p有(jrl=fi错n\n0t”;f误(j,<a“提[%120]醒d);;\j,t+使”,+a用)[j]时);要注意 () 5
第七章 数组
一维数组
一维数组旳初始化
int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--) if(a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; }
printf(“\n”); for(i=0;i<N;i++)
❖数组元素旳存储顺序
原二因维:数内组存例:是按i一nt行维a[序3旳]优[4]先; float b[2][5];
元素个数=行数*列数
例:int a[3]i[n2t]a[3,4];
a[0][0] a[0][1]
0 () a[0][0]
1
a[0][1]
2
a[1][0]
a[1][0] a[1][1] a[2][0] a[2][1]
一维数组旳引用

大学课件C语言数组

大学课件C语言数组
第3趟排序后成为:37, 48, 12, 26, 49, 64, 75, 97 第4趟排序后成为:37, 12, 26, 48, 49, 64, 75, 97 第5趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);

C语言开发基础教程(Dev-C++) 第7章 字符串

C语言开发基础教程(Dev-C++) 第7章 字符串


7.1.1 字符数组
字符数组定义方式与整型数组类似: char 数组名[数组大小]; //一维字符数组 例如,定义字符数组: char ch[6]; char c[5]={'h','e','l','l','o'};
c[0] c[1] c[2] c[3] c[4]
he
l
l
o
访问字符数组中的元素 c[0]; //第1个元素 c[1]; //第2个元素 c[2]; //第3个元素

7.1.2 字符串
获取字符串的长度: C语言中的strlen()函数获取字符串的长度: unsigned int strlen(char *s); 示例代码如下: strlen("hello"); //获取字符串hello的长度 strlen(char_array); //获取字符数组 char_array中存储的字符串的长度
‘‘aa’’ ‘‘bb’’ ‘‘cc’’ ‘‘dd’’ ‘‘ee’’ ‘‘\\00’’

7.1.2 字符串
字符串由字符数组进行存储,那么可以直接使用一个字符串常量来为 一个字符数组赋值。 char char_array[6] = {"hello"}; char char_array[] = {"hello"}; 上述两个字符数组的大小都是6,这是因为字符串末尾有一个’\0’ 结束符。它们等同于下面数组的定义: char char_array[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

c语言字符串数组和字符串字面量

c语言字符串数组和字符串字面量

c语言字符串数组和字符串字面量C语言字符串数组和字符串字面量在C语言中,字符串是一种常见的数据类型,用于存储和处理文本信息。

字符串数组和字符串字面量是C语言中用来表示和操作字符串的两种主要方式。

本文将详细介绍这两种方式的特点、用法以及注意事项。

1. 字符串数组字符串数组是一种由字符组成的数组,用于存储和操作字符串。

其定义方式如下:```cchar str[20] = "Hello, world!";```其中,str是一个字符数组,长度为20,可以存储19个字符和一个结尾的空字符'\0'。

由于C语言中没有提供专门的字符串类型,所以通常使用字符数组来表示字符串。

字符串数组可以进行各种操作,比如拷贝、连接、比较等。

下面是一些常见的操作示例:- 拷贝字符串:使用strcpy函数可以将一个字符串拷贝到另一个字符串数组中。

```cchar dest[20];char src[10] = "Hello";strcpy(dest, src);```- 连接字符串:使用strcat函数可以将一个字符串连接到另一个字符串数组的末尾。

```cchar str1[20] = "Hello";char str2[10] = ", world!";strcat(str1, str2);```- 比较字符串:使用strcmp函数可以比较两个字符串的大小关系。

```cchar str1[10] = "Hello";char str2[10] = "World";int result = strcmp(str1, str2);```除了以上操作外,还可以使用字符串数组进行遍历、截取等操作。

需要注意的是,对字符串数组进行操作时,需要保证目标数组有足够的空间,以免发生数组越界的错误。

2. 字符串字面量字符串字面量是一种直接在代码中写出的字符串,也称为字符串常量。

【字符串】字符数组及其定义和初始化详解

【字符串】字符数组及其定义和初始化详解

【字符串】字符数组及其定义和初始化详解字符串的存储⽅式有字符数组和字符指针。

因为字符串是由多个字符组成的序列,所以要想存储⼀个字符串,可以先把它拆成⼀个个字符,然后分别对这些字符进⾏存储,即通过字符数组存储。

字符数组是⼀个数组,且是存储字符的数组,该数组中⼀个元素存放字符串的⼀个字符。

字符数组的定义因为字符数组⾸先是⼀个数组,所以前⾯讲的数组内容通通都适⽤。

其次它是存放字符的数组,即数组的类型是char型。

⽐如:1char name[10];表⽰定义了10字节的连续内存空间。

1)如果字符串的长度⼤于10,那么就存在语法错误。

这⾥需要注意的是,这⾥指的“字符串的长度”包括最后的‘\0’。

也就是说,虽然系统会⾃动在字符串的结尾加‘\0’,但它不会⾃动为‘\0’开辟内存空间。

所以在定义数组长度的时候⼀定要考虑‘\0’。

2)如果字符串的长度⼩于数组的长度,则只将字符串中的字符赋给数组中前⾯的元素,剩下的内存空间系统会⾃动⽤‘\0’填充。

字符数组的初始化字符数组的初始化与数组的初始化⼀样,要么定义时初始化,要么定义后初始化,下⾯写⼀个程序来说明这个问题:1 #include <stdio.h>2 #include <stdlib.h>3int main(void)4 {5char a[10];6 a[0] = 'i'; a[1] = ''; a[2] = 'l'; a[3] = 'o'; a[4] = 'v';7//空格字符的单引号内⼀定要敲空格8 a[5] = 'e'; a[6] = ''; a[7] = 'y'; a[8] = 'o'; a[9] = 'u';9//空格字符的单引号内⼀定要敲空格10 a[10] = '\0';11char b[10];12 b[0] = 'i'; b[1] = ''; b[2] = 'm'; b[3] = 'i'; b[4] = 's';13//空格字符的单引号内⼀定要敲空格14 b[5] = 's'; b[6] = ''; b[7] = 'y'; b[8] = 'o'; b[9] = 'u';15//空格字符的单引号内⼀定要敲空格16char c[] = "i believe you";17char d[] = {'i', '', 'l', 'i', 'k', 'e', '', 'y', 'o', 'u','\0'};18//空格字符的单引号内⼀定要敲空格19char e[] = {'H', 'e', 'l', 'l', 'o', '', 'W', 'o', 'r', 'l', 'd'};20//空格字符的单引号内⼀定要敲空格21char f[] = "上课睡觉觉, 下课打闹闹, 考试死翘翘";22char g[10] = "";23 printf("a = %s\n", a); //输出字符串⽤%s, 输出参数必须写数组名24 printf("b = %s\n", b);25 printf("c = %s\n", c);26 printf("d = %s\n", d);27 printf("e = %s\n", e);28 printf("f = %s\n", f);29 printf("g = %s\n", g);30return0;31 }⾸先要说明的是,这个程序只有在.cpp⽂件中才能运⾏,在.c⽂件中会有很多错误。

C语言程序设计 重庆大学课件 第07章 字符串及其应用

C语言程序设计 重庆大学课件 第07章 字符串及其应用

7.1.1 字符串表示方法
a b c d \0
a b c d \0 sPtr a) 指针变量指向字符串常量 a b c d \0 1 2 3 4 \0
sPtr
b) 指针变量改变原指向指向另一字符串
图7.1 指针变量与字符串数据对象的关系示ห้องสมุดไป่ตู้图
7.1.1 字符串表示方法

字符数组的初始化 使用单个字符常量 字符数组与字符指针的区别

标准字符串连接函数strcat
函数原型:
char *strcat(char *strDestination, char*strSource);
函数调用:strcat(str1,str2);
功能:将字符串str2连接到字符串str1的后面生成新 的字符串str1,函数返回字符串str1。字符数组长度应 足够大(大于strlen(str1)+strlen(str2))。
7.2.2 字符串的复制
t t s1 指针方式实现字符串拷贝 char *strcopy(char *s,char *t) a 保存s的首地址到p { char *p=s; while((*s++=*t++)!='\0') ; *t的’\0‟先赋给*s a return p; 再判断是否等于’\0‟ } s2 t
字符串及其应用

C语言的字符串表示方法 字符串的常用处理方法及标准库函数
字符串的常用处理方法及标准库函数



字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组

c语言-字符串PPT课件

c语言-字符串PPT课件

.
10
常用的字符串处理函数
函数原型声明在 stdio.h 或 string.h 中给出
字符串的输入和输出
◦ 输入字符串:scanf( )或gets( ) ◦ 输出字符串:printf( )或puts( ) ◦ stdio.h
.
11
字符串的输入输出: 第一种方式:循环接收输入的字符
char str[80]; i = 0; while((str[i] = getchar( )) != '\n')
i++;
str[i] = '\0';
.
12
字符串的输入输出: 第一种方式:循环输出字符
char str[10]; 按字符逐个输入/输出
for (i=0; str[i]!='\0' ; i++) {
putchar(str[i]); } putchar('\n');
一般不用字符串长度控制
.
13
字符串的输入:
第二种方式:接收字符串整体
(1) scanf("%s", str) 控制说明符:%s 输入参数:字符数组名,不加地址符 遇回车或空格输入结束,并自动将输入的一串 字符和 ‘\0’送入数组中
(2) gets(str) 输入参数:字符数组名,不加地址符 遇回车输入结束,自动将输入的一串字符和‘\0’ 送入数组中
能够限制输入字符串的长度
.
25
从键盘输入一个带有空格的人名,然后在显 示人名的前面显示"Hello", I said to
.
26
从键盘输入一个带有空格的人名,然后在显 示人名的前面显示"Hello", I said to

实验9:字符数组与字符串

实验9:字符数组与字符串

实验9:字符数组与字符串实验名称:字符数组与字符串成绩:实验日期:年月日实验报告日期:年月日一、实验目的1、理解字符数组和字符串的概念。

2、掌握字符数组的定义、初始、数组元素引用、输入输出。

3、掌握字符数组的处理4、掌握常用字符串处理函数二、实验内容1、编制程序:对键盘输入的字符串进行逆序,逆序后的字符串仍然保留在原来字符数组中,最后输出。

(不得调用任何字符串处理函数,包括strlen)例如:输入hello world 输出dlrow olleh2、编写程序:对键盘输入的两个字符串进行连接。

(尽管我们知道strcat()可以简单完成此任务,本题仍然规定不得调用任何字符串处理函数,包括strlen)。

例如:输入hello<CR>world<CR>,输出helloworld3、编写程序:对从键盘任意输入的字符串,将其中所有的大写字母改为小写字母,而所有小写字母改为大写字母,其它字符不变。

(不调用任何字符串处理函数)例如:输入:Hello World!输出:hELLO wORLD!4、编写程序:从键盘输入4个字符串(长度<20),存入二维字符数组中。

然后对它们进行排序(假设由小到大顺序),最后输出排序后的4个字符串。

(允许使用字符串函数)提示:字符串比较可以用strcmp函数实现,排序方法可以选择法或冒泡法。

三、实验要求1、绘制框图、编制源程序,测试数据。

2、1-3题不得使用任何字符串处理函数,4题允许使用字符串处理函数。

3、在Turbo C下完成程序的编辑、编译、运行。

查看、分析程序结果。

四、实验步骤、过程1、编辑、编译、运行程序题1。

使用数据:hello world做测试。

2、编辑、编译、运行程序题2。

使用数据:hello<CR>world<CR>做测试。

3、编辑、编译、运行程序题3。

使用数据:Hello World做测试。

4、编辑、编译、运行程序题4。

第7章--c++数组

第7章--c++数组

第七章数组数组是相同数据类型数据的集合。

通过数组名和下标可以访问数组中指定的元素。

7.1 一维数组一维数组只有一个下标,它可用于表示一个线性的数据队列。

在程序设计中要先声明数组,对它进行初始化,然后才能使用数组。

7.1.1 一维数组的声明一维数组的声明要解决三个问题。

第一、确定数组的数据类型。

第二、给数组定义一个名字,以便在程序中使用。

第三、指明数组的大小,也就是数组中元素的个数。

声明一维数组的一般形式如下:数据类型数组名[常量表达式]={初值表};7.1.2 一维数组的使用访问一维数组元素的一般形式是:数组名[下标表达式]下标表达式是一个整型表达式。

它是一个由整型常量、整型变量以及运算符组成的式子,也可以是返回值为整型值的函数调用。

C++规定,数组的下标从0开始,因此对于大小为N的一维数组,其下标的取值范围是0到N-1,其中0称为数组的下界,N-1称为数组的上界。

下标表达式的值应该在下标的取值范围之内,否则会产生不可预计的问题。

7.1.3一维数组的初始化通过在初值表中给出初值可以对数组元素进行初始化。

初值用一对花括号界定,初值之间用逗号进行分隔。

例7-4 int y[5]={1,2,3,4,5};1,2,3,4,5为初值表,该语句把y[0]、y[1]、y[2]、y[3]、y[4] 分别初始化为1、2、3、4、5。

通过初值表中初值的个数决定数组的大小,省略常量表达式。

例7-5 double d[]={1.5,2.3,5.6};该声明语句省略了常量表达式,数组的长度由初值表中初值的个数决定。

它说明了有三个元素的双精度数组d。

并且d[0]=1.5, d[1]=2.3, d[2]=5.6。

7.1.4 数组的运算以及数组作为函数参数1 数组的运算数组的运算最终都要归结到对数组元素的操作。

因此,数组的运算与其元素的数据类型以及系统或程序对该数据类型提供何种操作有关。

对于int、float、以及double类型的数组,赋值运算、各种算术运算、++、--等都是允许的,原因是C++提供的这些操作的操作语义支持这些数据类型的运算。

第7章 数组

第7章  数组

注意:key是个占位符,读者可以选择个人习惯的名称。由 于for…in是遍历数组的键名,所以key的类型为String。
7.10.2
for…in与for each…in遍历
for each…in循环的语法如下。
注意:element是个占位符,读者可以选择个人习惯的名称 。由于for each…in是遍历数组的键值,而键值的类型可 以是很多种类型(甚至可以是对象或数组),所以key的 类型使用*号,指定为无类型。
7.11
关联数组
ActionScript 3.0中所定义的数组类(Array)所指的都是数 字索引数组。数字索引数组的键是数字数据类型的。关 联数组也属于数组的范畴,但它的键可以为任何数组类 型(甚至是Object)。关联数组体现的是键与键值的一一 对应关系,这种关系称为“值对”。 ActionScript 3.0中使用关联数组时,已经超出了Array类的 范围。要使用字符串作为键的关联数组时,可以使用对 象(Object)来定义;若要使用对象作为键的关联数组时 ,则可以使用预定义的字典类(Dictionary)。
7.6.1
sort方法
2.排序方法参数 如果需要字义其它类型的排序,sort方法有两个参数供选择 :一个是排序方法,另一个是排序类型。 排序方法是一个函数,在定义时它包含两个参数(A,B) ,并要求返回一个值。当返回-1时则把参数A放在B之前 ,返回0时则A和B相等(随机放),返回1时参数A放在B 之后。
7.4.2
二维数组与多维数组
table[0]中存储的值是一个一维数组["张三",73]。要访问这个数组 的第一个元素时则使用table[0][0]。 多维数组与二维数组类似,按照键名/值一层一层对应下去。不过 二维数组以上就已经比较复杂了,一般不再使用“[ ]”直接定 义。下例创建三维数组,并对数组中的数据进行访问。

c语言 第7章 数组(4)

c语言 第7章 数组(4)

void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。

C语言第七章

C语言第七章

4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?

第七章数组1、一维数组1、整形数组的说明例如inta[10]

第七章数组1、一维数组1、整形数组的说明例如inta[10]
2
例 int i=15; 例 int data[5]; int data[i]; (不能用变量定义数组维数) data[5]=10; //C语言对数组不作越界检查,使用时要 注意
一维数组的引用
数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int a[10]; printf(“%d”,a); ( ) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
()
3
一维数组的初始化
初始化方式
int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度
23
4、常用的字符串处理函数
1、 include <stdio.h> char *gets(char s[ ]); 功能:从键盘上读一行字符串,并以’\0’取代换行符。 注意:与scanf( )的区别? gets()可以读取空字符 #include <stdio.h> main( ) { char string[80]; printf(“请输入一个字符串:"); gets(string); printf(“您输入的字符串是: %s\n", string); }
元素个数=行数*列数
数组元素的存放顺序 例 int a[3][4]; float b[2][5]; 原因:内存是一维的 int c[2][3][4]; 二维数组:按行序优先 int a[3,4]; ( ) 多维数组:最右下标变化最快
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符型溢出问题
解决问题: 字符加密
输入一个英文小写字符和正整数k(k<26), 将英文字母加密并输出。
加密思想:将每个字母c加一个序数k,即 用它后面的第k个字母代替,变换公式: c=c+k。如果字母为z,则后一个字母是a, 也就是字母表形成一个圆。
源程序7-1:char类型溢出
#include<stdio.h>
数字 转义序列
字符转义序列使用起来很容易,但数量有限,并没有 包含所有无法打印的ASCII字符。C语言提供了数字转义序 列。所有ASCII码字符,都可以用数字转义序列来表示。 可以用八进制数或十六进制来书写转义字符。
八进制转义序列:由\和跟随其后的最多含有三位数字 的八进制数组成。例如,'a'的ASCII码对应的八进制是 141,则数字转义序列'\141'就表示'a'。
解决方法2:分类处理,避免溢出
#include<stdio.h>
int main() {
char ch; int k;
scanf("%c %d", &ch, &k);
if(ch + k > 'z') ch = ch + k - 26;
else ch = ch + k;
若ch + k > ’z’,则减去26后 存储,避免存储时溢出
在计算ch + k 的过程中不会 溢出,因为因为编译器把算 术运算中涉及的char类型都 提升为int类型
printf("%c\n", ch); return 0; }
注意计算过程中的溢出
其实有更多的类型溢出是发生在计算阶段,例如 表达式:k = 123456 * 123456 / 123456, 虽然结 果不会超出int范围,但在计算过程中,中间结果超出 int范围,也将发生溢出。
signed char: -128 至 +127
‘z’+6 的 值 是 128 超 出 char 表 示范围
printf("%c\n", ch); return 0; }
解决方法1:使用unsigned char
#include<stdio.h>
int main() {
unsigned char ch;
char name[15] = { 'W', 'a',
'n', 'g', 'L', 'i'};
用字符数组
char d = 'g';
char e = 'L';
char f = 'i';用若干个字符
用字符串char name[15] = “Wang Li”;
7.2.1统计空格
解决问题:输入一行字符(字符个数不多于 80),统计其中空格的个数 解题思路: (1)定义字符数组 str[81]; (2)读入字符串 若字符串确定不含空格,可以用 scanf(“%s”,&str); 若可能含有空格,用gets(str); (3)扫描整个字符串(不需要知道字符个数)
40 (
62
>
125
}
41 )
63
?
126
~
42 *
64
@
127
DEL
43
+
65 ~ 90 A ~ Z
字符数据类型
占 8 位内存
unsigned 0 至 255
signed 或
unsigned
Signed -128 至 +127
在C语言中,字符和整数之间存在着密切的关 系。C语言把字符当成小整数进行处理。
字符 转义序列
转义序列 \a \b \f \n \r \t \v \' \" \? \\ \0
名称 警告 退格 换页 换行 回车 水平制表 垂直制表 单引号 双引号 问号 反斜线 空
描述 产生一则警告。 将光标回退一格。 将光标移到下一页的第一格。 将光标移到下一行的第一格。 将光标移到当前行的第一格。 将光标移到下一个水平制表位置。 将光标移到下一个垂直制表位置。 产生一个单引号。 产生一个双引号。 产生一个问号。 产生一条反斜线。 产生一个空字符。
十六进制转义序列:由\x和跟随其后的十六进制数组成。 例如,'a'的ASCII码对应的十六进制是61,则数字转义序 列'\x61'就表示'a'。
数字转义序列(部分)
八进制转义序列 十六进制转义序列
\7
\x7
\10
\x8
\12
\x0C
\10
\x0A
\40
\x20
\60
\x30
\101
\x41
\141
格式串中的%c之前加上一个空格: scanf("%d", &n); scanf(" %c", &ch);
scanf格式串中的空白意味着“跳过零个或多个空白字符” 。
7.1.4 字符处理函数
前面已经讲过如何把小写字母转换成大写字母:
if(ch >= 'a' && ch <= 'z')
ch = ch - 32; 其实可以使用库函数toupper()来完成上述操作,即
int k;
scanf("%c %d", &ch, &k); ch = ch + k;
unsigned char: 0 至 255
一个英文小写字符和正 整数k(k<26)的和, 不会#39;) ch = ch - 26;
printf("%c\n", ch); return 0; }
#include<stdio.h> int main() {
int k = 123456 * 123456 / 123456; printf("%d\n", k); return 0; } 该程序无法得到正确结果,是因为计算 123456 * 123456的 结果超出了int类型的表示范围。 避免此类问题的方法: 1、选择表示范围更大的数据类型 2、先除后乘,但要解决好整数除法带来的问题。
重写程序4-13:字符分类统计
letter = digit = other = 0;
while(ch = getchar(), ch != '\n')
{
if( isalpha(ch) )
/*若ch是字母*/
letter++;
else if( isdigit(ch) ) /*若ch是数字*/
digit++;
\x61
响铃 退格键 换页键 换行键 空格 0 A a
描述
printf(“a\10b\n”); //输出: b, 因为转义序列’\10’是 退格键 printf(“\141\10\142\n”); //输出: b, 含义同上
7.1.3 字符数据的输入输出
scanf()函数和getchar()都可以用来读入单个字 符。但与整型和实型数据的读入不同的是, 所有输入都是合法的字符输入,包括空格、 回车等空白符。
else
/*其他字符*/
other++;
}
ctype.h头文件中的部分函数
函数
功能
tolower() toupper() islower() isupper() isalpha() isdigit() isxdigit() isblank()
转换为小写字母
转换为大写字母
判断是否是小写字母
判断是否是大写字母
判断是否是小写或大写字母
判断是否是十进制数字('0'-'9') 判 断 是 否 是 十 六 进 制 数 字 ( '0'-'9' , 'a'-'f','A'-'F') 判断是否是空白字符(空格,'\t')
7.2 字符数组与字符串
Wang Li
如何让程序存储我的姓名?
char a = 'W'; char b = 'a'; char c = 'n';
"Hello World"
"WangPing"
"Please enter your full name:"
“Hello!\n"
字符串常量中可以包含转义序列
He l l o
W o r l d \0
字符串结束符
字符串的有效长度:有效字符的个数
字符串的存储
char s[80] = "Happy"; 字符串遇 '\0' 结束 第一个 '\0' 前面的所有字符和 '\0' 一起构成了字
符串 "Happy” '\0' 之后的其他数组元素与该字符串无关
字符串由有效字符和字符串结束符 '\0' 组成
s H a p p y \0 \0 \0 …
s[0] s[1]
s[5]
字符串与字符数组
在C语言中没有专门的字符串变量,通常用一个 字符数组来存放一个字符串
字符数组和字符串的区别是:字符串的末尾有一 个空字符 ‘\0’
7.1.2 转义序列
相关文档
最新文档