数组

本文介绍了C语言中一维数组、二维数组及字符数组的基本操作,包括定义、初始化、输入输出、排序以及字符串处理函数的使用,并通过实例加深理解。

一维数组
(1)定义一个含有10个元素的数组,依次赋值为1,2,3,4,5,6,7,8,9,10,然后按逆序输出
这里写图片描述
(2)现在输入10个用户的有效学习时间,要求对它们按由小到大的顺序排序
这里写图片描述

一开始输入数组的时候加了\n:

scanf("%d\n",&a[i]);

导致每次都得输入第11个数才能执行。

二维数组

有一个3*4的矩阵,求出其中的最大值并输出最大值和其所在的行号和列号。
这里写图片描述
字符数组
c语言中没有字符串类型,字符串都是存储在字符型数组中的

字符串和字符串结束标志

在c语言中,是将字符串作为字符数组来处理的。在平时的应用中,人们往往关心的是字符串的有效长度而不是字符数组的长度。例如,定义一个字符数组长度50,而实际有效字符只有30个。为了测定字符串的实际长度,c语言规定了一个“字符串结束标志(’\0’)”,以字符’\0’作为结束标志。如果字符数组中存在若干字符,前面9个字符都不是空字符(’\0’),而第10个字符是’\0’,则认为数组中有一个字符串,其有效字符为9个。

c系统在用字符数组存储字符串常量时会自动加一个’\0’作为结束符。

例如:

printf("Shiyanlou");

在执行次语句时系统怎么知道该输出到哪里为止呢?实际上,在向内存中存储时,系统自动在最后一个字符’u’后面加一个’\0’作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为’\0’,遇到’\0’就停止输出。

有了上述理解,在对字符数组初始化的方法上面我们做出一些补充。例如:

char[]={"I love shiyanlou"};

我们也可以直接省去花括号:

char[]="I love shiyanlou";

这里不像之前单个字符作为字符数组的初值,而是用字符串作为初值(字符串做初值是用双撇号而不是单撇号)。这种方法更直观、更方便。

注意:此时数组的长度是17,而不是16,因为字符串常量的最后系统自动加了一个’\0’。上面的初始化与下面的初始化等价的。

char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u','\0'};

和下面的这个不等价:

char c[]={'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'};

字符数组的输入输出

字符数组的输入输出可以有两种方法。

(1)逐个字符输入输出,用格式“%c”输入或者输出一个字符。

(2)将整个字符串一次输入或者输出,用“%s”格式符,例如:

字符串处理函数

puts函数-输出字符串的函数

gets函数-输入字符串的函数

strcat函数-字符串连接函数

strlen函数-测字符串长度的函数

strcpy和strncpy——字符串复制函数

strcmp——字符串比较函数

任意键入3个字符串,编程找出最小的一个。

#include<stdio.h>
#include<string.h> //在使用字符串处理函数时,在程序文件的开头用#include<string.h>
int main()
{    char string[30];
    char ch[3][30];
    int i;
    for(i=0;i<3;i++)
        gets(ch[i]);
    strcpy(string,ch[0]);
    for(i=1;i<3;i++)
        if(strcmp(ch[i],string)<0)
            strcpy(string,ch[i]);
    printf("The result is :\n%s\n",string);

    return 0;
}

练习题

(1)输入20个实数存放在一维数组中,输出它们的平均值以及高于平均的数的个数。

(2)围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限,若能找到我你就可以饱餐一顿,在没找到我之前不能停止,狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件,结果狐狸跑得昏了过去也没找到兔子,请问兔子躲在哪个洞里。程序中可假定狐狸找了1000次。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值