当前位置: 首页 > news >正文

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

【零基础C语言系列】

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

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

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

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

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

一、一维数组 

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);
}

 

五、☆课后练习 

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


http://www.mrgr.cn/news/93307.html

相关文章:

  • QT5 GPU使用
  • vLLM代码推理Qwen2-VL多模态大模型(远程服务器解决方案,无需UI)
  • 机器学习数学基础:40.结构方程模型(SEM)中卡方值与卡方自由度比
  • 人工智能神经网络基本原理
  • cursor使用经验分享(java后端服务开发向)
  • Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)
  • 启智平台华为昇腾910B 运行DeepSeek Janus-Pro-7/1B
  • Dify 开源大语言模型应用开发平台使用(一)
  • 【Oracle学习笔记】1.数据库组成对象
  • mybatis日期格式与字符串不匹配bug
  • 突破光学成像局限:全视野光学血管造影技术新进展
  • 网络编程之TCP协议
  • YOLOv8改进SPFF-LSKA大核可分离核注意力机制
  • java 查找两个集合的交集部分数据
  • 随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)
  • Qt:事件
  • NUMA架构介绍
  • vulnhub靶场之【digitalworld.local系列】的mercy靶机
  • 深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
  • 【Embedding】何为Embedding?