云计算百科
云计算领域专业知识百科平台

从零开始的嵌入式之旅 Day 6 & Day 7

在这里插入图片描述
在这里插入图片描述

字符串的输入与输出

puts (put string)

在终端上输出一个字符串+\\n
语法: int puts(const char *s);
参数: s,需要输出字符串,可以是常量,变量,字符数组。
返回值:大于等于0 表示成功, <0 失败 (返回值不常用)。
e.g.

#include<stdio.h>
int main()
{
char str[50]="多情自古空余恨";// char [] 字符数组 字符数组的长度为50个字节
puts(str);
return 0;
}

输出结果为 多情自古空余

gets(get string)

在终端上输入一个字符串
语法:char *gets(char *s);
参数: s ,需要存储字符串的内存空间。 可以是字符数组, 变量。
返回值,返回一个指向s的指针(内存地址,不是0 ),表示成功。
NULL (0),失败了。
e.g.

#include<stdio.h>
int main()
{
char next[50]={0};//字符数组的长度为50个字节
printf("input: "); //可以添加空格。
gets(next);
puts(next);
return 0;
}

可输入字符数组和变量

流程控制

流程:程序运行的顺序
分类:
1.顺序逻辑,代码会从上往下,一条一条的执行。
2.分支逻辑,程序中的代码,会根据情况,选择执行。
3.循环逻辑,程序中的代码,需要循环执行多次。其中会有一个控制变量,会发生变化,最终导致循环结束。

运算符

关系运算符(默认为int)

运算符含义示例
‘>’ 大于 7>9;表达式为0 ;10>5;表达式为1
‘>=’ 大于或等于 7>=9;表达式为0;5>=5;表达式为1
‘<’ 小于 7<9;表达式为1; 10<5;表达式为0
‘<=’ 小于或等于 7<=9;表达式为1 ; 10<=5;表达式为0
‘==’ 等于 7==9;表达式为0; 8<8;表达式为1
‘!=’ 不等于 7!=9;表达式为1 ; 5!=5;表达式为0

逻辑运算符

运算符含义示例
‘&&’ (双目) 逻辑与 (同真为真,其余为假) 7>9 &&10>5;表达式为0;7<9 && 10>5;表达式为1
‘丨丨’ (双目) 逻辑或 (同假为假,其余为真) 7>9 丨丨10>5;表达式为1;7>9 丨丨 10<5;表达式为0
‘!’ (单目) 逻辑非 (真为假,假为真) 7<=9 !;表达式为0 ; 10<=5!;表达式为1

注:截断效应,在逻辑表达式中
&& 若逻辑为假,则程序不会执行右侧表达式
| | 若逻辑为真,则程序不会执行右侧表达式
原因:右侧表达式的值为真或假,都不影响整个表达的值。所以被编译器优化了,就是不
执行。
e.g.

#include<stdio.h>
int main()
{
double num=0.0;
printf("输入一个数字:");
scanf("%lf",&num);
if (num>0 && num<100)
{
printf("0<%lf<100\\n",num);
}
else if (num<0)
{
printf("%lf<0\\n",num);
}
else
{
printf("%lf>100\\n",num);
}
return 0;
}

输入数字即可判断它所在的区间,其中第7行中if语句使用了逻辑与,即当两个条件同时满足时才会从触发if后续语句

#include<stdio.h>
int main()
{
int a=0,b=0,c=0;
a=++c || b++; //1 0 1;
a=c++ || ++b;//1 1 1;
a=c++ || b++;//0 1 1;
a=++c || ++b;//1 0 1
printf("a is %d,b is %d,c is %d\\n",a,b,c);
return 0;
}

//后依次为a,b,c的值

条件运算符(三目)

a ? b : c
用法:表达式1 ? 表达式2:表达式3
若表达式1为真,则输出表达式2;
若表达式1为假,则输出表达式3
e.g.
re=a>b ? 1:0;
如果a>b,则re=1,
如果a<=b,则re=0
e.g.

#include<stdio.h>
int main()
{
int x=0,y=0,z=0;
printf("put 2 num:");
scanf("%d%d",&x,&y);
z= x>y ? x:y;
printf("max is %d\\n",z);
return 0;
}

这段代码为比较输入两个整形数据的大小,用到了条件运算符

分支控制

非0即为真

if分支

简单语法:

if(表达式)
{
语句块1;
}
else
{
语句块2;
}

使用事项:
1.if 后必须有条件,else 后不加条件
2. if 后面可以没有else ,即if可以单独出现。但是 else不能单独出现,需要和if配合使用。
3. if,或者else 后,都使用大括号,包含代码(空语句,一条语句,多条语句)。
4. if(表达式) 后面,也就是这一行,最后不要加分号。
二选一 if(){};else(){};
多选一 if(){};else if(){};else {};

#include<stdio.h>
int main()
{
double a=0.0,b=0.0;
printf("输入两个数字:");
scanf("%lf%lf",&a,&b);
if (a>b)
{
printf("%lf > %lf\\n",a,b);
}
else if(a<b)
{
printf("%lf < %lf\\n",a,b);
}
else
{
printf("%lf = %lf\\n",a,b);
}
return 0;
}

该代码实现了比较两个浮点数据的比较,实现了三选一的情况下if分支的语句

switch多分支

简单语法:

switch(整形表达式) // char ,int, long ,short
{
case 常量1: 语句1;break;
case 常量2: 语句2;break;
case 常量3: 语句3;break;
default:
语句4;
}

使用事项:
1.switch( )必须用整形表达式,变量和表达式
2.case后必须是整形常量
3.表达式的值会和常量进行等值比较,成功则执行语句,走到break结束,失败则执行default
4.switch可以用if替换,但是if不一定能用switch替换
e.g.

#include<stdio.h>
int main()
{
int a=0,sorce=0;
printf("输入成绩:");
scanf("%d",&sorce);
if (sorce>=0 && sorce<=100)
{
a=sorce/10;
switch(a)
{
case 6:
printf("评分为D\\n");
break;
case 7:
printf("评分为C\\n");
break;
case 8:
printf("评分为B\\n");
break;
case 9:
case 10:
printf("评分为A\\n");
break;
default:
printf("评分为E\\n");
}
}
else
{
printf("输入成绩错误\\n");
}
return 0;
}

该代码主要实现了根据输入的成绩来评判成绩的等级

循环控制

需要执行有规律的代码或重复执行同一段代码时,用到循环语句
三要素:
1.控制变量的初始化
2.循环的控制条件
3.控制变量的变化

while循环

简单语法:

int i;
while(表达式) //表达式(关系,逻辑)的值, 真,假 , 一般为int类型
{
语句;
i++;
} //{}内为循环体

一般情况下,不知道重复次数的,一般用while循环语句
步骤:
1.while会先判读表达式的值
2.如果为真,则执行循环体
如果为假,则停止循环
注:在循环体中,需要包含控制变量变化的语句。最终导致循环的条件不被满足,从而终止循环

while(1)
{ } //死循环

e.g.

#include<stdio.h>
int main()
{
int i=1,sum=0,z=0;
printf("输入想要求和的项数:");
scanf("%d",&z);
while(i<=z)
{
sum=sum+i;
++i;
}

printf("正整数前%d项和为%d\\n",i-1,sum);

return 0;
}

该代码实现了从1开始差为1的等差数列前n项和

for循环

简单语法:

for(表达式1;表达式2;表达式3)
// 表达式1 ,初始化变量(控制变量,也可以有其他的初始化) ;表达式2 ,控
制循环是否继续运行(即为条件);表达式3 ,控制变量变化的式子
{
语句;
} //{}内为循环体

一般情况下,知道重复次数时用for循环语句
步骤:
1.先执行表达式1
2.计算表达式2 (是否为真,若为真,则运行循环体。 若为假,则for 循环结束)
3.执行循环体
4.在计算表达式3 e.g.++i ,–i
5.跳转到第2步

for(;;)
{} // 死循环

e.g.

#include<stdio.h>
int main()
{
int i=0,sum=0,num=0;
printf("输入想求和的项数:");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
sum=sum+i;
}
printf("正整数前%d项和为%d\\n",i-1,sum);
return 0;
}

该代码与while语句的示例用法相同,同为计算从1开始差为1的等差数列前n项和

break

在循环中会中断循环,使循环提前结束
e.g.

#include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==8)
{
break;
}
printf("%d\\n",i);
}
return 0;
}

该程序执行时本会输出数字1到数字10,但在数字8的时候使用了break,导致不会输出数字9和数字10
即提前结束了程序的循环

continue

在循环中会跳过本次循环,(若循环的控制条件依然为真)则会继续循环。
e.g.

#include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==4 || i==8)
{
continue;
}
printf("%d\\n",i);
}
return 0;
}

该程序执行时会和上例相同输入数字1到数字10,但在数字4和数字8的时候使用了continue,导致不会输出数字4和数字8
即跳过了程序的循环

赞(0)
未经允许不得转载:网硕互联帮助中心 » 从零开始的嵌入式之旅 Day 6 & Day 7
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!