C语言—数组详解

一、数组 开发环境: 
虚拟机+linux操作系统。
虚拟机:虚拟一台电脑。
linux操作系统:redhat、ubuntu系统、红旗系统。
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[][][]…
特点:
访问数组成员的时候:下标是从0开始的。int data[10];  下标 (0~9) 数组只是支持在定义的时候进行整体赋值。 数组定义的时候,[]里只能填常量。数组在定义之后就无法更改大小。 数组的空间是连续的—内存。 数组的名称就是数组空间的首地址。 数组初始化时,如果没有赋值,那么数组空间里的数据是未知的---局部变量。 数组初始化时,只要给一个空间赋值,剩余空间都自动初始化为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=0;i--)
   {
       printf(data[%d]=%d\n,i,data[i]);
   }
   return 0;
}
配置vim编辑器:在命令行上运行命令:  vim /etc/vimrc   
打开文件之后,在文件结尾加上两行代码保存退出。
set number
set tabstop=4
作业:
定义数组,从键盘上录入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;imax)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;
}
定义数组,从键盘上录入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;
}
定义数组,从键盘上录入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;i5)cnt_5++;
       if(data[i]>10)cnt_10++;
   }
   printf(cnt_5=%d\n,cnt_5);
   printf(cnt_10=%d\n,cnt_10);
   return 0;
}
作业:
数组数据的替换:从键盘上输入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;
}
数组数据的排序:从键盘上输入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;jdata[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;jdata[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
*/
数组数据的拼接:定义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
    for(i=0;i<10;i++)
    {
       printf(%d ,c[i]);
    }
    return 0;
}
数组数据的删除(不是真正意思的删除,这里相当于覆盖)。---数据库 先从键盘上录入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;
}
数组数据的插入(整数数组) 比如:12 ,45,89,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=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 给普通用户增加sudo 命令权限   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>=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='0'&&str[i]='a'&&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. 从键盘上输入一个字符串,转为整数输出。


卷扬机用变频器的好处?
详解高性能转换器设计
VRHealth提供非侵入性的医疗工具,为各种健康挑战提供VR技术解决方案
磁翻板液位计安装过程中不得不说的几个要点
【AI &amp;amp; SoC】高算力低功耗,当下智能音箱的最优解?
C语言—数组详解
电子病历功能及应用现状概述
探测蛋白质微晶的3D结构
无人机发展迅猛 但也需尊重相关法律法规
三星智能手表OLED面板由京东方提供
中国大陆LED产业最新分析
现在的物联网市场不再吃香了吗
台大团队推itrack追踪技术 成侦测无人机新利器
数字设计FPGA应用:VIVADO下载安装
台式机电脑CPU怎么更换听语音
产品 | 瑞萨RA产品家族入门级RA2E1 MCU产品群, 以满足成本敏感与空间受限型应用需求
各种变压器、电抗器的图片
【高峰论坛】东风在即 • 第三代半导体如何商业化落地?
PCBA板可制造性设计需要注意的问题分析
大数据对安防重要性不言而喻,但安防大数据还面临着这些问题