为什么结果不对?
# include <stdio.h>
int main(void)
{
int x;
scanf("%d", &x);
if (x != 0)
{
if (x < 0)
printf("x < 0\n");
else if (x > 0)
printf("x > 0\n");
}
else
printf("x = 0\n");
return 0;
}
这个运行没问题,看看语法有问题没?
1、 if……形式
一般格式:if(表达式) 语句;
语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。语句可以是单条语句,也可以是用花括号{}包括起来的复合语句。示例如下:
#include <stdio.h>
int main(){
int a,b,max;
printf("\n input two numbers: ");
scanf("%d%d",&a,&b);
max=a;
if (max<b) max=b;
printf("max=%d\n",max);
return 0;
}
2、if……else形式
一般格式:
if(表达式)
语句1;
else
语句2;
语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。语句1和语句2可以是复合语句。
示例如下:
#include <stdio.h>
int main(){
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);
if(a>b)
printf("max=%d\n",a);
else
printf("max=%d\n",b);
return 0;
}
3、if……else……if形式
一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else if(表达式m)
语句m;
else
语句n;
语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。示例如下:
#include <stdio.h>
int main(){
char c;
printf("input a character: ");
c=getchar();
if(c<32)
printf("This is a control character\n");
else if(c>='0'&&c<='9')
printf("This is a digit\n");
else if(c>='A'&&c<='Z')
printf("This is a capital letter\n");
else if(c>='a'&&c<='z')
printf("This is a small letter\n");
else
printf("This is an other character\n");
return 0;
}
4、扩展形式
if条件控制语句的形式是多种多样的。比如if嵌套、if……if类似的形式,但是都离不开上面介绍的三种基本形式。个人活学活用即可。
你这个if没加{},所以只能控制其顺序下的一个语句,即
if(x!=0)
if(x<0)
printf("");
剩下的if(x>0) printf();语句不在首个if的下辖范围内
而else语句与其相邻最近的if语句搭配,因为没有表明{},所以else语句与if(x>0) printf();语句搭配成为一个完整的if。。。else语句
所以输出不正常
所以要改为
if(x!=0)
{
if(x<0)printf("x<0\n");
else printf("x>0\n");
}
else printf("x=0\n");本回答被网友采纳
一个小细节
if语句是这样用的
IF(条件)
{ 什么什么 }
ELSE
{ 什么什么 }
你的格式弄得好像是对的,但是第一个if没有大括号导致else其实是if(x>0)的else
你开始输入的时候电脑给你的格式不对所以你特地打了空格,但是忘了大括号
if(x!=0){
if(x>0)
printf("x>0\n") ;
if(x<0)
printf("x<0\n") ;
}
else
printf("x=0\n") ;追问
我改了一下,在问题补充里,你看看语法有没有问题,反正运行没问题
追答语法没问题,但是代码错了
if语句只运行后面大括号的代码,没有大括号只运行后面一个语句,第一个if应该包含后面两个if语句,但是你的代码是第一个if管理第二个if,第三个if连着最后的else
if(x!=0)if(x>0)
printf("x>0\n") ;
if(x<0)
printf("x<0\n") ;
else
printf("x=0\n") ;
懂了么
追问我有改了
# include
int main(void)
{
int x;
scanf("%d", &x);
if (x != 0)
{
if (x 0)//这里这个if是不是多余的?
printf("x > 0\n");
}
else
printf("x = 0\n");
return 0;
}
如果X0,显示x>0
内个if不能删,但是if前的else是多余的,两个if是互斥的不用else,但是也不是错的,它能让计算机运行快那么一丢,不过一般不那样写
吊!大神!
追答好好学,我这点能耐不咋地
#include <stdio.h>
int main()
{
int x;
scanf("%d", &x);
if (x > 0)
{
printf("x > 0\n");
}
else if (x < 0)
{
printf("x < 0\n");
}
else
{
printf("x = 0\n");
}
return 0;
}追问
这个写法我之前写过,我专门练习一下嵌套的写法.
追答你的那个嵌套从语法上讲 是没有问题的,运行是没有问题的。
但是一般不会你那样做,因为逻辑冗余,不过作为练习是可以的。
# include <stdio.h>
int main(void)
{
int x;
scanf("%d", &x);
if (x == 0) //如果x=0
{
printf("x = 0\n");
}
else if(x < 0) //如果x≠0
{
printf("x < 0\n");
}
else //如果x≠0切x>0
{
printf("x > 0\n");
}
return 0;
}