用关系运算符和表达式比较大小、_Bool类型、for循环

本文参考C Primer Plus第六章进行C语言学习

文章目录

  • 用关系运算符和表达式比较大小
    • 其他真值
  • 新的_Bool类型
  • for循环
  • 总结


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

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

#include<stdio.h>
#include<math.h>
int main()
{
	const double ANSWER=3.14159;
	double response;
	printf("Whant is the value of pi?\n");
	scanf("%lf",&response);
	while(fabs(response-ANSWER)>0.0001)
	{
		printf("Try again!\n");
		scanf("%lf",&response);
		
	}
	printf("Close enough!\n");
	return 0;
}

 1.其他真值

#include<stdio.h>
int main()
{
	int n=3;
	while(n)
		printf("%2d is true\n",n--);
	printf("%2d is false\n",n--);
	
	n=-3;
	while(n)
		printf("%2d is true\n",n++);
	printf("%2d is false\n",n);
	
	return 0;
}

 2.真值的问题

#include<stdio.h>
int main()
{
	long num;
	long sum=0L;
	int status;
	
	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 an integer to be summed(q to quit)");
		status=scanf("%ld",&num);
	}
	printf("Those integers sum to %ld.\n",sum);
	return 0;
}

 

这里while(status=1)相当于while(1)。也就是说,循环不会退出。 

       总之, 关系运算符构成关系表达式。关系表达式为真使值为1,为假时值为0。通常用关系表达式作为测试条件语句,可以使用任何表达式作为测试条件,非零为真,零为假。

二.新的_Bool类型 

        _Bool是c语言中布尔变量的类型名。_Bool类型的变量只能储存1(真)或0(假)。如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1.这反映了C把所有非零值都视为真。

#include<stdio.h>
int main()
{
	long num;
	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);
	while(input_is_good)
	{
		sum=sum+num;
		printf("please enter an integer to be summed(q to quit)");
		input_is_good=scanf("%ld",&num==1);
	}
	printf("Those integers sum to %ld.\n",sum);
	return 0;
}

三.for循环

        关键字for 后面的圆括号中有3个表达式,分别用两个分号隔开。第1个表达式是初始化,只会在for循环开始时执行一次。第2个表达式是测试条件,在执行循环之前对表达式求值。如果表达式为假,循环结束。第3个表达式执行更新,在每次循环结束时求值。完整的for 语句还包括后面的简单语句或复合语句。for圆括号中的表达式也叫做控制表达式,它们都是完整表达式,所以每个表达式的副作用(如,递增变量)都发生在对下一个表达式求值之前。图6.3演示了for循环的结构。

  • 可以用字符代替数字计数 
  • #include<stdio.h>
    int main()
    {
    	char ch;
    	for(ch='a';ch<'z';ch++)
    		printf("The ASCⅡ value for %c is %d.\n",ch,ch);
    	return 0;
    }

  • #include<stdio.h>
    int main(void)
    {
    	int x;
    	int y=55;
    	for(x=1;y<=75;y=(++x*5)+50)
    		printf("%10d %10d\n",x,y);
    	return 0;
    }

  • 第一个表达式不一定是给变量赋值,也可以使用printf()。记住,在执行循环的其他部分之前,只对第一个表达式求值一次或执行一次。
    #include<stdio.h>
    int main(void)
    {
    	int num=0;
    	
    	for(printf("Keep entering number!\n");num!=6;)
    		scanf("%d",&num);
    	printf("That is the one I want!\n");
    	return 0;
    }

    总结:明天再看其他赋值运算符,加油! 

  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值