[题2.1]标识符在命名时,应注意哪几个方面?
在c语言中标识符是用户自定义的一种字符序列,它由字母或下划线开头,由下划线、数字与字母组成的一组符号。在c语言中大小写有区别,一般情况下标识符尽可能“见文识意”,它不能与系统的保留字相同。在c语言的不同编译环境中对于字符串的长度要求也不同,dos环境下,长度最长32个字符。
题2.2]c语言中整数-8在内存中的存储形式是什么?
在计算机中所有参与运算的数据在运算的过程中采用补码方式,因此将-8转换为补码保存在计算机中。
8原码:1000 0000 0000 1000。
8反码:1111 1111 1111 0111。
8补码:1111 1111 1111 1000
题2.3]字符与字符串常量有什么区别?
在c语言中字符是基本数据类型,而字符串不是,在计算机表达字符串时,内部采用字符数组方式。字符使用单引号表示,字符串则使用双引号表示。在字符长度相同的情况下,字符串存储的实际长度比字符多一个字节。
可以将字符存储为字符中,但不能将字符串存储为字符。
题2.4]已知“int i,a;”,执行语句“i=(a=2*3,a*5),a+6”后,变量i的值是多少?
参考**如下:
# include <>
main()
int i,a;
i=(a=2*3,a*5),a+6;
printf("i=%d a=%d",i,a);
运行结果如下:
题目解读:i=(a=2*3,a*5),a+6;应当理解为是“,”运算概念,a+6是内在中的计算内容,它的值与i没有关系。(a=2*3,a*5)中的括号级别最高,优先进行运算,其中的内容中a=2*3与a*5按从左向右运算,因此结果是a=6,然后再计算a*5=30。
在此运算结束后将后面的数据作为最终的结果。因此表达式变成了i=30,a+6i=30,6=6i=30,12。它最终的结果如截屏所示。
试分析下面**的结果。
# include <>
main()
int i,a;
i=(a=2*3,a*5),a+6;
printf("%d",(a=2*3,a*5),a+6);
printf("i=%d a=%d",i,a);
# include <>
main()
int i,a;
i=(a=2*3,a*5),a+6;
printf("%d",(a=2*3,a*5),a+6));多了一个括号有什么影响?
printf("i=%d a=%d",i,a);
题2.5]设“int i=1,j=2,k=3”,请写出以下表达式的值及计算后变量i,j,k的值。
1)(+i)*(j)*(k)
2)(i++)j)*(k++)
3)i=i+j,j=j+k,k=k+i
解答如下:1)参考**:
# include <>
main()
int i=1,j=2,k=3,m;
m=(+i)*(j)*(k);
printf("m=%d i=%d j=%d k=%d",m,i,j,k);
说明:++i表示的概念是先自增然后再使用其值参与运算。它等价与i=i+1之后再参与相关运算。同理j与k道理相同,因此表达式为2*3*4=24。
2)参考**。
# include <>
main()
int i=1,j=2,k=3,m;
m=(i++)j)*(k++)
printf("m=%d i=%d j=%d k=%d",m,i,j,k);
说明:i++表示先参与运算,然后i再实现自增。表达式为1*3*3=9。
3)参考**。
# include <>
main()
int i=1,j=2,k=3,m;
i=i+j,j=j+k,k=k+i;
printf("i=%d j=%d k=%d",i,j,k);
题2.6]求下面算术表达式的值。
1)x+a%3*(int)(x+y)%2/4(设x=2.5,a=7,y=4.7)
2)(float)(a+b)/2+(int)x%(int)y(设a=2,b=3,x=3.5,y=2.5)
解答如下:1)参考**:
# include <>
main()
float x=2.5,y=4.7;
int a=7;
float c;
c=x+a%3*(int)(x+y)%2/4;
printf("x+a%%3*(int)(x+y)%%2/4=%f",c);
2)参考**。
# include <>
main()
float x=3.5,y=2.5;
int a=2,b=3;
float c;
c=(float)(a+b)/2+(int)x%(int)y;
printf("(float)(a+b)/2+(int)x%%(int)y=%f",c);
题2.7] 分析下面程序执行后的结果。
# include <>
void main()
int x=10,y=10;
printf("%d %d",x--,y);
说明x—是先使用后计算,而—y是先计算后使用。
题2.8] 分析下面程序执行后的结果。
# include <>
void main()
int a=3,b=7;
printf("%d",(a++)b));
printf("%d",b%a);
printf("%d",a+b);
题2.9] 分析下面程序执行后的结果。
# include <>
void main()
char c1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%c b%c\tc%c\tabc ",c1,c2,c3);
printf("\t\b%c %c",c4,c5 );
说明:char类型是基本定义,此题目的难点是c4与c5。它们是使用八进制表示的字符方式。
其中:c4='\101'表示使用(101)8(001 000 001)2(0100 0001)2(41)1641h,查询教材附录a中的内容确定c4表示字母“a”。
同理分析c5表示:c5='\116'(116)8(001 001 110)2(0100 1110)2(4e)164eh,它表示字母“n”。
题2.10]分析下面程序执行后的结果。
# include <>
void main()
int a,b,c,d,x,y,z;
a=634;y=19;z=28;
a=3*(b=x/(y-1))-z/2;
printf("%10d%10d",a,b);
a=100; b=45;
c=-19,d=4,a=-2,y=5;
a+=6;b-=x;
c*=10,d/=x=y,z%=8;
printf("%10d%10d%10d%10d%10d",a,b,c,d,z);
说明:本题目的难点是理解“+=运算的规则。参考教材中的相关定义。另外在控制输出结果的时候使用了第三章的定义内容。
注意对比下面的运算结果:
# include <>
void main()
int a,b,c,d,x,y,z;
a=634;y=19;z=28;
a=3*(b=x/(y-1))-z/2;
printf("%-10d%-10d",a,b);
a=100; b=45;
c=-19,d=4,a=-2,y=5;
a+=6;b-=x;
c*=10,d/=x=y,z%=8;
printf("%10d%-10d%-10d%-10d%-10d",a,b,c,d,z);
分析与前面的区别,掌握控制符号的使用方法。
第二章习题详解
习题2 1 1.试利用本节定义5后面的注 3 证明 若xn a,则对任何自然数k,有xn k a.证 由,知,当时,有。取,有,设时 此时 有。由数列极限的定义得。2.试利用不等式说明 若xn a,则 xn a 考察数列xn 1 n,说明上述结论反之不成立。证 而。于是,即 由数列极限的定义得 考察...
C 第二章习题
习题。1.请检查下面程序,找出其中的错误 先不要上机,在纸面上作人工检查 并改正之。然后上机调试,使之能正常运行。运行时从键盘输入时 分 秒的值,检查输出是否正确。include using namespace std class time void set time void void show ...
第二章C语言程序设计的初步知识
一 选择题。1 在c 语言中,下列类型属于构造类型的是 0级 a 整型b 字符型c 实型d 数组类型。6 下列字符串属于标识符的是 0级 a intb 5 student c 2ong d df 11 c语言中不能用来表示整常数的进制是 0级 a 十进制 b 十六进制 c 八进制d 二进制。16 在...