c语言课后习题答案详解:从基础到进阶全覆盖覆盖

admin C语言 9


你是不是也遇到过这种情况?做完 C 语言课后习题,对着参考答案一脸懵,不知道为啥要这么写;或者答案只有一个干巴巴的代码,根本看不懂思路,下次碰到类似的题还是不会。别着急,兔子哥今天就把从基础到进阶的课后习题答案拆解开来讲,不光给答案,还告诉你为啥这么做,一起往下看吧!
基础篇:变量与输入输出
刚学 C 语言,第一章的习题大多是关于变量定义和 printf、scanf 的用法。比如这道题:“定义两个整数变量,输入它们的值,输出它们的和”。
很多同学会写成这样:
int a, b;
scanf ("% d% d", a, b);
printf ("% d", a + b);
但运行的时候会报错,为啥呢?因为 scanf 里的变量前面得加 &,正确的代码应该是:
int a, b;
scanf ("% d% d", &a, &b);
printf ("% d", a + b);
这里要记住,scanf 需要的是变量的地址,& 就是取地址的意思。就像你告诉别人东西放哪,得说清楚地址,人家才能找到不是。
循环与判断:从简单到复杂
学到循环的时候,习题会难一点。比如 “用 for 循环计算 1 到 100 的和”,这道题很多人会把循环条件写错。
错误示例:
int i, sum = 0;
for (i = 1; i> 100; i++)
sum = sum + i;
你看,这里循环条件写成 i > 100,一开始 i 是 1,根本不满足,循环一次都不执行, sum 肯定是 0。正确的应该是 i <= 100,这样 i 从 1 跑到 100,才能把所有数加起来。
还有 if 语句的嵌套,比如 “判断一个数是正数、负数还是零”,不少同学会漏掉等于零的情况,直接写成 if (a > 0) 和 else,这样零就会被当成负数处理,肯定不对。
数组与函数:进阶必过的坎
数组的习题里,最容易出错的是下标越界。比如定义 int a [5],意思是下标从 0 到 4,有些同学会写成 a [5] = 10,这就超出范围了,程序可能会崩溃。
函数部分,有一道经典题 “写一个函数求两个数的最大值”。很多新手会忘记函数的返回值,比如:
int max (int x, int y)
{
if (x > y)
x;
else
y;
}
这就错了,得加上 return,应该是 return x; 和 return y;,不然函数不知道要返回啥结果。
指针相关:难点解析
指针的习题最让人头疼,比如 “用指针交换两个变量的值”。很多人会写成这样:
void swap (int *x, int *y)
{
int *temp;
*temp = *x;
*x = *y;
*y = *temp;
}
看着好像对,但其实 temp 是个野指针,没指向任何地方就用了,正确的应该是定义 int 类型的 temp,而不是 int *:
void swap (int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
表格:常见错误类型对比
错误类型错误代码示例正确代码示例
scanf 漏写 &scanf("%d", a);scanf("%d", &a);
循环条件错误for(i=1;i>10;i++)for(i=1;i<=10;i++)
数组下标越界int a[5]; a[5]=3;int a[5]; a[4]=3;
函数忘记 returnint max(){x;}int max(){return x;}

有人可能会问,做习题的时候要不要先看答案?兔子哥觉得最好不要,先自己琢磨,实在做不出来再看,而且看完之后得合上书自己再写一遍,不然很快就忘了。
还有同学说,习题太多做不完咋办?不用全做,挑那些典型的,比如每种循环至少做三道题,数组和指针多做几道,重点突破难点。
兔子哥当年学的时候,这些题也做错不少,后来把错题抄在本子上,标上错误原因,下次就不会再犯了。其实做习题的目的不是为了答对,而是为了搞懂背后的知识点,这样考试的时候不管题目怎么变,你都能应付。希望这些详解能帮到你,有啥不懂的,随时来找兔子哥聊。

标签: 不知道 基础篇

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~