? ? ? ? ? ??数组是指一组数据的集合 ,其中的每个数据被称作元素,在数组中可以存放任意类型的元素.数组是一种将一组数据存储在单个变量名下的优雅方式。
? ? ? ? ? ? 接下来,我会从4个方面逐一讲解数组
(1)一维数组? ? ? ?(2)二维数组? ? ? ???(3)字符数组? ? ? ? ?(4)一些数组的展示
? ? 为了方便大家理解,就把其想象成一个小孩,一维数组是一个小孩,他可以有帅气的外表,极高的学习天赋等等,int? ?a[2] (小孩)=? ?{1(帅气的外表),2(极高的学习天赋)};这个时候,就有人要问了,二维数组,咋理解了? 这也好办。 int a [3](小孩的个数) [2](小孩)? =? ?{{1,2,} ,{4,7},{6,5}} ;? ??注? 小孩的属性不一样,很合理吧!? 字符数组就想象成一个特殊的小孩。那我们开始喽!? ? ? ? ? ? ??
? ? ? ? *变量的定义:类型名 变量名;
? ? ? ? *数组的定义:类型名 数组名[数组元素个数] = {初值1,初值2,。。。};
? ? ? ? ? ??给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法
? ? ? ? ? ? 数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行
的。这样将减少运行时间,提高效率。
? ? ? ? ? ? 初始化赋值的一般形式如下:
? ? ? ? ? ? 类型说明符数组名[常量表达式]=(值,值……值);
其中,在()中的各数据值即为各元素的初值,各值之间用逗号间隔。
? ? ? ? ? ? 例如:
? ? ? ? ?
?
??int a[10]={0,1,2,3,4,5,6,7,8,9};
?
? ? ? ? ? ? 相当于a[0]=0;a[1]=1···a[9]=9。
? ? ? ? ? ?C语言对数组的初始化赋值还有以下几点规定:
? ? ? ? ? (1)可以只给部分元素赋初值。当()中值的个数少于元素个数时,只给前面部分元素平 赋值。
? ? ? ? ? 例如: ?
? ? ? ??
?
? int a[10]={0,1,2,3,4};
?
? ? ? ? ?表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值
? ? ? ? ?(2)只能给元素逐个赋值,不能给数组整体赋值。
? ? ? ? ? 例如给十个元素全部赋1值,只能写为
? ? ? ? ?
?
int a[10]={1,1,1,1,1,1,1,1,1,1};
?
? ? ? ? ? 而不能写为
? ? ? ? ? int a[10]=1;
? ? ? ? ? (3)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。
? ? ? ? ? ?例如:
? ? ? ? ?
?
?int a[5]={1,2,3,4,5};
?
? ? ? ? ? 可以写成:
? ? ? ? ??
?
?int a[ ]={1,2,3,4,5};
?
? ? ? ? ?(1)int c_score[5] = { 90,80,85,95,70 };//全部赋初值
? ? ? ? ?(2)?int ps_score[5] = { 90,80 };//部分赋初值,未赋值的元素默认为0
? ? ? ? ?(3)int mysql_score[ ] = { 90,80,85,95 };//省略长度赋初值;? ??
? ? ? ? ?(4)int arr[3] = { 90,80,85,95,70 }; //错误,初值个数超过数组长度
? ? ? ? ?(5)int arr[3] = { 90,80.5,95.5 };
? ? ? ? ? ? ? ? ? int是一个整形变量,80.5为小数,int出来后为80,不四舍五入;
? ? ? ? ?(6)int b[5]; //没有赋初值,b[0]是0吗? 不是,是随机数
? ? ? ?二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。
? ? ? 例如对数组a[5][3]:
? ? ?(1)按行分段赋值可写为
?
?
it a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
?
? ? ? (2)按行连续赋值可写为
int a[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
? ? ? ? ? (1)可以只对部分元素赋初值,未赋初值的元素自动取0值。
? ? ? ? ? 例如:
? ??
? ? ? int a[3][3]={{1},{2},{3}};
? ? ? ?是对每一行的第一列元素赋值,未赋值的元素取0值。赋值后各元素的值为
? ? ? 1? ?0? ?0
? ? ? 2? ?0? ?0
? ? ? 3? ?0? ?0
??int a [3][3]={{0,1},{0,0,2},{3}};
? 赋值后的元素值为
? 0? ?1? ?0
? 0? ?0? ?2
? 3? ?0? ?0
? (2)如对全部元素赋初值,则第一维的长度可以不给出。
? 例如:
int a[3][3]={1,2,3,4,5,6,7,8,9};
?可以写为
?
int a[3]={1,2,3,4,5,6,7,8.9};
?(3)数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的,一维数组的每个元素都又是一个数组,就组成了二维数组。前提是各元素类型必须相同。据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。
??例如二维数组a[3][4],可分解为三个一维数组,其数组名分别为
? ? a[0]
? ? a[1]
? ? a[2]
对这三个一维数组不需另作说明即可使用。这三个一维数组都有4个元素,例如:一组a[0]的元素为a[0][0]、a[0][1]、a[0][2]、a[0][3]。
必领强调的是,a[0],a[1],a[2]不能当作下标变量使用,它们是数组名,不是一个单下标变量。
? ? ? ?字符数组也允许在定义时作初始化赋值。
? ? ? ?例如:
? ? ??
?char c[10]={‘c’,‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’};
? ? 赋值后各元素的值为
? ?c[0]=‘c’; c[1]=’ ’;?c[2]=‘p’; c[3]=‘r’; c[4]=‘o’;
? ?c[5]=‘g’; c[6]=‘r’; c[7]='a’; c[8]='m’;
? ?其中,c[9]未赋值,由系统自动赋予0值,对全体元素赋初值时也可以省去长度说明,
? ?例如:
?
?
?char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’};
?
? ?这时C数组的长度自动定为9。
注 :
? ? ?/0? 为字符串的结束标志
? ? ? ?
?%d、%f、%c和%s:
在printf函数中,%d、%f、%c和%s等是用来指定输出格式的转换字符。它们分别表示输出整数、浮点数、字符和字符串
?转义字符:
在C语言中,可以使用转义字符来输出一些特殊字符。例如,\n表示换行符,\t表示制表符。
? ? ? #include"stdio. h"
? ? ? int main( )
? ? ? {? ? ?? char string[81];
? ? ? ? ? ? ? ?int i,num=0,word=0;
? ? ? ? ? ? ? ?char c;
? ? ? ? ? ? ? ?gets(string);
? ? ? ? ? ? ? ?for(i=0;(c=string[i])!=\0;i++)
? ? ? ? ? ? ? ?if(c== ‘ ’) word=0;
? ? ? ? ? ? ? ?else if(word==0){
? ? ? ? ? ? ? ?word=1;
? ? ? ? ? ? ? ?num++;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ?printf("There are %d words in the line\n",num);
? ? ? ? ? ? ? ?return 0;
? ?}?
? ? ? ?I an a student!
? ? ? ?There are 4 words in the line?
? ? ? ?本程序中若当前字符是空格,那么未出现新单词,使word=0,num不累加,若当前字符?不是空格,分两种情况:
(1)如果前一字符为空格,即word==0,新单词出现,word=1,num加1
(2)如果前一字符为非空格,即word==1,未出现新单词,num不变。
? ? ?
? ? ? ?希望对大家有帮助哦!拜拜!