C语言中怎样if语句的单分支选择结构比较三个数的大小并打印出最大数和最小数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中怎样if语句的单分支选择结构比较三个数的大小并打印出最大数和最小数相关的知识,希望对你有一定的参考价值。

小学生提问,请大侠赐教!

可以的。因为在之前的语句:max=min=*x;里面已经将第一个元素存储在了变量max
,min
中,如果你用p=x,只不过是把第一个元素和自己比较一下大小而已,当然for语句中的2个if语句都不会执行(应为自己和自己相等啊),不影响任何结果,for接着执行下一次循环,从第二个元素开始比较,接着就是你上述程序的步骤了。
ps:希望对你有用。
参考技术A #include<stdio.h>
#include<stdlib.h>
main()

int a,b,c,max,min;
scanf("%d%d%d",&a,&b,&c);
max=min=a;
if(b>max)
max=b;
if(c>max)
max=c;
if(b<min)
min=b;
if(c<min)
min=c;
printf("The max is%d\nThe min is%d\n",max,min);
system("pause");
本回答被提问者采纳
参考技术B 路过!口上说得对。查一句啊!当你把这些东东复制后,要运行的时候。看看有没有什么符号是中文符号不是英文符号。有可能这会导致出错!祝二极过得顺利,加油!

C语言学习--分支和循环语句


在这里插入图片描述

语句结构

C语言是一门结构化的程序设计语言。

C语言的语句结构,从执行流程的角度可以划分出三种基本结构:顺序结构分支(选择)结构循环结构

C语言中由 ; 隔开的就是一条语句。

int main()
{
    int a = 0; // 语句1
    int b = 1; // 语句2
    ;          // 空语句,也是语句
    return 0;  // 语句3 
}

顺序结构

顺序结构就是从上往下的顺序依次执行语句的结构,是C语言最基本的结构。

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = a;
    a = b;
    b = c;
    printf("a=%d b=%d\\n",a,b );
    return 0;
}

在这里插入图片描述

分支(选择)结构

为了完成不同的任务,我们通常需要给一段执行代码前加上判断条件,来决定是否执行相应的代码,这种结构就成为分支(选择)结构。
在这里插入图片描述

if 语句

if语句分为: if、if else 、if else if … else;

if

int main(){
    if(表达式)  // 如果表达式为真,执行语句1
    { 
        执行语句1; 
    }
               // 表达式为假,继续执行下面语句
    return 0;
}

举例

int main()
{
    int age = 10;
    if(age<18)
    {
        printf("未成年");
    }
    // 单条执行语句可以省略代码块,个人习惯使用代码块,结构清晰。
}

在这里插入图片描述

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

}

在这里插入图片描述

if else

int main()
{
    
    if(表达式) // 如果表达式为真,执行语句1
    {
        执行语句1;
    }  
      
    else {    // 否则,执行语句2
        执行语句2;
    }
    return 0;
}

举例

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

在这里插入图片描述

在这里插入图片描述

if else if … else

// 只能有一个语句块被执行,按顺序从上往下判断
int main()
{
    if(expr1)        // if expr1 is true,  execute statement 1;
    {
        statement1;
    } else if(expr2) // if expr2 is true,  execute statement 2;
    {
        statement2;
    } else if(expr3) // if expr3 is true,  execute statement 3;
    {
        statement3;
    } ...           // ...
      else          // else ,execute  statment4
    {
        statment4;    
    }
    return 0;
}

举例

#include <stdio.h>
int main()
{
    int age = 10;
    if(age<18)
    {
        printf("未成年\\n");
    }  
    else if((age>=18)&&(age<28))
    {
        printf("青年\\n");
    } 
    //  注意:(18<=age<28) 这种写法是错误的,系统会先判断18<=age,再将判断返回的真值与28比较,为真时返回1<28,为假时返回0<28,这种判断条件永真。
     else if((age>=28)&&(age<60))
    {
        printf("壮年\\n");
    } 
     else if((age>=60)&&(age<150))
    {
        printf("老年\\n");
    } 
    else
    {
        printf("respect\\n");
    }   
    return 0;
}
// 太多了,不截屏了

悬空else 问题

// 下面代码的输出结果?
#include <stdio.h>
int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
		if (b == 2)
			printf("haha\\n");
	else
			printf("hehe\\n");
	return 0;
}

在这里插入图片描述

因此建议使用代码块{}将执行语句包裹,会使得程序的结构化更加清晰,编译器也能编译出我们想要的效果。
在这里插入图片描述

if 书写形式对比

例一

下面代码意思是否一样?

if(expr)
{
    return x;
}
return z;
if(expr)
{
    return x;
}
else 
{ 
    return z;
}

上述代码的意思是一样的,return x 会直接跳出当前函数,不会执行return 后面的语句。

因此为了不产生歧义,使用第二种书写方式的代码风格是更加清晰的。

例二

下面代码的输出结果为?

int main()
{
    int a = 0;
    if(a = 1)
    {
        printf("1\\n");
    }
    else
    {
        printf("0\\n");
    }
    return 0;
}

输出结果为1, 因为 =赋值操作符,等于给a重新赋值为1,条件永真。

为了避免这类错误,可以将常量放在 == 右侧,变量放在 == 左侧

int main()
{
    int a = 0;
    if(1 == 0) // 这样书写即使少写一个 = 代码也会报错
    {
        printf("1\\n");
    }
    else
    {
        printf("0\\n");
    }
    return 0;
}

练习

判断一个数是否为奇数

先分析:

  1. 奇数不能被2整除的整数,假设奇数x,则x%2=1;
#include <stdio.h>
int main()
{
    int num = 0;
    printf("请输入一个整数>:");
    scanf("%d", &num);
    if (1 == num % 2)
    {
        printf("%d is a odd number\\n", num);
    }
    else
    {
        printf("%d is a even number\\n", num);
    }
    return 0;
}

输出1~100之间的奇数

分析:

  1. 奇数是不能被2整除的整数,假设奇数x,则x%2=1;

  2. 偶数一定是2的倍数,1一定是奇数,因此从1开始查找每次+2,跳过所有偶数。

  3. 利用循环遍历1~100的数。

#include <stdio.h>
int main()
{
    for (int i = 1; i <= 100; i += 2)
    {
        if (i % 2 == 1)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

switch语句

switch语句常用于多分支情况

语法

switch(int_expr) 
{
    case const_expr1: 
            statement1;
    case const_expr2: 
            statement2;
            break;
    case const_expr3: 
        	statement3;
    ...
    default :
        	statment4;
        	break;
}
  1. switch语句中的表达式(int_expr)必须是整型表达式

  2. case 后面的表达式(const_expr)必须是整型常量表达式

  3. int_expr 会按照顺序结构从上往下依次对比 const_expr,哪个相等就从哪个case开始执行。

  4. 当执行完毕后,如果case里的执行语句含有break;跳出当前switch语句,如果没有break;则继续执行下面的case

  5. 当所有expr与所有case的 const_expr 都不相等,如果有 default 默认执行 default 里面的语句。如果没有则结束switch语句。

  6. default 的位置不影响switch语句的执行顺序。

  7. 分支语句中不能使用continue;

举例

#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		printf("星期一\\n");
         break;
	case 2:
		printf("星期二\\n");
         break;
	case 3:
		printf("星期三\\n");
         break;
	case 4:
		printf("星期四\\n");
         break;
	case 5:
		printf("星期五\\n");
         break;
	case 6:
		printf("星期六\\n");
         break;
	case 7:
		printf("星期天\\n");
         break;
	default:
		printf("输入值不正确\\n");
         break;
	}
	return 0;
}

如果case中没有break; 执行继续执行当前case之后的语句,直到遇到break; 或者switch语句全部执行完毕。

// 例如将说有break;删除,并输入1,查看最终的输出结果
#include <stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	switch (a)
	{
	case 1:
		printf("星期一\\n");
	case 2:
		printf("星期二\\n");
	case 3:
		printf("星期三\\n");
	case 4:
		printf("星期四\\n");
	case 5:
		printf("星期五\\n");
	case 6:
		printf("星期六\\n");
	case 7:
		printf("星期天\\n");
	default:
		printf("输入值不正确\\n");
	}
	return 0;
}

结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9Fp54NS-1623408611999)(pic/image-20210609124049454.png)]

练习

下面代码的输出结果为?

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch(n)
    {
        case 1: m++;
        case 2: n++;
        case 3:
            // switch语句可以嵌套使用
            switch(n)
            {
                case 1 : n++;
                case 2 : 
                    m++;
                    n++;
                    break;
            }
        case 4:
            m++;
            break;
        default:
            break;
    }
    printf("m = %d, n = %d\\n", m,n);
    return 0;
}

结果为: m = 5, n = 3

代码分析

int main()
{
    int n = 1;
    int m = 2;
    switch(n)
    {
        case 1: m++; // n = 1首先进入 case 1:m++; m = 2 + 1 = 3
        case 2: n++; // 接着 n++; n = 1 + 1 = 2
        case 3:      // 接着 进入 case 3:
            switch(n)
            {
                case 1 : n++;
                case 2 :   // n = 2 进入 case 2:
                    m++;   // m = 3 + 1 = 4
                    n++;   // n = 2 + 1 = 3
                    break; // 跳出当前的这个嵌套的switch
            }
        case 4:    // 继续执行 case 4: 
            m++;   // m = 4 + 1 = 5
            break; // 跳出当前switch循环
        default:
            break;
    }
    printf("m = %d, n = %d\\n", m,n); // m = 5 n = 3
    return 0;
}

循环结构

  1. 循环结构(语句),有规律的执行重复的操作,被重复执行的语句称为循环体
  2. 循环语句中的判断表达式用于判断循环的终止条件。
  3. 条件为真继续循环,条件为假终止循环。
  4. 循环语句分为3种:whilefordo while

while循环

先判断,当表达式为真进入循环,为假终止循环。

注意切勿使while循环的判断表达式永真,会成为死循环

在这里插入图片描述

语法

while(expr)
{  // 循环体
    statement;
}

举例

打印1~10

分析:

#include <stdio.h>
int main()
{
    int i = 1;
    while(i<=10) // 当i>10时 条件式为假,结束循环
    {
        printf("%d ", i);
        i++;
    }
    return 0;
}

break和continue

break 终止整个循环

// 假如你买了5个包子,当吃到第三个时,你开始拉肚子...
int main()
{
    int i = 1;
    while (i <= 5)
    {
        printf("正在吃第%d包子\\n", i);
        if (3 == i)
        {
            printf("拉肚子了,上医院\\n");
            break;
        }
        i++;
    }
    return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOpLyD2n-1623408612000)(pic/image-20210609143648144.png)]

continue 跳出本次循环,后面的代码本次不再不执行,继续下次循环

// 假如你买了5个包子,当吃到第三个时,吃到一个虫子...
int main()
{
    int i = 1;
    while (i <= 5)
    {
        printf("正在吃第%d包子\\n", i);
        if (3 == i)
        {
            printf("有虫子,丢掉,接着吃\\n");
            i++; 
            continue;
        }
        i++; 
        
    }
    return 0;
}

在这里插入图片描述

注意

continue 后面如果有对条件表达式中变量的操作,例如 ++ – 等,很容易造成死循环。

// 例如上面的代码
int main()
{
    int i = 1;
    while (i <= 5)
    {
        printf("正在吃第%d包子\\n", i);
        if (3 == i)
        {
            printf("有虫子,丢掉,接着吃\\n");
            // i++; 这里如果不写i++,就变成死循环
            // i == 3时 跳出本次循环,i没有+1,i == 3,继续进入if语句,一直重复就变成死循环了
            continue;
        }
        i++; 
    }
    return 0;
}

while循环的一些实际应用

下面代码的意思是?

#include <stdio.h>
int main()
{
    int ch = 0;
    while((ch= getchar()) != EOF)  // getchar 接收一个字符,当 ch == EOF时,终止循环。 
        以上是关于C语言中怎样if语句的单分支选择结构比较三个数的大小并打印出最大数和最小数的主要内容,如果未能解决你的问题,请参考以下文章

C语言选择结构(if语句)

C语言选择结构(if语句)

C语言学习--分支和循环语句

C语言分支语句和循环语句

C语言 回滚技术 switch case

C语言--用if语句比较三个数的大小