内容正文:
第五章 批量数据的存储--数组
1
CONTENTS
目录
01
02
一位数组的应用
数组的认知
03
二维数组的应用
04
字符串与字符数组
05
字符串处理函数
C语言
知识树
My First Template
二维数组的应用
C语言程序设计
4
C语言
二维数组的应用
应用中的问题
My First Template
本次任务
利用二维数组存储多个学生的多门成绩,并求每门课平均成绩,和总平均成绩。
C语言程序设计 二维数组的定义与引用
C语言
My First Template
二维数组的应用
C语言
存储某一门课的成绩可以使用一维数组,同时存储多门课的成绩,其实就是存储一个二维的表格,C语言中用二维数组来存储二维表的值
任务分析
My First Template
C语言
二维数组定义的一般形式是:
类型说明符 数组名[常量表达式1][常量表达式2]
其中:常量表达式1表示第一维下标的长度,
常量表达式2 表示第二维下标的长度。
二维数组的应用
例如: int a[3][4];
说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,
即:
a[0][0],a[0][1],a[0][2],a[0][3]
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
二维数组的声明
My First Template
C语言程序设计 二维数组的定义与引用
C语言
二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值(逐行),也可按行连续赋值(整体)。
二维数组的初始化
My First Template
逐行赋值
int a[2][3]={ {80,70,90},{60,65,70 };
整体赋值
int a[2][3]={ 80,70,90,60,65,70};
C语言程序设计 二维数组的定义与引用
C语言
二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标][下标]
其中下标应为整型常量或整型表达式。
例如:a[2][3]
表示a数组2行3列的元素
二维数组的引用
My First Template
C语言程序设计 二维数组的定义与引用
C语言
任务实现
#include "stdio.h"
void main()
{ int i,j,s=0, average,v[3];
int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
for(i=0;i<3;i++)
{ for(j=0;j<5;j++)
s=s+a[j][i];
v[i]=s/5;
s=0; }
average=(v[0]+v[1]+v[2])/3;
printf("C语言平均分:%d
数据库平均分:%d
网络基础平均分:%d
",v[0],v[1],v[2]);
printf("总平均分:%d
", average);
}
My First Template
字符串与字符数组
C语言程序设计
12
C语言
可以存储的数据
计算机内存
常量值
变量值
变量名
常量名
内存
score[3]
score[2]
score[1]
score[0]
score
80
65
99
73
数组名
C语言程序设计 –字符串与字符数组
My First Template
C语言
本次任务
输入一个字符串,统计其中空格的个数。
C语言程序设计 –字符串与字符数组
My First Template
C语言
任务分析
字符串与字符数组-任务分析
My First Template
输入字符串统计空格
存储字符
存储字符串
字符串输入
空格统计
完成任务
输入字符串统计空格
字符变量
字符数组
输入函数
特殊标记
…
C语言
字符串
char a='W';
char b='a';
char c='n';
char d='g';
char e='L';
char f='i';
如何让程序存储我的姓名?
Wang Li
用若干个字符
char name[15]={ 'W', 'a', 'n', 'g', 'L', 'i', '\0'};
用字符数组
用字符串
W a n g L i \0
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。
字符串的末尾有一个空字符‘\0’
数 组
数组:是一种数据类型,在一块连续的地址空间内存储相同类型的多个值。
字符串与字符数组-相关知识
My First Template
C语言
形式与前面介绍的数值数组相同。
例如: char c[10];
字符数组也可以是二维维数组。
例如: char c[5][10];
字符数组的声明
char arrayName[size];
类型说明符
char
数组名符合
标识符规则
常量表达式:
数组大小
字符串与字符数组-相关知识
My First Template
C语言
字符数组的初始化
将字符串“c program”赋值给字符数组c。
逐一元素赋值
例如:char c[10];c[0]='c' ; c[1]='p' ; ……c[8]='m';
定义时作初始化赋值
例如:char c[10]={'c',' ','p','r','o','g','r','a','m'};
当对全体元素赋初值时也可以省去长度说明
例如: char c[]={'c',' ','p','r','o','g','r','a','m'};
C语言允许用字符串的方式对数组作初始化赋值。
可写为: char c[]={“c program"};
或去掉{}写为: char c[]=“c program";
字符串以‘\0 ’作为串的结束符 。
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志' \0 ' 。' \0'是由C编译系统自动加上的。
由于采用了' \0'标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理
字符结束符
字符串与字符数组-相关知识
My First Template
C语言
1、数组必须先定义,后使用
2、数组元素表示形式: 数组名[下标]
其中:下标可以是常量或整型表达式
3、数组的引用不能越界
4、只能逐个引用数组元素,不能一次引用整个数组(字符这条不成立)。
字符数组的引用
#include "stdio.h"
main()
{
char st[15];
printf("请输入要存储到字符数组中的值:
");
scanf("%s",st);
printf("字符数组中的值是
%s
",st);
}
案例
c p r o g r a m
c[0]
c[1]
c[2]
c[3]
c[4]
c[5]
c[6]
c[7]
c[8]
字符串与字符数组-相关知识
My First Template
C语言
字符数组的输入
#include "stdio.h"
main()
{
char st[15];
printf("请输入要存储到字符数组中的值:
");
scanf("%s",st);
printf("字符数组中的值是
%s
",st);
}
案例
输入连续的值
输入带空格的值
注意:当用scanf函数输入字符串时,串中不能含有空格,否则将以空格作为串的结束符。
字符串与字符数组-相关知识
My First Template
C语言
char name[10];
scanf("%s", name);
printf("%s", name);
格式描述串中使用转换字符串“%s”
Wang Li
W a n g \0
使用 scanf 时,不能输入空格
Wang
标准的I/O函数
字符串与字符数组-相关知识
My First Template
C语言
char name[10];
gets(name);
puts(name);
W a n g L i \0
Wang Li
Wang Li
从键盘上读入一个完整的行,存入字符数组name。并用空字符'\0'取代行尾的换行符'
'。
把字符数组中的字符串输出到显示器。
使用 gets函数允许输入空格
字符串的I/O函数
字符串与字符数组-相关知识
My First Template
C语言
#include <stdio.h>
void main()
{
char line[30];
int i,count = 0;
printf("
请输入一行字符:
");
gets(line);
i=0;
while(line[i] != '\0')
{
if(line[i] == ' ')
count++;
i++;
}
printf("
其中的空格总数为 %d
",count);
}
C is a programming language
在循环执行时,扫描整个数组以统计出空格 ‘ ‘ 的数量,直到遇到字符 ’\0’。每次循环执行时,都会更新计数器 i 和 count。
其中的空格总数为 4
任务实现
字符串与字符数组-任务实现
My First Template
字符串处理函数
C语言程序设计
24
C语言
字符串处理函数
字符串处理函数
与字符串有关的内置函数在头文件string.h中定义
要使用标准库字符串处理函数,程序前应该包含:
#include <string.h>
string.h
strlen
strcpy
strcmp
strcat
……
puts
gets
My First Template
C语言
puts函数
字符串处理函数
格式:puts (字符数组名)
功能:把字符数组中的字符串输出到显示器上。
puts
//预处理
#include "stdio.h"
void main()//主函数
{ //定义字符数组并赋值
char c[]="i love china!";
//字符数组的输出
puts(c);
}
My First Template
C语言
gets函数
字符串处理函数
格式: gets (字符数组名)
功能:从终端上输入一个字符串到字符数组。本函数得到一个函数值,即为该字符数组的首地址。gets()函数允许输入空格,当输入的字符串含有空格时不被截断。
到显示器上。
gets
#include"stdio.h"//预处理输入输出
void main()//主函数
{ //定义字符数组
char st[15];
printf("请输入字符:
");
//获取字符串
gets(st);
//输出字符数组
puts(st);
}
My First Template
C语言
Strlen函数
字符串处理函数
格式:strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志‘\0’) 并作为函数返回值。
strlen
//包含标准输入输出和字符串头文件
#include "stdio.h"
#include"string.h"
void main()//主函数
{ //变量定义
int k;
//数组定义与赋值
static char st[]="I love C language";
//测试长度
k=strlen(st);
//结果输出
printf("该字符串的长度为 %d
",k);
}
My First Template
C语言
Strcat函数
字符串处理函数
格式:strcat (目标字符数组,源字符数组)
功能:把源字符数组中的字符串连接到目标字符数组的后面,并删去目标字符数组后的 '\0'。本函数返回值是字符目标数组的首地址。
strcat
//导入输入输出和字符头文件
#include "stdio.h"
#include"string.h"
void main()//主函数
{
//字符数组定义与赋值
char st1[30]="My name is ";
char st2[10];
printf("请输入你的英文名字: ");
gets(st2);
//使用连接函数进行字符串的连接
strcat(st1,st2);
//字符串的输出
puts(st1);
}
My First Template
C语言
Strcpy函数
字符串处理函数
格式: strcpy (目标字符数组,源字符数组)
功能:把源字符数组中的字符串拷贝到目标字符数组中。'\0'也一同拷贝。源字符数组可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
strcpy
#include "stdio.h"
#include"string.h"
void main()//主函数
{//数组定义赋值
char st1[18],st2[]="I love C Language";
printf("输出字符串st2:");
puts(st2);
printf("
通过 strcpy(st1,st2)函数将字符串st2复制到st1
");
//使用 strcpy函数进行数组复制
strcpy(st1,st2);
printf("输出字符串st2:");
//字符数组输出
puts(st1);printf("
");
}
My First Template
C语言
Strcmp函数
字符串处理函数
格式:strcmp(字符数组1,字符数组2)
功能:按照ASCII码顺序比较两个数组中的字符串,由函数返回值返回比较结果。如果两个字符串相等则返回0;字符数组1>字符数组2则返回正数,否则返回负数。 本函数也可用于比较两个字符串常量,或比较字符数组和字符串常量。
strcmp
#include "stdio.h"//预处理输入输出
#include"string.h"//预处理字符串函数
void main()//主函数
{ int k;
char st1[15],st2[]="abcdef";
printf("请输入字符串:
");
gets(st1);//给字符数组st1赋值
k=strcmp(st1,st2);//使用比较函数
printf("%d
",k);
//如果得到0则相等,1 st1>st2
if(k==0) printf("st1=st2
");
if(k>0) printf("st1>st2
");
if(k<0) printf("st1<st2
");
}
My First Template
C语言
Strlwr和strupr函数
字符串处理函数
格式:strlwr(字符串)
功能:将字符串中大写字母转为小写。
格式:strupr(字符串)
功能:将字符串中小写字母转为大写。
strxxx
#include "stdio.h"//预处理输入输出
#include"string.h"//预处理字符串函数
void main()//主函数
{ int k;
char st1[15];
printf("请输入字符串:
");
gets(st1);//给字符数组st1赋值
puts(strupr(st1));
}
My First Template
$$