两个简单的c语言基础问题,求救,先谢过了! ( 积分: 20 )

  • 主题发起人 主题发起人 chickabiddy
  • 开始时间 开始时间
C

chickabiddy

Unregistered / Unconfirmed
GUEST, unregistred user!
问题一:
#include "math.h"
main()
{
int h=10;
double x,y,d1,d2,d3,d4;
//为什么用double定义不对,换成float就正确了?
printf("input:");
scanf("%f,%f",&x,&y);
d1=sqrt(pow(x-2,2)+pow(y-2,2));
d2=sqrt(pow(x+2,2)+pow(y-2,2));
d3=sqrt(pow(x+2,2)+pow(y+2,2));
d4=sqrt(pow(x-2,2)+pow(y+2,2));
if (d1>1&&d2>1&&d3>1&&d4>1) h=0;
printf("height=%d/n",h);
}
问题二:
main()
{
long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;
//分别代表个十百千万位,和位数
printf("input:");
scanf("%ld",&num);
if (num>9999)
place=5;
else
if (num>999)
place=4;
else
if (num>99)
place=3;
else
if (num>9)
place=2;
else
place=1;
printf("place=%d/n",place);//输出几位数
ten_thousand=num/10000;//万位
thousand=(int)(num-ten_thousand*10000)/1000;//千
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;//百
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;//十
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);//个
printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
//输出各位数字
}
问题:为什么从倒数第五行起要加(int),如果直接写成:
thousand=(num-ten_thousand*10000)/1000
为什么结果就不对了。
我是这样理解的:num 是 long 型,ten_thousand 是 int 型,那么 ten_thousand*10000应该是 int 型,(num-ten_thousand*10000) 应该是 long 型,(num-ten_thousand*10000)/1000
也应该是 long 型,再将 long 型整数的低16位赋值给 int 型变量thousand,不用加(int)进行强制转换,赋值表达式可以将 long 型转换成 int 型.
 
问题一:
#include "math.h"
main()
{
int h=10;
double x,y,d1,d2,d3,d4;
//为什么用double定义不对,换成float就正确了?
printf("input:");
scanf("%f,%f",&x,&y);
d1=sqrt(pow(x-2,2)+pow(y-2,2));
d2=sqrt(pow(x+2,2)+pow(y-2,2));
d3=sqrt(pow(x+2,2)+pow(y+2,2));
d4=sqrt(pow(x-2,2)+pow(y+2,2));
if (d1>1&&d2>1&&d3>1&&d4>1) h=0;
printf("height=%d/n",h);
}
问题二:
main()
{
long int num;
int indiv,ten,hundred,thousand,ten_thousand,place;
//分别代表个十百千万位,和位数
printf("input:");
scanf("%ld",&num);
if (num>9999)
place=5;
else
if (num>999)
place=4;
else
if (num>99)
place=3;
else
if (num>9)
place=2;
else
place=1;
printf("place=%d/n",place);//输出几位数
ten_thousand=num/10000;//万位
thousand=(int)(num-ten_thousand*10000)/1000;//千
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;//百
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;//十
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);//个
printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
//输出各位数字
}
问题:为什么从倒数第五行起要加(int),如果直接写成:
thousand=(num-ten_thousand*10000)/1000
为什么结果就不对了。
我是这样理解的:num 是 long 型,ten_thousand 是 int 型,那么 ten_thousand*10000应该是 int 型,(num-ten_thousand*10000) 应该是 long 型,(num-ten_thousand*10000)/1000
也应该是 long 型,再将 long 型整数的低16位赋值给 int 型变量thousand,不用加(int)进行强制转换,赋值表达式可以将 long 型转换成 int 型.
 
1。double x,y,d1,d2,d3,d4;
printf("input:");
scanf("%f,%f",&x,&y);//注意这行 %f,你用float输入
2。不加(int),应该也是可以的,以前学c的时候好象有这么用过,因为c 好象会帮你转化的
 
楼上的第1个问题是正解.scanf后面%f应该用float定义.
第2个问题int的意思是取整数部分而不是定义.是取整数部分,忽略小数部分.
 
我还以为哪个学校的学生又把作业题搞来了呢.
 
接受答案了.
 
后退
顶部