C语言之数组

怎么定义一维数组

下面是对一维数组的定义:(很重要考试考)

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语言中数组名代表该数组第一个元素的地址(或者说数组的起始地址)

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值