学习C语言 7.29 循环和数组

一、do-while 语句:

语法:
    do
    { 
        语句;
    }while (表达式);
语义:
    先,执行 语句 
    然后 判断 表达式 
    真
      继续 执行语句,然后判断,重复这个过程,直到 表达式为假,do-while 语句结束
    假
      do-while 结束,程序继续往下

流程图:


    

注意:
   while 后面的分号一定要有,否则编译时会报错
   
eg:
   do-while 实现 1到100求和

 #include <stdio.h>
  2 
  3 int main(void)
  4 {
  5     int i,sum;
  6 
  7     i=1;
  8     do
  9     {
 10         sum =sum+i;                                                       
 11         i++;
 12     }while(i<=100);
 13 
 14     printf("sum = %d\n",sum);
 15 
 16     return 0;
 17 }


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

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

eg:
  编写一个程序,用以记录在键盘上输入的字符个数,直到输入回车换行符时止
 

#include <stdio.h>
  2 
  3 int main(void)
  4 {
  5     char ch;
  6     printf("input char:\n");
  7 
  8     int i=0;
  9     do
 10     {
 11         ch = getchar();
 12         i++;
 13     }while(ch != '\n');                                                   
 14 
 15     printf("total num:%d\n",i);
 16     return 0;
 17 }


   eg:打印出所有的水仙花数
   
   
   a.水仙花数是一个三位数
   b.每位数的三次方的和值为该数本身
  
  153 == 1*1*1+5*5*5+3*3*3

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


  
二、for 循环 :

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

语义:
   s1 求解 表达式1,
   s2 判断 表达式2,
   s3 真, 则 执行 循环体语句 
        执行完之后,
   s4 求解 表达式3
        求解完之后,继续判断表达式2 
        重复 s2 到 s4 
   直到 s2 判断为假,for循环结束        

流程图:
  

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

eg:
   for 循环 找水仙花数 

  1 #include <stdio.h>                                                        
  2 
  3 int main(void)
  4 {
  5     int a,b,c;
  6     for(int num = 100;num<=999;num++)
  7     {
  8         a =num/100;
  9         b =(num/10)%10;
 10         c =num%10;
 11 
 12         if(num == a*a*a+b*b*b+c*c*c)
 13         {
 14             printf("num=%d\n",num);
 15         }
 16     }
 17     return 0;
 18 }


   
选用:
   1.for //多用于 有一定范围 
     while 
     do-while //多用于 只有某个结束条件的 
     
   2.for 循环的三个表达式都可以省略 
     但是对应的循环要素不能省   
     表达式2 省略 ---表示循环条件永远为真      
   
break  语句 
break 可以用在 switch 
               循环 while , do-while ,for 
作用:
     用在循环中 ,表示跳出 本层循环                


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

eg:

#include <stdio.h>

int main(void)
{
	int i,j;

	for(i=0;i<5;i++)
	{
		printf("i=%d\n",i);
		for(j=0;j<5;j++)
		{
			printf("j=%d\n",j);

			if(j>2)
			{
				break;
			}
		}
		if(i%2==0)
		{
			continue;
		}

		printf("i=%d, j=%d\n",i,j);
	}
	return 0;
}

j>2也就是说当j为3时会跳出循环,由于在判断之前有一个打印语句,所以会j打印0,1,2,3。continue会结束本次循环,也就是说当i为偶数时,是不会执行后面那一句打印语句的。


eg:
   打印100内的素数 

#include <stdio.h>

int main(void)
{
	int i=0;
	int j=0;
	for(i=2;i<=100;++i)
	{
		for(j=2;j<i;++j)
		{
			if(i%j==0)
			{
				break;
			}
		}

		if(j ==i)
		{
			printf("%d\n",i);
		}
    return 0;
}

2是最小的素数,所以从2开始;通过break跳出循环,因为当i对j取余发现有能整除的,证明这个数不是素数,直接跳出循环,此时的循环次数j一定比i小,通过判断i和j之间的关系,可以知道这是不是个素数,如果是素数,证明循环完都没发现可以整除的,所以此时的j与i相等。

三、数组

概念 
    //一组数据 
      一组相同类型的数据的集合 
      一组相同类型的变量的集合 
      数组也是一种数据类型 

应用场景:
    批量的处理多个数据 
    
语法:int a[10];
    类型说明符 数组名[常量表达式]
          (1)           (2)            (3)
      
说明:
  (1)类型说明符 --- 数据类型 
                  整型 int/short/long/long long 
                  浮点型 float / double /long double 
                  字符型 char
                  
                  作用: 用来说明 该数组中元素的类型                   
  (2)数组名    --- 名字 (标识符)
                   用来代表这个数组 
                   起名字规则 与 之前变量名起名规则一致 
  (3)[常量表达式]
               --- [] //这个就是数组类型 
                   常量表达式  //数组长度 --代表数组中元素的个数
                   注:
                   1. c99标准之后,数组长度 可以是变量 
                      可变长数组         
                      但是,不能初始化 
                   2. 数组长度,可以省略,但是必须要有初始化
                      编译器要根据初始化的值,来推算实际的长度 
                      int len = sizeof(a)/sizeof(int); //计算实际长度                       
                                           
eg:
  int array[10]; //表示此时定义了一个数组 
                 //这个数组中存放的是int型的数据
                 //存放了10个int型的数据 
                 //表示定义了一个可以存放10个int型数据的数组     
                 //理解的角度,相当于一下子定义出10个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.赋值 
     循环赋值  
     输入的方式 
   
数组特点:
   连续性 --- 数组空间是一片连续内存空间 
   有序性 --- 数组的元素挨个存放 
   单一性 --- 数组元素类型是同一类型 
   
   

数组元素的引用:
 语法:
   数组名[下标]; //[] 此时表示的是一种运算 --- 数组下标运算 
   
   
   下标含义:
        a[0] //下标表示的是相对于 数组名 偏移了几个元素 
        偏移量  
        a[1]
        a[2]
        ...
        a[9]
   
   数组越界 
      如果定义a[10] ,确实用了a[10],这时会出现数组越界,此时a[10]的值是一个垃圾值
   
注意:
 int a[10];
a 所代表的值 数组所占空间的首地址
a 所代表的数据类型 a 代表整个数组类型

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


eg:
    定义一个数组,准备10个数 
    找出数组中能被3整除的数 
  

#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++)
	{
		if(a[i]%3==0)
		{
			printf("%d\n",a[i]);
		}
	}
	return 0;
}

 eg:
    从键盘输入5个 值 
    找出最大值 
    
    通过定义max = a[0],让剩下的元素都与其进行比较,大于它就替换。从而找到最大值

#include <stdio.h>

int main(void)
{
	int a[5]={0};

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

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

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值