只要你愿意 开始总比放弃好。 Roman.
愿我们都有自己的目标并正在为其不懈努力。
---------------------------------------------------------------------------练习题
1. 计算 n 的阶乘。2. 计算 1!+2!+3!+……+10!3. 在一个有序数组中查找具体的某个数字 n 。(讲解二分查找)4. 编写代码,演示多个字符从两端移动,向中间汇聚。5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成,如果三次均输入错误,则退出程序。
--
-------------------------------------------------------------------------解答
//1. 计算 n的阶乘。
#include<stdio.h>
int main()
{
int n = 0;
printf("请任意输入一个n:\n");
scanf("%d", &n);
if (n >= 0)
{
printf("%d的阶乘结果为:\n", n);
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret *= i;
}
printf("%d\n", ret);
}
return 0;
}
//2. 计算 1!+ 2!+ 3!+ …… + 10!
#include<stdio.h>
int main()
{
int i = 0;
int sum = 0;
//方法一:两层循环
/*for (i = 1; i <= 10; i++)
{
int j = 0;
int ret = 1;
for (j = 1; j <= i; j++)
{
ret *= j;
}
sum += ret;
}*/
//方法二:单层循环
int ret = 1;//注意放在外面
for (i = 1; i <= 10; i++)
{
ret *= i;
sum += ret;
}
printf("1!+ 2!+ 3!+ …… + 10!结果为:\n");
printf("%d\n", sum);
return 0;
}
//3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)
#include<stdio.h>
#include<string.h>
int main()
{
//char ch1[] = "0,1,2,3,4,5,6,7,8,9";//但是注意此种写法后面其实还有一个\0字符!!
//printf("ch=%d ch1=%d", sizeof(ch), sizeof(ch1));
//sizeof()是求字符串长度大小,单位是字节!
//注意题干条件是有序数组
int ch[10] = { 0,1,2,3,4,5,6,7,8,9 };
int left = 0;//左下标
int right = (sizeof(ch) / sizeof(ch[0]))-1;//右下标:方法一:{ }初始化数组用sizeof
//int right=strlen(ch)-1;//右下标:方法二:用库函数,此方法适用于" "初始化数组
//printf("right=%d\n", right);
int n = 0;
printf("请输入你想要查找的数字:\n");
scanf("%d", &n);
while (left <= right)
{
//int mid = (left + right) / 2;//中间值:方法一
int mid=left+((right-left)/2);//中间值:方法二:优化
if (ch[mid] < n)
{
left++;
continue;
}
else if (ch[mid] > n)
{
right--;
continue;
}
else
{
printf("找到了!\n");
break;
}
}
if (left > right)
{
printf("找不到!\n");
}
return 0;
}
//4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
char ch[] = "hello welcome to my world!";
char ch1[] = "**************************";
int left = 0;
int right = strlen(ch) - 1;
while (left <= right)
{
ch1[left] = ch[left];
ch1[right] = ch[right];
Sleep(1000);//延迟打印,单位是毫秒,需要头文件:<windows.h>
//目标是:把所有的过程呈现在同一行上,所以引入system("cls"),需要头文件<stdlib.h>
system("cls");
printf("%s\n", ch1);
left++;
right--;
}
//如果出现最后没有任何打印的情况,在此加上一个打印即可,如下
//printf("%s\n",ch);
return 0;
}
//5. 编写代码实现,模拟用户登录情景,并且只能登录三次。
//(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#include<stdio.h>
#include<string.h>
int main()
{
char cor[] = "Xianmeng 123";//正确密码设定
char password[20] = { 0 };
int i = 0;
for (i = 0; i < 3; i++)
{
printf("请输入您的密码:\n");
//错误!
/*while (getchar() != '\n')
{
password[20] = (char) getchar();
}*/
//修正:输入带有空格的字符串
//方法一:
//scanf("%[^\n]]", password);
//方法二:
gets(password);
if (strcmp(password, cor) == 0)
{
printf("登陆成功!\n");
break;
}
else
{
if (i < 2)
{
printf("输入错误,请重新输入:\n");
}
else
{
printf("三次输入错误,退出程序!\n");
}
}
}
return 0;
}
----------------------------------------------------------注意点:
- scanf("%s") 只读取空格之前的字符串,但是 printf("%s") 可以完整打印
- 延迟打印函数: Sleep(数字);单位:毫秒,包含在头文件<windows.h>中
- 集中打印在一行上的函数:system("cls"); 包含在头文件<stdlib.h>中
- 两个字符串的比较不能用==, 应该使用库函数strcmp( str1 , str2 ) (需要使用头文件#include<string.h>) str1<str2 输出<0 str1==str2 输出==0 str1>str2 输出>0
- 注意输入含空格的字符串的两种方法:scanf("%[^\n]],数组名) 或者 gets(数组名)
------------------ 一个人所有的愤怒都来自于对自己无能的痛苦。-------------------
************************关机程序以及猜数字小游戏见下一篇博客