C_控制语句_循环

一、while循环

    1.while循环的通用格式

                     while(expression)

                     statement

             说明: 1) statement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句

                      2) expression部分都使用关系表达式(expression为真,执行statement部分;在判断expression,为假循环终止)

                      3) 每次循环都被称为一次迭代

                      4) 使用循环必须设计循环出口(及循环终止条件),避免出现死循环

    2.入口条件循环及循环出口

                      1) while循环是使用入口条件的有条件循环,必须满足条件才能进入循环体

                          注:“有条件”指的是语句部分的执行取决于测试表达式描述的条件

                      2) 只有在对测试条件求值时,才决定是终止还是继续循环

    3.用关系运算符和表达式比较大小

                   1) while循环经常以来测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符叫作关系运算符

关系运算符
运算符含义
<小于
<=小于或等于
==等于
>=大于或等于
>大于
!=不等于

                   2) 浮点数的比较: 浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等

                          注:使用fabs()函数(声明在math.h头文件中),该函数返回一个浮点值的绝对值          

#include<stdio.h>
#include<math.h>

int main()
{
    const double PI = 3.14159;
    double number;
    printf("请输入一个数: ");
    scanf("%lf",&number);
    while(fabs(number-PI)>0.0001)
    {
        printf("请再次输入: ");
        scanf("%lf",&number);
    }
    printf("输入的数和PI误差小于0.0001.\n");
    return 0;
}

    4.表达式的真假

                   1) 对C语言而言,表达式为真的值为1,表达式为假的值为0

                   2) 如果测试条件非零(即真),则循环会一直进行

                   3) 一般而言,所有的非零值都视为,只有0被视为

                   4) 赋值运算符把一个值赋给它左侧的变量;而关系相等运算符检查它左侧和右侧的值是否相等,不会改变左侧变量的值

                       举例:  num = 5;             //把5赋值给num

                                 num == 5;           //检测num的值是否为5

                       如上举例如果形式使用错误,编译器不会检查出错误;可做以下改进,有助有编译器捕获错误

                                5 == num;         //即使错误使用‘=’,编译器也会识别这种语法错误

    5._Bool类型

                  1) 在编程中,表示的变量被称为布尔变量

                  2) _Bool类型的变量只能储存10(如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1)

    6.优先级和关系运算符

                  关系运算符的优先级比算术运算符低,比赋值运算符

运算符优先级
运算符(优先级从高至低)结合律
()从左往右
- + ++ -- sizeof从右往左
* / %从左往右
+ -从左往右
< > <= >=从左往右
== !=从左往右
=从右往左

二、不确定循环和计数循环

                  1) 不确定循环: 在测试表达式为假之前,预先不知道要执行多少次循环

                  2) 计数循环: 在进行循环之前就知道要重复执行多少次

#include<stdio.h>

int main()
{
    const int number = 10;
    int count = 1;
    while(count <= number)
    {
        printf("%d ",count);
        count++;
    }
    return 0;
}

三、for循环

            for循环的通用格式:

                 for(initialize,;test;update)

                 statement

                1) 关键字for后面的圆括号中有三个表达式,分别用两个分号隔开

                2) 第一个表达式是初始化,只会在for循环开始时执行一次

                3) 第二个表达式是测试条件,在执行循环之前对表达式求值

                4) 第三个表达式是执行更新,在每次循环结束时求值

                5) 可以省略一个或多个表达式(但是不能省略分号),只要在循环中包含能结束循环的语句即可

                6) statement部分可以是一条简单语句或复合语句

                7) for循环是一种入口条件循环,即在执行循环之前就决定了是否执行循环(可能一次都不执行)

                举例:    打印1~6及其对应的立方

#include<stdio.h>

int main()
{
    int num;
    for(num = 1;num<=6;num++)
    {
        printf("%d %4d\n",num,num*num*num);
    }
    return 0;
}

    逗号运算符

             举例: 邮费超重问题

#include<stdio.h>

int main()
{
    const int First = 46;         //首重
	const int Next = 20;         //续重
	int ounces, cost;
	for (ounces = 1, cost = First; ounces <= 16; ounces++, cost += Next)
	{
		printf("%-4d $%.2f\n", ounces, cost / 100.0);
	}
    return 0;
}

            1) 逗号表达式保证了被它分隔的表达式从左往右求值(保证最左边的表达式最先求值)

            2) 整个逗号表达式的值是右侧项的值

               举例(1):     x=(y=3,(z=++y+2)+5);

                           说明: 先把3赋值给y,然后y递增为4,然后+2得6赋值给z,最后+5得11赋值给x

               举例(2):     a = 250,500;

                           说明: a=500是逗号左侧的子表达式,500是右侧的子表达式,左侧的赋值表达式将250赋值给a,即等同于a=250;

               举例(3):    a = (250,500)

                           说明: 赋给a的值是逗号右侧子表达式的值即500

           3) 逗号也可用作分隔符(int a,b;)

四、其他赋值运算符:  +=、-=、*=、/=、%=

             举例:   a += 5;                    与            a = a + 5;                相同

                        a -= 5;                    与            a = a - 5;                相同

                        a *= 5;                    与            a = a * 5;                相同

                        a /= 5;                    与            a = a / 5;                相同

                        a %= 5;                    与            a = a % 5;                相同

            以上提到的赋值运算符与=的优先级相同

五、出口条件循环:do while

            do while循环的通用格式:

                    do

                    statement

                    while(expression);

                1) do while循环在执行完循环体后才执行测试条件,适用于至少执行一次的循环

                2) for循环和while循环都是在执行循环体之前先执行测试条件,可能一次也不执行

                3) 一般当循环涉及初始化和更新变量时,用for循环比较合适

            举例:         

        const int a = 13;
	int b;
	do
	{
		printf("请输入数字: ");
		scanf("%d", &b);
	} while (a != b);
	printf("输入正确!\n");

六、嵌套循环

           1) 嵌套循环指在一个循环内包含另一个循环

           2) 嵌套循环常用于按行和列显示数据,一个循环处理一行中的所有列,一个循环处理所有的行

           3) 嵌套循环中的内层循环在每次外层循环迭代时都执行完所有的循环

           举例(1):    普通嵌套循环

#include<stdio.h>
#define ROWS 6
#define CHARS 10

int main()
{
    int row;
    char ch;
    for(row = 0;row < ROWS;row++)
    {
        for(ch = 'A';ch<('A'+CHARS);ch++)
            printf("%c",ch);
        printf("\n");
    }
    return 0;
}

           举例(2):  通过外层循环控制内层循环

#include<stdio.h>
#define ROWS 6
#define CHARS 10

int main()
{
    int row;
    char ch;
    for(row = 0;row < ROWS;row++)
    {
        for(ch = ('A'+row);ch<('A'+CHARS);ch++)
            printf("%c",ch);
        printf("\n");
    }
    return 0;
}

七、使用嵌套循环对数组的简单处理示例

#include<stdio.h>
#define SIZE 10
#define PAR 75

int main()
{
	int score[SIZE];
	int i, sum = 0;
	int j = 0;
	float average;
	printf("请输入%d位同学的成绩: ", SIZE);
	for (i = 0; i < SIZE; i++)
	{
		scanf("%d", &score[i]);
		sum = sum + score[i];
		while (i == 9&&j==0)
		{
			printf("输入的成绩为:         ");
			for (j = 0; j < SIZE; j++)
			{
				printf("%d ", score[j]);
			}
			printf("\n");
		}
	}
	average = (float)sum / SIZE;
	printf("总成绩为: %d,  平均分为: %.2f,  分差为: %.2f", sum, average, average - PAR);
    return 0;
}

八、使用函数返回值的循环示例

                    设计power()函数使用for循环计算n的p次幂,并将结果返回并打印

#include<stdio.h>

double power(double n,int p);

int main()
{
        double x,z;
	int y;
	printf("请输入底数和指数: ");
	while (scanf("%lf %d", &x, &y) == 2)
	{
		z = power(x, y);
		printf("%lf 的 %d 次方为 %lf\n", x, y, z);
		printf("请输入底数和指数: ");
	}
	printf("正确退出!\n");
    return 0;
}
double power(double n, int p)
{
	double pow = 1.00;
	int i = 1;
	for (i = 1; i <= p; i++)
		pow = pow * n;
	return pow;
}

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值