C Primer Plus 第6章——第一篇

你该逆袭了

零、本章内容介绍

1、关键字:for、while、do while
2、运算符:<、>、>=、<=、!=、==、+=、*=、-=、/=、%=
3、函数:fabs( )
4、C 语言有 3 中循环:for、while、do while
5、使用 关系运算符 构建 控制循环 的表达式
6、其他运算符
7、循环常用的数组
8、编写有返回值的函数

一、while 循环

1、程序注释

//P137 程序清单6.1 
//根据用户键入的整数求和

#include <stdio.h>

int main()
{
	long num = 0;
	long sum = 0;
	int status = 0L;    //尽管C编译器会把 0 自动转换为合适的类型,
	                    //但是为了保持程序的一致性,我们把 sum 初始化为 0L (long 类型),而不是 0 (int 类型)

	printf("please enter an integer to be summed ");
	printf("(q to quit):");    
	status = scanf("%ld", &num);
	while (status == 1)
	{
		sum = sum + num;
		printf("please enter next integer (q to quit):");  //因为输入的字符不是数字(如,q) 
		                                                   //scanf( )会读取失败并返回 0 .此时,status 的值就是 0,循环结束。
		                                                   //因为输入的字符 q 不是数字,所以它会被放回输入队列
		                                                   //实际上,不仅仅是 q ,任何非数值的数据都会被导致循环终止
		status = scanf("%ld", &num);
	}
	printf("those integers sum to %ld.\n", sum);

	return 0;
}

(1)伪代码

优点:把注意力集中在程序的组织和逻辑上,不用再设计程序时还要分心如何用编程语言来表达自己的想法。
在这里插入图片描述

2、C 风格读取循环

同时使用scanf( )的两种不同的特性。
首先,如果函数调用成功,scanf( )会把一个值存入 num。
然后,利用 scanf( ) 的返回值(0或1,不是 num 的值)控制 while 循环。

while (scanf("%ld", &num) == 1)
{
	/*循环行为*/
}

在这里插入图片描述

二、while 语句

1、终止 while 循环

#include <stdio.h>

int main()
{
	int index = 1;
	
	while (--index < 5)
	{
		printf("haha\n");  //会打印很多个 haha 
	}                      //index 减少到其类型到可容纳的最小负值变成最大正值时会终止循环

	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整数溢出:P49
在这里插入图片描述
在这里插入图片描述

2、语法要点

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

三、用 关系运算符 和 表达式 比较大小

在这里插入图片描述

while (ch != '$')      //可以比较单个字符,
{                      //但是,不可以用关系运算符比较“字符串”,
	                   //第十一章,会介绍如何比较字符串
	count++;
	scanf("%c", &ch);  
}

1、fabs( ) 函数 比较 浮点数

虽然 关系运算符 可以用来 比较浮点数,但是要注意:比较 浮点数 时,尽量使用 大于号 ‘ > ’ 和 小于号 ’ < '。因为,浮点数 的 舍入误差 会导致 在逻辑上应该相等的两个数却不相等。例如:3 乘以 1/3 的积是 1.0。如果用把 1/3 表示成 小数点后面 6 位数字,乘积则是:0.999999,不等于 1 。
使用 fabs( ) 函数(声明在 math.h 头文件中)可以方便地比较浮点数,该函数返回一个浮点值地绝对值(即,没有代数符号的值)。

//P144 程序清单6.5 
//浮点数的比较

#include <stdio.h>
#include <math.h>        //fabs() 函数的头文件

int main()
{
	const double ANSWER = 3.14159;
	double response = 0;

	printf("what is the value of pi?\n");
	scanf("%lf", &response);
	while (fabs(response - ANSWER) > 0.0001)    // 比较浮点数尽量使用  >   <
	{                                           // 使用 fabs( ) 函数
		printf("try again\n");
		scanf("%lf", &response);
	}
	printf("close enough\n");

	return 0;
}

(1) fabs( ) 函数

语法格式:double fabs (double x);
功能:计算绝对值

#include <stdio.h>      /* printf */
#include <math.h>       /* fabs */

int main()
{
	printf("The absolute value of 3.1416 is %f\n", fabs(3.1416));     //3.141600
	printf("The absolute value of -10.6 is %f\n", fabs(-10.6));       //10.600000
	return 0;
}

2、什么是 真?

0 是 假
非0 是 真

在这里插入图片描述

3、_Bool 类型

布尔变量:表示 真 或 假 的变量。
_Bool 是布尔变量的 类型名。
_Bool 类型 只能读取 1 或 0。
如果把其他非零数值赋给_Bool 类型的变量,该变量被设置为 1。

//P148 程序清单6.9
//使用_Bool 类型的变量 variable

#include <stdio.h>

int main()
{
	long num = 0L;
	long sum = 0L;
	_Bool input_is_good;

	printf("please enter an integer to be summed ");
	printf("(q to quit): ");
	input_is_good = (scanf("%ld", &num) == 1);  //(scanf("%ld",&num) == 1) 括起来(从优先级方面考虑,虽然没必要),但是可以提高代码的可读性
	while (input_is_good)                             
	{
		sum = sum + num;
		printf("please enter next integer (q to quit): ");
		input_is_good = (scanf("%ld", &num) == 1);
	}
	printf("those integers sum to %ld.\n", sum);

	return 0;
}

C99 提供头文件 stdbool.h ,让 bool 成为 _Bool 的别名

#include <stdio.h>
#include <stdbool.h>    //C99 提供该头文件,让 bool 成为 _Bool 的别名

int main()
{
	long num = 0L;
	long sum = 0L;
	bool input_is_good;     //让 bool 成为 _Bool 的别名

	printf("please enter an integer to be summed ");
	printf("(q to quit): ");
	input_is_good = (scanf("%ld", &num) == 1);
	while (input_is_good)
	{
		sum = sum + num;
		printf("please enter next integer (q to quit): ");
		input_is_good = (scanf("%ld", &num) == 1);
	}
	printf("those integers sum to %ld.\n", sum);

	return 0;
}

4、优先级 和 关系运算符

在这里插入图片描述

x = y + 2;   // 相当于 x=(y+2)
x_bigger = x > y;  // 相当于 x_bigger = (x > y)

ex != wye == zee;  // != 和 == 的运算符 优先级 相同
                   // 结合律是 从左往右
                   // 相当于:(ex != wye) == zee

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值