C语言中关于if if-else语句的问题?

代码1如下
运行环境 :VS2013
代码作用:输入三个数然后判断其中最小的一位数然后输出的

 #include<stdio.h>
#include<stdlib.h>

int main()
{
    int x, y, z, min;
    min = 0;
    scanf_s("%d %d %d", &x, &y, &z);

    if (x < y)           
    {
        min = x;
    }
    else if (y < x)  //这个if不起作用
    {
        min = y;
    }
    else if (min > z)          //这样写构成了一个级联的if -else if 语句 
    {
        min = z;
    }
    printf("%d", min);
    system("pause");
    return 0;
}

代码2如下:

 #include<stdio.h>
#include<stdlib.h>

int main()
{
    int x, y, z, min;
    min = 0;
    scanf_s("%d %d %d", &x, &y, &z);

    if (x < y)           
    {
        min = x;
    }
    else (y < x)  //删除if后
    {
        min = y;
    }
    if (min > z)          //删除else后 
    {
        min = z;
    }
    printf("%d", min);
    system("pause");
    return 0;
}

附:
这两个程序那个比较好呢?运行的结果都是一样的,不知道1好还是2好。请同胞们给些意见 多谢了!

22个回答

  • 不是好不好的问题。第一段、第二段都有严重的错误,不能说好不好,只能说对不对。
  • 第一段:
  • 在if (...) {} else if (... ) {} else{}这样的判断中,所有的分支只会执行一个。
  • 在你的第一段代码中
     if (x < y)           
    {
        min = x;
    }
    else if (y < x)  //这个if不起作用
    {
        min = y;
    }
    else if (min > z)          //这样写构成了一个级联的if -else if 语句 
    {
        min = z;
    }

if(x<y)和else if(y<x)几乎是矛盾的。也就是说只有当x==y的时候才会去做最下面的那个min和z的比较。而当做到这个比较的时候,min还是0,

  • 第二段
    if (x < y)           
    {
        min = x;
    }
    else (y < x)  //删除if后
    {
        min = y;
    }

else后面不能跟条件。这里应该是语法错误,编译不能通过。如果要改的话,可以

 else //(y < x)  //删除if后

第一个代码,后面的if判断是否发生会受到前面判断结果的影响,第二个代码,把else改成if的话(这个错误编译都通过不了)后,是三个if语句,一定会判断三次。
用哪个好,要根据你的逻辑~

先把程序写对再说
第一个程序x=1 y=2 z=0 结果都不对。
因为后面的分支没执行。

第二段代码根本不能编译。

正确写法:

 int min = x;
if (y < min) min = y;
if (z < min) min = z;

当然是第二种代码好的啊

第一个代码,后面的if判断是否发生会受到前面判断结果的影响,第二个代码,把else改成if的话(这个错误编译都通过不了)后,是三个if语句,一定会判断三次。
用哪个好,要根据你的逻辑~

一比较好 具体分析已有人回答

用三目运算符简洁而方便

这两段程序都不太对,可以看一下C语言书,关于if-else 里面讲的很清楚的

这个问题有点高难度,我建议你去问你的老师或者公司里的一些同事比较好

fjienigui
Jerry程序猿 别这么坑……
4 年多之前 回复
共22条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于C语言中的++--
以前一直认为在C语言中只有整形数据才能进行++,--的自增运算,今天发现其实我错了。例如看下面的一个程序:rnrn#include rn//#include rnrnint main(void)rnrn float x = 1;rn float y;rnrn y = ++x*++x;rnrn printf("%f\n",y);rnrn return 0;rnrnrnrnrn在vc6.0中编译结果是这样的:rnrn--------------------Configuration: test_one - Win32 Debug--------------------rnCompiling...rntest_One.cpprnrntest_One.obj - 0 error(s), 0 warning(s)rnrn云行结果是这样的:rnrn9.000000rnPress any key to continuernrn而在vs2008中是这样的:rnrn编译:rnrn1>------ 已启动生成: 项目: testBKY, 配置: Debug Win32 ------rn1>正在编译...rn1>stdafx.cpprn1>正在编译...rn1>testBKY.cpprn1>正在编译资源清单...rn1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0rn1>Copyright (C) Microsoft Corporation. All rights reserved.rn1>正在链接...rn1>正在嵌入清单...rn1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0rn1>Copyright (C) Microsoft Corporation. All rights reserved.rn1>生成日志保存在“file://d:\Backup\我的文档\Visual Studio 2008\Projects\testBKY\testBKY\Debug\BuildLog.htm”rn1>testBKY - 0 个错误,0 个警告rn========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========rnrn运行:rnrn9.000000rnPress any key to continuernrn可见不只是整形数据可以进行自增自减运算。rn
C语言中的分支语句
C语言中常用分支语句有if语句,switch语句首先来说一下if语句。if语句的基本表达式:if(表达式)                                                                 if(表达式)语句;                                                                        ...
C语言中的基本语句
循环语句 1、for循环     先初始化,在比较判断,后执行循环体 2、while循环     先比较判断,在执行循环体 3、do while 循环     先执行循环体,在比较判断 4、goto     可以实现在函数体内进行跳转,但建议尽量不要使用goto语言。   do/while/for三种循环的比较 do while 循环的效率最高,因为do循环结构上非常精简,利...
C语言中的goto语句
C Primer Plus总结 goto语句使程序控制跳转至相应标签语句。冒号用于分隔标签和标签语 句。标签名遵循变量命名规则。标签语句可以出现在goto的前面或后面。 形式: goto label ; label : statement 示例: top : ch = getchar(); if (ch != 'y') goto top;
C语言中分支语句
--事物的难度远远低于对事物的恐惧!     今天来聊一聊分支语句,可能很多人都比较熟悉,开门见山吧! 首先来看看if语句:         -if语句用于根据条件选择执行语句         -else语句不能独立存在并且总是与他最近的if相匹配         -else语句后可以连接其他的if语句     if语句中零值比较的注意点:         -bool类型的变量应该直...
C/C++语言中的语句
if语句 if语句基本的有三种格式,在此基础上可以扩展一些其它格式,注意活学活用即可。 1、 if……形式 一般格式:if(表达式) 语句; 语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。语句可以是单条语句,也可以是用花括号{}包括起来的复合语句。示例如下: #include  int main(){     int a,b,max;     print
c语言中的问题!
有以下程序:rnmain()rnrn int x=102,y=012;rn printf("%2d,%2d",x,y);rnrn请问输出结果y为什么是10而不是12?rn谢谢!!
c语言中问题
我想知道用C语言如何实现char *strarray(char *strsrc,char *strdst)
C语言中的问题
我在vc6中建立了一个工程,其中都是.c文件,编译时没有错误,能顺利运行,然后我又建立了一个MFC工程,我想把.c文件都加到MFC工程中,但是在编译的时候出现了以下的错误,请高手指导,应如何解决????? rn例如:int img_convert(AVPicture *dst, int dst_pix_fmt,const AVPicture *src, int pix_fmt,int width, int height);在avcodec.h中声明,函数体在imgconvert.v中int img_convert()略;在.cpp中调用此函数!!在此.cpp函数中已经引了avcodec.h头文件!!!编译时就出现了以下链接的错误!!rn是c,c++文件都有,MFC中的主函数是.cpp文件rnrnCompiling... rnSkipping... (no relevant changes detected) rnflvplayerDlg.cpp rnLinking... rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "int __cdecl img_convert(struct AVPicture *,int,struct AVPicture const *,int,int,int)" (?img_convert@@YAHPAUAVPicture@@HPBU1@HHH@Z) rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "int __cdecl avpicture_fill(struct AVPicture *,unsigned char *,int,int,int)" (?avpicture_fill@@YAHPAUAVPicture@@PAEHHH@Z) rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "int __cdecl avpicture_get_size(int,int,int)" (?avpicture_get_size@@YAHHHH@Z) rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "int __cdecl avcodec_decode_video(struct AVCodecContext *,struct AVFrame *,int *,unsigned char const *,int)" (?avcodec_decode_video@@YAHPAUAVCodecContext@@PAUAVFrame@@PAHPBEH@Z) rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "int __cdecl avcodec_open(struct AVCodecContext *,struct AVCodec *)" (?avcodec_open@@YAHPAUAVCodecContext@@PAUAVCodec@@@Z) rnflvplayerDlg.obj : error LNK2001: unresolved external symbol "struct AVCodec * __cdecl avcodec_find_decoder(enum CodecID)" (?avcodec_find_decoder@@YAPAUAVCodec@@W4CodecID@@@Z) rn
C语言中 && 的问题
int a=0x1000;rnbool b=a && (a-1);rnb的值是多少?为什么?
关于if-else语句的问题~
一个if,else语句,即执行了,if,又执行了else导致这种结果的原因是什么啊~!
c语言中的scanf输入语句的问题
源程序如下:rn#include rnmain()rn int i=0;rn while(i!=3)rn printf("Input:");rn scanf("%d",&i);rn rn return 0;rnrn如果输入一个字符,那么程序将进入死循环,为什么?怎样避免???
有关C语言中输入语句的问题
在C语言中输入的方法为scanf(&quot;&quot;);但是有些同学会出现一些问题常常使得在输入后程序无法继续运行或者根本就无法输入。这里列出一些我曾经遇见过得问题。   1. 输入语句为:scanf(&quot;a=%d&quot;,&amp;amp;a); 这种输入纯粹是把输入语句当成输出语句来看。误以为可以像输出语句一样很清楚的得到a='x'.但是这种输入往往会导致程序无法运行。因为一般情况下,同学不会注意到这个a=而是直接输...
C语言中typedef语句及传参问题
我声明了一个结构体:nnstruct tree_node n char id; n struct tree_node *left; n struct tree_node *right; n; ntypedef struct tree_node TreeNode; ntypedef struct tree_node *Tree; nn创建树的函数n int Create_pro(Tree t);n可是通过对比发现,别人的传参是Tree *t,别人的函数void CreateTree(Tree *T)n我认为Tree t = tree_node *t是成立的,那么就可以使用Create_pro(&t);n n还有个问题:n typedef struct nodetree;n typedef struct node*tree;n在mian里Tree t;一个是结构体类型 一个是结构体指针类型n我的想法有问题么?
C语言中的continue语句与break语句
continue语句和break语句都是用来终止当前循环,和break语句不同的是,continue语句终止当前循环后又回到循环体的开头准备再次执行循环体。对于while和do/while, continue之后测试控制表达式,如果值为真则继续执行下一次循环;对于for循环, continue之后首先计算控制表达式3,然后测试控制表达式2,如果值为真则继续执行下一次循环。下面的代码打印1到100之...
关于C语言中的大写
我在看一本外国的C语言教才,发现很多函数都是 开头大写,中间字母大写,我很疑惑,C是区分大小写的,这样写法是为什么? example: NewGame() MarkMove() FindGoodMove() rn不知道把这些大写全部改成小写可以么?谢谢
C语言中关于++符号
int i = 3,j;rnj = (++1)+(++i)+(++i);rnrn我觉得结果应该是18,可是我调出来的结果是16,我不明白为什么会得到这个结果,请各位高手指教。
关于C语言中的强制类型转换
以下实例为STM32单片机使用寄存器进行操作的一个头文件中的代码 因为直接对寄存器进行操作,也就是直接对地址中的数据进行操作,因为知道了寄存器所在的地址所以就强制把常量转换为地址,然后对地址进行操作 //define用参数1来直接代替参数2,是直接代替不做检查,只有在使用的时候出错才会在对应的位置提示错误 //因为是直接代替,所以还是加上括号比较好 #define PERIPH_BASE ...
关于c语言中逗号表达式
看到有些代码中喜欢用逗号表达式:rn如:rnif (dlrate < 1024.0)rn *units = 0;rn else if (dlrate < 1024.0 * 1024.0)rn *units = 1, dlrate /= 1024.0;rn else if (dlrate < 1024.0 * 1024.0 * 1024.0)rn *units = 2, dlrate /= (1024.0 * 1024.0);rn elsern /* Maybe someone will need this, one day. */rn *units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);rnrn请问这么用逗号表达式的意义是什么?
关于C语言中的switch语句
在C语言的switch语句中,case后面的常量应该可以是一个字符常量啊,但是却遇到了以下一个问题:rn(我使用的是VS2013)rn我测试了一下某示例程序:rn/*开始部分rn#includern#includernint main()rnrn char grade;rn scanf_s("%c", &grade);rn printf("Your score:");rn switch (grade)rn rn case 'A':printf("85~100\n"); break;rn case 'B':printf("70~84\n"); break;rn case 'C':printf("60~69\n"); break;rn case 'D':printf("<60\n"); break;rn default:printf("enter data error!\n");rn rn system("pause");rnrn结束部分*/rn我输入A,B,C,D都没用,也就是说都不会执行case语句,rn请问这是什么问题?
关于C语言中接口
想要学习一些关于C语言中接口编程的知识,希望大家推荐一些此类网页。
关于C语言中的选择
人做事需要一定的顺序,计算机程序同样也需要一定的顺序。计算机执行特定任务是通过执行预定义的指令集来实现的,这些预定义的指令集就是计算机程序。 而在程序的操作和运行中,算法是必不可少的,程序的设计主要体现在算法设计和结构设计上,可以用一个公式来表示:数据结构+算法=程序。 数据结构是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关系的数据袁术的集合 算法是对操作或行为的描述。算法代表着用系...
关于c语言中的递归算法
由于函数调用其本身,所以函数中的所有语句都会从上到下执行一遍,在调用其本身的语句进入下次循环结束后会在调用语句后继续执行,所以使用递归算法输出一个正整数的二进制形式程序如下: #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; void sum(); int main() {         int i;         printf(&quot;请输入数字...
关于 C语言中的"枚举类型"
我是个初学者,不知道 枚举类型 的具体使用方法.望高手指点一二.不胜感激.
关于 c语言中的#ifdef
我最近在学习c语言中,看见一程序开头有rn#ifndef LATTICErnrn但我在程序中未找见 LATTICE 的定义rn想请教大家这个东西来自那里rn有什么用rn我还在程序中找见 DEBUGrnrn
关于C语言中的预编译头文件!
在MS VC++中,可以为一个.CPP文件添加预编译头文件stdafx.h,该头文件给人的感觉就像是“系统级”的预编译头文件一样。我对于C语言了解不多,不知道在C语言中是否也有像"stdafx.h"这样的“系统级”的头文件呢?如果有,文件名是什么?请知道的指点一下!
关于C语言中的位运算符
在计算机内存中一个数是以它的二进制序列的补码形式保存,而计算机也只认识二进制数0与1。而对于一个数的二进制序列,在C语言中有专门的位运算符对它进行操作。
关于C语言中 || 和 &&的用法
||是逻辑或,例子如下 1 2 3 4 5 6 //表达式1||表达式2 //如果表达式1是true或者表达式2是true,整条式子的结果就是true,否则是false int a=0; bool z=(a>0||a==0); //这个例子中条件a==0,所以整条表达式的结果是true,如果表达式1的结果
关于C语言中输出格式
刷OJ题的时候,经常发现题目的输入输出会有相应的特殊要求,像位宽和位域输出就比较常见。 位宽:如果长度不足位宽大小,则默认情况下前面补空格。 标志位:有+有- 默认格式为左对齐。 在位宽前面加0,补全不足位宽大小 位域:%.4f,保留几位,有四舍五入的效果,%.5f:表示截取前面5位 //#:显示进制符号位 ep: "%#x \n" "%0\n"等 #...
C语言中关于*和**的使用
在C语言中,rnrn 对于**a作形参,实参的格式有哪些可以选择?rnrn对于char* 类型的字符串,使用键盘输入进行初始化时,可以使用的方法有哪些?rnrn
C语言中关于链表
C语言中关于链表的总结内容,内附代码例题,详细的有条理的讲解链表内容
关于C语言中的运算符
运算符和表达式 1. 运算符  (使用bool类型定义变量时,需要包含stdbool.h头函数。)  -    优先级   同数学中的四则混合运算,有运算优先级之分;优先级是指一个表达式中有多个运算符时,先算哪一个运算符,后算哪一个运算符。  -    结合性是指一个表达式中有多个同优先级的运算符时,是从左向右计算还是从右向左计算。 A.   算数运算符:+ -  */  % B.   
C语言中关于类型转换
最近在学习中,学到了类型转换这一章节,故把学习笔记放上来。1.小数据赋给大变量不会造成数据的丢失,系统为了保证数据的完整性,还提供了符号扩充行为。这一点基本没什么好讲的,主要就是扩充了,数据不变。但是关于有一部分转化需要讲。这里用到K&amp;amp;R的相关书写到的知识点如下:(中文版应该是这个《C程序设计语言》)(operand指的是操作数,就是 a-b 中的a和b)这里顺序从上至下First,if...
关于c语言中的强制类型转换
想问一下,就是有个老师说,在c中强制类型转换有两种格式 ,一个是(int)a,另一个是(int)空格(a)rn知道后面是先求表达式的值后强制转换,但是后面一个加括号的中间一定要有空格吗?
c语言中关于宏
我们在写c语言程序中,已经初步了解到了#define的用法,下面对#define做一个详细的用法说明。#define格式如下:#define name stuff有了这条指令之后,每当有name出现,就会被预处理器替换为stuff。 例:#define reg register #define do_forever for(;;) #define CASE
关于C语言中的递归函数
递归实例: #include &amp;lt;stdio.h&amp;gt; void up_and_down(int); int main(void) { up_and_down(1); return 0; } void up_and_down(int n) { printf(&quot;Level %d: n location %p\n&quot;, n, &amp;amp;n); // #1 if (n &amp;lt;...
关于C语言中的宏
#define PI 3.14 #define ZHOUCHANG(r)2*PI*r  定义带参数的宏 #undef PI  结束宏 使用@ifdef、#ifndef、#else、#endif执行条件编译 #ifdefine 宏名称 -----语句 #else ----语句 #endif #define AGE  39 int main(int
关于C语言中的static关键字
用static声明一个变量的作用有两方面: 对局部变量用static声明,则使得该变量在整个程序执行期间不释放,为其分配的空间始终存在 全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中) 一般我们我们在设计程序中希望有些外部变量只限于本文件适用,而不能被其他文件引用,这时可以在定义外部变量的时候加一个static声明。 在程序设计中,常有不同人完成各个模块,个人可以独
关于C语言中的移位
char i;rn移位时rni>>1与i>>=1有什么区别?
关于c语言中的省略号
我们经常会看到一些参数数目不定的函数,比如printf,scanf,之类,在网上查了一下rnprintf是这样定义的……rnint printf(char const*__restrict fmt,...) rn具体源码请见我的博客[url=http://blog.csdn.net/p569354158/archive/2010/06/27/5697995.aspx]http://blog.csdn.net/p569354158/archive/2010/06/27/5697995.aspx[/url]rn但是在这里我有个问题了,在c语言中有省略号这种运算符吗?rnrn在编译器编译的时候它将怎样去处理这个省略号 ?,难道编译器都是那么聪明吗?rn还是在c标准里面有特定的说明,在向函数传递参数时可以将一些参数用省略号代替?
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数