这篇是我关于之前学习过一段时间的C语言所遇到的题目进行的总结,涉及的知识点可能对初学者不太友好,思维量有一点点大,但是不管有多难,我相信我们总能克服的,我尽量把内容讲得详细一点,如果有什么不懂的可以在评论区留言,我尽量能够解决你的问题。
1 青蛙跳台问题----其实就是一个斐波那契数列问题
题目如下:一个青蛙从第1个台阶开始跳跃台阶,每次只能跳1个台阶或者2个台阶,问青蛙跳到第n个台阶的时候,有多少种跳法?
下面我先用数学的知识进行解答:青蛙跳到第n个台阶的时候只能从第n-2个台阶跳两个台阶,或从第n-1个台阶跳一个台阶到第n个台阶
解法一:用for循环(基本上后期for循环用的比较多第三讲再解释为什么for循环用的比较多)
#include
int main() { int a = 1; int b = 1; int c = 0;//这里初始化三个变量用于后面的交换,c代表第n项的值 int i = 0; int n = 0; scanf("%d",&n); if(1 == n||2 == n) { c == 1; } for(i=3;i<=n;i++) { c = a + b; a = b; b = c; } printf("第n项的值为:%d",c); return 0; } 我们可以看到运行的值是正确的
解法二:函数的递归和迭代
#include
int Fib(int n) { if(1 == n||2 == n) return 1; else return Fib(n-1)+Fib(n-2); } int main() { int n = 0; int ret = 0;//用来接收函数Fib(n)的值 scanf("%d",&n); ret=Fib(n); printf("%d",ret); } 是不是看起来很简洁,下面一张图便于理解。
题目延申:
1-1 斐波那契数列之求前n项的和
下面是代码
#include
int main()
{
int i = 0;
int n = 0;
int a = 1;
int b = 1;
int c = 0;
int m = 2;
int sum = 0;
scanf("%d", &n);
for (i = 3; i <= n; i++)
{
if (4 == i)
m = 0;//这里加上m=0为了使下一次循环的时候不在多加2
c = a + b;
sum = m + c + sum;
a = b;
b = c;
}
if (1 == n)
{
sum == 1;
}
if (2 == n)
{
sum = 2;
}
printf("sum=%d\n", sum);
return 0;
}
2 猜数字游戏
在写代码之前我们先要弄懂所需要的步骤
2-1 我们先要有一个程序进入游戏
2-2 我们要设置随机数
2-3 玩一把肯定是不过瘾的,肯定要多玩几把(隐含意就是要你用循环)
2-4 玩完了,不想玩了,肯定要有一个退出游戏的程序
下面我们用两种方法玩游戏
方法一:函数的递归与迭代
#include
#include
#include//时间戳的头文件
void menu()//注意这里viod是该函数无返回值,必须要设立哦
{
printf("请输入你的输入你的数字:0进入游戏 1退出游戏\n");
}
void game()
{ //这里用到了时间戳的概念,时间戳就是就是现在的时间减去1970年的时间,这样每时每刻的时间戳就不一样,生成的数更加随机
int guess = 0;//设置要猜的数字
int random = rand()%101;//这里用了释放随机数的函数rand需要用到头文件
printf("请猜一个1-100的整数:\n");
do
{
scanf("%d", &guess);
if (guess > random)//设置提醒你猜的数字是大了还是小了或者猜对了
{
printf("猜大了\n");
}
else if (guess < random)
{
printf("猜小了\n");
}
else
printf("恭喜你猜对了\n");
}
while (guess != random);//这里要加分号别忘了哦,然后猜对了就游戏结束了
}
int main()
{
menu();//设置菜单函数 输入0进入游戏 输入1退出游戏
int input = 0;//设置变量你要输入的数
srand((unsigned int)time(NULL));//设置一个随机数生成的种子,这里为了使生成的数更加随机把srand函数放在主函数里面了
scanf("%d/n", &input);
switch (input)
{
case 0:
printf("开始玩游戏 play/n");
game();//设置一个玩游戏的函数
break;
case 1:
printf("不想玩了,我要退出游戏/n");
break;
default:
printf("输入错误:请重新输入数字\n");
break;
}
return 0;
}
方法二进阶版:不调用外函数只用主函数--->这里限制你猜数字的次数,你猜数字的次数,你猜数字的记录,没猜对数字会告诉你答案!
#include
#include
#include
#define MAX_STAGE 10//定义宏设置你的最大读取数字的次数
int main()
{
int random = 0;
int guess = 0;
int i = 0;
int stage = 0;//已经输入的次数
srand((unsigned int)time(NULL));
int num[MAX_STAGE] = { 0 };
random = rand()%101;
printf("请输入你的数字:0 进入游戏 1 退出游戏\n");
int input = 0;
while(1)
{
scanf("%d", &input);
while((stage++) random)
printf("猜大了\n");
else if (guess < random)
printf("猜小了");
else
{
printf("恭喜你猜对了");
}
}
while (random != guess&& MAX_STAGE - stage>0);//加一个限制条件猜的次数超过了10次就退出循环游戏结束
break;
case 1:
printf("退出游戏\n");
goto b;
default:
printf("输入错误请重新输入:");
goto a;
}
}
if (random != guess)
{
printf("不好意思咯告诉你正确答案啦:%d", random);
}
printf("下面是你输入数字的记录噢");
for (i = 0; i < MAX_STAGE; i++)
{
printf(" %2d : %4d %+4d\n", i + 1,num[i],num[i]-random);//读取第几次 读取的数字 与正确数字的差值
}
b:
return 0;
}
上面代码可以自己复制在你们的编译器中验证
下面总结:
1 当你设置变量的时候,心里要清楚它是用来干什么的,其次划分好每个步骤:
比如:猜数字游戏:首先我要先进入游戏
其次我要设置随机数
接着要猜数字
然后就是告诉你猜大了还是猜小了
猜对了游戏结束,猜错了继续猜
2 所需的知识点:函数的递归与迭代
for和do...while的循环
用数组接受数字
最后感谢大家的观看我们下一讲见!