好久没发啦,这是第六章的答案。之前人生发生了颇大的变故,不提也罢。
之前发现CSDN上写《C Primer Puls》这本书课后答案的不少,没想到我居然受到到了几位朋友点赞,看来萌新风格对萌新更友好啊。关于@天姬or田鸡提到第五章第1题minute应该从>=改为>更符合题目语义我深表赞同,已加以修改。
回归正题,第六章引入while、for、do while、三种循环后,课后题目写法就不像之前那样单一了,不同的人出于数学上考虑的差异,程序的逻辑也各有不同。为写好第六章,在自己编完后看对比别人的版本得出一个结论:简洁。
都说程序可读性是最重要的,而写循环最能让人看懂的方式就是简洁。少写变量,少用嵌套循环(事实上书里就是这样倡导,比如第14题就要求不要用嵌套循环)。课后题目比起动辄上千行的实际工程简单多了,若课后题目写的都艰涩复杂,那实际工作岂不得要命?而且研究如何写的轻便高效也是锻炼的过程。
第六章中第5题和第14题是我个人认为最难的,均花了2个多小时才逐渐写出来。建议和我一样的萌新不要急着看答案,先自己写完再比照别人的。
第5题,最后我设计了一种输入任意字母均可形成金字塔的写法,而网上很多答案都是只能输入E形成金字塔。第14题要求不用嵌套循环,但我发现找到的答案几乎全部用了嵌套循环。当然,实际工程中不需要太多的奇技淫巧(比如最近大火的《太吾绘卷》据说被很多程序员吐槽写的乱),但能写出来还是很有意思的嘛。
#include <stdio.h>
int main(void)
{
char Letters[26], x = 'a';
int n;
for(n = 0; x <= ('a' + 25); x++, n++)
{
Letters[n] = x;
printf("%c", Letters[n]);
}
return 0;
}
#include <stdio.h>
int main(void)
{
int n, m;
for(n = 1; n <= 5; n++)
{
for(m = 1; m <= n; m++)
printf("$");
printf("\n");
}
return 0;
}
#include <stdio.h>
int main(void)
{
int n, m;
char letter;
for(n = 1; n <= 6; n++)
{
for(letter = 'F', m = 1; m <= n; m++, letter--)