C语言---选择结构

一、选择结构 ----- if

(一)分支结构

 1、单分支:

     语法:if(判别式)      或         if(判别式)       // 括号里面的判别式为真(值非0),则执行代码块。

                        代码块;                  {  代码块;}

    代码示例:                

#include<stdio.h>
int main(){
    int age = 10;
    if(age<18)
      printf("未成年\n");  
    return 0;
}

2、双分支:

         语法:if(判别式)         或        if(判别式)

                        代码块1;                           { 代码块;}

                    else                              else  

                        代码块2;                           { 代码块2;}

//  判别式为真(值为非0),执行代码块1,否则执行代码块2。

代码示例:

​
#include<stdio.h>
int main(){
    int age = 10;
    if(age<18)
      { printf("未成年\n"); } 
    else
      { printf("已成年\n"); } 
    return 0;
}

​

3、多分支:

  语法:if(判别式1)

                { 代码块1;}

              else if(判别式2)

                { 代码块2;}

                …………

                …………

             else if(判别式n)

                { 代码块n;}

              else{ 代码块n+1;}

// 判别式1为真,执行代码块1,否则跳到判别式2;若判别式2为真,执行代码块2;按此种顺序一次判断,直至判别式为真,执行相应代码块后退出选择结构,若判别式式全为假,则执行else后的代码块n+1,然后退出选择结构。

代码示例:

​
#include<stdio.h>
int main(){
    int age = 10;
    if(age<18)
      { printf("未成年\n"); } 
    else if(age>18 && age<28)
      { printf("青年\n"); } 
    else if(age>28 && age<50)
      { printf("壮年\n"); }
    else
       { printf("准备退休了\n"); } 
    return 0;
}

// 上述逻辑等价于以下逻辑
 if(age<18)
      { 
        printf("未成年\n"); 
      } 
    else 
      {
         if(age>18 && age<28)
              { printf("青年\n"); } 
         else if(age>28 && age<50)
              { printf("壮年\n"); }
         else
              { printf("准备退休了\n"); }
      }

(二)错误示例

 1、悬空else

​

#include<stdio.h>
int main()
{
    int a = 0
    int b = 2;
    if(a == 1) 
      if(b == 2)
          printf("AA\n");          
    else
        printf("BB\n"); 
    return 0;
}
// 发现上述代码不会有任何输出
// 原因:else 优先匹配未与其它else匹配的if代码块,以下为修改后的示例。第二个if与else组合成为了第一个if的代码块,然后判别式为假,不会继续进行第二个if判断,直接结束选择结构

// 修改过后
if(a == 1) 
    {
        if(b == 2)
             { printf("AA\n"); }
    }          
else
     { printf("BB\n"); }

2、数学的惯性思维:

#include<stdio.h>
int main(){
    int age = 10;
    if(18<=age<28) 
        printf("青年\n");
    return 0;
}
// 分析:优先判断左边的条件:18<=age 结果为假(值为0)
// 然后形成: if(0<28) 判断结果为真,执行语句:printf("青年\n");
// 18<=age<28为错误判别式。正确规范:age>=18 && age<28

3、写等于判断小技巧:

#include<stdio.h>
int main(){
    int num = 8;
    if( num = 6)
        printf("哈哈\n");
    return 0;
}
// 结果:输出了哈哈;因为 num = 6的判别值为真。正确书写为 num == 6
// 避免反这种疏漏,产生bug,可以将数字放在前面:6 == num; 即使疏漏写为 6 = num 也会报错 

二、选择结构 ----- switch

(一)常规写法与注意事项

 

语法:
switch(n)
{
  case 表达式1: 语句1;
  case 表达式2: 语句2;
  ………………………
  ………………………
  case 表达式n: 语句n;
  default: 语句n+1;
}

#include<stdio.h>
int main()
{
    int w = 3;
    switch(w)
    {
    case 1: printf("周1\n");
    case 2: printf("周2\n");
    case 3: printf("周3\n");
    case 4: printf("周4\n");
    case 5: printf("周5\n");
    case 6: printf("周6\n");
    case 7: printf("周末\n");
    }
    return 0;
}
//输出:周3到周末。因为case只是决定执行程序的入口,与表达式的值相匹配时,只依次往下执行

// 修改后的代码。此时用break结束语句,不会依次往下执行
    switch(w)
    {
    case 1: printf("周1\n");break;
    case 2: printf("周2\n");break;
    case 3: printf("周3\n");break;
    case 4: printf("周4\n");break;
    case 5: printf("周5\n");break;
    case 6: printf("周6\n");break;
    case 7: printf("周末\n");break;
    default: printf("数值错误\n");   // default表示无论前面是否执行,这里都会默认执行
    }

// case 与case ,case与default之间的顺序可以变化。如:
switch(w)
    {
    default: printf("数值错误\n"); 
    case 2: printf("周2\n");break;
    case 3: printf("周3\n");break;
    case 4: printf("周4\n");break;
    case 5: printf("周5\n");break;
    case 6: printf("周6\n");break;
    case 7: printf("周末\n");break;
    case 1: printf("周1\n");break; 
    }

(二)小技巧

#include<stdio.h>
int main()
{
    int w = 3;
    switch(w)
    {
    case 1: 
    case 2: 
    case 3: 
    case 4: 
    case 5: printf("工作日\n");break;
    case 6: 
    case 7: printf("休息啦\n");break;
    }
    return 0;
}
// 实现w为1-5时,打印工作日;w为6,7时,打印休息啦

(三)嵌套写法

#include<stdio.h>
int main()
{
    int x = 1;
    int y = 2;
    switch(x)
    {
    case 1: y++;
    case 2: x++;
    case 3: 
            switch(x)
            {
            case 1: x++;
            case 2: x++; y++; break;
            }
    case 4: y++:
            break;
    default:
           break;
    }
    printf("x = %d    y = %d\n",x,y);
    return 0;
}
// 输出结果:x = 3    y = 5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
顺序栈是一种基于数组实现的栈,它的特点是具有随机存取的特性。顺序栈的基本运算包括进栈、出栈和查看栈顶元素。进栈操作将元素插入到栈顶,出栈操作将栈顶元素删除并返回,查看栈顶元素操作返回栈顶的元素值,但不修改栈的状态。 在C语言中,顺序栈的存储结构可以使用一个一维数组来存放栈中的元素,同时使用一个指示器top来指示栈顶的位置。在进行进栈和出栈操作时,需要更新top的值,使其指向栈顶元素。 下面是一种常见的顺序栈的定义和基本操作的示例代码: ```c // 定义栈中元素的数据类型 typedef int StackElementType; // 定义顺序栈的存储结构 #define Stack_Size 100 // 栈的最大容量 typedef struct { StackElementType elem[Stack_Size]; // 用数组存放栈中元素 int top; // 栈顶指针 } SeqStack; // 初始化顺序栈 void Init_SeqStack(SeqStack *S) { S->top = -1; // 初始时栈为空,栈顶指针置为-1 } // 进栈操作 void Push_SeqStack(SeqStack *S, StackElementType x) { if (S->top == Stack_Size - 1) { printf("栈已满,无法进栈"); return; } S->top++; // 栈顶指针加1 S->elem[S->top] = x; // 将新元素放入栈顶位置 } // 出栈操作 StackElementType Pop_SeqStack(SeqStack *S) { if (S->top == -1) { printf("栈为空,无法出栈"); return -1; // 返回一个特殊值表示出错 } StackElementType x = S->elem[S->top]; // 获取栈顶元素的值 S->top--; // 栈顶指针减1 return x; // 返回栈顶元素的值 } // 查看栈顶元素 StackElementType GetTop_SeqStack(SeqStack *S) { if (S->top == -1) { printf("栈为空"); return -1; // 返回一个特殊值表示出错 } return S->elem[S->top]; // 返回栈顶元素的值 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值