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