20240729嵌入式学习笔记

流程控制

C语言中整个程序的流程分为三个结构:

顺序结构、分支结构、循环结构。

循环语句:

goto语句、while语句、do-while语句、for语句

循环语句的构成要素:

1.循环体

2.结束条件

3.使循环趋于结束的操作

4.循环的初始条件

goto语句:严格意义上来说goto语句是跳转语句,不属于循环语句,但通过goto的组合可以达成循环的效果。

while循环语句

while(表达式)
{语句}

先对表达式进行判断,为真再执行语句。为假则结束while循环语句。

do-while循环语句

do{语句}
while{表达式};

先执行语句,再判断表达式,为真则重复执行语句,直到表达式不成立。

注意!在表达式的末尾需要加分号 ‘ ; ’。

for循环语句

for(表达式1;表达式2;表达式3)
{循环体语句}

先求解表达式1,再判断表达式2,为真则执行循环体语句并执行表达式3,接着判断表达式2,以此循环;为假则结束for循环语句。

表达式1可以省略,但作为初始条件,必须存在对应的初始化过程;

表达式2可以省略,但结束条件缺失代表表达式2恒为真,循环为死循环。想要跳出循环需要在循环体语句中加入条件判断语句用于跳出循环。

表达式3可以省略,但作为使循环趋于结束的语句,必须有对应的操作。可以将语句放在循环体语句中起到相应的作用。

三种循环的差异

上面三种循环语句通常可以通用,但各自有适合的场景:

for循环适用于有一定范围的循环;while和do-while循环适用于只有结束条件的循环。下面是针对实现同一个功能使用不同循环的实现方法的区别:

while循环:

//求三位数的水仙花数
int a,b,c;
int i = 100;
while(i <= 999)
{
    a = i / 100;                                                                
    b = (i / 10) % 10;
    c = i % 10;
    if(i == a*a*a + b*b*b + c*c*c)
    {
        printf("%d\n",i);
    }
    ++i;
}

for循环:

//求三位数的水仙花数
int a,b,c;
int i;
for(i=100;i<=999;++i)
{
    a = i / 100;
    b = (i / 10) % 10;
    c = i % 10;
    if(i == a*a*a + b*b*b + c*c*c)
    {
        printf("%d\n",i);
    }
}

do-while循环:

//记录键盘输入字符个数,直到输入回车
char ch;
int num = 0;

do
{
    ch = getchar();
    ++num;
}
while(ch != '\n');

printf("num = %d\n",num);

循环控制语句:

break语句、continue语句

break语句

用于switch语句和循环语句中,不能用于goto语句中。

在循环中使用表示跳出当前层次循环。

continue语句

只能用于循环语句中。

在循环语句中表示结束本次循环,继续下一次循环。

数组

数组是一组相同类型数据或变量的集合,也是一种属于构造类型的数据类型。

类型说明符 数组名[常量表达式]
int array[10];

类型说明符说明了数组的数据类型,包括整型(int、short、long、long long)、浮点型(float、double、long double)和字符型(char)。

数组名说明了数组的名称,作为标识符代表数组。

常量表达式说明数组的长度 ,表示数组中的元素个数。在定义时可以使用变量但在使用变量最为常量表达式时不能对数组初始化。在定义时也可以省略常量表达式,编译器可以根据初始值计算数组长度。

int n = 3;
int array[n] = {0,1,2};

int array[] = {0,1,2};

数组给值通过初始化和赋值进行。

可以全部初始化、部分初始化或者不初始化。部分初始化和不初始化时,数组没有被初始化的部分自动初始化为零。

int array[3] = {1,2,3};
int array[3] = {1,2};  <=====>  int array[3] = {1,2,3};
int array[3] = {}      <=====>  int array[3] = {0};

赋值通过循环赋值的方法从键盘或其他空间对数组进行赋值。

for(i = 0;i < 5; ++i)
{
    scanf("%d",&array[i]);
}

数组中的[ ]表示数组下标运算,其中的数值为偏移量,表示相对数组名偏移了几个元素,偏移量为0表示没有发生偏移。

如果偏移量大于数组长度,会发生数组越界,此时从内存空间读取到的数值不属于数组。

int array[10] = {0,1,2,3,4,5,6,7,8,9};
x = array[20];    //数组越界

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值