字符串、数组

数组

(1):数组的定义

数组是有序数据的集合。数组的定义包括数组内数据的类型、数组的名称和元素个数

举例:

int a[100]//该数组内元素的类型为整形数据,数组名称为a,元素个数为100

注意:数组内元素的标号是从0开始的,所以该数组内元素下标是从0~99,而a[100]的地址是一个不确定的地方,一般数组越界会造成不好的后果,所以使用数组时,要注意保证数组的大小足够。

(2):数组的使用

1:数组内元素的初始化

举例:

 用for循环将数组内元素全部设为用一个值,例如上图将数组内全部元素全变为1。

注意:1:若不给数组赋值,则数组内元素为随机数。

           2:也可以通过数组下标来给数组部分元素赋值。

2:数组常用来储存数据,而当我们想要访问数组内元素时,可以通过其下标来访问。

注意:数组的下标也可以用字符来表示,此时数组的下标为该字符在ascll表中十进制对应的大小。

举例:已知字符‘A’在ascll表中十进制对应的大小为65。

 3:二维数组

1:二维数组的定义

举例:

int a[3][5];//3为该数组的行数,5为数组的列数,故该数组共有15个元素

其数组内元素的存放以行优先。

4;数组的应用

1:求一组数据中的最小(大)值。

#include <stdio.h>
int main()
{
    int a[100];
    int n,min;
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    scanf("%d",&a[i]);
    min=a[0];//先让最小值等于数组内第一个元素
    for (int i=0;i<n;i++)//遍历数组
    if (a[i]<min)//若发现数组内元素比min小,则将该值赋给min
    min=a[i];
    printf("%d",min);
    return 0;
}

2:给数组内元素按升序或降序排列

主要学习了两种方法:选择排序法和冒泡排序。

(1):选择排序法:

#include <stdio.h>
int main()
{
    int a[1000];
    int n;
    int t, k;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    for (int i = 0; i < n - 1; i++)
    {
        k = i;
        for (int j = i + 1; j < n; j++)
        {
            if (a[j] > a[k])//找到数组内最大值对应的下标
                k = j;
        }
        t = a[k];//将最大值与数组内下标为i的元素交换值
        a[k] = a[i];
        a[i] = t;
    }
    for (int i = 0; i < n; i++)
    {
            printf("%d ", a[i]);
    }
    return 0;
}

分析:1:首先通过n-1次循环,从n个数中找到最大的数,将该数放到数组的第一个元素的位置。

           2:再通过n-2次循环,从n-1个数中找到最大的数,将该数放到数组的第二个元素的位置,重复上述过程,直到排序完成(上图代码为降序排列)。

(2):冒泡排序:

主要代码:

for (int i=0;i<n-1;i++)
    for (int j=0;j<n-1-i;j++)
    {
        if (a[j]>a[j+1])//比较相邻两个元素的大小,此时为从小到大
        if (a[j]<a[j+1])//此时为从大到小
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
    }    

分析:从左到右比较相邻两个元素的大小,每一次比较,该数组的最大或最小元素就会像冒泡一样从数组的最右边出来,故称冒泡排序。

字符串

1:字符串是以‘\0’为结束标志的一串字符,如字符串‘happy’由‘h’、'a'、‘p’、‘p’、‘y’和‘\0’6个字符组成,但该字符串的有效长度为5。

2:字符的输入和输出

(1):输入一个字符用scanf("%c",&ch)或getchar();

            输入一个字符串用scanf("%s",ch),此时ch前不用加&,且到空格才停止

    用gets(),到回车停止

(2):输出一个字符用printf("%c",ch);

            输出字符串用printf("%s",ch)或puts();

3:常用字符串函数包含在文件#include <string.h>中

(1):gets函数

举例:gets(字符数组)

注意:该函数遇到回车时才会停止读入字符到数组里,并且会自动加‘\0’

 (2):puts函数

举例:puts(字符数组)

注意:输出完数组后自动换行

(3):strcpy函数

举例:strcpy(字符数组1,字符串2)

功能:将字符串2拷贝到字符数组1

(4):strcmp函数

举例:strcmp(字符串1,字符串2)

功能:对两个字符串从左到右逐个比较,直到遇到不用字符或‘/0’时停止

注意:最后返回的值为int型整数,且若字符串1<字符串2,返回负值;若字符串1>字符串2,返回正值;若字符串1=字符串2,返回0

(5):strlen函数

举例:strlen(字符数组)

功能:计算字符数组的有效长度(即不包括‘\0’)

注意:返回值为字符数组的长度

 

 

 

 

 

 

 

 

 

 

 

 

           

posted @ 2021-10-22 22:40  zz7zz  阅读(252)  评论(0编辑  收藏  举报