第9天学C语言(关于2个练习:例如在屏幕上输出乘法口诀表)+(猜数字小游戏)+(goto语句的一点)
(2020.9.13)
练习8:求10个整数的最大值:
思路(仅仅要求求出最大值即可,不要求排序什么的)
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int max = arr[0];不能写成int max=0,因为如果元素全都是负数的话就无法输出10个元素中最大的,而是输出max
for (i = 0; i <= 10; i++)
{
if (max < arr[i])
{
max = arr[i];
}
}
printf("%d\n", max);
练习9:在屏幕上输出乘法口诀表
int i = 1;
for (i = 1; i <= 9; i++)
{
int j = 1;
for (j = 1; j <= i; j++)(如果等于忘记了,那么第一行就输不出来了)
{
printf("%d*%d=%-2d ", i, j, i * j);(要输出的要这么写!)(如果将%d改成%2d就会实现右对齐,这样看起来比较整齐,如果改成%-2d就实现右对齐)
}
printf("\n");(以i为标准换行)
}
----------------分割线-------------------
搭建猜数字小游戏:
1.电脑生成一个随机数
2.猜数字
时间戳:当前计算机时间-计算机的起始时间(1970.1.1.0:0:0)=(xxxx)秒
用时间戳来设置我们的起点
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>(time引用的头文件叫#include<time.h>)
void menu()
{
printf("***************************\n");
printf("** 1.play ** 0.exit **\n");
printf("***************************\n");
}
void game()
{
int ret = 0;
ret = rand();(rand:rand函数生成随机数,这个函数在0~32767之间)
printf("%d\n", ret);
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));(NULL:空指针),srand()括号里面的值如果变化,系统的随机数也会变化,所以如果在括号里面可以传递一个与时间有关的值,这个值发生变化的话就可以生成真随机数(time_t*timer):xx*表示一种指针
通过转到定义查到time_t是一种long(长整型)
而srand要的就是一个整型srand((unsigned int)time());(我们要的是unsigned int,所以就把time返回的值转化为unsigned int)把这个随机数种子放在main函数里面,不要放在game函数里面,不然玩一次游戏设置一次,生成的随机数很近甚至相同
do(do...while结构:使得游戏最少进行一次)
{
menu();
printf("请选择:");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出程序");
break;
default:
printf("选择错误");
break;
}
} while (input);(只要不是0就会循环下去)
return 0;
}
如何缩小生成随机数范围?
让我们生成的随机数模上100,而模上100之后生成的数范围在0~99之间,我们在+1即可
ret=rand()%100+1
----------------分割线-------------------
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("***************************\n");
printf("** 1.play ** 0.exit **\n");
printf("***************************\n");
}
void game()
{
int ret = 0;
int guess = 0;
ret = rand()%100+1;
while (1)
{
printf("请猜数字:");
scanf_s("%d", &guess);
if (guess>ret)
{
printf("很遗憾,宝贝你猜大了(^U^)ノ~YO\n");
}
else if (guess < ret)
{
printf("太惋惜辣,宝宝你猜小了(●'◡'●),加油!\n");
}
else
{
printf("恭喜宝贝猜对了!!!给你一个摸摸哒O(∩_∩)O\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出程序");
break;
default:
printf("选择错误");
break;
}
} while (input);
return 0;
}
----------------分割线-------------------
goto语句:跳到哪里去语句,到处都可以使用,但不建议,理论上没必要写,可以用其他代替,容易让代码执行流程打乱,逻辑混乱
例一:
int main()
{
again:
printf("hello bit!!!");
goto again;
return 0;
}
(这样就从底下跳到again,又重新往下进入死循环)
例二:
int main()
{
printf("hello bit!!!");
goto again;
printf(hehe\n;)
again:
printf("hello bit!!!");
return 0;
}
(这样就不会打印hehe了,跳过了)