【C语言基础】分支和跳转
if语句
该程序读取一列数据,每个数据都表示每日的最低温度(℃),然后打印统计的总天数和最低温度在0℃以下的天数占总天数的百分比。程序中的循环通过scanf()读入温度值。while循环每迭代一次,就递增计数器增加天数,其中的if语句负责判断0℃以下的温度并单独统计相应的天数。
#include<stdio.h>
int main(){
float temp;
float sum1,sum2;
sum1=sum2=0.0;
printf("enter lowest temp:");
while (scanf("%f",&temp)==1){
if(temp<0){
sum1=sum1+1.0;
}
sum2=sum2+1.0;
printf("enter lowest temp:");
}
printf("占比:%.2f\n",sum1/sum2);
return 0;
}
语法结构:
if(表达式)
语句;
表达式为真,执行语句;表达为假,跳过语句
if else语句
if(表达式)
语句1;
else
语句2;
表达式为真,执行语句1,表达式为假,执行语句2。
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
表达式1为真,执行语句1,表达2为真,执行语句2,两者都不为真,则执行语句3.
注意else的匹配:else是和离他最近的if匹配,如下面代码:
#include<stdio.h>
int main(){
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hhaha\n");
else
printf("heheh\n");
}
上述代码,在执行打印时,并不会输出任何结果,原因是else与最近的if匹配,而最外层的if由于判断语句为假,不会执行里面的内容,所以整个都会执行。
getchar与putchar函数
#include<stdio.h>
#define SPACE ' '//定义宏变量,用space代替空格
int main(){
char ch;
ch=getchar();//字符输入函数
while(ch!='\n'){//执行循环,判断当输入语句为换行时退出循环
if(ch==SPACE){//执行判断,判断输入的字符是否为空格
putchar(ch);//如果输入的字符时空格,直接输出该字符空格
}
else{//如果输入的字符不是空格
putchar(ch+1);//则对应ascll码值加1,编程下一个字符
}
ch=getchar();//保证循环继续执行,于是在输入下一字符
}
putchar(ch);//当上述循环结束时,最后输入的字符串时\n,执行换行的功能
return 0;
}
// CALL ME HAL .点的ascll码值加1为/
// DBMM NF IBM/
// 请按任意键继续. . .
注意上述程序,如果将ch=getchar();while(ch!='\n')换成while(ch=getchar()!='\n')会出现错误,由于!=的优先级高于=,则在执行上面语句时,会先执行!=语句,执行结果无非是真或者假,那么,在赋值给ch后,ch的值也就只有真或假了。
ctype.h系列的字符函数
C 有一系列专门处理字符的函数,ctype.h头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回0(假)。
// 只替换字母,除字母外,其他一律不更换
#include<stdio.h>
#include<ctype.h>
// #define SPACE ' '//定义宏变量,用space代替空格
int main(){
char ch;
ch=getchar();//字符输入函数
while(ch!='\n'){//执行循环,判断当输入语句为换行时退出循环
if(isalpha(ch)){//isalpha函数判断ch是否为字母,如果为字母,则判断为真
putchar(ch+1);
}
else{//如果输入的字符不是空格
putchar(ch);
}
ch=getchar();//保证循环继续执行,于是在输入下一字符
}
putchar(ch);//当上述循环结束时,最后输入的字符串时\n,执行换行的功能
return 0;
}
ctype.h文件头中的字符测试函数
ctype.h头文件中的字符映射函数
逻辑运算符
当且仅当exp1和exp2都为真时,exp1 && exp2才为真
如果exp1或exp2为真,则exp1 || exp2为真
如果exp1为假,则!exp1为真;如果exp1为真,则!exp1为假
例子:
5 > 2 && 4 > 7为假,因为只有一个子表达式为真
5 > 2 || 4 > 7为真,因为有一个子表达式为真
!(4 > 7)为真,因为4不大于7
iso646.h头文件
在iso646.h中,包含了函数and,or,not代替,则下列两行代码等效:
if(ch=" "&&ch!="\")
if(ch=" "and ch!="\")
优先级
求值顺序:
逻辑表达式的求值顺序是从左往右。一旦发现有使整个表达式为假的因素,立即停止求值。
示例:
6 > 2 && 3 == 3 真
!(6 > 2 && 3 == 3) 假
x != 0 && (20 / x) < 5 只有当x不等于0时,才会对第2个表达式求值