C语言条件表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言条件表达式相关的知识,希望对你有一定的参考价值。

/*用户输入两个整数及一个字符,根本输入的的字符判断求出和、差、积、余*/
main()

float a,b,c,d,e,f;
char n,c1,d1,e1,f1;
scanf(%f%f%c,a,b,n);
c = a+b;
d = a-b;
e = a*b;
f = a/b;
c1 = "h"; /*C1等于h,h是英文字符,不是任何变量*/
d1 = "c"; /*同上*/
e1 = "j"; /*同上*/
f1 = "y"; /*同上*/
if(n=c1);
printf("%f",c);
if else(n=d1);
printf("%f",d);
if else(n=e1);
printf("%f",e);
if else(n=f1);
printf("%f",f);
else;
printf("Sorry!");
getch();

哪里出问题了?这是我以VB的习惯写的一段代码。
还有觉得代码有点繁踏,高手可以适当优化下。。
main()

float a,b,c,d,e,f;
char n;
scanf("%f%f%c",&a,&b,&n);
c = a+b;
d = a-b;
e = a*b;
f = a/b;
if(n=='h')
printf("%f",c);
else if(n=='c')
printf("%f",d);
else if(n=='j')
printf("%f",e);
else if(n=='y')
printf("%f",f);
else
printf("Sorry!");
getch();


太感谢了,经过大家的帮忙,代码简化了一部分。能算出正确值。
但有个问题,就是判断结果的字符要跟第二个值一起输入才可以得出正确值。
假设有时候在不能和第二个值一起输入的情况下,怎么样把字符挪到第三行?

if(n=c1);
printf("%f",c);
if else(n=d1);
printf("%f",d);
if else(n=e1);
printf("%f",e);
if else(n=f1);
printf("%f",f);
else;
printf("Sorry!");

这一段代码错了,因为c里面和Vb的语法是不一样的。
c里面 if语句的格式是:
if(条件1)
语句1;
else if(条件2)
语句2;
。。。
else
语句n

而且c里面判断是否相同使用符号“==”(注意是两个),而不是“=”(一个)

所以你相应的程序段应该为:
if(n==c1)
printf("%f",c);
else if(n==d1)
printf("%f",d);
else if(n==e1)
printf("%f",e);
else if(n==f1)
printf("%f",f);
else
printf("Sorry!");

简化的话可以直接将if语句后面的c1,d1,e1,f1 换成‘h’,‘c’,‘j’,‘y’.

提供一个简单的方法,但是也有局限:
把 scanf("%f%f%c",&a,&b,&n);
改为:
scanf("%f%f%c",&a,&b);
do

scanf("%c",&n);
while(n=='\n'||n==','||n==' ');

这样就可以在第二个值和符号之间插入若干个回车或者逗号或者空格来区分它们。但是对于除此以外的符号,依然会出错。
参考技术A 修改如下即可分为两行输入:
//---------------------------------------------------------------------------

#include <stdio.h>
#include <conio.h>
int main()

float a,b;
char n;
scanf("%f%f",&a,&b);
fflush(stdin);
n=getchar();

switch (n)
case 'h':printf("%f\n",a+b);break;
case 'c':printf("%f\n",a-b);break;
case 'j':printf("%f\n",a*b);break;
case 'y':if (b) printf("%f\n",a/b);break;
default:printf("Sorry!\n");break;

getch();
return 0;

//---------------------------------------------------------------------------
参考技术B main()

float a,b,c,d,e,f;
char n,c1,d1,e1,f1;
clrscr();
scanf("%f%f%c",&a,&b,&n);
c = a+b;
d = a-b;
e = a*b;
f = a/b;
c1 = 'h';
d1 = 'c';
e1 = 'j';
f1 = 'y';
if(n==c1)
printf("%f",c);
else if(n==d1)
printf("%f",d);
else if(n==e1)
printf("%f",e);
else if(n==f1)
printf("%f",f);
else
printf("Sorry!");
getch();


编译已通过 想要得到正确值的话,输入第二个值后紧挨着输入字符 如
【1 2h】
不然输入的空格或回车会被存放在n中
参考技术C main()

float a,b,c,d,e,f;
char n,c1,d1,e1,f1;
scanf(%f%f%c,&a,&b,&n);
c = a+b;
d = a-b;
e = a*b;
f = a/b;
c1 = 'h'; /*C1等于h,h是英文字符,不是任何变量*/
d1 = 'c'; /*同上*/
e1 = 'j'; /*同上*/
f1 = 'y'; /*同上*/
if(n==c1);
printf("%f",c);
else if(n==d1);
printf("%f",d);
else if (n==e1);
printf("%f",e);
else if (n==f1);
printf("%f",f);
else
printf("Sorry!");
getch();
参考技术D #include<stdio.h>
void main()

float a,b;
char n;
scanf("%f,%f,%c",&a,&b,&n); /*输入a,b,n以逗号间隔,输入完回车*/
switch (n) /*此例用switch()函数比较简单*/

case 'h':printf("%f\n",a+b);break;
case 'c':printf("%f\n",a-b);break;
case 'j':printf("%f\n",a*b);break;
case 'y':
if (b!=0) /*判断分母是否为0*/
printf("%f\n",a\b);
else
printf("denominator is zero!");

帮我解释下C语言里for循环的条件表达式中小于和小于等于的区别

—————————————————————————
_____________________________________________
以下程序是我按照此图中规律写的,小于和小于等于改好了
—————————————————————————
#include<stdio.h>#define row 5 //行数#define col 5 //列数
void main() int a[row][col]; int i,j,m=0,right=row-1; for(i=0;i<row;i++) if(i%2==0) //右下 for(j=0;j<i;j++) m++; a[right-i][j]=m; for(j=right-i;j<=right;j++) m++; a[j][i]=m; else //上左 for(j=right;j>right-i;j--) m++; a[j][i]=m; for(j=i;j>=0;j--) m++; a[right-i][j]=m;

for (i =0;i<row;i++) for (j=0;j<col;j++) //C的标准输入输出库(stdio.h)的格式比较好用 printf("%2d ",a[i][j]); printf("\n");
printf("\n"); for (i =0;i<2;i++) for (j =0;j<i;j++) printf("%2d ",j); printf("\n"); printf("\n");
-----------------------------------------------------
上图是正确输出的图示
-----------------------------------------------------

*******************************************
我又研究了一下,图示中5 6 7里的7应该是
接下来的这个for(j=right-i;j<=right;j++)循环输出的
*******************************************
for(i=0;i<row;i++) if(i%2==0) //右下 for(j=0;j<i;j++) m++; a[right-i][j]=m; for(j=right-i;j<=right;j++) m++; a[j][i]=m;

参考技术A 编程语言里 i= 0 的换 用小于 i=1 用 <=追问

外循环 i=0
i 从 0 开始
内循环
j 也从 0 开始
当外循环 i=2 时
j=0; j<i 也就是 j<2
这时候输出的是两个数啊
但是程序输出的是 5 6 7 三个数
我也是想要输出三个数
我想的是 j<=i 也就是 j<=2 才输出三个数
但是正确的却是 j<i j<2 输出的是三个数
————
为什么啊
------------

参考技术B 问题不是很清晰啊,想要问什么呢,是for括号里面的那个;j<=right吗,还是什么其他的追问

请看问题补充解答一下,谢谢

追答

这个可能不是循环的问题了,给我一下你解题的思路,我调试一下,看是哪一个步骤出问题了,把题目一起发了吧

追问

我程序的思路就是图中的连线所指啊,当是偶数时,路线如下先右后下→↓

当时奇数时,先上后左↑←

*******************************************

我又看了下,

追答

printf是一个强大的东西,哪儿的数据不对就把那个数据打出来看看,是不是你预期的数据,就像觉得i和j不对就把这两个都打出来,看看打印的和自己预想的一不一样,调试是程序员不可或缺的一项技能,祝安好

本回答被提问者采纳
参考技术C 小于不能取到那个值

以上是关于C语言条件表达式的主要内容,如果未能解决你的问题,请参考以下文章

C语言中三目运算符是啥?

在C语言中条件语句都有哪些需要注意的事项?

13)C语言之条件表达式(条件运算符)

c语言for语句中的条件问题

c语言中条件判断表达式中出现自增自减符时的运算顺序

C语言中for循环中条件表达式的小于和小于等于问题