C语言 第二章 作业详解

发布 2022-07-14 13:09:28 阅读 4346

[题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 在...