【前记】
大一时,贪玩,没有认真地跟着忠孝教授好好学习C语言。后来虽然又花了些时间查阅,但总归没有花一段连续的时间来研读这本教材《高级语言程序设计》(厦门大学出版社·黄翠兰主编),趁着实习前的这段空闲时间,重新拿起学习,并认真做好课后的习题,做到每题都弄懂,打好基础!有闲暇了,数据结构和C++也每题必做!发到自己的博客上监督自己完成!
【第二章】
1.思考题
(1)用#define定义符号常量有什么好处?
答:a.含义清楚;b.能做到“一改全改”。
(2)用何种办法可以迅速找出回车换行符“\n”的ASCII码?
答:printf("%d",'\n');
(3)从整数在机内的表示方式的角度举例说明整形溢出的问题。
答:整数在机内是用补码表示的,由于不同整形变量所占用的内存大小不同,所以,所能表示的数的范围也不同。例如,unsigned short 占用2字节,表示范围0~65535,用它来表示负数或者大于65535的整数时就溢出。
(4)写出4个不同的表达式,分别将整型变量n减去1。
答:n--,--n,n=n-1,n-=1。
(5)试运行下面的代码,猜想其结果是如何得到的,并查资料验证你的想法。
void main (void)
{
int a,b,c;
c = scanf("%d%d",&a,&b);
printf("\n%d",c);
}
答:2,scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
(6)(略)
#include <stdio.h>
void main(){
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);
printf("a = %d,c=%d\n",a,c);
getch();
}
2.分析下列程序的运行结果。
(1)
#include <stdio.h>
void main(){
printf("ab c\t de\rf\tg\n");
printf("h\ti\b\bj k");
getch();
}
关于转义字符!
(2)
#include <stdio.h>
void main(){
unsigned int a = 65535;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
getch();
}
格式化输出!%d 十进制整数;%o 八进制整数; %x十六进制整数; %u十进制形式输出无符号数,例如地址值。
(3)#include <stdio.h>
void main(){
int x,y,z,a,b,c;
x=3;
y=3;
z=3;
y+=++x;
z+=x++;
a=(x++)+(++x);
b=-x++;
c=-++x;
printf("x=%d,y=%d,z=%d,a=%d,b=%d,c=%d",x,y,z,a,b,c);
getch();
}
我只能说,哪天,我遇到这样的前辈遗码,我一定折服于他写出了这样的代码!
(4)略
3.略
4.略
5.用下面的scanf函数输入数据,使a=10,b=20,c1='a',c2='A',x=1.5,y=-1.5,请问该如何输入数据?
scanf("%5d%5d%c%*3c%dx%fy%f",&a,&b,&c1,&c2,&x,&y);
不至于叫用户一口气格式化输入这么多数据吧?
6.编程题
(1)输入直角三角形的两直角边的边长,求斜边的长度和三角形的面积。
#include <stdio.h>
#include <math.h>
void main(){
float a,b,c,p,area;
printf("请输入直角边a:\n");
scanf("%f",&a);
printf("请输入直角边b:\n");
scanf("%f",&b);
c = sqrt(a*a+b*b);
if(a+b<=c||a+c<=b||b+c<=a)
printf("输入的三边不能组成三角形!\n");
p = (a+b+c)/2;
area = p*(p-a)*(p-b)*(p-c);
printf("斜边长:%f 面积:%f \n",c,area);
getch();
}