分支循环语句前面两节基本框架已经介绍完,本次分享来讲一哈关于分支循环语句的一些小例题。
目录
1、计算n的阶乘
#define _CRT_SECURE_NO_WARNINGS //在一些编译器里,scanf是无法直接使用的,这个相当于头文件
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int result = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++) //for循环定义结果等于从 1 乘到输入的 n 实现求得 n 阶乘的效果
{
result = result * i;
}
printf("%d", result);
return 0;
}
2、计算 1!+2!+3!+……+10!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int result = 1;
int sum = 0;
for (n = 1; n <= 10; n++) //外层 n 为求和的阶乘到n
{
for (i = 1; i <= n; i++) //内层接到外层 for 循环传进来的n来求阶乘
{
result = result * i;
}
sum = sum + result; //每求出一个阶乘加一个
}
printf("%d", sum);
return 0;
}
3、 二分查找
首先二分查找能够实现的领域是在有序数组中,其主要的目的是给定一个有序数组,随机输入一个数,如果在数组里找到返回找到了,找不到返回没找到,大体的思路就是先选定有序数组的中间数,比较之后确定下一步寻找的区域是左边区域还是右边区域,进而循环寻找操作,最终得出结果。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int n = 0;
int sz = sizeof arr / sizeof arr[0];
int left = 0;
int right = sz - 1;
int mid = 0;
int tmp = 0;
scanf("%d", &n);
while (left <= right)
{
mid = left + (right - left) / 2;
if (n < arr[mid])
{
right = arr[mid];
}
if (n > arr[mid])
{
left = arr[mid];
}
else
printf("找到了,下标是:%d",mid);
break;
}
if (left > right)
printf("没找到");
return 0;
}
4、演示多个字符从两端移动,向中间汇聚
#include<stdio.h>
#include <windows.h>
int main()
{
char arr1[] = "I love mq"; //实现最终打印出来的字符串;
char arr2[] = "#########"; //初始的字符串;
int sz = strlen(arr1); //strlen 是求字符串长度的库函数;
int left = 0;
int right = sz - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000); //程序执行到此休息1000ms,实现的函数结构是 Sleep(数),头文件是#include <windows.h>
system("cls"); //清空屏幕,函数结构为system("cls"),头文件 #include <windows.h>
left++;
right--;
}
printf("%s\n", arr2);
}
5、猜数字游戏
#include<stdio.h>
void menu()
{
printf("*********************\n");
printf("****1.play 0.exit****\n");
printf("*********************\n");
}
void game()
{
int ret = rand() % 100 + 1; //这里我们选择随机出现的数字为 1~100 ,rand()是随机取值的函数
int a = 0;
while (1)
{
printf("你猜的数字是:");
scanf("%d", &a);
if (ret > a)
printf("你猜小了\n");
else if (ret < a)
printf("你猜大了\n");
else
{
printf("你猜对啦\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL)); //时间戳,为随机取值选取一个起点
int n = 0;
do
{
menu();
printf("请选择:");
scanf("%d", &n);
switch (n)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,重新输入\n");
}
} while (n);
return 0;
}
6、关机整蛊
这段代码的主要功能就是,运行后60s内进行电脑关机,只有输入:我是猪这三个字才能解除定时关机。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr[10] = { 0 };
system("shutdown -s -t 60"); //实现电脑关机,60表示60秒内
printf("请在60s内输入:我是猪,否则电脑自动关机\n");
while (1)
{
scanf("%s", arr);
if (strcmp(arr, "我是猪") == 0) //strcmp( ,)是比较逗号前后两个字符串是否一致,一致返回结果为‘0’,不一致返回结果非‘0’。
{
system("shutdown -a");
printf("成功解除危机\n");
break;
}
else
printf("输入错误,请重新输入\n");
}
return 0;
}
我们上次分享中提到了goto语句,这里也可以用goto语句来实现这个功能。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
char arr[10] = { 0 };
system("shutdown -s -t 60");
printf("请在60s内输入:我是猪,否则电脑自动关机\n");
here: //冒号,不是分号。
scanf("%s", arr);
if (strcmp(arr, "我是猪") == 0)
{
system("shutdown -a");
printf("成功解除危机\n");
break;
}
else
printf("输入错误,请重新输入\n");
goto here;
return 0;
}
7、关于字符串两个函数的补充
对于字符串数组来说,还有两个函数需要我们知道:strcpy( , )和memset( , , ),第一个函数是将逗号前面的字符串数组的内容换成逗号后面字符串数组的内容,只改变前面,不改变后面。第二个函数的功能是将字符串数组中从指定的位置改变一个或多个数组内容。
int main()
{
char arr1[20] = { 0 };
char arr2[] = "hello bit";
strcpy(arr1, arr2);
printf("%s\n", arr1);
printf("%s\n", arr2);
}
int main()
{
char arr[20] = "hello world";
memset(arr+7, 'y', 3);
printf("%s\n", arr);
}
这次就分想这么多啦,兄弟萌债见!