【零基础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 数组元素的引用
数组的基本单元——数组元素
表现形式:数组名[下标]
下标:整型常量/表达式(整数)
a[0]=a[5]+a[7]-a[2*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]={0,1};
- 未初始化或采用赋值语句赋值,其他数组元素为不确定值。 int a[5];a[0]=1; a[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 | 用于一次输入或输出一个字符串 |
说明:

/**
* 字符数组的输入输出
*/
#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;
}