怎么定义一维数组
下面是对一维数组的定义
:(很重要考试考
)
int a[10]
它表示定义了一个整形数组,数组名为a,此数组包含了10个整形元素。
定义一维数组的一般形式为
类型说明符 数组名[常量表达式]
注意
:(1)下标是从0开始的,按照上面的定义,不存在数组元素a[10]
(2)常量表达式中可以包含常量和符号常量,但是不能包含变量,如"int a[n]"是不合法的。
例题:对10个元素数组依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
解:
#include <stdio.h>
int main()
{
int i,a[10];
for(i = 0;i <= 9;i++)//第一个for循环使a[0]~a[9]的值为0~9
a[i] = i;
for(i = 9;i >= 0;i--)//第二个for循环按a[9]~a[0]的顺序输出各元素的值
printf("%d",a[i]);
printf("\n");
return 0;
}
运行结果:9876543210
一维数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化),是程序更简洁。
eg:
int a[10] = {0,1,2,3,4,5,6,7,8,9};//全部元素赋值
int a[10] = {0,1,2,3,4};//给一部分赋值
int a[10] = {0,0,0,0,0,0,0,0,0,0};//全部元素值为0
int a[] = {1,2,3,4,5};//自动会确定数据的个数
int a[10] = {1,2,3,4,5};//只初始化前五个元素,后五个元素为0
怎样引用二维数组
二维数组元素的表现形式如下所示:
数组名[下标][下标]
二维数组的初始化
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//分行给二维数组赋初值
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};//与上面的相同
int a[3][4] = {{1},{5},{9}};//部分赋值
int a[3][4] = {{1},{0,6},{0,0,11}};//也可以对各行中的某一元素赋初值
初始化后的数组袁术如下:
1 0 0 0
0 6 0 0
0 0 11 0
int a[3][4] = {{1},{},{9}};//对第二行不赋初值
例题:
有一个3*4的矩形,要求编程序求出其中最大元素的值,及其所在行号和列号。
#include<stdio.h>
int main()
{
int i,j,row = 0, colum = 0, max ;
int a[3][4] = {{1,2,3,4},{7,8,9,20},{32,21,23,73}};
max =a[0][0];
for (i = 0;i <= 2;i++)
{
for (j = 0;j <= 3;j++)
if (a[i][j] > max)
{
max = a[i][j];
row = i;
colum = j;
}
}
printf("max = %d\nrow = %d\ncolum = %d\n",max,row,colum);
return 0;
}
字符数组
用来存放字符数据的数组是字符数组。在字符数组中一个元素存放一个字符。定义字符数组的方法与定义数值型数组的方法类似。
char c[10];
c[0] = 'I';c[1] = '';c[2] = 'a';c[3] = 'm';c[4] = ''; c[5] = 's';c[6] = 'a';c[7] = 'd';
字符数组的初始化
例如:
char c[10] = {'I','','a','m','','s','a','d'};
如果在定义字符的时候不初始化,则数组中的个元素的值是不可预料的。
字符串和字符串结束标志
遇到字符’\0’时,表示字符串结束,把它前面的字符组成一个字符串
注意
:C系统在用字符数组储存字符串常量时会自动加一个’\0’作为结束符。例如“C program”共有9个字符,但在数组中占十个字节,最后一个字节’\0’是系统自动加上的。||‘\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不做。
用字符串常量使字符数组初始化,例如:(以下三个语句相等
)
char c[] = {"I am happy"};
char c[] = "I am happy";
char c[] = {'I',' ','a','m',' ','h','a','p','p','y','\0'};//'\0'一定要写,否则是错误的
这个代码很重要(三颗星
)
printf("%s\n",c);//输出字符串用%s,c代表一个数组
注意:
在输出字符数组中的字符串时,遇到’\0’就会停止
字符数组的输入输出
字符数组的输入输出有两种方法。
- 逐个字符输入输出。用%c输入或输出一个字符。
- 将整个字符串一次输入或输出。用%s格式符,意思是对字符串的输入输出。
输出的字符中不包括结束符“\0”。
1.用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
2.如果数组长度大于字符串的实际长度。也只输出到遇“\0”结束。
3.如果一个字符数组中包含一个以上“\0”,则遇第一个“\0”时输出就结束。
4.可以用scanf函数输入一个或者多个字符串。
例如:
scanf("%s",c);//c是已定义的字符数组名
char str1[5] , str2[5] , str3[5];
scanf("%s%s%s",str1,str2,str3);
//会输出数据:How are you?
注意:
scanf函数中的输入项如果是字符数组名,不要再加地址符&,因为在C语言中数组名代表该数组第一个元素的地址(或者说数组的起始地址)