C语言课件4
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
- 在对全部数组元素赋初值时,可以不指定数组长度。 例如:static int a[]={1,2,3,4,5};
程序举例
Page 7
C语言程序设计
湘潭大学
罗 培
二维数组
• 二维数组的定义
——定义及引用
类型说明符 数组名[常量表达式][常量表达式] a[0]——a00 a01 a02 a03 可以理解为: a a[1]——a10 a11 a12 a13 • 存储顺序 a[2]——a20 a21 a22 a23 按行存放,上例中数组a的存储顺序为:
Page 22
C语言程序设计
湘潭大学
罗 培
应用举例-3
• 题目:把输入的字符串逆序排列,并显示。 • 分析:
- 数据结构: • 输入的字符串用字符数组存放。 - 算法要点: • 逆序排列用交换算法,求出字符串最后一个字符 的下标,然后将第一个和最后一个交换,第二个 和倒数第二个交换,...。
Page 23
例如:float a[3][4];
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
• 引用
例如:b[1][2]=a[2][3]/2;
下标不要越界
Page 9
C语言程序设计
湘潭大学
罗 培
二维数组
——初始化
• 分行给二维数组赋初值
例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言程序设计
湘潭大学
罗 培
#include<stdio.h> main() { int c,nl; nl=0; while((c=getchar())!=EOF) if(c=='\n') ++nl; printf("%d\n",nl); }
Page 21
C语言程序设计
湘潭大学
罗 培
运行结果: This supplement is designed as a tutorial for a student who uses Data Structures with C++ without the language background or who wishes for a quick review of basic C++ concepts. 5
Page 12
C语言程序设计
湘潭大学
罗 培
字符数组的输入/输出
• 方法 例如: - 逐个字符输入输出 若改为: - 将整个字符串一次输入或输出 static char str[13]; 程序中有下列语句: 例:static char c[]="China"; scanf("%s",str); static char str1[5],str2[5],str3[5]; printf("%s",c); 运行时输入数据: scanf("%s%s%s",str1,str2,str3); • 注意 How are you? 运行时输入数据:
Page 28
C语言程序设计
湘潭大学
罗 培
应用举例-5
• 题目:
- 从键盘输入一个字符串(长度不超过20,其中不含空 格),将其复制一份,复制时将小写字母都转换成为 大写字母)。
• 分析:
- 数据结构 • 定义两个数组,存放字符串。 - 算法要点 • 将小写字母 转换为大写字母:小写字母-'a'+'A'。
C语言程序设计
湘潭大学
罗 培
运行结果: The use of the double colon in front of the variable name, in lines 11, 13, and 16, instructs the system that we are interested in using the global variable named index. digit '1':4 digit '2':0 digit '3':1 digit '4':0 digit '5':0 digit '6':1 digit '7':0 digit '8':0 digit '9':0 white space:34 other character:132
Page 16
C语言程序设计
湘潭大学
罗 培
应用举例-1
• 题目:
- 接受键盘输入的两个字符串,并将其首尾相接后输出。 每个字符串内部不含空格,两个字符串之间以空白符分 隔。
• 分析:
- 数据结构: • 字符串的存储需要用字符数组 - 算法要点: • 字符串输入,可以用具有词处理功能的Scanf()函数 • 字符串拼接方法:先找到第一个字符串的末尾,然后 将第二个串的字符逐个添加到末尾。注意,要去掉第 一个串的结束符'\0',但第二个串的结束符'\0'要添 加进去。 Page 17
C语言程序设计
湘潭大学
罗 培
main() { char str1[50],str2[20]; int i,j; printf("Enter string No.1:\n"); scanf("%s",str1); printf("Enter string No.2:\n"); scanf("%s",str2); i=j=0; while(str1[i]!='\0') i++; while((str1[i++]=str2[j++])!='\0') ; printf("string No.1->%s\n",str1); } Page 18
湘潭大学
罗 培
一维数组
——初始化
可以在编译阶段使数组得到初值:
- 在定义数组时对数组元素赋以初值。 例如:static int a[10]={0,1,2,3,4,5,6,7,8,9};
- 可以只给一部分元素赋初值。 例如:static int a[10]={0,1,2,3,4}; static int b[10]={,1,,3,,5}; - 不能给数组整体赋初值。
- 输出字符不包括 '\0' How are you? 内存中变量状态如下: - 用"%s"输出字符串时,输出项是字符数组名(不加 &), 输出时遇到 '\0'结束。 内存中变量 str 内容如下: str1: H o w \0 - 用scanf输入多个字符串时,以空格分隔;输入单个字符 str: H o w \0 串时其中不能有空格。 str2: a r e \0
——存储顺序
数组元素在内存中顺次存放,它们的 地址是连续的。
例如:具有10个元素的数组 a,在内存中的存放 次序如下:
a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 数组名字是数组首元素的内存地址。
数组名是一个常量,不能被赋值。
Page 6
C语言程序设计
字符数组
• 定义和引用 • 字符串
- 字符串常量,例如:"china" - 没有字符串变量,用字符数组来存放字符串 - 字符串以'\0'为结束标志
程序举例1
程序举例2
• 字符数组的初始化
例:static char str[8]={112,114,111,103,114,97,109,0}; static char str[8]={'p','r','o','g','r','a','m','\0'}; static char str[8]="program"; static char str[]="program";
C语言程序设计
湘潭大学
罗 培
main() { char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0,j=strlen(str)-1;i<j;i++,j--) { c=str[i]; str[i]=str[j]; str[j]=c; } printf("\nReversed string:\n%s\n",str); } Page 24
例如:
int
a[10]
可以是常量 和 符号常量,不能用变量。
表示 a 为整型数组,有10个元素:a[0]...a[9]
• 引用
- 必须先定义,后使用。 - 只能逐个引用数组元素,而不能一次引用整个数组。 例如:a[0]=a[5]+a[7]-a[2*3]
Page 5
C语言程序设计
湘潭大学
罗 培
一维数组
C语言程序设计
湘潭大学
罗 培
第四讲 数组的概念及应用
Page 1
C语言程序设计
湘潭大学
罗 培
本讲主要内容
• 数组的概念 • 一维数组 • 二维及多维数组 • 字符数组 • 综合举例
Page 2
C语言程序设计
湘潭大学
罗 培
数组的概念
——概念引入 用基本数据类型可以解决所有问题吗? 例如:对某班学生的成绩按由高到底的次序进行排序。
str3: y o u ? \0
Page 15
C语言程序设计
湘潭大学
罗 培
字符串处理函数
•puts 输出字符串 gets 输入字符串 (#include<stdio.h>) •strcat 字符串连接 strcpy 字符串复制 strcmp 字符串比较 strlen 字符串长度 strlwr 将字符串中的大写字符转换为小写字符 strupr 将字符串中的小写字符转换为大写字符 (#include<string.h>)
C语言程序设计
湘潭大学
罗 培
运行结果: Enter string No.1: abcdefgh Enter string No.2: IJKLMNOPQRS string No.1->abcdefghIJKLMNOPQRS
Page 19
C语言程序设计
湘潭大学
罗 培
应用举例-2
• 题目:从键盘输入若干行文本,每行以回车结束, 以 ctrl+z 作为输入结束符,统计其行数。 • 分析:
• 将所有数据写在一个{}内,按顺序赋值
例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
• 可以对部分元素赋初值
例如:static int a[3][4]={{1},{0,6},{0,0,11}};
程序举例
Page 10
C语言程序设计
湘潭大学
罗 培Baidu Nhomakorabea
- 数据结构: • 由于只统计行数,所以不必使用数组存储文本内容, 只须定义一个字符变量暂存读入的字符。 - 算法要点: • 读入字符可以用 getchar() 函数。 • 每读入一个字符,要判断是否输入结束 • 要判断读入的是否回车符,定义一个整型变量回车符 进行计数,以实现统计行数的功能。
Page 20
3 名?
30 名?
Page 3
C语言程序设计
湘潭大学
罗 培
数组的概念
数组是具有一定顺序关系的若干相同 类型变量的集合体,组成数组的变量称为 该数组的元素。 数组属于构造类型。
Page 4
C语言程序设计
湘潭大学
罗 培
一维数组
——定义与引用
• 一维数组的定义
类型说明符 数组名[ 常量表达式 ];
数组名的构成方法与一般变量名相同。
- 数据结构: • 定义一个具有 10 个元素的整型数组来存放数字 0~9 的个数。 • 定义两个整型变量来存放空白符和其它字符的个数。
- 算法要点:
• 计数用的数组和变量要初始化为0。 • 用循环结构处理字符读入,内嵌分支结构处理计数。
Page 26
C语言程序设计
湘潭大学
罗 培
#include<stdio.h> main() { int c,i,nwhite,nother,ndigit[10]; nwhite=nother=0; for(i=0;i<10;i++) ndigit[i]=0; while((c=getchar())!=EOF) if(c>='0'&&c<='9') ++ndigit[c-'0']; else if(c==' '||c=='\n'||c=='\t') ++nwhite; else ++nother; for(i=0;i<10;i++) printf("digit '%d':%d\n",i,ndigit[i]); printf("white space:%d\n",nwhite); printf("other character:%d\n",nother); Page 27 }
C语言程序设计
湘潭大学
罗 培
运行结果: Enter a string: abcdefgh
Reversed string: hgfedcba
Page 25
C语言程序设计
湘潭大学
罗 培
应用举例-4
• 题目:从键盘输入字符,以 ctrl+z 结束,统计输 入的数字 0~9、空白符和其它字符的个数。 • 分析:
程序举例
Page 7
C语言程序设计
湘潭大学
罗 培
二维数组
• 二维数组的定义
——定义及引用
类型说明符 数组名[常量表达式][常量表达式] a[0]——a00 a01 a02 a03 可以理解为: a a[1]——a10 a11 a12 a13 • 存储顺序 a[2]——a20 a21 a22 a23 按行存放,上例中数组a的存储顺序为:
Page 22
C语言程序设计
湘潭大学
罗 培
应用举例-3
• 题目:把输入的字符串逆序排列,并显示。 • 分析:
- 数据结构: • 输入的字符串用字符数组存放。 - 算法要点: • 逆序排列用交换算法,求出字符串最后一个字符 的下标,然后将第一个和最后一个交换,第二个 和倒数第二个交换,...。
Page 23
例如:float a[3][4];
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
• 引用
例如:b[1][2]=a[2][3]/2;
下标不要越界
Page 9
C语言程序设计
湘潭大学
罗 培
二维数组
——初始化
• 分行给二维数组赋初值
例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言程序设计
湘潭大学
罗 培
#include<stdio.h> main() { int c,nl; nl=0; while((c=getchar())!=EOF) if(c=='\n') ++nl; printf("%d\n",nl); }
Page 21
C语言程序设计
湘潭大学
罗 培
运行结果: This supplement is designed as a tutorial for a student who uses Data Structures with C++ without the language background or who wishes for a quick review of basic C++ concepts. 5
Page 12
C语言程序设计
湘潭大学
罗 培
字符数组的输入/输出
• 方法 例如: - 逐个字符输入输出 若改为: - 将整个字符串一次输入或输出 static char str[13]; 程序中有下列语句: 例:static char c[]="China"; scanf("%s",str); static char str1[5],str2[5],str3[5]; printf("%s",c); 运行时输入数据: scanf("%s%s%s",str1,str2,str3); • 注意 How are you? 运行时输入数据:
Page 28
C语言程序设计
湘潭大学
罗 培
应用举例-5
• 题目:
- 从键盘输入一个字符串(长度不超过20,其中不含空 格),将其复制一份,复制时将小写字母都转换成为 大写字母)。
• 分析:
- 数据结构 • 定义两个数组,存放字符串。 - 算法要点 • 将小写字母 转换为大写字母:小写字母-'a'+'A'。
C语言程序设计
湘潭大学
罗 培
运行结果: The use of the double colon in front of the variable name, in lines 11, 13, and 16, instructs the system that we are interested in using the global variable named index. digit '1':4 digit '2':0 digit '3':1 digit '4':0 digit '5':0 digit '6':1 digit '7':0 digit '8':0 digit '9':0 white space:34 other character:132
Page 16
C语言程序设计
湘潭大学
罗 培
应用举例-1
• 题目:
- 接受键盘输入的两个字符串,并将其首尾相接后输出。 每个字符串内部不含空格,两个字符串之间以空白符分 隔。
• 分析:
- 数据结构: • 字符串的存储需要用字符数组 - 算法要点: • 字符串输入,可以用具有词处理功能的Scanf()函数 • 字符串拼接方法:先找到第一个字符串的末尾,然后 将第二个串的字符逐个添加到末尾。注意,要去掉第 一个串的结束符'\0',但第二个串的结束符'\0'要添 加进去。 Page 17
C语言程序设计
湘潭大学
罗 培
main() { char str1[50],str2[20]; int i,j; printf("Enter string No.1:\n"); scanf("%s",str1); printf("Enter string No.2:\n"); scanf("%s",str2); i=j=0; while(str1[i]!='\0') i++; while((str1[i++]=str2[j++])!='\0') ; printf("string No.1->%s\n",str1); } Page 18
湘潭大学
罗 培
一维数组
——初始化
可以在编译阶段使数组得到初值:
- 在定义数组时对数组元素赋以初值。 例如:static int a[10]={0,1,2,3,4,5,6,7,8,9};
- 可以只给一部分元素赋初值。 例如:static int a[10]={0,1,2,3,4}; static int b[10]={,1,,3,,5}; - 不能给数组整体赋初值。
- 输出字符不包括 '\0' How are you? 内存中变量状态如下: - 用"%s"输出字符串时,输出项是字符数组名(不加 &), 输出时遇到 '\0'结束。 内存中变量 str 内容如下: str1: H o w \0 - 用scanf输入多个字符串时,以空格分隔;输入单个字符 str: H o w \0 串时其中不能有空格。 str2: a r e \0
——存储顺序
数组元素在内存中顺次存放,它们的 地址是连续的。
例如:具有10个元素的数组 a,在内存中的存放 次序如下:
a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 数组名字是数组首元素的内存地址。
数组名是一个常量,不能被赋值。
Page 6
C语言程序设计
字符数组
• 定义和引用 • 字符串
- 字符串常量,例如:"china" - 没有字符串变量,用字符数组来存放字符串 - 字符串以'\0'为结束标志
程序举例1
程序举例2
• 字符数组的初始化
例:static char str[8]={112,114,111,103,114,97,109,0}; static char str[8]={'p','r','o','g','r','a','m','\0'}; static char str[8]="program"; static char str[]="program";
C语言程序设计
湘潭大学
罗 培
main() { char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0,j=strlen(str)-1;i<j;i++,j--) { c=str[i]; str[i]=str[j]; str[j]=c; } printf("\nReversed string:\n%s\n",str); } Page 24
例如:
int
a[10]
可以是常量 和 符号常量,不能用变量。
表示 a 为整型数组,有10个元素:a[0]...a[9]
• 引用
- 必须先定义,后使用。 - 只能逐个引用数组元素,而不能一次引用整个数组。 例如:a[0]=a[5]+a[7]-a[2*3]
Page 5
C语言程序设计
湘潭大学
罗 培
一维数组
C语言程序设计
湘潭大学
罗 培
第四讲 数组的概念及应用
Page 1
C语言程序设计
湘潭大学
罗 培
本讲主要内容
• 数组的概念 • 一维数组 • 二维及多维数组 • 字符数组 • 综合举例
Page 2
C语言程序设计
湘潭大学
罗 培
数组的概念
——概念引入 用基本数据类型可以解决所有问题吗? 例如:对某班学生的成绩按由高到底的次序进行排序。
str3: y o u ? \0
Page 15
C语言程序设计
湘潭大学
罗 培
字符串处理函数
•puts 输出字符串 gets 输入字符串 (#include<stdio.h>) •strcat 字符串连接 strcpy 字符串复制 strcmp 字符串比较 strlen 字符串长度 strlwr 将字符串中的大写字符转换为小写字符 strupr 将字符串中的小写字符转换为大写字符 (#include<string.h>)
C语言程序设计
湘潭大学
罗 培
运行结果: Enter string No.1: abcdefgh Enter string No.2: IJKLMNOPQRS string No.1->abcdefghIJKLMNOPQRS
Page 19
C语言程序设计
湘潭大学
罗 培
应用举例-2
• 题目:从键盘输入若干行文本,每行以回车结束, 以 ctrl+z 作为输入结束符,统计其行数。 • 分析:
• 将所有数据写在一个{}内,按顺序赋值
例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
• 可以对部分元素赋初值
例如:static int a[3][4]={{1},{0,6},{0,0,11}};
程序举例
Page 10
C语言程序设计
湘潭大学
罗 培Baidu Nhomakorabea
- 数据结构: • 由于只统计行数,所以不必使用数组存储文本内容, 只须定义一个字符变量暂存读入的字符。 - 算法要点: • 读入字符可以用 getchar() 函数。 • 每读入一个字符,要判断是否输入结束 • 要判断读入的是否回车符,定义一个整型变量回车符 进行计数,以实现统计行数的功能。
Page 20
3 名?
30 名?
Page 3
C语言程序设计
湘潭大学
罗 培
数组的概念
数组是具有一定顺序关系的若干相同 类型变量的集合体,组成数组的变量称为 该数组的元素。 数组属于构造类型。
Page 4
C语言程序设计
湘潭大学
罗 培
一维数组
——定义与引用
• 一维数组的定义
类型说明符 数组名[ 常量表达式 ];
数组名的构成方法与一般变量名相同。
- 数据结构: • 定义一个具有 10 个元素的整型数组来存放数字 0~9 的个数。 • 定义两个整型变量来存放空白符和其它字符的个数。
- 算法要点:
• 计数用的数组和变量要初始化为0。 • 用循环结构处理字符读入,内嵌分支结构处理计数。
Page 26
C语言程序设计
湘潭大学
罗 培
#include<stdio.h> main() { int c,i,nwhite,nother,ndigit[10]; nwhite=nother=0; for(i=0;i<10;i++) ndigit[i]=0; while((c=getchar())!=EOF) if(c>='0'&&c<='9') ++ndigit[c-'0']; else if(c==' '||c=='\n'||c=='\t') ++nwhite; else ++nother; for(i=0;i<10;i++) printf("digit '%d':%d\n",i,ndigit[i]); printf("white space:%d\n",nwhite); printf("other character:%d\n",nother); Page 27 }
C语言程序设计
湘潭大学
罗 培
运行结果: Enter a string: abcdefgh
Reversed string: hgfedcba
Page 25
C语言程序设计
湘潭大学
罗 培
应用举例-4
• 题目:从键盘输入字符,以 ctrl+z 结束,统计输 入的数字 0~9、空白符和其它字符的个数。 • 分析: