【id:416】【20分】A. 实验4-1-4 找出最小值
找出最小值的关键思路就是把不是最小值的值舍去啦!
#include <stdio.h>
int main() {
int n, a, b;
scanf("%d", &n);
scanf("%d", &a);
for (; n > 1; n--) {
scanf("%d", &b);
if (b < a) {
a = b;
}
}
printf("min = %d", a);
return 0;
}
需要注意的是因为要在循环中比较,所以需要先在循环外输入一个值
【id:411】【20分】D. 实验4-1-9 猜数字游戏
#include <stdio.h>
int main() {
int R, N, a = 1;
scanf("%d %d", &R, &N);//R:随机数 N:最大猜测次数
for (int n = 1; n <= N; n++) {//定义n用来记录猜了多少次
scanf("%d", &a);
if (a == R) {
switch (n) {//这里用switch来区分n的情况
case 1:
printf("Bingo!");
return 0;//直接退出整个程序
case 2:
case 3:
printf("Lucky You!");
return 0;
default:
printf("Good Guess!");
return 0;
}
} else if (a > R) {
printf("Too big\n");
} else if (a < R && a > 0) {
printf("Too small\n");
} else if (a < 0)
break;//如果输入为负数则跳出for循环
}
printf("Game Over");//这里后面没有感叹号……
return 0;
}
我用了switch函数来区分猜测次数的情况,感觉会更加简便
在上述几个case中除了使用return 0来退出程序还可以使用exit(0)。exit(0)函数意为退出整个程序。值得注意的是,使用他需要引入<stdlib.h>库
【id:410】【20分】E. 实验4-1-10 兔子繁衍问题
这一题最重要的就是找到其中的规律。
在这里先将兔子分为三种状态:
1.可繁衍的(sex)(在图中画了圈圈)
2.处于第二个月的(pro)
3.刚出生,即第一个月的(neww)
由图中关系可知,每过一个月sex总数都会增加上一个月的pro,而上一个月的neww成长变为pro,这个月的sex繁衍生出sex对neww
由此,我们在定义变量时将第一个月的信息添加进去就能得到一个完美的程序啦!
(PS:其实这题是斐波那契数列哦,不过我更喜欢叫他兔子数列)
#include <stdio.h>
int main() {
int N, month;
scanf("%d", &N);
int sex = 0, pro = 0, neww = 1, total = 1;//month=1时状态//这里将兔子分为了三类1.可繁殖2.第二月3.第一月
for (month = 1; total < N;) {//不管条件是否满足,第一区都会执行一次
month++;
sex = sex + pro;
pro = neww;
neww = sex;
total = total + neww;
}
printf("%d", month);
return 0;
}
我一开始写的时候写了几个if,后面发现其实一个都不用……找到规律就通杀啦!!
写的时候突然发现了一个关于for循环的知识点:不管循环条件是否成立,for循环第一个分区那里的代码都会被执行一次。如果在那里定义了变量的话,那里的变量将是for循环内的局部变量。
下面写个很直观的例子:
#include <stdio.h>
int main() {
int a = 1, n = 0;
for (int a = 2; a == 2 && n != 1; n++) {//这里第二个分区判断的a是局部变量的a
printf("%d\n", a);
}//退出这个for循环,局部变量a=2失效
for (n = 0; a == 1 && n != 1; n++) {
printf("%d\n", a);
}
printf("%d", a);
return 0;
}
输出:
2
1
1
以前居然没发现,好神奇