嵌入式学习day6------循环结构与数组

一、循环结构

一、构成循环的要素

  1. 循环体  //反复被执行的代码 
  2. 结束条件 
  3. 使循环趋于结束的操作(或语句)
  4. 循环的初始条件   

二、while语句

1、语法
while (表达式)
{
  语句
}

2、语义:

先判断表达式的真假;

如果为真,则执行语句;执行语句完成之后,继续表达式判断;重复以上操作。

直到表达式为假,while结束,程序继续往下进行。

流程图:

3、注意:

while()之后不能有分号!

用 while 实现 1 到 100 累加求和:

#include <stdio.h>
   int main(void)
   {
   
       int n, sum=0;
     do{
          sum=sum+n;
          n++;
      }
      while(n<=100);{                                                                                                                 
         printf ("sum=%d",sum);
 
  }
          return 0;
         }

三、do  while 语句

1、语法

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

2、语义

先执行语句,然后判断表达式

如果为真,继续执行语句,然后判断表达式,重复这个过程。

直到表达式为假,do while语句结束,程序继续往下。
 

3、流程图  

注意:while();分号一定要有!

用do while 求出1000以内的水仙花数

#include<stdio.h>
int main(void)
{
	int tens,hunds,ones;
	int n=100;

	do{
		hunds=n/100;
		tens=(n/10)%10;
		ones=n%10;
		if(hunds*hunds*hunds+tens*tens*tens+ones*ones*ones==n){
			printf("n=%d\n",n);
		}
		++n;
	}
	while(n<=999);

		return 0;

}

4、对比 


 while 
 while (表达式) //先判断 
 {
   语句; //后执行
 }

 
 do-while 
  do 
 {
    语句; //先执行
 }while(表达式); //后判断

注意:
   1. do-while 循环 至少会被执行一次
   2. 他们的逻辑顺序不同: 
    while     - 先判断 后执行 
    do-while  - 先执行 后判断 

四、for 循环

1、语法

for (表达式1;表达式2;表达式3)
{
   循环体语句;
}
注意:for()之后没有分号!!不然就会空循环

2、语义

  1. 求解表达式1
  2. 判断表达式2
  3. 如果为真,执行循环体语句
  4. 执行完之后,求解表达式3,求解完成之后,继续判断表达式2
  5. 重复2、3、4步骤,直到判断表达式2为假,for循环结束
  6. 继续下面的程序

3、流程图

总结:

for (  初始条件 ;  循环条件(循环结束条件)  ;   使循环趋于结束语句   ) 
//for (  循环变量赋初值 ; 循环条件 ; 循环变量增值 )
{
   循环体语句;
}

 for循环,寻找水仙花数

#include<stdio.h>
int main(void)
{
	int a,b,c;
	int n;
	for(n=100;n<=999;n++)
	{
		a=n/100;
		b=(n/10)%10;
		c=n%10;
	if(	n==a*a*a+b*b*b+c*c*c){
			printf("n=%d\n",n);}
	}
	
	return 0;

}

 五、三种循环如何选用

  1. for    多用于 有一定范围 
  2.  while 
     do-while //多用于 只有某个结束条件的
  3. for 循环的三个表达式都可以省略 
         但是对应的循环要素不能省   
         表达式2 省略 ---表示循环条件永远为真 

六、break 语句 与 continue 语句

1、break  语句 

  1. break 可以用在 switch ;循环 :while , do-while ,for 
  2. 作用:用在循环中 ,表示跳出 本层循环                

2、continue 语句

只用在循环中
作用:
    结束本次循环,继续下一次循环  。

二、数组

     一、概念

数组是 一组相同类型的数据的集合 ,也可以称作 一组相同类型的变量的集合 。

数组也是一种数据类型 ,可以批量处理多个数据,

二、语法

  类型说明符 数组名[常量表达式]

(1)类型说明符 --- 数据类型 
                  整型 int/short/long/long long 
                  浮点型 float / double /long double 
                  字符型 char
                  
                  作用: 用来说明 该数组中元素的类型                   
 (2)数组名    --- 名字 (标识符)
                   用来代表这个数组 
                   起名字规则 与 之前变量名起名规则一致 
 (3)[常量表达式]
               --- [ ] //这个就是数组类型 
                   常量表达式  //数组长度 --代表数组中元素的个数
                   注:
                   1. c99标准之后,数组长度 可以是变量 
                       但是,不能初始化 
                   2. 数组长度,可以省略,但是必须要有初始化
                      编译器要根据初始化的值,来推算实际的长度 
                      int len = sizeof(a)/sizeof(int); //计算实际长度   。

三、数组给值:

   1.初始化 

   int a[10] = {     }; //     {    } 初始化器 
   
   //全部初始化 

   int a[10] = {1,2,3,4,5,6,7,8,9,10};

   //部分初始化 ---未初始化的部分会被初始化为0

   int a[10] = {1,2,3,4,5};

   //不初始化   --- 数组中是随机值(垃圾值)
   int a[10];


      2.赋值 

     可以用循环赋值

 
    也可以用 输入的方式 赋值

#include <stdio.h>

int main(void)
{
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	
	for (i = 0; i < 10; ++i)
	{
		a[i] = i*2;}  //循环赋值

		scanf("%d",&a[i]);  //输入赋值

	


   3、数组特点:


   连续性 --- 数组空间是一片连续内存空间 
   有序性 --- 数组的元素挨个存放 
   单一性 --- 数组元素类型是同一类型 
   

   四、数组元素的引用:


 1、语法:

  数组名[下标];   //[   ] 此时表示的是一种运算 --- 数组下标运算 
   
    下标含义:
        a[0] //下标表示的是相对于 数组名 偏移了几个元素 
         
   数组越界 :超出下标值
       //编译器不会检查,程序员自己小心 
   
 

2、注意:

 int a[10];
a 所代表的值 数组所占空间的首地址
a 所代表的数据类型 a 代表整个数组类型

a所代表的类型是int[10] ,这就是所谓的 数组类型
int a; //判断标识符所代表的数据类型 ---去掉标识符,剩下就是标识符对应的数据类型 
int a[10];
 

运用数组找出十个数中能被3整除的数

#include <stdio.h>
int main(void)
{
	int a[10]={1,32,18,99,66,52,31,24,26,95};
	int i=0;
	for(i=0;i<10;++i){
		if(a[i]%3==0)
		printf("a[%d]=%d\n",i,a[i]);
	}

	return 0;
}

键盘输入5个值找出最大值 

#include <stdio.h>

int main(void)
{
	int n = 0;
	scanf("%d",&n);
	int a[n];
	
	int i = 0;
	for (i = 0; i < n; ++i)
	{
		scanf("%d",&a[i]);
	}
	int max = a[0];

	for (i = 1; i < n; ++i)
	{
		if (a[i] > max)
		{
			max = a[i];
		}
	}
	printf("max = %d\n",max);
	return 0;
}

键盘输入五个值找出第二大的值

#include <stdio.h>
#include <limits.h>

int main(void)
{
	int n = 0;
	scanf("%d",&n);
	int a[n];
	
	int i = 0;
	for (i = 0; i < n; ++i)
	{
		scanf("%d",&a[i]);
	}

	int max = a[0];

	for (i = 1; i < n; ++i)
	{
		if (a[i] > max)
		{
			max = a[i];
		}
	}


	//int second = 0x80000000;
	int second = INT_MIN;

	for (i = 0; i < n; ++i)
	{
		if (a[i] != max && a[i] > second)
		{
			second = a[i];
		}
	}

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

	return 0;
}

 

   

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值