user-0 提问: C语言If语句

回复:
user: user-1
content: 引用 14 楼 lm_whales 的回复:[quote=引用 12 楼 mosquitoh 的回复:] [quote=引用 8 楼 lm_whales 的回复:] %lf 足以说明，专家有时候也是扯淡得很 C PRIMER PLUS是这样说的：printf里面用%f打印double，因为printf()函数定义没有指明参数类型，所有的float在传给printf()时，自动转换成double；因此printf()里面没有float的打印符。[/quote] 有的，虽然传入是 double 但输出精度是不同的 ; %f 的输出精度（至少某些实现）达不到 %lf 的精度 即便所有 数据都按照 double 输出，按照对应原则， 也可以只有 %lf 没有 %f;  而不是 去掉 %lf,保留 %f[/quote] 你的意思是：%f不一定能打印double的精度？如果有一个处于极限值的double,用%f和%lf打印会不一样？

user: user-2
content: 引用 15 楼 mosquitoh 的回复:[quote=引用 14 楼 lm_whales 的回复:] [quote=引用 12 楼 mosquitoh 的回复:] [quote=引用 8 楼 lm_whales 的回复:] %lf 足以说明，专家有时候也是扯淡得很 C PRIMER PLUS是这样说的：printf里面用%f打印double，因为printf()函数定义没有指明参数类型，所有的float在传给printf()时，自动转换成double；因此printf()里面没有float的打印符。[/quote] 有的，虽然传入是 double 但输出精度是不同的 ; %f 的输出精度（至少某些实现）达不到 %lf 的精度 即便所有 数据都按照 double 输出，按照对应原则， 也可以只有 %lf 没有 %f;  而不是 去掉 %lf,保留 %f[/quote] 你的意思是：%f不一定能打印double的精度？如果有一个处于极限值的double,用%f和%lf打印会不一样？[/quote] 至少标准制定之前，这种状况会有的

user: user-2
content: 引用 12 楼 mosquitoh 的回复:[quote=引用 8 楼 lm_whales 的回复:] %lf 足以说明，专家有时候也是扯淡得很 C PRIMER PLUS是这样说的：printf里面用%f打印double，因为printf()函数定义没有指明参数类型，所有的float在传给printf()时，自动转换成double；因此printf()里面没有float的打印符。[/quote] 有的，虽然传入是 double 但输出精度是不同的 ; %f 的输出精度（至少某些实现）达不到 %lf 的精度 即便所有 数据都按照 double 输出，按照对应原则， 也可以只有 %lf 没有 %f;  而不是 去掉 %lf,保留 %f

user: user-3
content: #include<stdio.h>  int main() { 	int a,b,jia,jian,cheng,chu; 	printf("请输入a的整数值:"); 	scanf("%d",&a); 	printf("您输入a的值为%d。\n",a); 	printf("请输入b的整数值:"); 	scanf("%d",&b); 	printf("您输入b的值为%d。\n",b); 	if(a>b) 	{ 		jia=a+b; 		printf("因为a>b所以计算a+b=%d\n",jia); 	} 	else if(a==b) 	{ 		cheng=a*b; 		printf("因为a=b所以计算a*b=%d\n",cheng); 	} 	else if(a<b) 	{ 		chu=a/b; 		printf("因为a<b所以计算a/b=%d\n",chu); 	} 	return 0; }

user: user-1
content: 引用 8 楼 lm_whales 的回复:%lf 足以说明，专家有时候也是扯淡得很 C PRIMER PLUS是这样说的：printf里面用%f打印double，因为printf()函数定义没有指明参数类型，所有的float在传给printf()时，自动转换成double；因此printf()里面没有float的打印符。

user: user-4
content: #include <stdio.h> int main(void) { 	int a,b; 	printf("Please input two values:"); 	scanf("%d %d",&a,&b); 	if(a>b) 		printf("a+b=%d.\n",a+b); 	else if(a==b) 		printf("a*b=%d.\n",a*b); 		else 		printf("a/b=%d.\n",a/b); 	return 0; }

user: user-5
content: int main() {     int a,b;     scanf("%d,%d",&a,&b);     if(a>b)   printf("a+b=%d\n",a+b);     else if(a==b) printf("a*b=%d\n",a*b);     else printf("a/b=%d\n",a/b);     return 0; }

user: user-0
content: 恩，很不错了，谢谢大家。但是最后一个除法还是没有做到。

user: user-6
content: #include<stdio.h>  int main() { 	int a,b; 	double he, ji, shang; 	printf("请输入两个整数:"); 	scanf("%d%d",&a,&b); 	if(a>b) 	{ 		he=a+b; 		printf("%d+%d=%lf\n",a,b,he); 	} 	else if(a==b) 	{ 		ji=a*b; 		printf("%d*%d=%lf\n",a,b,ji); 	} 	else 	{ 		shang=a/b; 		printf("%d/%d=%lf\n",a,b,shang); 	} 	return 0; }

user: user-6
content: #include<stdio.h>  void main() { 	int a,b; 	double he, ji, shang; 	printf("请输入两个整数:"); 	scanf("%d%d",&a,&b); 	if(a>b) 	{ 		he=a+b; 		printf("%d+%d=%lf\n",a,b,he); 	} 	else if(a==b) 	{ 		ji=a*b; 		printf("%d*%d=%lf\n",a,b,ji); 	} 	else 	{ 		shang=a/b; 		printf("%d/%d=%lf\n",a,b,shang); 	} }   这是我做了一些小小的调整，测试过，运算结果正常，但是输出都是双精度实行

user: user-6
content: 你的程序调试结果如下：（为了方便，我把scanf("%d,%d",&a,&b);写成scanf("%d%d",&a,&b);其实是一样的，没什么区别）  第一张图： 程序运行正常，打印输出值5正常，见自动窗口he那一行显示。  第二张图： 当程序 到结束返回值时，在dos窗口打印出来的数据就不对了，显而易见，进一步原因，自己好好研究。   最后指出程序的一点书写错误，如下图：   计算乘积和商，这边的符号不改，打印出来的示意都是加。

user: user-7
content: a，b是整型，shang是双精度实型，不能用shang=a/b，因为两个整型相除的结果也是整型

user: user-2
content: %lf 足以说明，专家有时候也是扯淡得很

user: user-8
content: 把prinf里a+b  a*b改成对应的he ji

user: user-9
content: 1) printf没有%lf, 这玩意只有scanf有, c runtiime实现不一样,最好不要用 2) a, b 都是整数, 如果要显示小数,需要强行转换一下

user: user-0
content: #include<stdio.h> int main() { int a,b,c; double he, ji, shang; printf("请输入两个整数:"); scanf("%d,%d",&a,&b); if(a>b) { he=a+b; printf("%d+%d=%lf",a,b,a+b); } else if(a==b){ ji=a*b; printf("%d+%d=%lf",a,b,a*b); } else { shang=a/b; printf("%d+%d=%lf",a,b,a/b); } return 0; } 这样的写法错在哪里？？？