认识一维数组

  • 如何创建一个数组

//No.1 数组的定义语法
//类型 数组名[数组长度]
int  num[3];
float fNum[3];
double dNum[3];
char cNum[3];

类型:学过的数据类型
数组名:随便起的
数组长度:根据具体需求决定数组长度

数组的长相(在内存上的长相)

  • 数组是什么? 多个变量名有规律并且内存连续的变量的集合(多个普通变量)

  • 创建时的数字是数组长度

  • 数组的初始化

//No.1 创建数组的时候赋值,数组长度和元素个数相同
int array[3]={1,2,3};   //{}不能省略,arary[0]=1 array[1]=2 array[2]=3
//No.2 元素个数和长度不同,默认初始化为0
int array2[3]={1};      //arary2[0]=1 array2[1]=0 array2[2]=0
//No.3 当初始化的元素完整,数组长度可以省略
int array3[]={1,2,3};  //自动推断数组长度为3
//No.4 不存在数组长度为0的数组
int array4[];           //错误的写法
//No.5 不能先创建数组再使用{}方式初始化
int array[4];
array[4]={1,2,3,4};     //错误的写法

数组的访问

  • 数组名[下标]

  • 一般操作数组都是用循环操作(无论输入还是打印)

#include <stdio.h>
int main()
{int array[3] = { 1,2,3 };//数组的打印int result = 0;for (int i = 0; i < 3; i++) {printf("%d\t", array[i]);result += array[i];                     //数组求和II}printf("\n");int sum = array[0] + array[1] + array[2];   //数组求和Iprintf("sum:%d\n", sum);printf("sum:%d\n", result);//手动输入数据初始化数组for (int i = 0; i < 3; i++) {scanf_s("%d", &array[i]);}for (int i = 0; i < 3; i++){printf("%d\t", array[i]);}printf("\n");int num[4] = { 1 };for (int i = 0; i < 4; i++) {printf("%d\t", num[i]);}//其他类型的数组操作都是一样double dNum[3] = { 1.33,2.33 };for (int i = 0; i < 3; i++) {scanf_s("%lf", &dNum[i]);}for (int i = 0; i < 3; i++) {printf("%.3lf\t", dNum[i]);}return 0;
}/*输出*/1       2       3
sum:6
sum:6
3 4 6
3       4       6
1       0       0       0  1.22 3.44 6.6
1.220   3.440   6.600

一维数组常规操作

  • 插入 → 有序插入

  • 做调整 → 从小到大排序

  • 把元素直接放在数组后面,把插入的元素和前面的元素比较,比较到第一个位置结束 < 的情况要交换元素的位置

  • 在数组里面做下标 - 1 操作或者 + 1 操作,需要考虑下标合理性 → 临界值

#include <stdio.h>
int main()
{//数组能存储的最大元素个数是100int array[100];                //当前元素个数是0int curSize = 0;           int data = 0;//无序插入int data = 3;array[curSize++] = data;//无序插入后做调整->有序插入while (1) {printf("input data:");scanf_s("%d", &data);array[curSize++] = data;              //array[0]=1 curSize=1  for (int pos = curSize - 1; pos > 0; pos--) {if (array[pos] < array[pos - 1])  //相邻的元素做比较、做持续性的调整{ int temp = array[pos];array[pos] = array[pos - 1];  //0-1: -1下标array[pos - 1] = temp;}else                              //> 的情况不需要交换{break;}}int user = 0;while (getchar() != '\n');user = getchar();                    //清空缓冲区if (user == 'n' || user == 'N')      //输入n和N退出 输入状态break;}for (int i = 0; i < curSize; i++) {printf("%d\t", array[i]);}printf("\n");return 0;
}/*输出*/input data:8
y
input data:9
y
input data:55
n
8       9       55
  • 查找+删除(移位)

数组的删除叫做伪删除 → 只是做位置的调整,不能真正把元素删除 → 把后面的元素往前挪,记录当前 curSize - -

查找下标一般用 -1,数组下标会是0 → 如果第一个元素就是要查找的元素,返回0无法确定有没有找到,所以查找下标一般用 0

#include <stdio.h>
int main()
{//查找和删除int array[10] = { 10,20,30,40,50,60,70,80,90,100 };int curSize = 10;//要找的数据int data = 60;            //数组的查找->如果数组中的值=要删除的元素->找到了要删除的下标int pos = -1;         for (int i = 0; i < curSize; i++) {if (array[i] == data) {//记录找到元素下标pos = i;        break;}}if (pos == -1) {printf("没有找到相关元素,无法删除!");}else                                        //找到了做移位操作->调整数组{//在数组里面做下标-1操作或者+1操作,需要考虑下标合理性for (int k = pos; k < curSize-1; k++)   //k=9{array[k] = array[k + 1];         //array[10] 把数组后面的元素往前挪,记录数组长度的curSize--}curSize--;                             //数组真正的删除}for (int i = 0; i < curSize; i++) {printf("%d\t", array[i]);}printf("\n");return 0;
}/*输出*/10      20      30      40      50    70      80      90      100
  • 查找 + 修改

#include <stdio.h>
int main()
{//查找和修改int array[10] = { 10,20,30,40,50,60,70,80,90,100 };//记录当前数组中元素个数int curSize = 10;                                 int data = 60;int pos = -1;for (int i = 0; i < curSize; i++) {if (array[i] == data) {pos = i;break;}}if (pos == -1) {printf("没有找到无法修改!\n");}else  //修改数据                               {printf("请输入新的值:");scanf_s("%d", &array[pos]);}for (int i = 0; i < curSize; i++) {printf("%d\t", array[i]);}return 0;
}
/*输出*/请输入新的值:34
10      20      30      40      50    34    70      80      90      100
  • 排序 → 冒泡排序

第一次冒泡找到第一大的,第二次冒泡找第二大的,找第二大的可以减少一次比较次数,因为第一大的已经出来了,没必要拿第二大的和第一大的去比较:找第几大的元素(n>1)减少n-1次比较次数

#include <stdio.h>
int main()
{//冒泡排序int array[10] = { 60,70,80,90,100,10,20,30,40,50 };int curSize = 10;//排序//int count = 0;for (int i = 0; i < curSize; i++)          //每个元素都需要一个机会冒泡->描述每一个元素的冒泡{//描述每个元素冒泡过程 -i: i代表第几个元素的冒泡操作for (int j = 0; j < curSize-1-i/*不优化:< curSzie-1*/; j++)  {//从小到大排序if (array[j] > array[j + 1])       //不满足规则交换{int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;//count++;                     //记录比较次数}}}for (int i = 0; i < curSize; i++) {printf("%d\t", array[i]);} return 0;
}/*输出*/10      20      30      40      50      60      70      80      90      100

字符数组和字符串

  • 字符数组和数字类数组处理方案相同

  • 字符串存在一个不可见字符 ' \0 '

  • 字符串的打印: %s去做打印

    • %s的工作原理:从首地址(第一个元素的地址) &inputstr[0] 打印到 ' \0 ' 结束,所以%s对应的是地址

    //No.1 字符数组char array[] = { 'A','B','C' };  //自动推断数组长度为3for (int i = 0; i < 3; i++)      //字符数组必须要用for循环做打印、不能用"%s"的方式打印{putchar(array[i]);}putchar('\n');//No.2 字符数组操作字符串//字符串有一个不可见字符'\0'char str[] = "ILoveyou";         //自动长度是:9char inputstr[] = { 'A','B','C','D','\0','A','B','C' };//%s对应的是地址printf("%s\n", &inputstr[0]);    //ABCD  &inputstr[0]到'\0'结束printf("%s\n", &inputstr[2]);  //CD    &inputstr[2]到'\0'结束printf("%s\n", &array[0]);       //ABC烫烫烫烫烫烫烫烫烫烫烫烫烫烫?//字符数组和字符串的区别: 字符数组没有'\0',不知道打印到什么时候结束,把后面的无用内存都打印出来了//   0   1   2   3    4   5   6   7//{ 'A','B','C','D','\0','A','B','C' }// 数组名代表第一个元素的地址char output[] = "ILoveyou";printf("%s\n", output);          //&output[0] ILoveyouint key = 0;scanf_s("%d", &key);while (getchar() != '\n');      //字符串做输入前做了输入,可能会存在跳过现象,可以清空缓冲区char username[10];printf("请输入用户名:");//scanf不需要加长度 增强版要加长度 //scanf输入不接受带空格的输入scanf_s("%s", username,10);  printf("name:%s\n", username);//解决scanf输入不接受带空格的输入的问题:字符串输入函数 gets:输入+puts:打印char passw[20];//所有的字符串处理用的都是数组名printf("输入密码:");while (getchar() != '\n');       //存在跳过现象需要清空缓冲区gets_s(passw, 20);                 //20指的是passw的长度,vs对这个函数进行了改进gets(passw)->把输入的元素放到数组中puts(passw);                     //输出自带换行printf("-----\n");/*输出*/ABC
ABCD
D
ABC烫烫烫烫烫烫烫烫烫烫烫烫烫烫?
ILoveyou
2
请输入用户名:I Love                  //只接收I 空格后面的接收不了--->空格会截取字符串
name:I
输入密码:HH LL                      //用gets做输入可以接收空格
HH LL
-----

字符串处理函数

  • 包含字符串处理头文件 #include<string.h>

  • strcat:连接

  • strcpy:拷贝  →  注意:第一个字符串的长度要 ≥ 第二个字符串的长度,把后面的字符串 strFirst 拷贝到前面的字符串 strSecond 中去

  • strcmp:比较 → 字符串不能直接比较,需要调用函数去比较

比较规则

自左往右比,如果相同就去找下一个,一旦找到不同的字符,比较结果就出来了,根据ASCII码比较字符,与字符串的长度无关

"abc" "bc"   'a'<'b'  所以 "abc"<"bc";

"aabc" "aaa" 'b'>'a'  所以 "aabc">"aaa";

"aab" "aa"   'b'>'\0' 所以 "aab">"aa";

  • strlen:统计可见长度

#include <stdio.h>
#include <string.h>
int main()
{//string.h 字符串处理头文件char strFirst[] = "ILoveyou";int lenght = strlen(strFirst);     //可见长度不包含\0printf("可见长度:%d\n", lenght);char strSecond[10];//原版:strcpy(strSecond, strFirst); strcpy_s(strSecond, 10, strFirst);  //把"ILoveYou"拷贝到strSecond中去 增强版加入第一个字符串的尺寸puts(strSecond);char strThird[100] = { "666" };//原版:strcat(strThird, strSecond);   strcat_s(strThird, 100, strSecond);  //把strSecond连接到strThird后面puts(strThird);//比较//比较结果char first[] = "abc";char second[] = "bca";char third[] = "abc";int result=strcmp(first, second);   //传入两个数组名,返回值是整数//                   a     b//a-b>0          a>b  1//a-b<0         a<b -1//a-b==0     a==b 0  printf("==:%d\n", strcmp(first, third));printf("<:%d\n", strcmp(first, second));printf(">:%d\n", strcmp(first, "aaa"));//一般字符串用while循环char string[] = "ILoveyou";   //strlen函数的实现int count = 0;while (string[count] != '\0')       //求字符串的可见长度通过字符串的结束标记去判断{count++;                        //不等于'\0' count 一直做++运算}printf("size:%d\n", count);return 0;
}/*输出*/可见长度:8
ILoveyou
666ILoveyou                             //把 ILoveyou 连接到 666 后面
==:0
<:-1
>:1
size:8

c语言 --- 一维数组相关推荐

  1. c语言用一维数组求字符串,c语言一维数组练习题.doc

    c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...

  2. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  3. c语言一维数组课件,第9章:c语言一维数组课件

    第9章:c语言一维数组课件 随着竞争日益激烈,酒店嘴中的肥肉被大肆抢夺,各大酒店在这场竞争中几乎"溃不成军":就娱乐来讲,大城市里的娱乐场所遍地开花,酒店娱乐业的收入也是日益萎缩. ...

  4. c语言向自定数组_C语言一维数组的定义和引用

    C语言一维数组的定义和引用 C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必须先进行定义.一维数组的定义方式为: 类型 ...

  5. C语言 | 一维数组

    C语言一维数组的定义 一般形式 类型符 数组名[常量表达式] C语言使用一维数组注意事项 数组名的命名规则和变量名相同,遵循标识符命名规则. 在定义数组时,需要指定数组中元素的个数,方括号中的常量表达 ...

  6. 一维数组c语言,c语言一维数组_C语言一维数组入门教程

    摘要 腾兴网为您分享:C语言一维数组入门教程,优衣库,小米手环,小米钱包,小度等软件知识,以及胎教宝典,一级建造师题库软件,康佳渠道,刷点卷,一加系统,音乐节拍器,liveuc视频会议,辽宁省政务服务 ...

  7. c语言一维数组如何存放,C语言一维数组教案

    <C语言一维数组教案>由会员分享,可在线阅读,更多相关<C语言一维数组教案(6页珍藏版)>请在人人文库网上搜索. 1.学 科:计算机科学与技术课 程:C语言程序设计课 题:一维 ...

  8. c语言中的一维数组的定义,C语言一维数组的定义和引用

    <C语言一维数组的定义和引用>由会员分享,可在线阅读,更多相关<C语言一维数组的定义和引用(5页珍藏版)>请在人人文库网上搜索. 1.C语言一维数组的定义和引用在程序设计中,为 ...

  9. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  10. c语言用一维数组存储数据,C语言一维数组入门教程

    本文章来简单的介绍入门级的c语言入门教程,下面我来介绍C语言一维数组的使用方法,包括有一维数组,数组的引,数组的遍历用,数组的初始化等. 一.一维数组 1.定义一个一维数组: (1)格式:存储类别   ...

最新文章

  1. 树上问题 ---- Codeforces Round #722 (Div. 1) C. Trees of Tranquillity [dfs序区间的性质+最大不相交区间的性质]
  2. 连续按back键盘退出自己的应用,杀掉进程
  3. 走差异化发展路线思想
  4. FormData上传文件同时附带其他参数
  5. Android 实现文件上传功能(upload)
  6. java导入excel 实例_Java数据导入功能之读取Excel文件实例
  7. 优酷html5视频没有弹幕,优酷弹幕怎么设置 优酷PC端怎么屏蔽底下弹幕?
  8. 爱链工具 v1.11.24.0
  9. solaris php,在Solaris 10 64位上配置PHP
  10. 最小化或关闭时隐藏到系统托盘
  11. Serv-U FTP Jail Break(越权遍历目录、下载任意文件)
  12. Day15Day16多任务和任务切换
  13. Awesomium源码及编译
  14. 集团企业智慧建造管理平台劳务管理系统
  15. NPDP 产品经理国际资格认证
  16. 带你Dart带你Diao之类
  17. el-input和和filter结合实现实时搜索
  18. “打开文件所在位置”提示“找不到应用程序”的解决方案
  19. 开发电商App哪家好
  20. 在线端口检查工具 Online IP TCP UDP port scan

热门文章

  1. powershell + python 批量更改图片大小
  2. js发送http post请求
  3. 【Luogu_P5465】Dirichlet 前缀和
  4. 5个高质量免费下载SVG图标网站(第一个是中文的)
  5. php zlib 解压缩,使用php的zlib压缩和解压缩swf文件
  6. Docker 内部 DNS 原理
  7. E+H流量计之Proline Promass F 300 科氏力质量流量计概述
  8. 涂鸦智能和智能生活软件
  9. matlab手机版论坛,首页 - MATLAB中文论坛
  10. python读取sav文件_Python如何导入Spss的sav类型的数据