天津建网站的公司/论坛优化seo
文章目录
- 前言
- 一、计算 n的阶乘。
- 二、计算 1!+2!+3!+……+10!
- 三、在一个有序数组中查找具体的某个数字key。(二分查找)
- 四、编写代码,演示多个字符从两端移动,向中间汇聚。
- 五、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
- 六、猜数字游戏
前言
主要有以下几道练习题,使用C语言实现它们。
1. 计算 n的阶乘。
2. 计算 1!+2!+3!+……+10!
3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
6.设计一个猜数字游戏。
要求:
随机产生一个1-100的数字,然后你来猜。
a.猜对了:恭喜你!
b.猜错了,告诉你猜大了还是猜小了,继续猜。
c.玩完一把可以选择继续游戏,直到退出游戏。
提示:以下是本篇文章正文内容,下面案例可供参考
一、计算 n的阶乘。
//1.输入一个数,计算其阶乘
int main()
{int n = 0;int i = 0; int val = 1;scanf("%d",&n);for (i = n; i > 0; i--){val *= i;}printf("%d\n",val);}
二、计算 1!+2!+3!+……+10!
代码如下(示例):
//2.计算1!+2!+...+10!
//方法一:两层循环
int main()
{int i = 0;int j = 0;int val = 1;int sum = 0;for (j = 1; j < 11; j++){for (i = j; i > 0; i--){val *= i;}sum += val;val = 1;//注意这里需要对val初始化,否则将在小循环中继续使用上一次的阶乘值,导致结果不对}printf("%d\n", sum);
}
//2.计算1!+2!+...+10!
//方法二:一层循环
int main()
{int j = 0;int val = 1;int sum = 0;for (j = 1; j < 11; j++){val *= j;sum += val;}printf("%d\n", sum);
}
三、在一个有序数组中查找具体的某个数字key。(二分查找)
3.在一个有序数组中查找具体的某个数字n。(讲解二分查找)
二分法查找(折半算法)
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int key = 0;int len = sizeof(arr)/sizeof(arr[0]);//数组长度/数组内一个元素长度=数组元素个数int left = 0;int right = len - 1;printf("请输入您要查找的数字:");scanf("%d", &key);while (left <= right){int mid = (left + right) / 2;if (arr[mid] > key){right = mid - 1;}else if (arr[mid] < key){left = mid + 1;}else{printf("找到了,这个数字的下标是:%d\n", mid);break;}}if (left > right){printf("没有这个数字!查找失败!");}return 0;
}
四、编写代码,演示多个字符从两端移动,向中间汇聚。
4. 编写代码,演示多个字符从两端移动,向中间汇聚。int main()
{char arr1[] = "welcome to bit...";char arr2[] = "#################";int left = 0;int right = strlen(arr1) - 1;printf("%s\n", arr2);//while循环实现while (left <= right){Sleep(200);//延迟函数,在windows.h中。单位毫秒。arr2[left] = arr1[left];arr2[right] = arr1[right];system("cls");left++;right--;printf("%s\n", arr2);}//for循环实现for (left = 0, right = strlen(arr1) - 1;left <= right;left++, right--){Sleep(200);arr2[left] = arr1[left];arr2[right] = arr1[right];printf("%s\n", arr2);}return 0;
}
五、编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。
(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。int main()
{int i = 0;char password[20] = " ";for (i = 0; i < 3; i++){printf("请输入密码:>>");scanf("%s", password);//数组名本身就是地址,因此此处输入时不需要取地址符号if ((strcmp(password, "123456")) == 0)//strcmp()函数,比较两个字符串是否相等,如果相等则返回0{printf("密码正确!登录成功!\n");break;}else{printf("密码错误,请重新输入!\n");}}if (3 == i){printf("三次密码输入错误,退出程序!");}return 0;
}
注意:对比两个字符串是否相同,千万不可直接比较,比如此代码中:if(password == “123456”)这种表示方法是错误的!!!
必须使用strcmp()函数来比较。
六、猜数字游戏
//6.猜数字游戏:
// 随机产生一个1-100的数字,然后你来猜
// a.猜对了:恭喜你!
// b.猜错了,告诉你猜大了还是猜小了,继续猜。
// c.玩完一把可以选择继续游戏,直到退出游戏。void menu()
{printf("**********WELCOME!!!***********\n");printf("*******************************\n");printf("***********1.play**************\n");printf("***********0.exit**************\n");printf("*******************************\n");
}
void game()
{int randNum = rand() % 100 + 1;//rand()函数返回一个0-32767之间的随机数字。//取模100就生成了0-99之间的数字,再+1就是0-100的随机数。printf("随机数字已生成,请输入你的猜想:");int myNum = 0;while (myNum != randNum){scanf("%d", &myNum);if (myNum > randNum){printf("猜大了!!!重新猜吧\n");}else if(myNum < randNum){printf("猜小了!!!重新猜吧\n");}}printf("恭喜你!猜对了!\n");printf("正确答案就是:%d\n",randNum);}int main()
{int input = 0;srand((unsigned)time(NULL));//因为rand()函数需要srand()给它一个随机数种子,才能每次运行程序生成不一样的随机数。//此处如果设置为一个固定的数比如srand(100),则生成的随机数永远相同。//为了给出一个随机数种子,我们使用时间戳,即time()函数(在time.h文件中),该函数返回当前时间戳转换成的一个数字,随着时间不同,该数值一直变化。do{menu();printf("是否开始游戏>>>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("游戏退出");break;}} while (input);
}
注意:
1.rand()函数返回一个0-32767之间的随机数字。取模100就生成了0-99之间的数字,再+1就是0-100的随机数。
2.因为rand()函数需要srand()给它一个随机数种子,才能每次运行程序生成不一样的随机数。
此处如果设置为一个固定的数比如srand(100),则生成的随机数永远相同。
为了给出一个随机数种子,我们使用时间戳,即time()函数(在time.h文件中),该函数返回当前时间戳转换成的一个数字,随着时间不同,该数值一直变化。