第一题
要求:请浏览上⽅链接的内容,本门课程已学知识涉及到了哪些内容?请挑出其中3个,并摘抄下来。重点浏览「8.注释」「9.8. 条件语句」「9.9. 循环和开关选择语句」。
思考:作为⼀名初学者,请描述⼀下什么是代码缩进,你平时是否有严格要求⾃⼰进
⾏代码缩进呢?
摘抄
如果函数的实现过程中用到了很巧妙的方式, 那么在函数定义处应当加上解释性的注释. 例如, 你所使用的编程技巧, 实现的大致步骤, 或解释如此实现的理由. 举个例子, 你可以说明为什么函数的前半部分要加锁而后半部分不需要.
如果能增强可读性, 简短的条件语句允许写在同一行. 只有当语句简单并且没有使用 else 子句时使用:
如果语句有 else 分支则不允许
通常, 单行语句不需要使用大括号, 如果你喜欢用也没问题; 复杂的条件或循环语句用大括号可读性会更好. 也有一些项目要求 if 必须总是使用大括号:
但如果语句中某个 if-else 分支使用了大括号的话, 其它分支也必须使用:
如果有不满足 case 条件的枚举值, switch 应该总是包含一个 default 匹配 (如果有输入值没有 case 去处理, 编译器将给出 warning). 如果 default 应该永远执行不到, 简单的加条 assert:
空循环体应使用 {} 或 continue, 而不是一个简单的分号.
观点
代码使劲可以让代码更加直观,增加可读性。
作为一名初学者,平时有严格要求自己进行代码缩进(没有缩进对于我这个强迫症来说是不可接受的)。并且vscode有一键格式化插件,crtl + s 一键格式化,何乐而不为呢?
本人的注释示例
Doxygen注释的使用
/**
*@brief 在LCD1602指定位置开始显示所给数字
*@param Line 起始行位置,范围:1-2
*@param Column 起始列位置,范围:1-16
*@param Number 要显示的数字,范围:0-65535
*@param Length 要显示数字的长度,范围:1-5
*@retval 无
*/
void LCD_ShowNum(unsigned char Line, unsigned char Column, unsigned int Number, unsigned char Length)
{
unsigned char i;
LCD_SetCursor(Line, Column);
for (i = Length; i > 0; i--)
{
LCD_WriteData(Number / LCD_Pow(10, i - 1) % 10 + '0');
}
}
效果图
第二题
分别⽤ for while do-while 实现:计算并输出:
n! = 1 × 2 × 3 × … × n
for循环
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
int sum = 1;
scanf("%d", &num);
for (int i = num; i > 0; i--)
{
sum *= i;
}
printf("%d\n", sum);
system("pause");
return 0;
}
while循环
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
int sum = 1;
scanf("%d", &num);
int i = num;
while (i > 0)
{
sum *= i--;
}
printf("%d\n", sum);
system("pause");
return 0;
}
do - while 循环
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
int sum = 1;
scanf("%d", &num);
int i = num;
do
{
sum *= i--;
} while (i > 0);
printf("%d\n", sum);
system("pause");
return 0;
}
运行效果
第三题
模仿PPT的课程内容,计算圆周率 pia 的粗略值。
#include <stdio.h>
#include <stdlib.h>
double calculatePi()
{
double pi = 0.0;
int sign = 1;
for (int i = 0; !(sign * 4.0 / (2 * i + 1) < 1e-7 && sign * 4.0 / (2 * i + 1) > -1e-7); i++)
{
pi += sign * 4.0 / (2 * i + 1);
sign *= -1;
}
return pi;
}
int main()
{
double pi = calculatePi();
printf("圆周率的近似值为:%f\n", pi);
system("pause");
return 0;
}
第四题
#include <stdio.h>
#include <stdilb.h>
int fibonacci(int n) {
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n = 20; // 要计算的斐波那契数列的长度
printf("斐波那契数列前 %d 个数字为:\n", n);
for (int i = 0; i < n; i++) {
printf("%d ", fibonacci(i));
}
printf("\n");
system("pause");
return 0;
}
第五题
编写⼀个程序,接受⽤户输⼊的整数,然后按照相反的顺序输出这些数字。例如,输⼊为12345,输出为 54321。
字符倒置版
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[20];
scanf("%s", s);
int cot = 0;
// 计算字符串长度,其实可以用 strlen,但我就是不用
while (s[cot] != '\0')
{
cot++;
}
for (int i = 0, j = cot - 1; i < j; i++, j--)
{
char cup = s[i];
s[i] = s[j];
s[j] = cup;
}
printf("%s\n", s);
system("pause");
return 0;
}
运行效果
缺陷
0也倒置了
数字倒置版
代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num, sum = 0; // sum记录倒置后的数字
scanf("%d", &num);
while (num > 0)
{
sum += num % 10;
sum *= 10;
num /= 10;
}
sum /= 10;
printf("%d\n", sum);
system("pause");
return 0;
}
运行效果