1,if语句+复习前章内容
单独从英语的角度来讲if就是“如果”的意思,应用到C语言也是如此,先来一个简单的程序(虽然看着有点长);以下程序都是由之前所需要的知识,大家来简单学习看一下,运用了声明变量的整型与浮点型,运用了while循环,以及声明变量++等;
#include <stdio.h>
#define FREEZING 0 // freezing temperature
int main(void)
{
float temperature;
int cold_days = 0; // number of days below freezing
int days = 0; // number of days entered
printf("Enter the list of daily low temperatures.\n");
printf("Use Celsius, and enter q to quit.\n");
while (scanf("%f", &temperature) == 1)
{
days++; // count the days
if (temperature < FREEZING)
cold_days++; // count the cold days
}
if (days != 0) // avoid division by zero
printf("%d days total: %.1f%% were below freezing.\n",days, 100.0 * (float) cold_days / days); // print the result
if (days == 0)
printf("No data entered!\n");
return 0;
}
程序中的循环通过scanf()读入温度值。while循环每迭代一次,就递增计数器增加天数,其中的if语句负责判断0℃以下的温度并单独统计相应的天数。其中这个程序看似简单但也是有些细节要着重强调的:
- while循环的测试条件利用scanf()的返回值来结束循环,因为scanf()在读到非数字字符时会返回0。
- temperature的类型是float而不是int,这样程序既可以接受温度低于0度和-3.6这种温度值。
- 在程序的第十九行中为避免整数除法,该程序示例把计算后的百分比强制转换为float类型。
if语句在这个程序中的结构和while语句很相似,它们的主要区别是:如果满足条件可执行的话,if语句只能测试和执行一次,而while语句可以测试和执行多次。
1.1,if else语句
简单形式的if语句可以让程序选择执行一条语句,或者跳过这条语句。C还提供了if else形式,在两条语句之间作选择。
我们用if else形式来举例上述程序中纯if部分:
如果程序发现days不等于0,那么它应该知道另一种情况一定是days等于0。所以如果单纯使用if下边的还需要在判断测试一次就很没有必要了。修改如下:
在使用if和else之间执行多条语句,必须用花括号把这些语句括起来成为一个“块”。下面的代码结构违反了C语法,因为在if和else之间只允许有一条语句(简单语句或复合语句):
if (y > 0)
printf("y:\n");
y++;
else //程序将会报错
printf("y <= 0 \n");
报错的原因是编译器把printf()语句视为if语句的一部分,而把x++;看作一条单独的语句,它不是if语句的一部分,编译器发现else并没有所属的if所以程序就会报错。
if (y > 0)
{
printf("y:\n");
y++;
}
else
printf("y <= 0 \n");
2,getchar()和putchar()
之前在第一章学习到的getcher();只是单纯用来点击编译文件使得程序可以停留。下面来详细学习一下使用:
下面的语句读取下一个字符输入,并把该字符的值赋给变量cy:
cy = getchar();其实等效为:scanf(“%c”, &cy);
putchar()函数打印它的参数。
putchar(cy);其实等效为:printf(“%c”, cy);
由于这些函数只处理字符,所以它们比更通用的scanf()和printf()函数更快、更简洁。特别注意getchar()和putchar()不需要转换说明,因为它们只处理字符。
下边我们来学习一个程序看下函数的具体实践使用:
#include <stdio.h>
#define SPACE ' ' // that's quote-space-quote
int main(void)
{
char ch;
ch = getchar(); // read a character
while (ch != '\n') // while not end of line
{
if (ch == SPACE) // leave the space
putchar(ch); // character unchanged
else
putchar(ch+2); // change other characters
ch = getchar(); // get next character
}
putchar(ch); // print the newline
return 0;
}
这个程序是把一行输入重新打印出来,但是每个非空格都被替换成原字符在ASCII序列中的下一个字符,空格不变。这一过程可描述为“如果字符是空白,原样打印;否则,打印原字符在ASCII序列中的下两个字符”。
输出结果如下: