更重要了,听不懂的话就听不懂指针了
思考
如何保存50名学生的信息
理论讲解
数组的概念
一组具有同样类型的数据的结合
if(int i<5) 和 if(a[0]<5)一样的用法
一维数组的定义和引用
定义
一般形式:类型说明符 数组名[常量表达式]
int num[10];
float score[40];
char name[20];
作用:分配一组连续的内存单元
应用说明
说明
- 数组必须先定义后使用
- 数组的命名规则与变量相同。(回顾)
- 常量表达式表示数组的长度。常量表达式不允许包含变量,即数组的长度是固定的,不能动态定义。
- 数组下标从0开始
int i = 10;
int num[i];
//这是错的,i 是变量!定义的时候只能是数字
引用
逐个引用元素,不能进行整体的引用
引用的一般形式:
数组名[下标表达式]
例:
a[0]=50;
a[1]=100;
a[2]=a[0]+a[1];
下标表达式可以是整型常量、整型变量 或 整型表达式。
例如:
int a[10];
a[i](0<=i<10)
a[2*3]
例:
从键盘输入10个数
方法一:用变量
scanf
方法二:用数组
循环控制
int a[10],i;
for(i=0;i<10)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
初始化
初始化:指在定义时指定初始值,编译器把初值赋给数组变量
1.对全部数组元素赋初值
int a[4]={1,2,3,4};
int a[]={1,2,3,4,5,6};给全部元素赋初值时,数组长度可省略。
2.可以只给一部分元素赋初值
int a[10]={0,1,2,3}; //剩余值自动赋0;
int a[10]={0}; //全部赋为0;
在运行阶段赋值
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
习题
第一题
- 定义一个int类型数组,数组里有5个元素。
- 在屏幕上输入5个元素的值
- 将所有元素的数值输出到屏幕上
- 使数组中小于5的数组元素加10,并在屏幕上输出修改后的完整数组。
注意三个循环,分别是输入、输出、判断是否需要+10
输出结果样图:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a[5],i;
printf("输入一个5个数的数组\n");
for(i=0;i<5;i++)
{
printf("请输入第%d个数组:",i+1); //i+1是为了美观,等同于i。
scanf("%d",&a[i]);
if(i==4)
{
printf("\n\n");
}
}
for(i=0;i<5;i++)
{
printf("第%d个数字为:%d\n",i+1,a[i]);
}
printf("\n\n");
for(i=0;i<5;i++)
{
if(a[i]<5)
{
a[i]=a[i]+10;
}
printf("修改后的第%d个数组为%d\n",i,a[i]);
}
return 0;
}
第二题
从键盘输入10个整形数据,找出最大值和最大值的下标并输出。
结果样图
int _tmain(int argc, _TCHAR* argv[])
{
int num[10],i,max=0,max_i=0;
printf("请输入一个10个数的数组:\n");
for(i=0;i<10;i++)
{
printf("请输入第%d个数:\n",i);
scanf("%d",&num[i]);
if(i==9)
{
printf("\n\n");
}
}
for(i=0;i<10;i++)
{
printf("输入的第%d个数字是:%d\n",i,num[i]);
if(i==9)
{
printf("\n\n");
}
}
for(i=0;i<10;i++)
{
if(num[i]>max)
{
max=num[i];
max_i=i;
}
}
printf("最大值是:%d\n",max);
printf("最大值的下角标是:%d\n",max_i);
return 0;
}
字符数组
理论讲解
- 字符数组的定义、初始化及应用
字符数组也是数组,只是数组元素的类型为字符型。所以字符数组的定义、初始化,字符数组数组元素的引用与一般的数组类似。
char a[10]:
a[0] | a[1] | a[2] | a[3]      (char i;) |
---|
char 是字符型,标准是'i','a',''空格也可以。第一节课就说了。
跟之前的数组区别于:
- 字符数组:存放字符型数据的数组。
C语言没有提供字符串变量,对字符串的处理常常采用字符数组实现。
C语言许多字符串处理库函数可以使用字符串,也可以使用字符数组。
C语言为了处理字符串方便,规定了以'\0'作为“字符串结束标志”。
字符数组和字符串有关系
- 字符数组的初始化
                1. 以字符常量的形式对字符数组初始化。
                2. 以字符串(常量)的形式对字符数组初始化。
                (系统会自动在最后一个字符后加'\0')
例如:char str[100]={'c','h','i','n','a'};
C | H | I | N | A |
---|
例如:char str[100]="china";
C | H | I | N | A | \0 |
---|
区别在\0
应用
char c1[10] = {'I',' ','a','m',' ','h','a','p','p','y'};
char c2[] = {'I',' ','a','m',' ','h','a','p','p','y'};
char c3[11] = {'I',' ','a','m',' ','h','a','p','p','y'}; //其余元素值会给 \0
int i;
for(i=0;i<10;i++)
{
printf("%c",c1[i]);
}
printf("\n");
char d[] = {"I am happy"};
char c4[] = {'I',' ','a','m',' ','h','a','p','p','y','\0'};
printf("d--%s\n",d);
printf("c4--%s\n",c4);
(1)逐个字符输入/输出,采用 “%c” 格式说明和循环,像处理数组元素一样输入/输出
(2)整串输入/输出:采用%S格式来实现。
字符串处理函数
#include <string.h>
1. 字符串输入 / 输出函数。gets(str1) / puts(str1) //void
2. 字符串长度strlen(str) //有返回值,int,int i=strlen(str1)
3. 字符串连接函数strcat(str1,str2) //void
4. 字符串复制函数strcpy(str1,str2) //void
5. 字符串比较函数strcmp(str1,str2) //void
引用 #include <string.h> 就省略了定义和声明,可以直接调用了。
void是无返回值,函数那节课讲过
理论讲解
- 字符串输入、输出函数
字符串输入 gets(str);
功能:从键盘输入一个字符串(可包含空格),直到遇到回车符,并将字符串存放到由str指定的字符数组(或内存区域)中。
字符串输出 puts(str);
功能:从str指定的地方开始,依次将存储单元中的字符输出到显示器,直到遇到“字符串”结束标志。
使用
printf("\n使用puts输出\n");
puts(str);
<----------------------------------------------------------------->
printf("\n\ngets puts---------------\n\n");
char str[100];//1 2 3 4 \0
printf("请输入字符串");
gets(str);
printf("直接使用s输出:%s\n",str);
- 字符串长度strlen(str);
功能:统计str为起始地址的字符串的长度(不包括“字符串的结束标志”),并将其作为函数值返回。
使用
printf("\n\nstrlen()函数\n");
int len;
len = strlen(str);//不包括字符串结束标志\0 1 2 3 4 \0
printf("\n111字符串长度为%d\n",len);
printf("\n222字符串长度为%d\n",strlen(str));
- 字符串连接函数strcat(str1,str2)
功能:将str2为首地址的字符串连接到str1字符串的后面。从str1原来的‘\0’(字符串结束标志)处开始连接。
char str1[100]=1234\0
char str1[100]=6789\0
str1=str1+str2
str1=1 2 3 4 6 7 8 9 \0
str2不变
str2=6789\0
使用
printf("\n\nstract函数\n");
char str1[100];
char str2[100];
printf("使用gets输入str1:\n");
gets(str1);//A B C \0
printf("使用puts输入str2:\n");
gets(str2);//C D D \0
printf("使用stract拼接str1+str2:\n");
strcat(str1,str2);//str1 = abc\0 str2 = cdd\0
//str1 = abccdd\0
//str2 = cdd\0
printf("拼接后的str1\n");
puts(str1);//把第二个变量拼接到第一个变量之后,需要使用string头文件
//printf("%s",str1);
printf("拼接后的str2\n");
puts(str2);
void类型,无返回值。
- 字符串复制函数strcpy(str1,str2)
功能:将str2为首地址的字符串复制到str1为首地址的字符数组中。
str2的内容复制到str1,没有变量去接,所以无返回值
使用
//str1 abccda\0
//str2 cdd\0
printf("\n\nstrcpy函数\n");
strcpy(str1,str2);//str2 abc\0 str1 cde\0
printf("执行strcpu(str1,str2)后的str1\n");
puts(str1);//把第二个变量覆盖到第一个变量之后,需要使用string头文件
printf("执行strcpy(str1,str2)str2\n");
puts(str2);
- 字符串比较函数strcmp(str1,str2)
功能:将str1,str2为首地址的两个字符串进行比较,比较的结果由返回值表示。
当str1=str2,函数的返回值为0;
当str1<str2,函数的返回值为-1;
当str1>str2,函数的返回值为1;
两个字符串自左向右逐个字符相比(按ASCII值大小比较),直到出现不同的字符或‘\0’为止。
如:
1."A"<"B"
2."A"<"AB"
3."Apple"<"Banana"
4."A"<"a"
5."compare"<"computer"
不等于的情况下返回非零
使用
printf("\n\n strcmp函数\n");
//数据库里存的是123456,屏幕上输出的是1234567
printf("输入str1:\n");
gets(str1);//132
printf("输入str2:\n");
gets(str2);//132
int cmp = strcmp(str1,str2);
if(cmp = 0)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
1 条评论
你的才华横溢,让人敬佩。 https://www.yonboz.com/video/68965.html