0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言—数组详解

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-19 10:15 次阅读

一、数组

开发环境:

虚拟机+Linux操作系统

虚拟机:虚拟一台电脑

Linux操作系统:redhatubuntu系统、红旗系统

Linux基本指令、C语言数据结构、C语言语句、C语言运算符、数组。

数组:多个同类型数据的集合。

一维数组的定义语法:int data[10]; <数据类型> <数据名称>[常量-整数-数据数量];

定义一个int类型的数组,数组的名称是data,长度是10,所占空间大小:4*10字节。

二维数组的定义语法:int data[10][5];

int data[3][5]=

{

{1,2,3,4,5},

{1,2,3,4,5},

{1,2,3,4,5},

};

#include

int main()

{

int data[3][5]=

{

{1,2,3,4,5},

{11,12,13,14,15},

{21,22,23,24,25},

};

printf("%d\n",data[1][1]);

return 0;

}

多维数组的定义语法:int data[][][]…

特点:

  1. 访问数组成员的时候:下标是从0开始的。int data[10]; 下标 (0~9)
  2. 数组只是支持在定义的时候进行整体赋值。
  3. 数组定义的时候,[]里只能填常量。数组在定义之后就无法更改大小。
  4. 数组的空间是连续的—内存。
  5. 数组的名称就是数组空间的首地址。
  6. 数组初始化时,如果没有赋值,那么数组空间里的数据是未知的---局部变量。
  7. 数组初始化时,只要给一个空间赋值,剩余空间都自动初始化为0---局部变量。

示例1:

#include

int main()

{

char i;

int data[10]={12,13,14,15}; //下标

int a[5];

for(i=0;i<10;i++) //0~9

{

printf("data[%d]=%d\n",i,data[i]);

}

for(i=0;i<5;i++) //0~4

{

printf("a[%d]=%d\n",i,a[i]);

}

return 0;

}

示例2:

#include

int main()

{

int i;

int data[5]={0}; //下标

//从键盘上读取5个数据存放到数组里

printf("请输入5个数据:");

for(i=0;i<5;i++)

{

scanf("%d",&data[i]); //两种:空格 、 回车-换行

}

for(i=0;i<5;i++)

{

printf("data[%d]=%d\n",i,data[i]);

}

for(i=4;i>=0;i--)

{

printf("data[%d]=%d\n",i,data[i]);

}

return 0;

}

配置VIM编辑器:在命令行上运行命令: vim /etc/vimrc

打开文件之后,在文件结尾加上两行代码保存退出。

set number

set tabstop=4

作业:

  1. 定义数组,从键盘上录入5个浮点类型数据存放到数组,计算平均值和最大、最小值,输出到屏幕上。

#include

int main()

{

int i;

float sum=0;

float data[5];

float max=0;

float min=100;

printf("请输入5个数据:");

/*1. 输入数据*/

for(i=0;i<5;i++)

{

scanf("%f",&data[i]);

}

/*2. 处理数据*/

for(i=0;i<5;i++)

{

sum+=data[i]; //累加

if(data[i]>max)max=data[i];

if(data[i])min=data[i];<>

}

printf("平均值:%.1f\n",sum/5.0);

printf("最大值:%.1f\n",max);

printf("最小值:%.1f\n",min);

return 0;

}

  1. 定义数组,从键盘上录入5个整数数据,求和,输出结果。

#include

int main()

{

int i;

int sum=0;

int data[5];

printf("请输入5个数据:");

/*1. 输入数据*/

for(i=0;i<5;i++)

{

scanf("%d",&data[i]);

}

/*2. 处理数据*/

for(i=0;i<5;i++)

{

sum+=data[i]; //累加

}

printf("和:%d\n",sum);

return 0;

}

  1. 定义数组,从键盘上录入10个整数数据,计算里面大于5、大于10数据的数量,输出结果。

#include

int main()

{

int i;

int data[10];

int cnt_10=0,cnt_5=0;

printf("请输入10个数据:");

for(i=0;i<10;i++)

{

scanf("%d",&data[i]);

}

//处理数据

for(i=0;i<10;i++)

{

if(data[i]>5)cnt_5++;

if(data[i]>10)cnt_10++;

}

printf("cnt_5=%d\n",cnt_5);

printf("cnt_10=%d\n",cnt_10);

return 0;

}

作业:

  1. 数组数据的替换:从键盘上输入10个整数数据之后,再将数组里等于5的数据替换成8.

#include

int main()

{

int data[10];

int i;

for(i=0;i<10;i++)

{

scanf("%d",&data[i]);

}

for(i=0;i<10;i++)

{

if(data[i]==5)data[i]=8;

}

for(i=0;i<10;i++)

{

printf("%d ",data[i]);

}

return 0;

}

  1. 数组数据的排序:从键盘上输入10个整数数据,按照从大到小和小到大的两种方式排序再输出。--冒泡排序

#include

int main()

{

int data[]={9,8,7,6,5,4,3,2,1};

int i,j;

int tmp;

for(i=0;i<9-1;i++)

{

for(j=0;j<9-1;j++)

{

if(data[j]>data[j+1])

{

tmp=data[j];

data[j]=data[j+1];

data[j+1]=tmp;

}

}

}

for(i=0;i<9;i++)

{

printf("%d ",data[i]);

}

printf("\n");

return 0;

}

/*

9 8 7 6 5 4 3 2 1

冒泡排序:相邻的两个数做比较,进行位置交换

第一轮排序:

8 9 7 6 5 4 3 2 1

8 7 9 6 5 4 3 2 1

8 7 6 9 5 4 3 2 1

8 7 6 5 9 4 3 2 1

8 7 6 5 4 9 3 2 1

8 7 6 5 4 3 9 2 1

8 7 6 5 4 3 2 9 1

8 7 6 5 4 3 2 1 9

第二轮排序:

7 8 6 5 4 3 2 1 9

7 6 8 5 4 3 2 1 9

7 6 5 8 4 3 2 1 9

*/

#include

int main()

{

int data[]={1,2,3,4,5,6,7,8,9};

int i,j;

int tmp;

int flag=0;

for(i=0;i<9-1;i++)

{

for(j=0;j<9-1-i;j++)

{

if(data[j]>data[j+1])

{

tmp=data[j];

data[j]=data[j+1];

data[j+1]=tmp;

flag=1;

}

}

if(flag)flag=0;

else break;

}

for(i=0;i<9;i++)

{

printf("%d ",data[i]);

}

printf("\n");

return 0;

}

/*

9 8 7 6 5 4 3 2 1

冒泡排序:相邻的两个数做比较,进行位置交换

第一轮排序:

8 9 7 6 5 4 3 2 1

8 7 9 6 5 4 3 2 1

8 7 6 9 5 4 3 2 1

8 7 6 5 9 4 3 2 1

8 7 6 5 4 9 3 2 1

8 7 6 5 4 3 9 2 1

8 7 6 5 4 3 2 9 1

8 7 6 5 4 3 2 1 9

第二轮排序:

7 8 6 5 4 3 2 1 9

7 6 8 5 4 3 2 1 9

7 6 5 8 4 3 2 1 9

*/

  1. 数组数据的拼接:定义A,B,C 3个数组,分别从键盘上给A,B,数组录入数据,再将A,B两个数组的数据拷贝到C数组里,再打印出C数组的值。

#include

int main()

{

int A[5]={1,2,3,4,5};

int B[5]={11,12,13,14,15};

int C[10];

int i=0,j=0;

for(i=0;i<5;i++)C[i]=A[i]; //将A数组的数据拷贝到C数组

for(j=i;j+5;j++)c[j]=b[j-i];>

for(i=0;i<10;i++)

{

printf("%d ",C[i]);

}

return 0;

}

  1. 数组数据的删除(不是真正意思的删除,这里相当于覆盖)。---数据库

先从键盘上录入10个整数数据:比如:12 34 56 78 12 34 12 5 12 77

比如:删除数组里所有的12这个数据:得到最终结果:34 56 78 34 5 77 其他后面空间清0

#include

int main()

{

int data[10]={1,2,2,2,5,2,7,2,9,2};

int a;

int i,j;

int cnt=9; //数组最后一个下标位置

printf("原数组里的值:");

for(i=0;i<10;i++)

{

printf("%d ",data[i]);

}

printf("\n");

printf("请输入要删除的数字:");

scanf("%d",&a);

for(i=0;i<10;i++)

{

if(data[i]==a)

{

//实现数据覆盖

for(j=i;j<10-1;j++)

{

data[j]=data[j+1];

}

data[cnt--]=0;

i--;

}

}

printf("现在数组里的值:");

for(i=0;i<10;i++)

{

printf("%d ",data[i]);

}

printf("\n");

return 0;

}

  1. 数组数据的插入(整数数组)

比如:12 ,4589,12,77

在第2个位置后面插入一个888

结果:12,45,888,89,12,77

#include

int main()

{

int data[11]={1,2,2,2,5,2,7,2,9,2};//10个数据

int a,b;

int i,j;

printf("原数组里的值:");

for(i=0;i<11;i++)

{

printf("%d ",data[i]);

}

printf("\n");

printf("请输入要插入的数字值:");

scanf("%d",&a);

printf("请输入要插入的位置(数组的下标位置):");

scanf("%d",&b);

for(i=10-1;i>=b;i--)

{

data[i+1]=data[i];

}

data[b]=a; //插入数字

printf("现在数组里的值:");

for(i=0;i<11;i++)

{

printf("%d ",data[i]);

}

return 0;

}

6.从键盘上输入一串整数,使用中文大写打印出来。--开具发票的时候就会用到

比如中文:壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整

数位分离

任务2

  1. 给普通用户增加sudo命令权限
  1. gedit文本编辑器命令。

vim 基于命令行编辑器。 (1)修改代码-改错

任务3:语句章节作业

1. 计算一个unsigned int类型数据中有多少个1(练习位运算、if语句、循环语句)

#include

int main()

{

unsigned int data=0x1234;

int i;

int cnt=0; //计数器--计数

for(i=0;i<32;i++)

{

if(data&0x1) // 0与任何数相&,结果是0

{

cnt++;

}

data>>=1;//data=data>>1;

}

printf("data=%d\n",data);

return 0;

}

/*

00000000 00000000 00000000 00000010 ---0x2

00000000 00000000 00000000 00000001

00000000 00000000 00000000 00000000

*/

1.求100之内自然数中最大的能被17整除的数。(保存数据)

#include

int main()

{

int i;

for(i=100;i>17;i--)

{

if(i%17==0)

{

printf("i=%d\n",i);

break;

}

}

return 0;

}

//for循环: 已知循环

//while循环:未知循环 while(cnt--)

3.计算并输出200—400之间不能被3整除的整数的和。

#include

int main()

{

int i;

int sum=0;

for(i=200;i<=400;i++)

{

if(i%3!=0)

{

sum+=i;

}

}

printf("sum=%d\n",sum);

return 0;

}

3.输出所有200-400以内能被3整除且个位数字为6的整数。

#include

int main()

{

int i;

for(i=200;i<=400;i++)

{

if(i%3==0)

{

//126

if(i%10==6)printf("个位数为6:%d\n",i);

}

}

return 0;

}

4,打印所有水仙花数。所谓水仙花是指一个三位数,其各位数字的立方和等于该数。

#include

int main()

{

int i;

int a,b,c;

for(i=100;i<=999;i++)

{

//123

a=i/100; //百位

b=i%100/10;

c=i%10/1;

if((a*a*a+b*b*b+c*c*c)==i)

{

printf("%d\n",i);

}

}

return 0;

}

5,判断某一年是否是闰年(条件是:1、能整除4且不能整除1002、能整除400)。

#include

int main()

{

int year;

printf("请输入年份:");

scanf("%d",&year);

if((year%4==0&&year%100!=0) || (year%400==0))

{

printf("%d是闰年.\n",year);

}

else

{

printf("%d是平年.\n",year);

}

return 0;

}

6.输入一个不多于5位的正整数,判断他是几位数,并逆序输出。--不需要循环

#include

int main()

{

int data;

printf("输入不多于5位数的整数:");

scanf("%d",&data);

//12345

if(data/10000)printf("5位数\n");

else if(data/1000)printf("4位数\n");

else if(data/100)printf("3位数\n");

else if(data/10)printf("2位数\n");

else if(data/1)printf("1位数\n");

return 0;

}

7.输入一个华氏温度,输出摄氏温度,计算公式为(华氏度-32)×5÷9要求结果保留两位小数。printf("%.2f",data); * / // \n 12*3

任务4:字符串

4.1数组的知识点

1.一维数组、二维数组、多维数组

2.数组:基本数据类型数组(int、float、char类型)、结构体数组…..

3.字符数组、字符串数组(学习很多字符串操作函数)

4.2字符串数组

字符数组和字符串数组的区别?

字符串数组结尾有一个特殊的结束符:'\0'

#include

int main()

{

int a[]={10,20,30}; //整数类型数组

char b[]={'A','B','C','D'}; //字符数组

char c[]="ABCD"; //字符串数组 '\0'

printf("a数组的大小:%d\n",sizeof(a));//12 %d %c %f %s %x

printf("b数组的大小:%d\n",sizeof(b));//4

printf("c数组的大小:%d\n",sizeof(c));//5

printf("long的大小:%d\n",sizeof(long)); //4

printf("int的大小:%d\n",sizeof(int)); //4

//long int

return 0;

}

字符串是字符数组吗?是

字符数组是字符串吗?不一定

字符串的输入输出有哪些?

#include

int main()

{

char str[100];

scanf("%s",str); //从键盘上输入字符串

printf("str=%s\n",str); //输出字符串

return 0;

}

#include

#include

int main()

{

char str[100]="12345";

//scanf("%s",str); //从键盘上输入字符串

//printf("str=%s\n",str); //输出字符串

//char *gets(char *); //获取字符串

//功能:多了一个获取空格的功能,回车

//gets(str);//从键盘上输入字符串

//printf("你输入的字符串是:");

//puts(str);//输出字符串

printf("字符串的长度:%d\n",strlen(str)); //5

return 0;

}

字符串常见的处理函数有哪些?

#include

#include

int main()

{

char str[200];

//常量:不可修改 "中文字符串"

//字符串拼接

//strcat(str,"欢迎学习嵌入式开发");

//strcat(str," 学习单片机");

//strcat(str," 学习Linux");

//printf("str=%s,%d\n",str,strlen(str));

//字符串比较 如果相等返回0

//printf("比较结果:%d\n",strcmp("1234","123"));

//字符串拷贝

//strcpy(str,"1123435gffbgfb");

//printf("结果:%s\n",str);

//字符串查找函数

printf("查找结果:%s\n",strstr("dscdscdsc123ksdhsd","123"));

return 0;

}

/*

const 声明常量---声明只读变量

//字符串拼接

char *strcat(char *restrict, const char *restrict);

//字符串比较

int strcmp(const char *, const char *);

//字符串拷贝

char *strcpy(char *restrict, const char *restrict);

//计算字符串长度

size_t strlen(const char *);

//字符串查找函数

char *strstr(const char *, const char *);

*/

实现计算字符串长度的功能?

#include

int main()

{

char str[200];

int i=0;

printf("请输入字符串:");

gets(str);

while(str[i]!='\0')

{

i++;

}

printf("字符串长度:%d\n",i);

return 0;

}

练习题目: 从键盘上输入一串字符串,计算字符串里的空格、大写字母、小写字母、数字个数?

#include

int main()

{

char str[200];

int i=0;

int cnt1=0,cnt2=0,cnt3=0,cnt4=0;

printf("请输入字符串:");

gets(str); //从键盘上录入数据

while(str[i]!='\0')

{

if(str[i]==' ') //判断空格

{

cnt1++;

}

else if(str[i]>='0'&&str[i]<='9')

{

cnt2++;

}

else if(str[i]>='a'&&str[i]<='z')

{

cnt3++;

}

else if(str[i]>='A'&&str[i]<='Z')

{

cnt4++;

}

i++;

}

printf("空格数量:%d\n",cnt1);

printf("数字数量:%d\n",cnt2);

printf("小写数量:%d\n",cnt3);

printf("大写数量:%d\n",cnt4);

return 0;

}

4.3字符的输入

解决字符不能连续输入的问题:

#include

int main()

{

char a;

char b;

char c;

printf("请输入字符1:");

scanf("%c",&a); //A\n

printf("请输入字符2:");

scanf(" %c",&b);

printf("请输入字符3:");

scanf(" %c",&c);

printf("输入字符:%c,%c,%c\n",a,b,c);

return 0;

}

方式2:

#include

int main()

{

// int getchar(void);

// int putchar(int);

char a;

char b;

char c;

printf("请输入字符1:");

scanf("%c",&a); //\n

while(getchar()!='\n'){}

printf("请输入字符2:");

scanf("%c",&b);

while(getchar()!='\n'){}

printf("请输入字符3:");

scanf("%c",&c);

while(getchar()!='\n'){}

printf("输入字符:%c,%c,%c\n",a,b,c);

return 0;

}

从键盘上输入字符的方式:常用的两种

#include

int main()

{

// int getchar(void);

// int putchar(int);

char a;

//scanf("%c",&a);

//printf("%c",a);

a=getchar(); //从标准输入获取一个字符

putchar(a); //输出字符

return 0;

}

输入字符串的常见方式:

#include

int main()

{

// int getchar(void);

// int putchar(int);

char str1[100];

char str2[100];

printf("请输入字符串1:");

//scanf("%s",str1);

gets(str1);

printf("请输入字符串2:");

//scanf("%s",str2);

gets(str2);

printf("结果:%s,%s\n",str1,str2);

return 0;

}

使用字符获取函数充当字符串输入功能:

#include

int main()

{

// int getchar(void);

// int putchar(int);

char str[100];

int i=0;

char a;

while(1)

{

a=getchar(); //读取一个字符

if(a=='#')

{

str[i]='\0';

break;

}

str[i++]=a;

}

printf("%s",str);

return 0;

}

4.4字符串作业

1.从键盘上输入一串字符串,计算字符串里的空格、大写字母、小写字母、数字个数

2.字符串比较:从键盘上录入2个字符串,判断是否相等。

3.字符串删除:从键盘上录入一个字符串,删除字符串里指定的单词,输出结果。

比如:原字符串”akjbcds123dfjvbf123fdvbfd123”

删除单词:“123”

输出的结果:”akjbcdsdfjvbffdvbfd”

4.字符串查找:从键盘上录入一个字符串,查找字符串里有几个特定的单词。再输出结果。

比如:原字符串”akjbcds123dfjvbf123fdvbfd123”

查找的单词:“123”

输出结果:3

5.字符串排序:从键盘上录入一个字符串,按照小到大的顺序排序。

6.字符串的插入:从键盘上录入一个字符串,从指定位置插入一个字符串,再输出结果。

比如:原字符串“1234567890”

(1).从指定位置插入新的单词。 比如 从第2个下标插入一个“ABC”字符串。

结果:“123ABC4567890”

(2).从指定单词后面插入新的单词。 比如 从”123”这个单词后插入一个“ABC”字符串。

结果:“123ABC4567890”

7.字符串替换: 从键盘上录入一个字符串,将指定单词替换成想要的单词。

比如:原字符串“123jfvfdj123dkfvbfdvdf”

想要将“123”替换成“888”或者“8888”或者“88”

8.从键盘上输入一个整数:将整数转为字符串输出。

比如:int a; scanf(“%d”,&a);使用字符串形式打印出a的值。

9.从键盘上输入一个字符串,转为整数输出。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7522

    浏览量

    127537
  • 数组
    +关注

    关注

    1

    文章

    408

    浏览量

    25593
收藏 人收藏

    评论

    相关推荐

    C语言中的数组详解

    数组:只能存放一种数据类型,比如int类型的数组、float类型的数组,里面存放的数据称为“元素”。
    发表于 09-09 10:54 1346次阅读

    入门——C语言:二维数组#C语言

    C语言数组
    jf_49750429
    发布于 :2022年11月16日 15:31:03

    C语言内存管理详解

    C语言内存管理详解,很不错的一份资料.
    发表于 08-06 23:14

    C语言数组格式介绍

    C语言数组的格式
    发表于 12-17 07:40

    C语言数组类型有哪些?

    C语言数组类型有哪些?
    发表于 10-15 09:06

    c语言二维数组定义及其规则详解

    一维数组只有一个下标,,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维
    发表于 11-16 08:49 2.2w次阅读
    c<b class='flag-5'>语言</b>二维<b class='flag-5'>数组</b>定义及其规则<b class='flag-5'>详解</b>

    c语言之字符数组详解

    ("%c ",a[i][j]);}printf("\n");}} 在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。当把一个字符串存入数组时,也把结束符‘\0’存入数组
    发表于 11-16 10:22 1945次阅读

    C语言数组详解

    上述的语句把数组中第五个元素的值赋为 50.0。所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。以下是上面所讨论的
    的头像 发表于 09-25 15:43 1.5w次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>数组</b><b class='flag-5'>详解</b>

    C语言总结_数组知识

    当前文章复盘C语言数组数组定义规则、数组空间类型、数组下标使用、数组存放的数据类型、
    的头像 发表于 08-14 09:38 1069次阅读

    C语言-数组

    C语言数组是一个同类型数据的集合,主要用来存储一堆同类型的数据。
    的头像 发表于 08-14 09:59 1060次阅读

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?
    的头像 发表于 08-31 13:21 1669次阅读

    C语言柔性数组详解

    下班写文章难免会有些出错,也感谢那些在后台留言指出错误的读者;表驱那篇推文存在数组越界问题,可以通过预先开辟一个大数组的方式解决,但这样解决方式会存在资源浪费问题,如果想不浪费资源来解决数组溢出的问题,那就来看看柔性
    的头像 发表于 03-06 09:06 502次阅读

    C语言中什么是指针数组

    在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。
    的头像 发表于 03-10 15:26 1263次阅读

    C语言如何创建数组

    C语言是一种非常强大和灵活的编程语言,它提供了若干数据类型来存储和操作数据。其中之一就是数组,它可以用来存储一系列具有相同数据类型的元素。本文将详细介绍如何在C语言中创建
    的头像 发表于 11-24 10:08 810次阅读

    c语言数组怎么定义

    C语言中,数组是一种用来存储相同类型元素的数据结构。它可以存储多个元素,并通过一个共同的名称来引用这些元素。数组是一种很重要的数据结构,可以用于解决很多实际的问题。 在C语言中,定义
    的头像 发表于 11-24 10:11 984次阅读