本文的几个实验,非常简单,但他们是编写复杂代码的基础,搞明白它们非常重要。
实验(五)组成三角形
知识点复查:分支结构和逻辑运算,海伦公式,常见math库函数
-
计算半周长 s:
s=2a+b+c -
使用海伦公式计算面积 A:
A=s(s−a)(s−b)(s−c)
实验内容
实验代码实现
#include<stdio.h>
#include<math.h>
int main() {
int a = 0;
int b = 0;
int c = 0;
//float s = (a + b + c) / 2.0;若此时算出面积,area变量将始终为0
//float area = sqrt(s * (s - a) * (s - b) * (s - c));
scanf("%d%d%d", &a, &b, &c);
if (a <= 0 || b <= 0 || c <= 0) {
printf("ERROR");
}
else {
if (a + b > c && a + c > b && b + c > a) {
float s = (a + b + c) / 2.0;
float area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("area=%8.2f", area);
}
else {
printf("cannot");
}
}
return 0;
}
编写总结:
判断三边能否组成三角形,两短边之和要大于第三遍,也可以是任意两边之和大于第三边,这样就省去了比较三遍长度的过程。已知三边求三角形面积需要用到海伦公式以及math库。
编写代码时注意,area(面积)随着三边长度的改变而改变,没输入一次,就计算一次面积,所以面积和周长不能紧跟边长之后初始化,不然会直接赋值给area变量为0,输入三边长度,也不改变它的赋值,它的值始终为零。想让哪个变量的值改变,就对他重新赋值。
实验(六)累加1-n
知识点复查:for循环,分支语句
实验内容
实验代码实现
#include<stdio.h>
int main() {
int n = 0;
int sum = 0;
scanf("%d", &n);
if (n <= 0) {
printf("ERROR");
}else{
for (int i = 1; i <= n; i++) {
sum += i;
}
printf("%d", sum);
}
return 0;
}
实验(七)累乘
知识点复查:for循环,分支结构
实验内容
实验代码实现
#include<stdio.h>
int main() {
int n = 0;
int p = 1;
scanf("%d", &n);
if (n <= 0) {
printf("ERROR");
}
else {
for (int i = 1; i <= n; i++) {
p *= i;
}
printf("%d", p);
}
return 0;
}
编写总结:
累乘,累加类问题,用for循环总是能得心应手。
实验(八)判素数
知识点复查:素数的判定,for循环,分支语句,常见math库函数
判断素数的方法:
试除法:对于一个数 n,从 2 到 n的算数平方根逐一尝试除以 n。如果 n 不能被这些数整除,那么 n 是素数。
实验内容:
实验代码实现
#include<stdio.h>
#include<math.h>
int main() {
int n = 0;
int sum = 0;
scanf("%d", &n);
if (n <= 2) {
printf("ERROR");
}
else {
for (int i = 2;i <= sqrt(n);i++) {
if (n % i == 0) {
sum += 1;
}
}if (sum == 0) {
printf("%dis prime", n);
}
else
{
printf("%dis not prime", n);
}
}
return 0;
}
编写总结:
一个数判断它是不是素数,要用它取模比他小的数,结果为零,就新增一个因数。除它和1还有因子就不是素数。
一定要注意分支结构的构造,先判断输入是否合法,在此基础上进行循环然后分支判断是否为素数。
如果结合break语句的话,可以找到最小(除一以外)因子,也可已找到全部因子。