分支与循环-2:点此转入
目录
3.4 练习
3.4.1 计算n的阶乘
//计算n的阶乘
#include <stdio.h>
int main()
{
int text = 1;
int i = 0;
int n = 0;
scanf("%d", &n);
for (i = 1;i <= n; i++)
{
text *= i;
}
printf("%d", text);
return 0;
}
3.4.2 计算1!+2!+......+n!
//计算1!+2!+......+n!
#include <stdio.h>
int main()
{
int sum = 0,i = 0,n = 0,product = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
product *= i;
sum += product;
}
printf("%d", sum);
return 0;
}
3.4.3 二分查找(在有序的数组中找到一个数字)
#include <stdio.h>
int main()
{
int left = 0, right = 0, mid = 0, key = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
scanf("%d", &key);
right = 9;
while (left <= mid)
{
mid = left + (right - left) / 2;
if (arr[mid] == key)
{
printf("找到了,下标是%d", mid);
break;
}
else if (arr[mid] < key)
left = mid + 1;
else if (arr[mid > key])
right = mid - 1;
}
if (left > mid)
printf("没找到,建议重开");
return 0;
}
3.4.4 多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <string.h>
#include <Windows.h>
int main()
{
char arr1[] = "********************";
char arr2[] = "welcome handsome ywx";
int left = 0, right = strlen(arr2) - 1;
while (left <= right)
{
arr1[left] = arr2[left];
arr1[right] = arr2[right];
left++, right--;
printf("%s", arr1);
Sleep(1000);
system("cls");
}
return 0;
}
3.4.5 编写代码,实现登录程序
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0;
char password[20] = {0};
for (i = 0; i < 3; i++)
{
printf("请输入密码(剩余次数%d次):",3-i);
scanf("%s", password);
if (strcmp(password, "ywx666") == 0)
{
printf("密码正确,登录成功");
break;
}
else
printf("密码错误,请重新输入\n");
}
return 0;
}
3.4.6 猜数字游戏
#define _CRT_SECURE_NO_WARNINGS 1
//猜数字游戏
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int input = 0;
void menu()
{
printf("欢迎来到猜数字游戏!!!!!!\n");
printf("***************************************\n");
printf("菜单:\n");
printf(" 1.开始游玩\n");
printf(" 0.退出游戏\n\n");
printf("***************************************\n");
printf("请选择您要进行的操作:\n");
}
void game()
{
int ret = rand() % 500 + 1;
int num = 0;
do
{
printf("请输入你要猜的数字(1-500):");
scanf("%d", &num);
if (num == ret)
{
printf("\n\n恭喜你,猜对了!!!!!\n\n");
printf("***************************************\n");
printf(" 1.继续游玩\n");
printf(" 0.退出游戏\n\n");
printf("***************************************\n");
printf("请选择您要进行的操作:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
system("cls");
printf("欢迎下次游玩!!!!!\n");
Sleep(2500);
break;
default:
printf("输入错误,请输入1或者0!\n");
}
}
else if (num > 500)
printf("请输入1-500之间的数字!!!!\n");
else if (num < 1)
printf("请输入1-500之间的数字!!!!\n");
else if (num < ret)
printf("猜小了,再往大了猜\n");
else if (num > ret)
printf("猜大了,再往小了猜\n");
} while (num != ret);
}
int main()
{
do
{
srand(time(NULL));
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
system("cls");
printf("欢迎下次游玩!!!!!\n");
Sleep(2500);
break;
default:
printf("输入错误,请输入1或者0!\n");
}
} while (input);
return 0;
}
4.goto语句
C语言中提供了可以随意滥用的goto语句和标记跳转的符号。
从理论上goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
例如:一次跳出两层或多层循环
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
goto语句真正适合的场景如下:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
...
error:
if(disaster)
//处理错误情况
下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:
一个关机程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <windows>
#include <stdlib.h>
int main()
{
char input[20] = {0};
system("shutdown -s -t 60");
again:
printf("请注意你的电脑将在一分钟内关机,如果输入“我是猪”就取消关机!------来自ywx\n\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
printf("真乖,已经为你取消关机了");
system("shutdown -a");
}
else
printf("真不乖,请再次输入");
goto again;
}
而如果不适用goto语句,则可以使用循环:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char input[20] = {0};
system("shutdown -s -t 60");
while(1)
{
printf("请注意你的电脑将在一分钟内关机,如果输入“我是猪”就取消关机!------来自ywx\n\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
printf("真乖,已经为你取消关机了");
system("shutdown -a");
break;
}
else
printf("真不乖,请再次输入");
}
}
本文含有隐藏内容,请 开通VIP 后查看