今天是嵌入式学习的第四天,经过四天的学习,我已经可以利用所学的知识写一些简单的数值计算和数值判断。今天的学习紧接昨天的内容,学习了一些常用的函数和逻辑运算符。
一、常用输入输出函数后半部分
1. printf
(1)打印非输出控制符
示例: printf(“Hello World!”);
双引号中可以通过添加符号来改变打印效果:
\n 换行符
\t 横向制表符
\v 纵向制表符
\b 退格符
\r 回车符
\\ \字符
\" "字符
(2)打印单个输出控制符
示例: int Num = 0;
double f = 2.7;
printf(“Num = %d\n”,Num);
%d 按照十进制打印
%o 按照八进制打印
%x 按照十六进制打印
%c 按照字符打印
%f 按照浮点数类型打印
%s 按照字符串打印
%p 按照指针类型打印
%u 按照无符号类型打印
%e 按照科学计数法打印浮点数类型
%% 打印%号
(3)打印多个输出控制符
int Num1 = 100;
int Num2 = 200;
printf(“Num2 = %d,Num1 = %d\n”,Num2,Num1);
需要注意的是,输出控制符的个数需与后面表达式个数一一匹配。
(4)printf格式化打印
%nd n:域宽,数据不足域宽,高位用空格补齐
%0nd 0:数据不足域宽,高位用0补齐
%-nd -:左对齐
%.mf m:保留小数点后m位有效数字
2.scanf
(1)接收非输入控制符
scanf(“m”);
非输入控制符需要原封不动的从终端输入
(2)接收输入控制符
%d 按照有符号十进制接收数据
%c 按照字符接收数据
_%c 接收一个' '和'\n'的字符
%f 按照float接收数据
%lf 按照double接收数据
%s 按照字符串接收数据
(3)接收多个输入控制符
示例:int Num1 = 0;
int Num2 = 0;
float f = 0;
scanf(“%d%d”,&Num1,&Num2);
scanf(“%d%d”,&Num1,&Num2);
注意事项:
1.scanf如果输入数据与想要接收的数据不匹配,从不匹配的位置开始不再向后读取
2.scanf除了%s形式外,都需要加 &
3.scanf中只有%c形式,可以接收' '和'\n'字符
4.scanf中_%c不会接收' '和'\n'字符
5.scanf中严禁\n ,当scanf中出现\n,输入数据结束后并不能用回车结束输入,而是在再次接收数据之后才能用回车结束输入。
3.puts
示例: puts(“Hello world!”);
puts的功能是在终端打印一行字符串,与字符串常量相似的,打印出的字符串末尾有一个\n字符
4.gets
gets可以从终端接收一行字符串
在接收的过程中,gets会去掉\n字符
与scanf不同的是,gets可以接收带空格‘ ’的字符串,sancf则无法接收。
二、流程控制
1.顺序结构
顺序结构依次执行main中的代码,从main函数开始执行,执行到main结束。
2.分支结构
(1)if
if函数是一种较简单的分支结构
示例:if(逻辑表达式)
{
语句块1;
}
else
{
语句块2;
}
if函数的执行流程为:若逻辑表达式为真,则执行语句块1,否则执行语句块2。
需要注意的是,if后必须加入判断条件,而else不能加判断条件。可以单独使用if,但不能单独使用else。在使用时,if 和else如果不加括号,系统默认控制一句代码。为了保证程序的稳定性,尽量在使用if时加上括号。
(2)逻辑表达式
1.关系运算符
> 大于,< 小于,>= 大于等于,<= 小于等于,== 等于,= 不等于
关系运算符链接两个数据,当数据满足关系运算符代表的关系时,表达式为真,否则为假
2.逻辑运算符
&&逻辑与:一假则假,全真为真,可理解为“既...又...”
|| 逻辑或:一真则真,全假为假,“...或...”
!逻辑非:真取非得加,假取非得真
逻辑运算符具有截断特性:当&&或||仅凭左侧值便能得出逻辑结果时,右侧值不再计算。
示例:
#include<stdio.h>
int main(void)
{
int a=1;
--a %% a--.
printf("%d",a);
return 0;
}
如所示代码,此代码运行结果是0。
因为&&左侧的--a值为0,根据逻辑与一假则假的特点,已经足以判断逻辑运算的结果,&&右侧的a--不被计算,故a的值为0