为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 19:02:25

为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?
如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?

为什么C语言中int i=3,j=5;float x=2.5;double y=5.0;表达式i-=j*=x+y的值不是-34.5而是-34?如果有取整的运算符号,那么是哪个起到了取整的作用?还有哪些运算符有取整作用?
不是运算符取整,之所以取整的原因是,类型转换!
数据类型的转换一般分为隐含转换和强制转换两种;
隐含转换
算术运算符 关系运算符 逻辑运算符赋值运算符等二元运算符要求两个运算符的类型一致,算术运算 关系运算中参与运算的类型不一致时要进行隐含转换,原则是将低类型转化成高类型(类型越高数据精度越高,double>float>unsigned long>long >int>short>char>)这种转化是电脑自动完成,是安全的,数据精度没有损失;
强制转换
一般涉及到将高类型转化成低类型时使用,不安全,可能在精度的损失,有两种方法
1类型说明符(表达式)//c++强制转化符号
2(类型说明符)表达式 //c强制转化符号;
如 float z=7.56;
int a;
a=int(z);或a=(int)z;
i-=j*=x+y表达式分解如下:
double tmp1 = (double)x + y;
j = int( (double)j * tmp1 ); // j =int( 5.0 *7.5) =37
i-=j; // i = 3 - 37 = -34;

c语言中,int i=3,j=4 k=++i+j--+++i---j,结果为几?为什么? c语言中:int i=1,j; j=(++i)+(++i)+(++i)+(++i); 结果:i=5;这个很容易理解.但是j=15谁能解释一下? C语言求平均数问题#include #define N 5 void main(int){int c[N],d[N],f[N];int i,j,m;float s=0.0,h=0.0,k=0.0;for(i=0;i for( int i=0,j=1; j < 5; j+=3 ) i=i+j; 为什么等于5 C语言题目,不懂int p,i=2,j=3;p=++i+(++i);请问为什么p=4,i=8: C语言:若I,j已定义为int型,则以下程序段中循环体的总的执行次数?for(i=5;i;i- -)for(j=0;j 帮帮忙需要一道c指针程序题void main(){ int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int *p=a[0],i,j; scanf(%d,%d,&i,&j);printf( %4d,*(p+i*4+j));} 程序输入是 2 2结果是多少啊,为什么呢c语言的练习题也可以, c语言中有如下定义:int i,j,*p,*q; 那么下列赋值是否正确?(1)p=&*&i;(2)i=*&j; 我是新手 C语言打印平行四边形 main() { int i ,j; { for(i=1;i 在 C 语言中,若有以下定义和赋值语句int b[2][3]={0} (*p)[3]; p=b; 则对 b 数组的第 i 行第 j 列(假如 i,j 已正确说明并赋值)元素的非法引用为___________A、*( *(p+i)+j) B、*(p[i]+j) C、*(p+i)+j D、(*(p+i))[j] C语言求阶乘倒数之和为什么这样算没返回值.#includedouble fun(int a){int i,j,m,S=1;for(i=2;i=1;j--){m*=1/j;}S+=m;}return S;}main(){int n;scanf(%d,&n);fun(n);}改了一下但是貌似算法有问题.#includedouble fun(int a){int i,j; 这道C语言的题结果是多少?maim(){Int i,j,x=0;for(j=0;j c语言求出 2 到 m 之间 素数#include int main (){int i,m,x=1,j;scanf(%d,&m);for(i=3;i C语言程序改错题(题中的横线为填空)#includeint fun(){int a[3][3],sum;int i,j;--------;for(i=o;i c语言.自定义函数 输入二维数组 #include#define N 5void Input(int str[][]){int i j;for(i=0;i C语言一道题目.不知道哪里出错了,#includeint main(){int b[3][4];int i,j,max,m,n;for(i=0;i C语言输入10个数,把最小的放在第一个数,再把第一个数放在原来的位置,请问哪里错了.#include stdafx.h #includestdio.h int _tmain(int argc,_TCHAR* argv[]) { int a[10] = { 5,4,8,7,6,3,2,1,0,9 }; int i,j,m,t,f = 1; t = a[ C语言 p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);void main(){  int i=5,j=5,p,q;  p=(i++)+(i++)+(i++);  q=(++j)+(++j)+(++j);  printf(%d,%d,%d,%d,p,q,i,j);  }对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15.然后i再