本文参考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; }
总结:明天再看其他赋值运算符,加油!