C语言学习日记五

C控制语句:分支和跳转

一、if语句

  • if语句被称为分支语句或选择语句,其通用形式为
if (expression)
	statement
else if
	statement
else if
	statement
......
else
	statement
  • statement 可以是复合语句也可以是简单语句,即使if语句由复合语句构成,整个if语句仍被视为一条语句。
  • 最后一个条件语句一定是else。
  • 如果没有花括号,else 与离他最近的if匹配。例如
if (number > 6 )
	if (number < 12 )
		printf("You're close!\n");
else
	printf("Sorry,you lose a turn!\n");

else与第二个匹配。输入的数字和匹配的响应如下:

数字			响应
5				无
10			You're close!
15			Sorry,you lose a turn!
  • 编译器是忽略缩进的,代码缩进只是为了便于理解代码。
  • 在if语句中提供花括号可以提高代码的可读性。

二、字符输入/输出函数:getchar() 和

putchar()

1、字符输入函数:getchar()

  • getchar() 函数不带任何参数,它从输入队列中返回下一个子符。例如ch = getchar();等同于scanf("%c",&ch);
  • 不需要转换说明,因为它只处理字符,所以也是单个。定义在stdio.h头文件中。

2、字符输出函数:putchar()

  • putchar() 函数打印它的参数。例如:putchar(ch);等同于printf("%c",ch);
  • 不需要转换说明,因为它只处理字符,所以也是单个。定义在stdio.h头文件中。

三、逻辑运算符

1.逻辑运算符表

逻辑运算符含义备选拼写iso646.h
&&and
||or
not
  1. !运算符优先级和递增运算符优先级相同。
  2. &&运算符优先级比||运算符高,但是两者的优先级都比关系运算符低,比赋值运算符高。
  3. &&运算符可以用于测试范围。例如
if (range >= 90 && range <=100)
	printf("Good show!\n");
//但不是数学写法
if (90 <= range <= 100)
	printf("Good show!\n");

因为90 <= range <= 100这种写法相当于(90 <= range ) <= 100,而该式恒成立。

四、isspace() 函数

  • 该函数的头文件是ctype.h。
  • 用于检测所传函数是否是空白字符,若c是空白字符,则isspace( c )为真;如果c不是空白字符,isspace( c ) 为假。

五、条件运算符:?:

  • 作为if else 语句的一种便携表达方式。是一个三元运算符。
  • 通用形式为
expression1 ? expression2 : expression3;

如果expression1为真,那么整个表达式的值与expression2 的值相同;若为假,则与expression3 的值相同。

六、循环辅助:continue 和 break

  • continue 和 break 语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至是结束循环。

1.continue语句

  • 三种循环语句都可以使用,执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。
  • 如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环。

2.break 语句

  • 三种循环语句都可以使用,执行到该语句时,会终止包含它的循环,并开始下一阶段。
  • 若如break语句位于嵌套循环内,它只会影响包含它的当前循环。
  • 在for循环中break 和continue的情况不同,执行完break语句后会直接执行循环后面的第一条语句,连更新部分也会跳过。
  • 嵌套循环内层的break只会让程序跳出包含它的当前循环,要跳出外层循环还需要一break。

七、多重选择:switch和break

  • 类似于 if else if 、、、else。举例
/* animals.c -- uses a switch statement */
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char ch;
    
    printf("Give me a letter of the alphabet, and I will give ");
    printf("an animal name\nbeginning with that letter.\n");
    printf("Please type in a letter; type # to end my act.\n");
    while ((ch = getchar()) != '#')
    {
        if('\n' == ch)
            continue;
        if (islower(ch))     /* 只接受小写字母          */
            switch (ch)
        {
            case 'a' :
                printf("argali, a wild sheep of Asia\n");
                break;
            case 'b' :
                printf("babirusa, a wild pig of Malay\n");
                break;
            case 'c' :
                printf("coati, racoonlike mammal\n");
                break;
            case 'd' :
                printf("desman, aquatic, molelike critter\n");
                break;
            case 'e' :
                printf("echidna, the spiny anteater\n");
                break;
            case 'f' :
                printf("fisher, brownish marten\n");
                break;
            default :
                printf("That's a stumper!\n");
        }                /* switch结束           */
        else
            printf("I recognize only lowercase letters.\n");
        while (getchar() != '\n')
            continue;      /* 跳过输入行的剩余部分*/
        printf("Please type another letter or a #.\n");
    }                        /* while 循环结束          */
    printf("Bye!\n");
    
    return 0;
}
  1. switch语句
  • switch语句的一般模式
switch (number)
{
	case 1: statement 1;break;
	case 2: statement 2;break;
	......
	default: statement n;//不用加break;
}
statement 5;
  • 对关键字switch后圆括号中的表达式求值,然后程序扫描标签(上面的case 1 ,case 2…),直到符合为止,执行完跳出switch。如果没有符合项,则执行default,若也没有default 那么程序继续执行switch后面的语句。
  • 如果没有break语句,就会从匹配标签开始执行到switch末尾。
  • break语句可以用于循环和switch语句中,但是continue 只能用于循环中。
  • switch 在圆括号中的测试表达式的值应该是一个整数值(包括char类型)。
  • case 标签必须是整数类型(包括char类型)的常量或整型常量表达式。不能用变量作为case标签。
  • 可以没有default语句。
  1. 多重标签
  • 因为没有break语句的缘故。例如
case 'a':
case 'A': a_ct++;
			break;
  • 多个标签指向相同的语句。

八、一些补充

  • scanf() 在读到非数字字符时会返回0。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值