C语言习题:(编译环境为:VS2013)
1.完成猜数字游戏。
2.写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)
3.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序。
4.编写一个程序,可以一直接收键盘字符,
如果是小写字符就输出对应的大写字符,
如果接收的是大写字符,就输出对应的小写字符,
如果是数字不输出。
今天的代码中我们要用到的新的函数:
1:strcmp字符串比较函数,
要使用此函数,在头文件中我们就要加上#include <string.h>,然后我们就可以具体调用这个库中的一些函数了,比如strcmp,strlen,strcpy等等,我们用到了strcmp,关于这个函数的用法,请大家参考这里,在我们学习过程中最好是在这种权威的网站上查找自己不会的东西.
2:time函数
下文有具体解释
下面是几道题的代码以及要注意的点:
1.完成猜数字游戏。
这道题我们的基本思想是:
1.搞一个入口菜单(开始游戏/结束游戏)
2.生成一个随机数
3.进行一局具体的游戏
注意:在进行选择的时候并不推荐大家使用switch语句,因为switch语句比较复杂容易出错.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int menu()
{
printf("*********************************\n");
printf("************1.开始游戏************\n");
printf("************0.退出游戏************\n");
printf("*********************************\n");
int choice = 0;
printf("请输入您的选择:\n");
scanf("%d", &choice);
return choice;
}
void start()
{
int sj = 0; //生成一个随机数
int count = 1;
sj = rand() % 100 + 1;
while (count)
{
printf("请输入一个数[1-100]\n");
int c = 0; //输入一个自己猜的数
scanf("%d", &c);
if (c > sj)
{
printf("猜大了\n");
}
else if (c < sj)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了^_^\n");
break;
}
}
}
int main()
{
//搞一个入口菜单(开始游戏/结束游戏)
//生成一个随机数
//进行一局具体的游戏
while (1)
{
int xz = menu();
if (xz == 1)
{
start();
}
else
{
printf("再见^_^\n");
break;
}
}
system("pause");
return 0;
}
代码在这里,可是当这个代码运行后,我们可以发现,当开始一局新的游戏的时候,你输入上一次猜中的结果,他会直接显示猜中了,所以这个代码他是不严谨的,他会记录住你上次生成的那个随机数,所以我们要在代码中间加一行代码,即srand((unsigned int )time(0)); 它是一个种子,这时候你发现你输入上次猜中的那个结果后,它不会直接提示你输入正确了,那么要用到这句代码我们要注意两点:
1)要在time前面加上(unsigned int),这是因为time函数返回的是time_t , time_t其实是一个unsigned long long 的一个typedef,
换句话说,time_t其实是一个8个字节的无符号整数,但是srand生成的是一个4个字节的无符号整数,所以我们要把time_t强制转换成一个4个字节的无符号整数.
2)要使用time函数我们就得在头文件中加上#include <time.h>
修改后的代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int menu()
{
printf("*********************************\n");
printf("************1.开始游戏************\n");
printf("************0.退出游戏************\n");
printf("*********************************\n");
int choice = 0;
printf("请输入您的选择:\n");
scanf("%d", &choice);
return choice;
}
void start()
{
int sj = 0; //生成一个随机数
int count = 1;
sj = rand() % 100 + 1;
while (count)
{
printf("请输入一个数[1-100]\n");
int c = 0; //输入一个自己猜的数
scanf("%d", &c);
if (c > sj)
{
printf("猜大了\n");
}
else if (c < sj)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了^_^\n");
break;
}
}
}
int main()
{
//搞一个入口菜单(开始游戏/结束游戏)
//生成一个随机数
//进行一局具体的游戏
srand((unsigned int )time(NULL));
while (1)
{
int xz = menu();
if (xz == 1)
{
start();
}
else
{
printf("再见^_^\n");
break;
}
}
system("pause");
return 0;
}
这样的话这个程序就可以正确运行了.
2.写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
这道题是一道相对简单的题,要注意的有:
1)使用折半查找也叫二分查找,就是先比较最中间的数,然后决定往左边走还是往右边走,直到比较完为之.
2)当区间发生变化的时候,我们可以给mid+1或者-1,是因为,我们用的是闭区间,当mid已经比过之后我们就不用它上次所存的那个数了,所以给它加一或者减一来确定新的区间.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int serch()
{
int a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
int number;
int L = 0, R = 10, M = 0;
printf("请输入要查找的数:");
scanf("%d", &number);
while (L <= R)
{
M = L + (R - L) / 2;
if (a[M] == number)
{
return M;
}
else if (a[M] > number)
{
R = M - 1;
}
else if (a[M] < number)
{
L = M + 1;
}
}
return -1;
}
int main()
{
int x = 0;
x = serch();
if (x != -1)
{
printf("找到了,下标为%d\n",x);
}
else
{
printf("找不到\n");
}
system("pause");
return 0;
}
3.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序。
这个程序要注意的函数strcmp在开头已经提到.
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[10] = {0};
for (int i = 1; i < 4; ++i)
{
printf("please input the password:\n");
scanf("%s", str);
if (strcmp(str, "q123456") == 0)
{
printf("Log in\n");
break;
}
if (i == 3)
{
printf("three incorrect input,exit");
}
}
printf("\n");
system("pause");
return 0;
}
4.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
这个程序要注意的就是:
1)大小写的转换,小写转换成大写-32,大写转换小写+32,那么在这里其实是Ascll码的转换.点这里可以查看Ascll表
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
char c;
int t;
while ((c = getchar()) != EOF)
{
if (c >= 'a'&& c <= 'z')
{
t = c - 32;
printf("%c\n", t);
}
if (c >= 'A'&& c <= 'Z')
{
t = c + 32;
printf("%c\n", t);
}
}
system("pause");
return 0;
}