C_控制语句_分支和跳转

一、if语句

              if语句的通用形式:

                   if(expression)

                   statement

              1) if语句被称为分支语句选择语句,相当于一个交叉点,程序要在两条分支中选择一条执行

              2) 如果对expression求值为真(非0),则执行statement;否则,跳过statement

              3) 如果满足条件可执行的话,if语句只能测试和执行一次,而while语句可以测试和执行多次

              4) expression是关系表达式,即比较两个量的大小

二、if else语句

              if else语句的通用格式:

                  if(expression)

                  statement

                  else

                  statement

              1) 如果expression为真(非0),则执行statement;如果expression为假或0,则执行else后面的statement

              2) 在if和else之间只允许有一条语句(简单语句或复合语句)

              3) if语句用于选择是否执行一个行为,而if else语句用于在两个行为之间的选择

三、getchar()和putchar()

           getchar()函数不带任何参数,它从输入队列中返回下一个字符。putchar()函数打印它的参数。

           举例:    ch = getchar();                               //等同于scanf("%c",&ch);

                       putchar(ch);                                   //等同于printf("%c",ch);

           举例:  如果字符是空白,原样打印;否则,打印原字符在ASCII序列中的下一个字符

#include<stdio.h>

int main()

{
    char ch;
	ch = getchar();
	while (ch != '\n')
	{
		if (ch == ' ')
			putchar(ch);
		else
			putchar(ch + 1);
		ch = getchar();
	}
	putchar(ch);
    return 0;
}

 四、ctype.h系列的字符函数

              1) C有一系列专门处理字符的函数,ctype.h头文件包含了这些函数的原型

              2) 这些函数接收一个字符作为参数,如果该字符属于某特殊类别,就返回一个非零值(真);否则返回0(假)

              3) 例如isalpha()函数的参数是一个字母,则返回一个非零值

#include<stdio.h>
#include<ctype.h>

int main()
{
    char ch;
    while((ch = getchar())!='\n')
    {
        if(isalpha(ch))
            putchar(ch+1);
        else
            putchar(ch);
    }
    putchar(ch);
    reutrn 0;
}
ctype.h头文件中的字符测试函数
函数名如果是下列参数时,返回值为真
isalnum()字母数字(字母或数字)
isalpha()字母
isblank()标准的空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符
isdigit()数字
iscntrl()控制字符,如Ctrl+B
isgraph()除空格之外的任意可打印字符
islower()小写字母
isprint()

可打印字符

ispunct()标点符号(除空格或字母数字字符以外的任何可打印字符)
isspace()空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化定义的字符)
isupper()大写字母
isxdigit()十六进制数字符
ctype.h头文件中的字符映射函数
函数名行为
tolower()如果参数是大写字符,该函数返回小写字符;否则,返回原始参数
toupper()如果参数是小写字符,该函数返回大写字符;否则,返回原始参数

五、多重选择: else if

              if...else if...else序列是嵌套if的一种形式,从一系列选项中选择一个执行

                举例:    提供多种选择

if(score>=90)
    printf("'A'\n");
else if(score>=75&&score<90)
    printf("'B'\n");
else if(score>=605&&score<75)
    printf("'C'\n");
else
    printf("'D'\n");

         注意: 如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来

         举例:   if(条件)                                                                               if(条件)  

                        语句                                                                               {

                    if(条件)                                                                                       语句

                        语句                                                                                       if(条件)

                    else                                                                                                  语句

                         语句                                                                              }

                else与最近的if匹配                                                                else

                                                                                                                     语句

                                                                                                      else与内含if语句的第一个if语句匹配

六、嵌套if语句的简单示例

             举例: 素数问题

#include<stdio.h>
#include<stdbool.h>

int main()
{
    long num;
    long x;             
    _Bool flag;
    printf("请输入一个数: ");
    while (scanf("%ld",&num)==1)
    {
	    for (x = 2, flag = true; (x*x) <= num; x++)
	    {
		    if (num%x == 0)
		    {
			    if (x*x != num)
			    	printf("%ld 的约数为: %ld和%ld\n", num, x, num / x);
			    else
			    	printf("%ld 的约数为: %ld\n", num, x);
			    flag = false;
	    	    }
    	    }
    	    if (flag)
	    {
    		    printf("%ld 是一个素数\n", num);
    	    }    
    	    printf("请输入一个数: ");
    }
    printf("程序退出!\n");
    return 0;
}

七、逻辑运算符              

3种逻辑运算符
逻辑运算符含义
&&与(有假则为假,都真则为真)
||或(有真则为真,都假则为假)

             注: 1) !运算符的优先级很高,比乘法运算符还高,与递增运算符的优先级相同只比圆括号的优先级低

                   2) &&运算符的优先级比||运算符,但是两者的优先级都比关系运算符低比赋值运算符高

                   3) C保证逻辑表达式的求值顺序是从左往右,一旦发现某个元素让整个表达式无效,便立即停止求值

                       举例: if(number != 0 && 12/number == 2)

                       说明: 如果number的值是0,那么第一个子表达式为假,且不再对关系表达式求值(避免把0作为除数)

                   4) 逻辑运算符的运算对象通常是关系表达式

                          !运算符只需要一个运算对象,其他两个逻辑运算符都需要两个运算对象

八、条件运算符:   ?:

                条件表达式的通用形式如下: 

                     expression1?expression2:expression3;

               说明: 1) 如果expression1为真(非0),那么整个条件表达式的值与expression2的值相同

                        2) 如果expression1为假(0),那么整个条件表达式的值与expression3的值相同

                        3) 条件运算符需要3个运算对象,每个运算对象都是一个表达式

             C提供条件表达式作为表达if else语句的一种便捷方式,该表达式使用?:条件运算符

             举例: 求一个数的绝对值

                      x = (y<0)?-y:y;                //如果y<0,那么x=-y;否则,x = y;

            举例:    计算刷给定平方英尺的面积需要多少灌油漆

#include<stdio.h>
#define COVERAGE 350                   //每罐油漆可刷的面积


int main()
{
        int area;
	int sum;
	printf("请输入需要刷的面积: ");
	while (scanf("%d", &area) == 1)
	{
		sum = area / COVERAGE;
		sum += (area%COVERAGE == 0) ? 0 : 1;
		printf("%d 平方英尺需要 %d 灌油漆\n", area, sum);
		printf("请输入需要刷的面积: ");
	}
	printf("正确退出!\n");
    return 0;
}

九、continue语句和break语句

    1.continue语句

                 1) 三种循环都可以使用continue语句

                 2) 执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代

                 3) 如果continue语句在嵌套循环内,则只会影响包含该语句的内层循环

                 4) 对于while和do while循环,执行continue语句后的下一个行为是对循环的测试表达式求值            

count = 0;
while(count<10)
{
    ch = getchar();
    if(ch == '\n')
        continue;
    putchar(ch);
    count++;
}

                       说明: 循环读取10个字符,当ch是换行符时,跳过打印及计数行为,开始进行下一次循环测试

                 5) 对于for循环,执行continue后的下一个行为是对更新表达式求值,然后对循环测试表达式求值

for(count = 0;count<10;count++)
{
    ch = getchar();
    if(ch == '\n')
        continue;
    putchar(ch);
}

                       说明: 执行完continue后,首先递增count,然后将递增后的值和10作比较

    2.break语句

                 1) 程序执行到循环中的break语句时,会终止包含它的循环,跳过测试更新部分,直接执行下一阶段

                 2) 如果break语句位于嵌套循环内,它只会影响包含它的当前循环

          举例: 计算矩形面积,输入非数字使用break终止循环

        float length, width;
	printf("请输入矩形的长: ");
	while (scanf("%f", &length) == 1)
	{
		printf("矩形的长为: %.2f\n", length);
		printf("请输入矩形的宽: ");
		if (scanf("%f", &width) != 1)
			break;
		printf("矩形的宽为: %.2f\n", width);
		printf("矩形的面积为: %.2f\n", length*width);
		printf("请输入矩形的长: ");
	}
	printf("正确退出!\n");

十、多重选择: switch和break

            switch的构造如下: 

                           switch(整型表达式)

                           {

                                case 常量1:

                                       语句

                                case 常量2:

                                       语句

                                default:

                                       语句

                           }

             说明:  1) 先对紧跟在关键字switch后圆括号中的表达式求值

                       2) 然后程序扫描标签,发现匹配值,然后程序跳转该语句

                       3) 如果没有匹配值:有default则跳转该行,无default则继续执行switch后面的语句

                       4) break语句让程序离开switch语句,跳转至switch语句的下一条语句

                       5) 如果没有break语句,程序就会从case1开始执行到switch语句末尾

                       6) switch在圆括号中的测试表达式的值应该是一个整数值(包括char类型) 

                       7) case标签必须是整数类型(包括char类型)的常量或整型常量表达式,不能为变量

十一、goto语句(通常不需要)

                    goto语句有两部分:goto和标签名,标签的命名遵循变量命名规则

                    举例: goto _next;

                              _next:printf("Hello world!");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值