加载中...

【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个表达式求值

一个统计单词的程序

posted @ 2022-07-29 17:23  不会编程的小学鸡  阅读(133)  评论(0编辑  收藏  举报