1.if语句
以下该程序读取一系列数据,每个数据表示每日的最低温度,然后打印统计的总天数和最低温度在0℃以下的天数占总天数的百分比
//colddays.c--找出0℃以下的天数占总天数的百分比
#include <stdio.h>
int main(void)
{
const int FREEZING = 0;
float temperature;
int cold_days = 0;
int all_days = 0;
printf("enter the list of daily low temperatures.\n");
printf("use celsius,and enter q to quit.\n");
while (scanf("%f", &temperature) == 1);
{
all_days++;
if (temperature < FREEZING)
cold_days++;
}
if (all_days != 0)
printf("%d days tatall:%.1f%% were below freezing .\n",
all_days, 100.0*(float)cold_days / all_days);
if (all_days == 0)
printf("no date entered!\n");
return 0;
}
为避免整数除法,该程序事例把计算后的百分比强制装换为float类型,all_days, 100.0*(float)cold_days / all_days),使用强制转换可以明确表达转换类型的意图,保护程序免受不同版本编译器的影响。if语句被称为分支语句(branching statement)或选择语句,因为他相当于一个交叉点,程序要在两天分支中选择一条执行。if语句的通用格式如下:
if (expression)
statement 如果对expression的求值为真(非0),则执行statement,否则,则跳过statement,if只能进行一次执行和测试,while语句可以执行和测试多次。通常EXPRESSION是关系表达式,既比较两个量的大小,statement部分可以是一条简单的语句,或者是一条用花括号括起来的复合语句(或块)。如
if (score > big)
printf("jackopt!\n");//简单语句
if (Joe > ron)
{ //复合语句
joecash++;
printf("you lose,ron.\n");
}
2.if else 语句
if可以选择执行或跳过一条语句,而if else语句可以在两条语句之间做选择
if (all_days != 0)
printf("%d days tatall:%.1f%% were below freezing .\n",
all_days, 100.0*(float)cold_days / all_days);
if (all_days == 0)
printf("no date entered!\n");可以用ifelse改写为
if (all_days != 0)
printf("%d days tatall:%.1f%% were below freezing .\n",
all_days, 100.0*(float)cold_days / all_days);
else
printf("no date entered!\n");
如果要在if和else之间执行多条语句,必须用花括号把这些语句括起来成为一个快。且if和else之间只允许有一条语句(简单语句或复合句)。
介绍getcher和putchar
对字符输入和输出的函数
getchar(0函数不带任何参数,他从输入列队中返回下一个字符。例如下面语句读取下一个字符输入,并把该字符的值赋予变量ch:ch=getchar(),该语句与scanf("%c",&ch)语句效果相同:;putchar()函数打印他的参数,如下面语句将之前赋给ch的值作为字符打印出来:putchar();与之相同效果的语句为printf("%ch",ch);由于这些函数只处理字符,所以它们比更通用的scanf和printf()函数更快更简洁。而且getchar和putchar函数不需要转换说明,因为它只处理字符,这两个函数通常定义在stdio.h头文件中
//cypherl.c--更改输入,空格不变
#include<stdio.h>
#define SPACE ' ' //SPACE表示单引号—空格-单引号
int main(void)
{
char ch;
ch = getchar(); //读取一个字符
while (ch != '\n') //当一行结束时
{
if (ch == SPACE) //留下空格
putchar(ch); //该字符不变
else
putchar(ch + 1); //改变其他字符
ch = getchar(); //获取下一个字符
}
putchar(ch); //打印换行符
return 0;
}
ch = getchar(); //读取一个字符
while (ch != '\n') //当一行结束时
{
if (ch == SPACE) //留下空格
putchar(ch); //该字符不变
else
putchar(ch + 1); //改变其他字符
ch = getchar(); //获取下一个字
可以替换为下面循环模式
while((ch=getchar()) !='\n')
{
…… //处理字符
}
while((ch=getchar()) !='\n')这体现了c特有的编程风格,把两个行为合并成一个表达式
ctype.h系列的字符函数
多重选择else if
例子:电力公司通常根据客户的总用电量来决定电费,下面是某电力公司的额电费清单,单位是千瓦时:首 360kwh $0.13230/kwh
续 108kwh: $0.15040kwh 续252kwh: $0.30025/kwh 超过720kwh $0.34025/kwh
//electric.c--计算电费
#include<stdio.h>
#define RATE1 0.13230 //首次使用360.0kwh的费率
#define RATE2 0.15040
#define RATE3 0.30025
#define RATE4 0.34025
#define BREAK1 360.0 //费率第一个分界点
#define BREAK2 468.0
#define BREAK3 720.0
#define BASE1(RATE1*BREAK1)
#define BASE2 (BASE1 + (RATE2*(BREAK2-BREAK1)))
#define BASE3 (BASE1+BASE2 (RATE3*(BREAK3-BREAK2)))
int main(void)
{
double kwh; //使用kwh
double bill; //电费
printf("piease enter the kwh used.\n");
scanf("%1f", &kwh);
if (kwh <= BREAK1)
bill = RATE1*kwh;
else if (kwh <= BREAK2) //360~468kwh
bill = BASE1 + (RATE2*(kwh - BREAK1));
else if (kwh <= BREAK3) //
bill = BASE1 + BASE2(RATE3*(kwh - BREAK2));
else
bill = BASE3 + (RATE4*(kwh - BREAK3));
printf("the charge for %.1f kwh is $%1.2f.\n", kwh, bill);
return 0;
}
else与if配对原则如果没有花括号,else与离它最近的if匹配,如果最近的括起来,就与除括号外最近的匹配。
多层嵌套的if语句
//divisors.c--使用嵌套if语句显示一个数的均数
#include <stdio.h>
#include<stdbool.h>
int main(void)
{
unsigned long num; //特殊测试的数
unsigned long div; //可能的数
bool isPrime; //素数标记
printf("please enter an integer for analysis;");
printf("netrer q to quit .\n");
while (scanf("%1u", &num) == 1)
{
for (div = 2, isPrime = true; (div*div) <= num; div++)
{
if (num %div == 0)
{
if ((div*div) != num)
printf("%1u is divisible by %1u .\n", num, div);
isPrime = false; //该数不是素数
}
}
if (isPrime)
printf("%1u is Prime.\n", num);
printf("please enter another integer for analysis;");
printf("enter q to quit .\n");
}
printf("bye .\n");
return 0;
}
if 语句进行选择
形式1
If(expression)
statement
形式2
if(expression)
statement1
else
statement2
形式3
if(expression)
statement1
else if(expression2)
statement2
else
statement3