c语言实现的小程序
1.编写代码实现,模拟用户登录情景,并且只能登录三次,只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char password[] = "123456";
char input[10] = {0};
int i = 0;
for (i = 0; i < 3; i++)//只允许最多输出三次密码
{
printf("请输入密码:>");
scanf("%s",input);
if (strcmp(password,input) == 0)//密码输入正确
{
printf("登录成功\n");
break;
}
}
if (i == 3)//如果条件成立,说明三次密码均输入错误
{
printf("登录失败\n");
exit(1);
}
printf("取钱\n");
system("pause");
return 0;
}
登录失败的结果截图:
登录成功的结果截图:
2.求n!
第一种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int Factorial(int n)
{
int i = 1;
int ret = 1;
for (; i <= n; i++)
{
ret *= i;
}
return ret;
}
int main()
{
int num = 0;
printf("Please Enter a Number:>");
scanf("%d",&num);
printf("result = %d",Factorial(num));
system("pause");
return 0;
}
第二种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//使用迭代方法
int factorial(int num)
{
int result = 1;
while (num > 1)
{
result *= num;//从num开始乘
num--;
}
return result;
}
int main()
{
int num = 0;
printf("请输入一个数:>");
scanf("%d",&num);
printf("result = %d",factorial(num));
system("pause");
return 0;
}
结果截图:
3.求1!+2!+3!+…+10!的结果。
第一种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i=1;
int j=1;
int ret=1;
int sum=0;
for(j=1;j<=10;j++)
{
ret=1;
for(i=1;i<=j;i++)
{
ret=ret*i;
}
sum=sum+ret;
}
printf("10!=%d\n",sum);
system("pause");
return 0;
}
这种方法虽然可以运行出结果,但是程序的效率低下,因为每次执行一个数的阶乘时都是从一开始进行的,而不是运用上次的结果继续向下继续运算,比如,执行4的阶乘时可以运用上次循环3的阶乘,直接在上次的结果上面乘以4就可以了
优化后的程序为:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
int Add_Factorial(int n)
{
int sum = 1;
int i =1;
int ret = 1;
for (i = 2; i <= n; i++)//加至n
{
ret *= i;//每次在前一个数阶乘的基础上再乘以i
sum += ret;//前i个数的和
}
return sum;
}
int main()
{
int num = 0;
printf("Please Enter a Number:>");
scanf("%d",&num);
printf("result = %d\n",Add_Factorial(num));
system("pause");
return 0;
}
运算的结果截图如下:
4.利用二分法查看数组中的某个数字:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int i=0,input=0;
int left=0;
int right=sizeof(arr)/sizeof(arr[0])-1;
int mid=0;
printf("请输入要查找的数字:");
scanf("%d",&input);
while(left <= right)
{
mid = left + (right - left)/2;
if(input > arr[mid] )
{
left = mid + 1;
}
else if(input < mid)
{
right = mid - 1;
}
else
{
printf("找到了,它的下标是:%d",mid);
break;
}
}
if(left>right)
{
printf("没找到\n");
}
return 0;
}
第二种方法(封装为函数后的程序):
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void Find_Num( int *parr,int len, int key)
{
int left = 0;
int right = len;
int mid = 0 ;
assert(parr);//检查指针是否为空
assert(len > 0);
while (left <= right)
{
mid = (right - left)/2 +left;//中间数的下标
if (key > parr[mid])//中间数大于要查找的数
{
left = mid +1; //更改左下标
}
else if(key < parr[mid])//中间数小于要查找的数
{
right = mid - 1;//更改右下标
}
else
{
printf("找到了,它的下标是:%d",mid);
break;
}
}
if(left > right)
{
printf("没找到\n");
}
}
int main()
{
int input = 0;
int arr[] = {0,1,2,3,4,5,6,7,8};//在有序的一组数中查找
printf("请输入要查找的数字:");
scanf("%d",&input);
Find_Num( arr,sizeof(arr)/sizeof(int) - 1,input);
system("pause");
return 0;
}
5.猜数字游戏:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<time.h>
void menu()
{
printf("*************************\n");
printf("*****1.play 0.exit*****\n");
printf("*************************\n");
}
void game()
{
int key = rand()%100;
int input = 0;
while (1)
{
printf("请输入要猜的数字:>");
scanf("%d",&input);
if (input > key)
{
printf("猜大了\n");
}
else if(input < key)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int choose = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d",&choose);
switch (choose)
{
case 0:
exit(1);
break;
case 1:
game();
break;
default:
printf("输入无效,请重新选择>\n");
break;
}
}
while (choose);
system("pause");
return 0;
}
结果截图如下:
此次是本人第一次写博客,写的有什么问题还希望大家可以不吝赐教