1.编写代码,演示多个字符从两端移动,向中间汇聚。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int main()
{
char arr1[] = "welcome to bit!!!";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//休眠一秒,使用时需引用#include<windows.h>
system("cls");//清空屏幕,使用时需引用#include<windows.h>
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
也可以用for循环实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "welcome to bit!!!";
char arr2[] = "#################";
int left = 0;
int right = strlen(arr1) - 1;
for (left = 0, right = strlen(arr1) - 1; left <= right; left++, right--)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//休眠一秒,使用时需引用#include<windows.h>
system("cls");//清空屏幕
}
printf("%s\n", arr2);
return 0;
}
2.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
char key;
int i = 0;
char passward[] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s", passward);
if (strcmp(passward, "abcdefg123") == 0)//比较字符是否相同
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
{
printf("三次密码均错误,已锁定");
}
return 0;
}
3.猜数字游戏
//猜数字游戏
//自动生成一个1-100之间的数字
//猜数字
//猜对了,恭喜你,游戏结束
//猜错了:猜大了,猜小了,直到猜对
//游戏一直玩,除非退出游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("********1.play********\n");
printf("********0.exit********\n");
printf("**********************\n");
}
void game()
{
int i = 0;
int g = 0;
i = rand() % 100 + 1; //随机生成1-100的数字
while (1)
{
scanf("%d", &g);
if (i == g)
{
printf("猜对了\n");
break;
}
else if (i < g)
{
printf("猜大了\n");
}
else
{
printf("猜小了\n");
}
}
}
int main()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜数字\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while (input);
return 0;
}
注意:1.使用rand函数前,需调用srand函数,否则生成的随机数不够随机,使用时添加预处理指令#include<stdlib.h>。
2.srand函数给固定值的时候,每次生成的随机值都一样,因此采用不同的参数值。时间会有对应的时间戳,随着时间的不同时间戳也会不同。
3.利用time函数获取时间戳 time函数返回的类型是time_t类型,也是一种int类型,需要强制转换成srand函数需要的无符号int类型。
4.time函数使用时添加预处理指令#include,不使用time函数的参数,令其参数为空指针NULL。
5.srand函数不用每次都重新设置,否则会导致每次产生的随机数值相差不大, 因此将该语句放入main函数。
4.使数字从小到大输出
int main()
{
int a=0,b=0,c=0,d=0;
scanf("%d %d %d", &a, &b, &c);
if (a < b && a < c)
{
if (b < c)
{
d = a;
a = c;
c = d;
}
else
{
d = a;
a = b;
b = c;
c = d;
}
}
if (b < a && b < c)
{
if (a > c)
{
d = b;
b = c;
c = b;
}
else
{
d = a;
a = c;
c = b;
b = d;
}
}
if (c < a && c < b)
{
if (a < b)
{
d = a;
a = b;
b = d;
}
}
printf("%d %d %d", a, b, c);
return 0;
}
太复杂了,优化后的代码如下
int main()
{
int temp = 0;
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
temp = a;
a = b;
b = temp;
}
if (a < c)
{
temp = a;
a = c;
c = temp;
}
if (b < c)
{
temp = b;
b = c;
c = temp;
}
printf("%d %d %d", a, b, c);
}
5.求两个数的最大公约数
int main()
{
int a = 0;
int b = 0;
int i = 0;
int j = 0;
int f1 = 0;
int f2 = 0;
int maxf = 0;
scanf("%d %d", &a, &b);
for (i = 1; i < a + 1; i++)
{
if (a % i == 0)
{
f1 = i;
}
for (j = 1; j < b+1; j++)
{
if (b % j == 0)
{
f2 = j;
}
if (f1 == f2)
{
maxf = f1;
}
}
}
printf("%d ", maxf);
return 0;
}
代码复杂,多次遍历,但是最大公约数不会大于最小值,利用这个思路优化代码,优化代码如下:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int maxf = a > b ? b: a;
while (1)
{
if (a % maxf == 0 && b % maxf == 0)
{
printf("%d和%d的最大公约数是%d", a, b, maxf);
break;
}
maxf--;
}
return 0;
}
也可以利用辗转相除法找到最大公约数
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int maxf = b;
//do
//{
/*maxf = a % b;
a = b;
b = maxf;*/
//} while (maxf);
//printf("最大公约数是%d", a);
while (maxf=a % b)
{
a = b;
b = maxf;
}
printf("最大公约数是%d", b);
return 0;
}