C语言总结(一维数组、二维数组、字符数组和字符串)

C语言总结

第七章、数组

数组是构造数据类型之一

  • 数组: 有序数据的集合,用数组名标识
  • 元素: 属同一数据类型,用数组名和下标确定

一维数组

一维数组的定义

定义方式:
《C语言总结(一维数组、二维数组、字符数组和字符串)》
例: int a[6]
《C语言总结(一维数组、二维数组、字符数组和字符串)》

一维数组的引用

1、数组必须先定义,后使用。
2、只能逐个引用数组元素,不能一次引用整个数组。
3、数组元素表示形式: 数组名[下标] ,下标可以是常量或整型表达式

一维数组的初始化

初始化方式:
《C语言总结(一维数组、二维数组、字符数组和字符串)》

说明:
1、数组不初始化,其元素值为随机数。
2、对static数组元素不赋初值,系统会自动赋以0值。
《C语言总结(一维数组、二维数组、字符数组和字符串)》
3、只给部分数组元素赋初值。
《C语言总结(一维数组、二维数组、字符数组和字符串)》
4、当全部数组元素赋初值时,可不指定数组长度。
《C语言总结(一维数组、二维数组、字符数组和字符串)》

程序举例

例1: 读10个整数存入数组,找出其中最大值和最小值
《C语言总结(一维数组、二维数组、字符数组和字符串)》

/*示例1*/
#include <stdio.h>
#define SIZE 10
main()
{    int x[SIZE],i,max,min;
    printf("Enter 10 integers:\n");
    for(i=0;i<SIZE;i++)
    {    printf("%d:",i+1);
	scanf("%d",&x[i]);
    }
    max=min=x[0];
    for(i=1;i<SIZE;i++)
    {   if(max<x[i])  max=x[i];
       if(min>x[i])  min=x[i];
    }
    printf("Maximum value is %d\n",max);
    printf("Minimum value is %d\n",min);
}

例2: 用数组求Fibonacci数列前20个数
《C语言总结(一维数组、二维数组、字符数组和字符串)》

/*示例2*/
#include <stdio.h>
main()
{    int i;
     int f[20]={ 1,1};
    for(i=2;i<20;i++)
       f[i]=f[i-2]+f[i-1];
    for(i=0;i<20;i++)
    {    if(i%5==0)  printf("\n");
         printf("%12d",f[i]);
    }
}

例3: 用冒泡法对10个数排序
《C语言总结(一维数组、二维数组、字符数组和字符串)》
《C语言总结(一维数组、二维数组、字符数组和字符串)》

/*示例3*/
#include <stdio.h>
main()
{    int a[11],i,j,t;
    printf("Input 10 numbers:\n");
    for(i=1;i<11;i++)
       scanf("%d",&a[i]);
    printf("\n");
    for(j=1;j<=9;j++)
       for(i=1;i<=10-j;i++)
          if(a[i]>a[i+1])
         { t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
    printf("The sorted numbers:\n");
    for(i=1;i<11;i++)
	printf("%d ",a[i]);
}

例4: 用简单选择法对10个数排序

《C语言总结(一维数组、二维数组、字符数组和字符串)》

《C语言总结(一维数组、二维数组、字符数组和字符串)》

 /*示例4*/
#include <stdio.h> 
main()
{    int a[11],i,j,k,x;
    printf("Input 10 numbers:\n");
    for(i=1;i<11;i++)
       scanf("%d",&a[i]);
    printf("\n");
   for(i=1;i<10;i++)
   {   k=i;
      for(j=i+1;j<=10;j++)
            if(a[j]<a[k])  k=j;
      if(i!=k)
      {   x=a[i]; a[i]=a[k]; a[k]=x;}
   }
    printf("The sorted numbers:\n");
    for(i=1;i<11;i++)
	printf("%d ",a[i]);
}

二维数组及多维数组

二维数组的定义

定义方式: 
《C语言总结(一维数组、二维数组、字符数组和字符串)》
《C语言总结(一维数组、二维数组、字符数组和字符串)》
数组元素的存放顺序
1、原因: 内存是一维的
2、二维数组: 按行序优先
3、多维数组: 最右下标变化最快

《C语言总结(一维数组、二维数组、字符数组和字符串)》
数组a[m][n],m行n列,共m*n个元素
《C语言总结(一维数组、二维数组、字符数组和字符串)》

这些元素占用m*n个单元,每个单元的大小取决于
元素的类型。

任意元素a[i][j]在数组中的位置计算公式为:

i×n+j (从0开始)

a——数组的起始地址;a[0]——0行0列元素的地址。

二维数组元素的引用

形式: 数组名[下标][下标]

二维数组元素的初始化

1、分行初始化
2、按元素排列顺序初始化

程序举例

例1:将二维数组行列元素互换,存到另一个数组中
《C语言总结(一维数组、二维数组、字符数组和字符串)》

/*示例1*/
#include <stdio.h>
main()
{    int a[2][3]={ { 1,2,3},{ 4,5,6}};
     int b[3][2],i,j;
    printf("array a:\n");
    for(i=0;i<=1;i++)
    {    for(j=0;j<=2;j++)
	{    printf("%5d",a[i][j]);
	    b[j][i]=a[i][j];
	}
	printf("\n");
    }    
    printf("array b:\n");
    for(i=0;i<=2;i++)
    {    for(j=0;j<=1;j++)
	   printf("%5d",b[i][j]);
         printf("\n");
    }
}

例2:求二维数组中最大元素值及其行列号
《C语言总结(一维数组、二维数组、字符数组和字符串)》

/*示例2*/
#include <stdio.h>
main()
{   int a[3][4]={ { 1,2,3,4},
                        { 9,8,7,6},
                        { -10,10,-5,2}};
    int i,j,row=0,colum=0,max;
    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,row=%d,\colum=%d\n",max,row,colum);
}

例3:分别求n阶方阵两条对角线上的元素之和

/*示例3*/
#define N 3
main()
{    int i,j,a[N][N];
int sum1=0,sum2=0;
for(i=0;i<N;i++)
  for(j=0;j<N;j++)
    scanf(%d”,&a[i][j]);
for(i=0;i<N;i++)
  for(j=0;j<N;j++)
    if(i==j) sum1+=a[i][j];
for(i=0;i<N;i++)
  for(j=N-1;j>=0;j--)
    if((i+j)==N-1) sum2+=a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}

字符数组和字符串

字符数组

定义 : 每个元素存一个字符,主要用来对字符串操作。
字符数组的初始化:

1、逐个字符赋值
2、用字符串常量

字符数组的引用:
《C语言总结(一维数组、二维数组、字符数组和字符串)》
《C语言总结(一维数组、二维数组、字符数组和字符串)》
《C语言总结(一维数组、二维数组、字符数组和字符串)》

《C语言总结(一维数组、二维数组、字符数组和字符串)》

字符串

字符串及其结束标志

(1)、无字符串变量,用字符数组处理字符串。
(2)、字符串结束标志:‘\0’。

《C语言总结(一维数组、二维数组、字符数组和字符串)》
字符串的输入输出
输入:

  • 用scanf函数
    (1).输入单个字符:%c 需用循环语句
    (2).输入字符串:%s scanf(“%s”,str);
  • 用gets函数:gets(str);

输出:

  • 用printf函数
    (1).输出单个字符:%c 需用循环语句
    (2).输出字符串:%s printf(“%s”,str);
  • 用puts函数:puts(str);

《C语言总结(一维数组、二维数组、字符数组和字符串)》

常用的字符串处理函数: 加粗样式包含在头文件 string.h

字符串输出函数puts

格式: puts(字符数组)
功能: 向显示器输出字符串(输出完,换行)
说明: 字符数组必须以‘\0’结束

字符串输入函数gets

格式: gets(字符数组)
功能: 从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明: 输入串长度应小于字符数组维数

字符串连接函数strcat

格式: strcat(字符数组1,字符数组2)
功能: 把字符数组2连到字符数组1后面
返值: 返回字符数组1的首地址
说明:
1、字符数组1必须足够大
2、连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’

字符串拷贝函数strcpy

格式: strcpy(字符数组1,字符串2)
功能: 将字符串2,拷贝到字符数组1中去
返值: 返回字符数组1的首地址
说明:
1、字符数组1必须足够大
2、拷贝时‘\0’一同拷贝
3、不能使用赋值语句为一个字符数组赋值
《C语言总结(一维数组、二维数组、字符数组和字符串)》

字符串比较函数strcmp

格式: strcmp(字符串1,字符串2)
功能: 比较两个字符串
比较规则: 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
返值: 返回int型整数,
a. 若字符串1< 字符串2, 返回负整数
b. 若字符串1> 字符串2, 返回正整数
c. 若字符串1== 字符串2, 返回零
说明: 字符串比较不能用“==”,必须用strcmp

字符串比较函数strcmp

字符串长度函数strlen
格式:strlen(字符数组)
功能:计算字符串长度
返值:返回字符串实际长度,不包括‘\0’在内
《C语言总结(一维数组、二维数组、字符数组和字符串)》

    原文作者:快乐的兔子1
    原文地址: https://blog.csdn.net/csuft20164442/article/details/86602115
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞