文章目录
数组
一维数组的定义和引用
数组是按序排列的同类变量的集合,数组元素当然就是组成数组的基本单元
-
类型说明符 数组名 [常量表达式];
例如:int arr[3]={1,2,3} -
[ ] 数组访问操作符
-
数组是使用下标来访问的,下标从0 开始
-
常量表达式表示数组元素的 个数
-
数组在创建的时候,如果不指定数组的大小就得初始化,数组的元素个数根据初始化的内容来确定
例如:nt arr[]={“abc”};//sizeof(arr)=4, strlen(arr) =3
例如:nt arr[]={ ‘a’,‘b’,‘c’};//sizeof(arr)=3, strlen(arr) =随机值 -
数组在内存中是连续存放的,由低地址项高地址
-
一维数组的使用
键盘输入10个数,输出最大值
#include <stdio.h>
main()
{
int i,max,a[10];
printf("输入10为数字")
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max)
max=a[i];
printf("maxnum=%d\n"max)
}
二维数组的定义和引用
-
类型说明符 数组名[常量表达式1] [常量表达式2];
例如:int a[3][4]={3,16,87,65,4,32,11,108,10,325,12,27};
→若对全部元素初始化,则第一维的长度可以不给出
例如:int a[ ][4]={3,16,87,65,4,32,11,108,10,325,12,27};
→对每行第一列进行初始化
例如 :int a[2][3]={{1},{2}} -
常量表达式1表示第一维下标的长度
-
常量表达式2表示第二维下标的长度
int a[3][4],定义了一个三行四列的数组 -
行可以省略,列不可以
int a[][4]={{1,2,3,4,},{5,6,7,8,}}定义了一个2行四列的数组 -
a[i][j];调用第i行,第j 列的数组元素
-
二维数组按行排列 ,也是连续存储的,由低地址向高地址
-
数组是一种构造类型,二维数组可以看作由一维数组的嵌套而构成的
二维数组的使用
构造并输出一个5行5列的矩阵,主对角线上的数为1,其他位置色数为0
#include <stdio.h>
man()
{
int a[5][5],i,j;
for(i=0;i<5;i++)//外层循环控制行//矩阵的建立
for(j=0;j<5;j++)//内层循环控制列。
if(i==j)
a[i][j]=1;
else
a[i][j]=0;
for(i=0;j<5;i++)//矩阵的输出
{
for(j=0;j<5;j++)
printf("%4d",a[i][j]);
printf("\n")
}
}
字符数组
- 例如: char c[5]={‘h’,‘l’,‘o’,‘o’,‘e’}
- 当把一个字符串存入一个数组时,也把结束符’\0‘存入了数组
- 用字符串方式初始化比用字符逐个进行初始化多占一个字节
- 例如:char c[]={’C’,’ ',‘p’,‘r’,‘g’,‘r’,‘a’,‘m’};
- 可以:char c[]={“C program”}
- 可以:char c[]=“C program”
- 当用scanf函数输入字符串时,字符串不能含有空格否则,将以空格作为串的结束标志
- 曾经介绍scanf的个输入项必须以地址方式出现,如&a,&b等
- 但scanf(“%s%s%s”arr1,arr2,arr3)却以数组名出现,原因是数组名代表数组的首地址,是个地址常量
- 整个数组时个以首地址开头的一块连续的内存单元,
字符串输出函数puts
puts(字符数组名);
功能:把字符数组中的字符串输出到标准输出设备上,即在屏幕上显示该字符串。
字符串输入函数gets
gets(字符数组名);
功能:从键盘上输入一个字符串,本函数得到一个函数值,即为该字符数组的首地址,gets函数并不以空格作为字符串输入结束的标志
字符串连接函数strcat
strcat(字符数组1,字符数组2);
功能:把字符数组2 的字符串连接到字符数组1中字符串的后面,并删除字符串1后原有的串结束标志’\0’,
本函数的返回值是字符数组1的首地址
字符串复制函数strcpy
strcpy(字符数组名1,字符数组名2)
功能:把字符数组2的字符串复制到字符数组1中,串结束标志’\0‘也一同复制,本函数字符数组1应有足够的长度
字符串比较函数strcmp
strcmp(字符数组名1,字符数组名2)
字符串1 = 字符串2,返回值=0
字符串1 > 字符串2,返回值>0
字符串1 < 字符串2,返回值<0
功能:根据ASCII码顺序比较返回比较结果,也可以用来比较两个字符串常量,或比较数组和字符串常量
字符串长度测试函数strlen
strlen(字符数组名)
功能: 求字符串的长度,并作为函数值返回,当碰到字符串结束标志\0停止,不包括\0
字符串所占空间函数sizeof
sizeof()
:计算arr所占空间的大小,包括\0也算占用空间
经典案例一
在二维数组a选出各行最大的元素,组成一个一维数组b。
#include <stdio.h>
main()
{
int a{}{4}={3,16,87,65,4,32,11,108,10,325,12,27}
int b[3],i,j,m;
for(i=0;i<3;i++)//外层循环控制行数,比较3次,0,1,2,
{
m=a[i][0];//行的第0列元素已经提取出来,所以下面j初始化为1
for(j=1;j<=3;j++)//内层循环控制列数,比较三个三次
if(a[i][j]>m)
m=a[i][j];//将暂时比较出的大的数赋给m
b[i]=m;//再将m赋给b[i]
}
printf("输出数组a:\n")
for(i=0;i<3;i++)
{
for(j=1;j<=3;j++)
printf("%5d",a[i][j]);
printf("\n")
}
printf("输出数组b:\n")
for(i=0;i<3;i++)
printf("%5d",b[i]);
printf("\n"]);
}
经典案例二
输入5个国家的名称,并按字母顺序排列输出
#include <indio.h>
main()
{
char cs[5][20], st[20];
int i,j,p;
printf{"请输入五个国家名称"}
for(int i=0,i<5,i++)
gets(cs[i]);//键盘获取五个国家名称
printf("\n");
for(i=0,i<5,i++)
{
p=i;//中间变量,将i的下标赋给p,存取当前最小值
strcpy(st,cs[i])//将获取到的国家赋给st
for(j=i+1;j<5;j++)//循环找出最小城市名
if(strcmp(cs[j],st)<0)//比较函数,
{
p=j;//将下一个获取到的字母小的国家的下标赋给p,存取当前最小值
strcpy(st,cs[j]);//将下一个获取到的字母小的国家赋给st
}
if(p!=i)//如果此时p不等于i,说明执行了上面内层循环语句,有更小的国家出现
{
//交换位置,将最小值提到前面
strcpy(st,cs[j]);
strcpy(cs[i],cs[p]);//将中间变量存取的最小值赋给cs[i]
strcpy(cs[p],st);
}
puts(cs[i]);//输出字母顺序小的国家
}
printf("\n");
{
花神博客生涯之C语言(5)结束了哦~
接下来会持续更新(⊙o⊙)!