只要你愿意 开始总比放弃好。 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(数组名)
------------------ 一个人所有的愤怒都来自于对自己无能的痛苦。-------------------
************************关机程序以及猜数字小游戏见下一篇博客