实验3 运算符与表达式
一、实验目的和要求
1.掌握基本运算符的基本功能及其应用。
2.掌握基本运算符优先级和结合性。
3.掌握表达式的概念及运算规则。
4.掌握常用数据类型的转换规则。
二、实验内容和步骤
1.输入以下程序:
#include <stdio.h>
main()
{
int i,j,a,b;
i=1;
j=2;
a=++i;
b=j++;
printf("%d,%d,%d,%d",i,j,a,b);
}
(1)运行程序,i、j、a、b各变量的值是多少?
(2)将a=++i;b=j++;语句改为:
a=i++;
b=++j;
再运行程序,i、j、a、b各变量的值是多少?
(3)将程序改为:
main()
{
int i,j;
i=1;
j=2;
printf("%d,%d",i++,j++);
}
运行程序,i、j的值是多少?
(4)将printf()改为:
printf("%d,%d",++i,++j);
运行程序,i、j的值是多少?
(5)将printf()改为:
printf("%d,%d,%d,%d",i,j,i++,j++);
运行程序,分析结果。
(6)将程序改为:
main()
{
int i,j,a=0,b=0;
i=1;
j=2;
a+=i++;
b-=--j;
printf("i=%d,j=%d,m=%d,n=%d",i,j,a,b);
}
运行程序,分析结果。
2.运行程序,分析运行结果。
#include <stdio.h>
main()
{
int a=4,k;
printf("%d,%d\n",(a--)+(a--)+(a--),a);
a=4;
printf("%d,%d\n",(--a)+(--a)+(--a),a);
a=4;
k=(a--)+(a--)+(a--)+(--a);
printf("%d,%d\n",k,a);
a=4;
k=(--a)+(--a)+(--a)+(++a);
printf("%d,%d\n",k,a);
}
3.已知变量x、y是float型,编写程序,输入变量x的值,输出变量y的值,并分析输出结果。
(1)y=4.8*x-1/2
(2)y=x%2/5-x
(3)y=x>100&&x<200
(4)y=x>=100|x<=10
(5)y=(x-=x*100,x/=100)
4.输入下列程序,并分析运行结果。
#include <stdio.h>
main()
{
int a=8,b=1;
a+=b+1;
printf("a=%d\n",a);
a/=b+1;
printf("a=%d\n",a);
a<<=b+1;
printf("a=%d\n",a);
a&=b+1;
printf("a=%d\n",a);
a^=b+1;
printf("a=%d\n",a);
}
5.已知int型变量x,y,z,输入x的值为3,y的值为2,z的值为1,编程求下列表达式的值。
(1)x<y?y:x
(2)x<y?x++:y++
(3)z+=(x<y?x++:y++)
6.请编写一个程序,用sizeof运算符测试各基本数据类型所占的字节数。
7.分析下列程序的运行结果,并总结隐式类型转换的规则。
#include <stdio.h>
main()
{
char ch;
int i;
float f;
double d;
ch='A';
i=1;
f=2.0;
d=2.5;
printf("%f",ch/i+f*d-(f+i));
}
讨论:表达式“ch/i+f*d-(f+i)”的结果类型是什么类型。
8.分析下列程序的运行结果,并总结显式类型转换应注意的事项。
#include <stdio.h>
main()
{
float x;
int i;
x=3.6;
i=(int)x;
printf("x=%f,i=%d",x,i);
}
对应答案:实验3 运算符与表达式
1.分析
++i,++j,++在变量前,则运算时,在使用i之前,i值先加1;i++,j++,++在后,在使用i之后,i值再加1。
(1)运行程序,i,j,a,b各变量的值是:2,3,2,2
(2)将a=++i;b=j++;语句改为:
a=i++;
b=++j;
再运行程序,i、j、a、b各变量的值是:2,3,1,3
(3)将程序改为
main()
{
int i,j;
i=1;
j=2;
printf("%d,%d",i++,j++);
}
运行程序,i、j的值是:1,2
(4)在(3)的基础上,将printf语句改为:
printf("%d,%d",++i,++j);
运行程序,i、j的值是:2,3
(5)再将printf语句改为
printf("%d,%d,%d,%d",i,j,i++,j++);
运行结果为:1,2,1,2
(6)运行结果为:i=2,j=1,m=1,n=-1
2.分析
在表达式中包含有自增、自减运算时,给表达式的运算带来了灵活性,但也易给人造成一些混淆的问题。例如a=4,printf("%d,%d\n",(a--)+(a--)+(a--),a);在printf()中参数右结合性,所以,逗号表达式运算时,a的值为4,然后把a的值作为(a--)+(a--)+(a--)表达式中a的值,再进行a的值相加,得9,其他由读者自己分析。
运行结果
9,4
6,4
12,0
7,2
3.参考程序
#include <stdio.h>
main()
{
float x,y;
printf("input value of x:");
scanf("%f",&x);
y=4.8*x-1/2;
printf("output y1=%f\n",y);
y=(int)x%2/5-x;
printf("output y2=%f\n",y);
y=x>100&&x<200;
printf("output y3=%d\n",y);
y=x>=100|x<=10;
printf("output y4=%d\n",y);
y=(x-=x*100,x/=100);
printf("output y5=%f\n",y);
}
4.运行结果
a=10
a=5
a=20
a=0
a=2
5.参考程序
#include <stdio.h>
main()
{
int x,y,z;
printf("input x,y,z:");
scanf("%d%d%d",&x,&y,&z);
printf("exp1=%d\n",x<y?y:x);
printf("exp2=%d\n",x<y?x++:y++);
printf("exp3=%d\n",z+=(x<y?x++:y++));
}
运行结果
input x,y,z:3,2,1
expl=64
exp2=3
exp3=3133
6.参考程序
#include <stdio.h>
main()
{
printf("int=%d\n",sizeof(int));
printf("short int =%d\n",sizeof(short int));
printf("long int=%d\n",sizeof(long int));
printf("unsigned int=%d\n",sizeof(unsigned int));
printf("unsigned long=%d\n",sizeof(unsigned long));
printf("float=%d\n",sizeof(float));
printf("double=%d\n",sizeof(double));
printf("char=%d\n",sizeof(char));
}
运行结果
int=2
short int=2
long int=4
unsigned int=2
unsigned long=4
float=4
double=8
char=1
7.参考答案
运行结果:67.000000
表达式“ch/i+f*d-(f+i)”的结果类型是double类型的。
浮点型变量float8.运行结果:x=3.600000,i=3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论