从零开始学C语言第五天(练习)

一、计算n的阶乘

1.思路:1*2*3....*n,用变量i循环产生n个数

                需要一个变量n来确定范围

                乘积付给变量sum

2.代码

#include <stdio.h>
int main()
{
    int i=1;
    int n=0;
    int sum=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        sum=sum*i
    }
    return 0;
}

二、计算1!+.....+10!

第一种方法

1.思路:有了第一道题,我们可以求出任意n的阶乘

                可以采用循环嵌套的方式令n=1~10,再将结果相加

                注意,sum1循环完一次要归一

2.代码

#include <stdio.h>
int i=0;
int a=0;
int sum1=1;
int sum2=0;
int main()
{
    for(i=1;i<=10;i++)
    {
        sum1=1;
        for(a=1;a<=i;a++)
        {
            sum1=sum1*a;
        }
        sum2=sum1+sum2;
    }
    printf("%d",sum2);
    return 0;
}

第二种方法

1.思路:2!=1!*2        3!=2!*3....

              从1!开始求,将前面计算的利用起来

2.代码

#include <stdio.h>
int i = 1;
int sum1 = 0;
int mu = 1;
int main()
{
    for (i = 1; i <= 10; i++)
    {
        mu = mu * i;
        sum1 = sum1 + mu;
    }
    printf("%d",sum1);
    return 0;
}

三、在一个有序数组中查找某个数

第一种方法

1.思路:假设数组arr1[]={1,2,3,4,5,6,7,8,9,10},查找数字七

              可以采用遍历的方法

2.代码

int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);

int main()
{
    for (i = 0; i < sz; i++)
    {
        if (7 == arr1[i])
        {
            printf("找到了,下标是:%d",i);
            break;
        }
    }
    if(i==sz)
    printf("找不到");
    return 0;
}

第二种方法

1.思路:二分查找(有序数组才能使用)

2.代码

int main()
{
    int k = 7;
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int i = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    
    while (left<=right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] == k)
        {
            printf("找到了");
            break;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
        
      
    }
    if (left > right)
    {
        printf("找不到");
    }
    return 0;
}

四、编写代码,演示多个字符从两端移动,向中间汇聚。

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
int main()
{	
	char arr1[] = {"**********"};
	char arr2[] = {"hello qiul"};
	int left = 0;
	int right = strlen(arr1) - 1;;//sizeof(arr[1])-2
	while (left<=right)
	{
		arr1[left] = arr2[left];
		arr1[right] = arr2[right];
		printf("%s\n", arr1);
		Sleep(1000);
		//清空屏幕
		system("cls");
		left++;
		right--;
	}
	printf("%s\n", arr1);
	return 0;
}

sleep函数:Sleep(1000)间隔几毫秒,使用需要引入头文件<windows.h>

system("cls")        清空屏幕        使用需要引入头文件<stdlib.h>

五、模拟登陆界面

编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成公,如果三次均输入错误,则退出程序。

#include <string.h>
#include <stdio.h>
int main()
{	
	int i = 0;
	char mima[] = { "abcdef" };
	char password[] = {"0"};
	while (i<3)
	{
		printf("请输入密码:<");
		scanf("%s", password);//数组名包含地址
		if (strcmp(mima,password)==0)//比较舒服是否相等不能用==,要用strcmp库函数,返回值为0说明相等
		{
			printf("登陆成功");
			break;
		}
		else
		{
			printf("密码错误");
			i++;
		}
	}
	if (3==i)
	{
		printf("退出程序");
	}
	return 0;
}

六、猜数游戏

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*******1.开始游戏************\n");
	printf("*******2.结束游戏************\n");
	printf("*****************************\n");
	printf("*****************************\n");
	printf("*****************************\n");
}
void game()
{
	int ret = rand()%100+1;
	printf("请猜数一个1-100的数字\n");
	int b = 0;
	while (1)
	{
		scanf("%d", &b);
		if (b == ret)
		{
			printf("恭喜你猜对了,是否继续游戏\n");
			break;
		}
		else if (b > ret)
		{
			printf("大了\n");
		}
		else
		{
			printf("小了\n");
		}
	}
}
int main()
{	
	srand((unsigned int)time(NULL));
	int a = 0;
	do
	{
		menu();
		int sum = rand();
		scanf("%d",&a);
		if (1==a)
		{
			game();
		}
		else if(2==a)
		{
			printf("退出游戏");
			break;
		}
		else
		{
			printf("请重新选择\n");
			
		}
	} while (a);
	return 0;
}

七、关机程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char input[20] = { 0 };
	system("shutdown - s - t60");
again:
	printf("注意!!!请输入:我是猪 否则你的电脑将在60内关机");
	scanf("%s",input);
	if (strcmp("我是猪",input)==0)
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

  • 43
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值