目录
一、分支语句
1. 判断一个数是否为奇数
2. 输出1-100之间的奇数
法1:遍历1-100所有的数字,判断是否为奇数,再输出
法2:奇数从1开始,等差为2,所以循环+2
二、循环语句
1. 计算 n的阶乘。
2. 计算 1!+2!+3!+……+10!
法1:算出每个数阶乘,然后相加
法2:优化,n!=(n-1)!*n
编辑
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
三、综合题(猜数字游戏)
一、分支语句
1. 判断一个数是否为奇数
if (n % 2 == 1)
{
printf("奇数\n");
}
{
printf("奇数\n");
}
2. 输出1-100之间的奇数
法1:遍历1-100所有的数字,判断是否为奇数,再输出
int main()
{
int i = 0;
while (i <= 100)
{
if (i % 2 == 1)
{
printf("%d ", i);
}
i++;
}
return 0;
}
法2:奇数从1开始,等差为2,所以循环+2
这个循环只需要循环50次,而上面的就要100次
int main()
{
//这个循环只需要循环50次,而上面的就要100次
int i = 1;
while (i <= 100)
{
printf("%d ", i);
i=i + 2;
}
return 0;
}
二、循环语句
1. 计算 n的阶乘。
//n的阶乘
//5! = 5*4*3*2*1
//5! = 1*2*3*4*5
//1~5的数字 累积相乘
int main()
{
int n = 0;
scanf("%d", &n);
int ret = 1;
int i = 1;
for (i = 1; i <=n; i++)//计算n的阶乘
{
ret *= i;
}
printf("%d\n", ret);
return 0;
}
2. 计算 1!+2!+3!+……+10!
法1:算出每个数阶乘,然后相加
int main()
{
int n = 0;
int ret = 1;
int i = 1;
int sum = 0;
//1!+2!+3!= 1+2+6 = 9
for (n = 1; n <= 3; n++)//循环1-3
{
ret = 1;
for (i = 1; i <= n; i++)//对每个数字求阶乘
{
ret *= i;
}
//将每个数的阶乘加起来
sum += ret;
}
printf("%d\n", sum);
return 0;
}
法2:优化,n!=(n-1)!*n
这样每次算完前一个数的阶乘,就可以直接乘了,不用从1再开始乘一遍,便捷
int main()
{
int n = 0;
int ret = 1;
int i = 1;
int sum = 0;
//1!+2!+3!= 1+2+6 = 9
for (n = 1; n <= 3; n++)//循环1-3
{
ret *= n;
sum += ret;
}
printf("%d\n", sum);
return 0;
}
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
1)二分法的的思想:想想现在有只笔(7块),告诉我10块以内,那么范围就出来了0-10块,然后我直接从中间开始猜,5块?不是,小了(现在的范围6-10)。
我继续猜8块?不是,高了(现在范围6-7)。再猜6块?不是,小了(现在就只有7了)。最后猜7块?对了!!
这样只用猜4次就出结果了,而不是从1,2,3这样开始猜,便捷了很多。
2)二分法的好处是:不用遍历数组,省去了一个一个查找的繁琐;二分法每次查找可以砍掉一半的范围,便捷很多;
3)折半法的前提是:必须是有序的数组,否则这样查找就无意义了
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
int count = 0;
int flag = 0;
while (left<=right)
{
count++;
//这样求mid的会有个问题,如果left和right都特别大,他俩的和超过了整型的最大值,越界了,会丢失某些位,再除以2就会有误差
//int mid = (left + right) / 2;
//这个方式就会好一些,先求出最右值与最左值的差,那么它的一半加上最左值就是,两者的平均值(mid)
int mid = left + (right - left) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了!!下标为%d,找了%d次\n", mid,count);
flag = 1;
break;
}
}
if(flag==0)
{
printf("找不到\n");
}
return 0;
}
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
编写代码,演示多个字符从两端移动,向中间汇聚
welcome to Ameris's world!
**************************
w************************!
we**********************d!
...
welcome to Ameris's world!
#include<string.h>
#include<Windows.h>
int main()
{
char arr1[] = "welcome to Ameris's world!";
char arr2[] = "**************************";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
//arr1的元素替换arr2的元素
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//windows系统命令
Sleep(1000);//休眠1秒,1000ms=1s
system("cls");//清屏(只在一行显示变化)
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
代码效果展示(演示多个字符从两端移动,向中间汇聚)
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
比较密码这种字符串需要用strcmp()函数
int main()
{
int i = 0;
char psw[] = { 0 };
int flag = 0;
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s", psw);
if (strcmp(psw, "123456") == 0)//比较密码这种字符串需要用strcmp()
{
flag = 1;
printf("密码正确\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (flag == 0)
{
printf("三次密码均错误,退出程序!\n");
}
}
三、综合题(猜数字游戏)
void menu()
{
printf("***************************\n");
printf("********* 1.play ********\n");
printf("********* 0.exit ********\n");
printf("***************************\n");
}
#include<stdlib.h>
#include<time.h>
void game()
{
//1.生成随机数
// 库函数,rand()会返回一个0-32767之间的随机数,在使用rand之前要调用srand()
int ret = rand()%100+1;//因为随机数太大了,不在1-100里,所以模100+1,0-99+1-->1-100
//printf("%d", ret);
//2.猜数字
int guess = 0;
while (1)
{
printf("请猜数字:>");
scanf("%d", &guess);
if (guess < ret)
{
printf("> > 猜小了~~\n");
}
else if (guess > ret)
{
printf("> >猜大了哦~\n");
}
else
{
printf("> >真棒!一下子就被你猜到了呢~\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));//time()函数返回一个时间戳//需要调用一次就够了,放在主函数里,不用放在game()里
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("***** 开始游戏 *****\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:printf("选择错误!!!\n");
}
} while (input);
return 0;
}