第2章 C语言的基本数据类型与表达式习题解答
1.指出下列常数中哪些是符合C语法规定的?
‘\’ ‘101’ “\\” e3 019 0xle “ab\n” 1.e5 (2+3)e(4-2) 5.2e2.5
符合C语法规定的常数有: “\\” 019 0xle “ab\n” 1.e5
‘\’ 转义字符不能作字符常量
‘101’字符串要双引号,字符要转义字符: ‘\101’
e3 浮点常数在e之前应有尾数
(2+3)e(4-2) 浮点常数的尾数和指数部分均不能是表达式
5.2e2.5 浮点常数的指数部分不能是小数。
2.请出下列程序中的错误,改正后写出程序运行结果。
⑴
#include<stdio.h>
void main()
{
int x,y=z=5,aver; //定义变量时不能连续赋值,aver为正数不能存储带小数的平均数
x=7 //以“;”语句结束
AVER=(x+y+z)/3 //行末差“;”,AVER为小写, 除数应有小数部分,商才有小数部分
printf("AVER=%d\n",aver) //行末差“;”
}
正确的程序如下:
#include<stdio.h>
void main()
{
int x,y=5,z=5;
float aver;
x=7;
aver=(x+y+z)/3.0;
printf("AVER=%f\n",aver);
}
运行结果:AVER=5.666667
⑵
#include<stdio.h>
void main()
{
char c1='a';c2='b';c3='c';//连续定义变量有“,”分隔
int a=3.5;b='A';
printf("a=%d b=\'%c\'\"end\"n",a,b); //输出语句无语法错,但格式不清晰
printf("a%c b%c\bc%c\tabc\n",c1,c2,c3);
}
正确的程序如下:
#include<stdio.h>
void main()
{
char c1='a',c2='b',c3='c';
int a=3.5,b='A';
printf("a=%d b=\'%c\' \"end\"\n",a,b);
printf("a%c b%c \bc%c \tabc\n",c1,c2,c3);
}
运行结果:
a=3 b='A' "end"
aa bbcc abc
3.写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格真上赋值后的数据(实数保留到小数后两位)。
int | 99 | 104 | 66 | 55 | 68 | -1 |
char | ‘c’ | ‘h’ | ‘B’ | ‘7’ | ‘D’ | -1 |
Unsigned int | 99 | 104 | 66 | 55 | 68 | ffffffff |
Float | 99.00 | 104.00 | 66.00 | 55.78 | 68.00 | -1.00 |
Long int | 99 | 104 | 66 | 55 | 68 | -1 |
c语言中逗号运算符怎么运算 |
4.写出程序运行结果
⑴
#include<stdio.h>
void main()
{
int i,j;
i=8,j=10;
printf("%d %d %d %d\n",i,j,++i,j++);
}
运行结果:
9 10 9 10
⑵
#include<stdio.h>
void main()
{
int a=1,b=2,c=3;
printf("%d %d %d %d\n",a=b=c,a=b==c,a==(b=c),a==(b==c));
}
运行结果:
3 1 0 0
⑶
#include<stdio.h>
void main()
{
int a=10,b=20,c=30,d;
d=++a<=10||b-->=20||c++;
printf("%d %d %d %d\n",a,b,c,d);
}
运行结果:
11 19 30 1
注:在表达式:“d=++a<=10||b-->=20||c++;”中有三个或项,从左到右依次进行运算,第一个或项结果为0,第二个或项结果为1,因此最终的或结果肯定为1,程序没有进行第三个或项的计算,所以c++没有执行,该行运行结束时,c仍为30。
5.写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5).
⑴a%=(b%=3)
#include<stdio.h>
void main()
{
int a=10,b=4;
printf("%d \n",a%=(b%=3));
}
结果为:0
注:连续赋值操作从右向左进行:
c=b%=3; //c=1
a%=c; //10/1的余数为0,向a赋0
⑵a+=a-=a*=a
#include<stdio.h>
void main()
{
int a=10;
printf("%d \n",a+=a-=a*=a);
}
结果为:0
注:连续赋值操作从右向左进行:
a*=a; //a=100
a-=a; //a=0
a+=a; //向赋值为0
⑶(float)(a+c)/2+(int)x%(int)y
#include<stdio.h>
void main()
{
int a=10,c=5;
double x=2.5,y=3.5;
printf("%发f \n",(float)(a+c)/2+(int)x%(int)y);
}
结果为:9.50
注:(int)x为2,(int)y为3,2%3求得余数为2,(float)(a+c)/2商为7.5,与2相加得9.5
⑷a*=b+c
#include<stdio.h>
void main()
{
int a=10,b=4,c=5;
printf("%d \n",a*=b+c);
}
结果为:90
注:赋值运算符的优先级最低,给定的表达式等价于:a=a*(b+c)
⑸++a-c+b++
#include<stdio.h>
void main()
{
int a=10,b=4,c=5;
printf("%d \n",++a-c+b++);
}
结果为:10
注:计从左到右进行:(++a)-c结果为6,6+b为10,最后完成b++,程序运行后,a=11,b=5,c=4
⑹++a-c+++b
#include<stdio.h>
void main()
{
int a=10,b=4,c=5;
printf("%d \n",++a-c+++b);
}
结果为:10
注:给定的表达式应用理解为(++a)-(c++)+b,先执行(++a)-(c++)结果为5,后执行6+b为10,程序运行后,a=11,b=4,c=6.
⑺a<b? x:'A'
#include<stdio.h>
void main()
{
int a=10,b=4;
double x=2.5;
printf("%f \n",a<b? x:'A');
}
结果为:65,即'A'
⑻a+b,18+(b=4)*3,(a/b,a%b)
#include<stdio.h>
void main()
{
int a=10,b=4,c;
c=(a+b,18+(b=4)*3,(a/b,a%b));
printf("%d \n",c);
}
结果为:2
注:逗号表达式返回最后一项的值,即a%b计算得余数为2.
⑼x+a%3*(int)(x+y)%2/4+sizeof(int)
#include<stdio.h>
void main()
{
int a=10;
double x=2.5,y=3.5;
printf("%f \n",x+a%3*(int)(x+y)%2/4+sizeof(int));
}
结果为:6.5
注:其中a%3*(int)(x+y)%2/4=1*0/4=0,sizeof(int)=4.
⑽a<b?a:c<d?c:d
#include<stdio.h>
void main()
{
int a=10,b=4,c=5,d=1;
printf("%d \n",(a<b?a:c<d?c:d));
}
结果为:1
注:表达式等价于a<b?a:(c<d?c:d)
⑾b++==c
#include<stdio.h>
void main()
{
int b=4,c=5;
printf("%d \n",b++==c);
}
结果为:0
⑿a*=b=c=2
#include<stdio.h>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论