欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 【零基础C语言】第四节 数组

【零基础C语言】第四节 数组

2025/3/9 9:53:12 来源:https://blog.csdn.net/2302_76521583/article/details/145965546  浏览:    关键词:【零基础C语言】第四节 数组

【零基础C语言系列】

【零基础C语言】第一节 C语言概述+【数制进制码制】-CSDN博客

【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客

【零基础C语言】第三节 控制结构-CSDN博客

目录

一、一维数组 

1.1 数组的定义

1.2 数组元素的引用

1.3 数组的初始化 

1.4 ☆代码练习

二、二维数组 

2.1 初始化 

2.2 元素存储 

2.3 ☆练习题 

三、数组排序(扩展)

3.1 选择排序

3.2 ☆示例解析

​编辑 四、字符数组 

3.1 字符数组的定义

3.2 字符串结束标志  '\0'

3.3 字符数组的输入输出

说明:

五、☆课后练习 

数组:具有相同数据类型有序集合

使用过程中需要保留原始数据

一、一维数组 

1.1 数组的定义

  • 常量表达式可以是常量和符号常量,但不能是变量
  • C语言不允许对数组大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值
//类型 名字[常量表达式]
int a[10]; //能放10个数据
float f[10];
char c[20];

1.2 数组元素的引用

数组的基本单元——数组元素

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

                  下标:整型常量/表达式(整数)

               a0=a5+a7-a2*3]√

              int k=3;   a[k];  √

int a[10]; //数组的声明//访问数组第1个元素
a[0];
//a[10] 越界错误

1.3 数组的初始化 

//数组定义时,给数据元素赋值
int a[] = {0,1,2,3,4};
  • 初始化时可以只给部分元素赋初值,其余元素自动赋值 0 。  int a[5]={01}
  • 未初始化或采用赋值语句赋值,其他数组元素为不确定值int a[5]a[0]=1a[1]a[2]值不确定
  • 只能给元素逐个赋值,不能给数组整体赋值。 int a[5]={1,1,1,1,1};
  • 如果给全部元素赋值,可以不给出元素个数。    int a[]={1,2,3,4,5};

1.4 ☆代码练习

#include <stdio.h>
void main()
{
int i,a[10];
for (i=0; i<=9;i++)
a[i]=i;
for(i=9;i>=0; i--)
printf("%d ″,a[i]);
printf("\n″);
}
/**
* 求解斐波那契 Fibonacci数列
*/
# include <stdio.h>int main() {int i;int fB[20] = {1, 1};//填后面的值for (i = 2; i < 20; i++) {fB[i] = fB[i - 2] + fB[i - 1];}//打印前20个斐波那契数字for (i = 0; i < 20; i++) {if (i % 5 == 0) printf("\n");printf("%d ", fB[i]);}
}
/**
* 保留2位小数 %.2f*占位符占12个宽度 %12d
*/

二、二维数组 

数组名[行][列]

2.1 初始化 

2.2 元素存储 

2.3 ☆练习题 

 

三、数组排序(扩展)

3.1 选择排序

#include <stdio.h>int main() {int a[11] = {127, 3, 6, 28, 54, 68, 87, 105, 162, 18}; //第11个元素初始化为0int i, p, q, j, s;/*** 双循环: 相当于 127和后面所有数字都比一遍,* 再换 3和后面都比一遍* 看不懂就去体会双循环是怎么运行的*/for (i = 0; i <= 10; i++) {//暂时存储 位置和值p = i;    //0q = a[i];  //127for (j = i + 1; j <= 10; j++) {//找到比原来大的就更新一次 p 和 qif (q < a[j]) {p = j;q = a[j];}}//交换,让大的放前面if (p != i) {s = a[i];a[i] = a[p];a[p] = s;}printf("%d ", a[i]);}//外层循环结束
}

3.2 ☆示例解析

 四、字符数组 

3.1 字符数组的定义

  • 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。
  • 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
char c[10]; //放10个数据
c[0]=′I′;        c[1]=′ ′;        c[2]=′a′;
c[3]=′m′;       c[4]=′ ′;      c[5]=′h′;
c[6]=′a′;        c[7]=′p′;    c[8]=′p′;
c[9]=′y′;

3.2 字符串结束标志  '\0'

为了测定字符串的实际长度, C 语言规定了 字符串结束标志

字符数组并不要求它的最后一个字符为0′,甚至可以不包含0′

但是由于系统对字符串常量自动加一个′\0′,

因此,为了使处理方法一致,在字符数组中也常人为地加上一个′\0′

char c[5]={′C′,′h′,′i′,′n′,′a′};char c[6]={′C′,′h′,′i′,′n′,′a′,′\0′};

3.3 字符数组的输入输出

操作格式符说明
逐个字符输入输出%c用于输入或输出一个字符
整个字符串输入输出%s用于一次输入或输出一个字符串

说明:

1 )用 “%s” 格式符输出字符串时, printf 函数中的输出项是字符数组名,而不是数组元素名。
2 )如果数组长度大于字符串实际长度,也只输出到遇 0′ 结束。
3 )输出字符不包括结束符 0′。
4 )如果一个字符数组中包含一个以上 0′ ,则遇第一个 0′ 时输出就结束。
5 )可以用 scanf 函数输入一个或多个(输入时以空格分隔)字符串。数组中未被赋值的元素自动为 '\0' 。
/**
* 字符数组的输入输出
*/
#include <stdio.h>
int main(){char c1[6] = {'h','a','p','p','y','\0'};printf("%s\n",c1); //(1)char c2[7] = {'h','a','\0','p','\0','p','y'};printf("%s\n",c2); // (2)//用scanf函数输入字符串char str1[5],str2[5],str3[5];scanf("%s%s%s",str1,str2,str3);
}

 

五、☆课后练习 

输入一个矩阵,求该矩阵的转置,并输出?

int main() {printf("请输入一个2行3列的矩阵:\n");int a[2][3]; // 原始矩阵// 输入矩阵for (int i = 0; i < 2; ++i) { // 行for (int j = 0; j < 3; ++j) { // 列scanf("%d", &a[i][j]);}}// 转置并输出int b[3][2]; // 转置后的矩阵printf("转置后的矩阵为:\n");for (int i = 0; i < 3; ++i) {for (int j = 0; j < 2; ++j) {b[i][j] = a[j][i];// 输出矩阵,使用空格分隔printf("%d ", b[i][j]);}// 每行结束后换行printf("\n");}return 0; // 添加返回语句
}
//省略数组b,直接在输出时按转置的顺序访问原数组a的元素。
//节省内存,减少数据复制,提高了效率
#include <stdio.h>int main() {printf("请输入一个2行3列的矩阵:\n");int a[2][3];for (int i = 0; i < 2; ++i) {for (int j = 0; j < 3; ++j) {scanf("%d", &a[i][j]);}}printf("转置后的矩阵为:\n");for (int i = 0; i < 3; ++i) {for (int j = 0; j < 2; ++j) {printf("%d ", a[j][i]);}printf("\n");}return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词