概述
嵌入式入门学习笔记,遇到的问题以及心得体会!
DAY5
man手册:
共9章:
关心前三章即可:
第一章:shell命令
第二章:系统调用函数
第三章:库函数
逗号运算符:
格式:
表达式1,表达式2,表达式3.。。。。。,表达式N
运算法则:从左至右,依次执行每一个表达式,并且将最后一个表达式的结果作为整个逗号表达式结果
#include <stdio.h>
int main()
{
int a = 2,b = 4,c = 1;
int d = (a++,--b,++c);
printf("b = %dn",++b);
a--;
printf("a = %dtb = %dtc = %dn",a,b,c);
return 0;
}
输入输出函数:
输入:从键盘拷贝数据到内存中去
输出:从内存中拷贝数据至显示终端
标准输入输出:对于数据类型没有限制
输出: printf
格式: printf(“格式控制串”,输出表):
对于格式控制串的说明:
占位符:
%o —>打印八进制数据
%x —>打印十六进制数据(打印出的十六进制是小写字母)
%X —>会以大写的方式打印十六进制
%#o----> 打印时自动在八进制前面添加前导符0 —》(意味着#是一个前导符)
%#x / %#X
%d —>int
%hd —>short
%ld —>long (long int)
%lld —>long long (long long int)
%c ---->char
%f —>float
%lf —>double
%p —>打印地址
%s —> 打印字符串
%e —>以指数形式打印
%g ----> 会自动选择以最短的方式去打印数据
%Md ---->注意:M是域宽,代表所需要打印的数据所占的长度
%M.Nf —>M代表域宽(包含小数点在内),N代表小数点后的位数
int main()
{
int aa = 100000;
long num = 8;
short num2 = 90;
char ch = 'L';
char str[20] = {"wangjia"};
float s = 8.25;
printf("aa = %-3d",aa);
printf("%ldn",num);
printf("%hdn",num2);
printf("%cn",ch);
printf("%sn",str);
printf("%en",s);
printf("%gn",s);//以最短的方式打印该数据
printf("----------------------n");
printf("%#on",aa);
printf("%#xn",aa);
printf("------------------n");
printf("%8.4fn",s);
printf("%2.1fn",s);
return 0;
}
输入:scanf
格式:scanf(“格式控制串”,地址表);
*:
(1)乘号
(2)抑制符 —》抑制一个字符或者一个整形数不被读取
(3)标志(指针)
(4)取值运算符
#include <stdio.h>
int main()
{
char num1,num2;
//int num1,num2;
printf("请输入:n");
scanf("%c",&num1);
char ch = getchar();
putchar(ch);
scanf("%c",&num2);
printf("num1 = %ctnum2 = %cn",num1,num2);
putchar(97);
putchar('n');
return ;
}
获得一个字符:
getchar();
功能:从键盘获得一个字符,至于用不用该字符取决于自己(如果用的话,直接将其赋值给字符变量即可)
不用则相当于吃掉一个字符;
—》可以用来作为吸收垃圾字符
输出一个字符:
putchar();
功能:输出一个字符
参数:可以为变量或者ASCII值或者为字符常量
循环:
while循环格式:
while(表达式)
{
循环体;
条件更新;
}
do…while循环格式:
do
{
循环体;
条件更新;
}while(表达式);
练习
求1-100之内所有偶数的和并进行输出
#include <stdio.h>
int main()
{
//求1-100之内所有偶数的和并进行输出
//定义一个循环变量
int i = 1;
int sum = 0;
/*
while(i<=100)
{
//判断当前数字是否为偶数
if(0 == i%2)
{
sum+=i;//sum = sum+i;
}
i++;
}
*/
do
{
if(0 == i%2)
{
sum += i;
}
i++;
}while(i<=100);
printf("sum = %dn",sum);
return 0;
}
总结:
do while 和while的区别:
do…while至少被执行1次
while至少被执行0次
break和continue:
break:结束本次循环
continue:结束本层循环,立即进入下一层循环
#include <stdio.h>
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("ahahhahahan");
if(5 == i)
{
break;//可以尝试在这里把break换成continue看一下区别,加深记忆!
}
static int a = 10;
++a;
printf("i = %dta = %dn",i,a);
}
return 0;
}
练习:
用while循环实现一个简易计算器
#include <stdio.h>
//菜单函数
void menu()
{
printf("+ -------- 加法n");
printf("- -------- 减法n");
printf("* -------- 乘法n");
printf("/ -------- 除法n");
}
int main()
{
//实现一个简易计算器
int argc1,argc2;
while(1)
{
menu();
printf("请输入需要计算的两个数字:n");
scanf("%d%d",&argc1,&argc2);
printf("请输入需要进行的操作数:n");
char op;
getchar();//吸收一个垃圾字符,不回显
scanf("%c",&op);
if('q' == op)
{
printf("退出程序成功!n");
break;
}
switch(op)
{
case '+':
printf("add = %dn",argc1+argc2);
break;
case '-':
printf("sub = %dn",argc1-argc2);
break;
case '*':
printf("mul = %dn",argc1*argc2);
break;
case '/':
printf("div = %dn",argc1/argc2);
break;
default:
printf("输入有误,请重新输入!n");
}
}
return 0;
}
数组:一组有序且相同类型元素的集合
数组的特点:
(1)内存连续
(2)元素数据类型相同
定义格式:
存储类型 数据类型 数组名[元素个数];
分析:
存储类型:决定了开辟存储连续元素的内存区域
数据类型:数组元素的数据类型
数组名:标志这一片连续空间的名字
元素个数:说明分配某种数据类型元素空间的个数
注意:元素个数可以写成常量或者宏均可,建议写成宏(方便修改空间大小)
元素个数不可以写成变量,因为变量具有不确定性(定义意味着分配空间)
如何访问数组中的元素?
—》
数组名[下标];
测试:
定义一个可以存放5个整形元素的一维数组。
//int arr[5];
#define N 5
int arr[N];//定义意味着分配空间,此时编译器会分配一片含有sizeof(int)*N 个字节的空间
—>访问数组中的每一个元素值?
—》arr[0],arr[1],arr[2],arr[3],arr[4]
初始化:
对于数组的初始化:int arr[5] = {1,2,3,4,5}; //正确的
不能这样去赋值:
int arr[5];
arr[5] = {1,2,3,4,5}; //错误的
int arr[5];
int i;
for(i=0;i<5;i++)
{
scanf("%d",&arr[i]); —>正确的
}
#include <stdio.h>
#define N 5
int main(int argc, const char *argv[])
{
//定义一个含有5个整形元素的数组
int arr[] = {1,2,3};
printf("sizeof(arr) / sizeof(int) = %dn",sizeof(arr)/sizeof(int));
//printf("sizeof(arr) = %dn",sizeof(arr));
//printf("sizeof = %dn",sizeof(int)*N);
//arr[N] = {1,2,3,4,5};--->错误的
int i;
/*
printf("please input arrValues:n");
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
}
*/
printf("output is:n");
for(i=0;i<N;i++)
{
printf("arr[%d] = %dn",i,arr[i]);
}
/*
printf("arr[0] = %dn",arr[0]);
printf("arr[1] = %dn",arr[1]);
printf("arr[2] = %dn",arr[2]);
printf("arr[3] = %dn",arr[3]);
printf("arr[4] = %dn",arr[4]);
*/
return 0;
}
总结:
(1)对于数组的输入和输出要利用循环完成
(2)如果数组是满初始化时,则打印数组数组会按照原样输出
(3)如果数组部分初始化,则剩余未被赋值的元素会自动补0
(4)如果想要清空一个数组,则可以利用第三条:int arr[5] = {0};
(5)一维数组中的元素个数可以被省略不写,当被省略时,则会根据后面所赋值的元素个数来决定到底省略的元素个数是谁.
冒泡排序:
从左到右,两两依次进行比较,假设按照从小到大排序,则:
如果左边大于右边,则进行交换,否则不交换,继续往后进行比较
#define N 5
int arr[N] = {89,32,12,78,61};
第一趟:32,12,78,61,89
第一次:32,89,12,78,61
第二次:32,12,89,78,61
第三次:32,12,78,89,61
第四次:32,12,78,61,89
第二趟:12,32,61,78,89
第一次:12,32,78,61,89
第二次:12,32,78,61,89
第三次:12,32,61,78,89
第三趟:12,32,61,78,89
第一次:12,32,61,78,89
第二次:12,32,61,78,89
第四趟:12,32,61,78,89
第一次:12,32,61,78,89
伪代码:
第一趟:
for(i=0;i<N-1;i++)
{
if(arr[i] > arr[i+1])
{
//定义一个中间变量(临时变量)
int Temp;
Temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = Temp;
}
}
第二趟:
for(i=0;i<N-2;i++)
{
if(arr[i] > arr[i+1])
{
//定义一个中间变量(临时变量)
int Temp;
Temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = Temp;
}
}
第三趟:
for(i=0;i<N-3;i++)
{
if(arr[i] > arr[i+1])
{
//定义一个中间变量(临时变量)
int Temp;
Temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = Temp;
}
}
第四趟:
for(i=0;i<N-4;i++)
{
if(arr[i] > arr[i+1])
{
//定义一个中间变量(临时变量)
int Temp;
Temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = Temp;
}
}
将以上四趟进行综合:
伪代码:
//定义两个循环变量
int i,j;
//第一个for循环用来控制趟数
for(i=0;i<N-1;i++)
{
//这个for循环用来控制每一趟里面所需要进行交换的次数
for(j=0;j<N-1-i;j++)
{
if(arr[j] > arr[j+1])
{
int Temp;
Temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = Temp;
}
}
}
完整的冒泡排序写法:
#include <stdio.h>
#define N 5
int main()
{
//定义一个一维数组,用来实现冒泡排序
int arr[N] = {0};
int i,j;
printf("请输入%d个数组元素值:n",N);
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
}
printf("排序之前为:n");
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
//printf("n");
putchar('n');
printf("冒泡中......n");
//第一个for循环用来控制所需趟数
for(i=0;i<N-1;i++)
{
//第二个for循环用来控制每一趟里面所需要交换的次数
for(j=0;j<N-1-i;j++)
{
if(arr[j] > arr[j+1])
{
int Temp;
Temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = Temp;
}
}
}
printf("冒泡之后按照从小到大的顺序为:n");
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
printf("n");
return 0;
}
一维字符数组:
//定义一个可以最大存放20个字符的一维数组?
#define N 4
char str[N] = {‘g’,‘a’,‘g’,’ ’};
char str[N] = {“gaga”};
char str[N] = “gaga”;
字符串相关的输入输出函数:
简易版:
gets(数组名);
puts(数组名);
#include <stdio.h>
#define N 7
int main()
{
char str[N] = {'