max=c;
printf(“最大数为:
%d”,max);
}
第2章程序的灵魂——算法
2.1什么叫结构化的算法?
为什么要提倡结构化的算法?
解:
由一些基本结构顺序组成的算法称为结构化的算法。
由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。
2.7什么叫结构化程序设计?
它的主要内容是什么?
解:
结构化程序就是用高级语言表示的结构化算法。
它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。
第3章数据类型、运算符与表达式
3.3请将下面各数用八进制和十六进制数表示:
(1)10
(2)32(3)75(4)-617
(5)-111(6)2483(7)-28654(8)21003
解:
(1)(10)10=(12)8=(A)16
(2)(32)10=(40)8=(20)16
(3)(75)10=(113)8=(4B)16
(4)(-617)10=(176627)8=(FD97)16
此题可以这样考虑:
带符号数在计算机中采用补码表示,正数的补码与原码相同,负数的补码=模+真值。
若使用16位存储,模为216=65536。
-617的补码为65536+(-167)=64919=(176627)8=(FD97)16
(5)(-111)10=(177621)8=(FF91)16
(6)(2483)10=(4663)8=(9B3)16
(7)(-28654)10=(110022)8=(9012)16
(8)(21003)10=(51013)8=(520B)16
3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。
变量的类型
25
-2
32769
int型
long型
sort型
signedchar(8位)
unsignedint型
unsignedlong型
unsignedshort型
unsignedchar型
注:
如果没有学过二进制和补码,此题可以不做。
解:
各数据在内存中的存储形式如下表所示:
变量的类型
25
-2
32769
int型
00…000011001
8位
111111*********0
15
100…001(溢出)
14
long型
00…000011001
24
11…1110
31
00…0100…001
1614
short型
100…000011001
8
111111*********0
15
100…001(溢出)
14
signedchar(8位)
100011001
11111110
00000001(溢出)
unsignedint型
00…000011001
8
11…110
15
100…001
14
unsignedlong型
00…000011001
24
11…110
31
00…0100…001
1614
unsignedshort型
00…000011001
8
11…110
15
100…001
8
unsignedchar型
00011001
11111110
00000001
其中int和short类型,其取值范围是-32768~32767。
32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。
char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。
同理,若将long赋给int,则截取低16位。
3.5字符常量和字符串常量有什么区别?
解:
字符常量是一个字符,用单引号括起来。
字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号’\0’。
3.6写出以下程序运行的结果:
main()
{charcl=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
}
解:
程序运行的结果为:
aabbccabc
AN
3.7要将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’i’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5的值分别变为’G’,’l’,’m’,’r’,’e’,并输出。
解:
main()
{charcl=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf(“密码是%c%c%c%c%c\n,c1,c2,c3,c4,c5);
}
运行结果:
密码是Glmre
3.8例2.6能否改成如下:
main()
{intc1,c2;(原为charc1,c2)
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
解:
可以。
因为在可输出的字符范围内,用整型和用字符型作用相同。
3.9求下面算术表达式的值。
(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)2.5
(2)3.5
3.10写出程序运行的结果。
main()
{inti,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
解:
运行结果为:
9,11,9,10
3.11写出下面赋值的结果。
格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。
int
99
42
char
‘d’
ⅹ
unsignedint
76
65535
float
53.65
longint
68
解:
int
99
100
76
53
68
42
-1
char
‘c’
‘d’
‘L’
‘5’
‘D’
‘*’
ⅹ
unsignedint
99
100
76
53
68
42
65535
float
99.000000
100.000000
76.000000
53.65
68.000000
42.000000
65535.000000
longint
99
100
76
53
68
42
65535
3.12出下面表达式运算后a的值,设原来a=12。
设a和n都已定义为整型变量。
(1)a+=a
(2)a-=2
(3)a*=2+3(4)a/=a+a
(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a
解:
(1)24
(2)10
(3)60(4)0
(5)0(6)0
第4章最简单的C程序设计——顺序程序设计
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:
a=□3□□b=□4□□c=□5
x=1.200000,y=2.400000,z=-3.600000
x+y=□3.60□□y+z=-1.20□□z+x=-2.40
u=□51247□□n=□□□128765
c1=’a’□or□97(ASCII)
c2=’b’□or□98(ASCII)
解:
main()
{
inta,b,c;
longintu,n;
floatx,y,z;
charc1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z=-3.6;
u=51247;n=128765;
c1=’a’;c2=’b’;
printf(“\n”);
printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c);
printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z);
printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x);
printf(“u=%6ld□□n=%9ld\n”,u,n);
printf(“c1=’%c’or%d(ASCII)\n”,c1,c1);
printf(“c2=’%c’or%d(ASCII)\n”,c2,c2);
}
4.5请写出下面程序的输出结果:
main()
{inta=5,b=7;
floatx=67.8564,y=-789.124;
charc=’A’;
longn=1234567;
unsignedu=65535;
printf(“%d%d\n”,a,b);
printf(“%3d%3d\n”,a,b);
printf(“%f,%f\n”,x,y);
printf(“%-10f,%-10f\n”,x,y);
printf(“%8.2f,%8.2f,%4f,%4f,%3f,%3f\n”,x,y,x,y,x,y);
printf(“%e,%10.2e\n”,x,y);
prin