C语言程序设计——学习笔记4(控制语句)

程序的基本结构

  • 顺序结构:指程序中的语句顺序执行,无转移、分支和循环。
  • 分支结构:是程序根据条件判断,选择执行不同的程序段,即改变执行流程,实现程序分支。
  • 循环结构:是程序根据条件是否成立,决定是否重复执行某段程序,这样可避免重复书写需要多次执行的语句,减少程序长度。

复合语句

把若干语句用花括号“{”和“}”扩起来便构成了复合语句,花括号内可以包含任何C语句,其一般形式如下:
{
语句1;
语句2;

语句n;
}

if条件分支语句

if流程

语句形式如下:
if(表达式)
语句
这是if语句最简单的一种形式,表达式可以是任何类型的表达式。
输入一个学生的三门功课考试成绩,计算其平均成绩,如果平均成绩大于等于90分,则显示“优秀”。

# include<stdio.h>

void main(){
    float x1,x2,x3;
    float average;
    scanf("%f %f %f",&x1,&x2,&x3);
    average = (x1+x2+x3)/3;
    if(average>=90){
        printf("优秀\n");
    }
}

if-else流程

语句形式如下:
if(表达式)
语句1
else
语句2
输入两个整数a和b,若a小于b,交换两数,并输出交换后的a和b的值,否则输出“未交换”信息。

# include<stdio.h>

void main(){
   
    int a, b;
    int temp;
    scanf("%d %d",&a,&b);
    if(a<b){
        temp = a;
        a = b;
        b = temp;
        printf("a = %d b = %d\n",a,b);
    }else{
        printf("未交换\n");
    }
}

else if流程

语句形式如下:
if(表达式1)
语句1;
else if(表达式2)
语句2;

else if(表达式n)
语句n;
else
语句n+1;
注意:整个if语句中只有一个分支被执行。
根据学生成绩score,按分数分段评定等级A~E。如果分数小于0,则输出“错误”信息。

# include<stdio.h>

void main(){
    float score;
    char grade;
    scanf("%f",&score);

    if(score>=90)
        grade = 'A';
    else if(score>=80 && score<90)
        grade = 'B';
    else if(score>=70 && score<80)
        grade = 'C';
    else if(score>=60 && score<70)
        grade = 'E';
    else
        printf("error!\n");
}

多路开关语句

switch语句的一般形式如下:
switch(表达式):
{
case 常量1: 语句1;
break;
case 常量2: 语句2;
break;

case 常量n: 语句n;
break;
default: 语句n+1;
}
switch、case和default为关键字。switch后的表达式可以是整型或字符型表达式,不能是关系表达式或逻辑表达式。常量1~n可以是整数、字符或常量表达式。
编写一个实现两个数的算术运算的程序

#include<stdio.h>

void main(){
    char op;
    printf("输入两个实数和操作符:");
    scanf("%f %f %c",&x,&y,&op);

    switch (op)
    {
    case '+':
        printf("x + y = %f\n",x+y);
        break;
    case '-':
        printf("x - y = %f\n", x-y);
        break;
    case '*':
        printf("x * y = %f\n",x*y);
        break;
    case '/':
        if(y!=0){
            printf("x / y = %f\n",x/y);
        }else{
            printf("除数不能为0\n");
        }
        
        break;
    default:
        printf("无效操作符\n");
        break;
    }
}

switch语句经常用来实现屏幕菜单。下面这段程序可以根据用户要求计算一个数的平方或立方,两个数的平方和。

#include<stdio.h>
void main(){
    float x,y;
    char ch;
    printf("请输入你的选项:");
    printf("\'1\':计算一个数的平方\n");
    printf("\'2\':计算一个数的立方\n");
    printf("\'3\':计算两个数的平方和\n");
    scanf("%c",&ch);

    switch (ch)
    {
    case '1':
        printf("请输入这个数:\n");
        scanf("%f",&x);
        printf("%f的平方是%f\n",x,x*x);
        break;
    case '2':
        printf("请输入这个数:");
        scanf("%f",&x);
        printf("%f的立方是%f\n",x,x*x*x);
        break;
    case '3':
        printf("请输入两个数:");
        scanf("%f %f",&x,&y);
        printf("%f和%f的平方和是%f\n",x,y,x*x+y*y);
        break;
    default:
        printf("无效操作符\n");
        break;
    }
}

for循环语句

for语句的一般形式为:
for(表达式1;表达式2;表达式3)
语句;
其中,“表达式1”一般为赋值表达式,为循环控制变量赋初值;“表达式2”一般为关系表达式或逻辑表达式,作为控制循环结束条件;“表达式3”一般为赋值表达式,为循环控制变量增量或减量;“语句”为循环体,可以是单语句,也可以是复合语句。

  • for语句的任何一个表达式都可以省略,但不能省略分号“;”。
  • for语句中可应用逗号表达式,使两个或多个控制变量同时控制循环。
  • C语言的for语句允许在循环体内改变循环控制变量的值。
    打印九九乘法表
#include<stdio.h>
void main(){
    int i,j;
    printf("   *");
    for(i = 1; i<=9; i++){
        printf("%4d",i);
    }
    printf("\n");
    for(i = 1; i<=9;i++){
        printf("%4d",i);
        for(j = 1;j<=i;j++){
            printf("%4d",i*j);
        }
        printf("\n");
    }
}

编写程序显示输入的整数的二进制位组合

#include<stdio.h>
void main(){
    int i;
    unsigned number, temp;

    scanf("%u",&number);
    printf("%x\n",number);
    for(i = 0; i<16;i++){
        temp = (number&0x8000);
        temp>>=15;
        printf("%1x",temp);
        number<<=1;
    }
}

while语句和do-while语句

while语句

while语句的一般形式为:
while(表达式)
语句;
这种循环控制结构也称为“先判定”循环结构,特点是当条件成立时,执行循环结构;若一开始条件就不成立,则一次循环也不执行。
编写程序显示所有可见字符的ASCII码标准代码

#include<stdio.h>
void main(){
    int i;
    printf("ASCII code Decimal hexadecimal");
    printf("    ASCII code Decimal hexadecimal\n");
    i  = 32;
    while (i<=79)
    {
        printf("%6c %6d 0x%04x",i,i,i);
        if((i+48)<127)
            printf("            %6c %6d 0x%04x\n",i+48,i+48,i+48);
        i++;
    }
    
}

输入数字d(0~9),找出1~100中满足以下条件的数:该数的本身及它的平方中都含有数字d。

#include<stdio.h>
void main(){
    int i, j, k, d, flag1, flag2;
    scanf("%d",&d);
    printf("d = %d",d);

    
    for(i = 0; i<=100; i++){
        j = i;
        flag1  = 0;
        while(j>0&&!flag1){
            k = j%10;
            j/=10;
            if(k==d) flag1 = 1;
        }

        if(flag1){
            j = i*i;
            flag2 = 0;
            while(j>0&&!flag2){
                k = j%10;
                j/=10;
                if(k==d) flag2 = 1;
            }
        }

        if(flag2){
            printf("%-5d %-5d\n",i,i*i);
        }
    
    }
}

do-while语句

do-while语句的一般形式为:
do{
语句;
}while(表达式);
do-while语句可实现一种“后判定”循环结构。
跳过输入的任意多个空格字符,读入一个非空格字符。

#include<stdio.h>

void main(){
    char ch;
    do{
        scanf("%c",&ch);
    }while(ch==' ');
}

编程输入一串字符,以句点“.”作为结束标志,显示其中字母和数字的个数

#include<stdio.h>
void main(){
    char ch;
    int ch_num, dig_num;
    ch_num=dig_num=0;
    
    do{
        scanf("%c",&ch);
        if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) ch_num++;
        if(ch>='0'&&ch<='9') dig_num++;
    }while(ch!='.');

    printf("the number of chars is %d\n", ch_num);
    printf("the number of digital is %d\n", dig_num);
}

循环嵌套

在一个循环体内又包含另一个循环结构,称为循环嵌套。内层循环体中再包含新循环结构,称为多重循环嵌套。

break、continue和goto语句

  • break语句(跳转语句)可用于switch语句中,使某case子句执行完后,控制立即跳出switch结构,实现多路分支。此外,break语句也用于在for、while或do-while循环中,当需要循环在一定条件下提前终止时,break语句可用于立即跳出循环结构。
    在多重嵌套循环中,break语句只能跳出它所在的那一层的循环。
  • continue语句只能用于循环结构,continue语句不能强制立即跳出循环结构,而是忽略continue后面的语句,直接进入本循环结构的下一次循环操作。
    编写一个程序,它能把输入的字符复制输出,但如果一个相同的字符连续输入几次,则只把它输出一次,如果读到字符‘.’就结束。
#include<stdio.h>
void main(){
    char ch,temp;
    temp = '.';
    do{
        scanf("%c",&ch);
        if(ch==temp) continue;
        temp = ch;
        printf("%c",ch);
    }while(ch!='.');
}
  • goto语句是无条件转移语句。一般形式为:
    goto 标号;

    标号: 语句
    结构化程序设计不提倡使用goto语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值