每日一C:新手作业日常

  • 2017-10-26
  • 114
  • 2

题目:

由小伟修改,有错误欢迎指点.Thanks♪(・ω・)ノ

/* 仅适用于Windows环境 2017-10-26 */
#include <stdio.h>
#include <conio.h>      /* getch函数 */
#include <stdlib.h>     /* exit	函数 */
#include <time.h>       /* 获取当前系统时间(UTC时间)的time_t值,以秒为单位 */
#include <string.h>     /* strcat函数 */

int menu();             /* 菜单		函数 */


int FinishNum();        /* 完数计	函数 */


int ChouQian();         /* 抽签系统	函数 */


int Shutdown();         /* 关机		函数 */


int p;					//存放getch获取的按键 

int main( void )
{
	int i;											//存放子菜单函数的返回值 
	while ( 1 )
	{
		i = menu();                                 /* 调用菜单 */
		switch ( i )
		{
		/* 完数 */
		case (1):
		{
			for ( p = 0;; )                         /* 将p初始化为0,并进入死循环 */
			{
				p = FinishNum();
				if ( p == 81 || p == 27 )           /* 发现esc或者q按键, 退出循环 */
					break;
			}
			break;
		};
		/* 抽奖 */
		case (2):
		{
			for ( p = 0;; )
			{
				p = ChouQian();
				if ( p == 81 || p == 27 )
					break;
			}
			break;
		}
		/* 关机 */
		case (3):
		{
			for ( p = 0;; )
			{
				p = Shutdown();
				if ( p == 81 || p == 27 )       /* 发现esc或者q按键, 退出循环 */
					break;
			}
		}
		}
		//退出程序 
		if ( p == 27 )
			exit( 1 );                              /* 检测到esc按键,退出程序 */
		system( "cls" );                            /* 清屏 */
	}
	return(0);
}


/********输出菜单 **********
 * *返回值:整型 i
 */
int menu()
{
	int i;
	printf( "*****************这是一个基于菜单驱动技术实现具有三个功能的程序*****************\n" );
	printf( "\n\t\t\t\t\t\t\t\t制作者:刘佳乐\n" );
	printf( "-------------------------------------------------------------------------------\n" );
	printf( "1.判断完数\n" );
	printf( "2.随机抽签\n" );
	printf( "3.定时关机\n" );
	printf( "请输入数字来选择你需要的功能:" );
	scanf( "%d", &i );
	if ( i != 1 && i != 2 && i != 3 )       /* 判断是否超范围 */
	{
		printf( "\n非法操作,重启输入:" );
		while ( getchar() != '\n' )
			;                       		/* 清空乱七八糟的字符 */
		scanf( "%d", &i );
	}
	while ( getchar() != '\n' );             /* 这里还是要清空一下 多余字符 */
	return(i);
}


/* 完数函数 */
int FinishNum()
{
	int	p;      /* 返回值 */
	int	i, j, count = 0;
	int	n1=0, n2=0, s = 0;
	printf( "\n请输入两个数表示范围,中间用逗号隔开\n" );
	scanf( "%d,%d", &n1, &n2 );
	while(n2==0){
		while ( getchar() != '\n' );		 /* 清空乱七八糟的字符 */
		printf( "\n范围错误,请重新输入,中间用逗号隔开\n" );
		scanf( "%d,%d", &n1, &n2 );
	}
	for ( i = n1; i < n2; i++ )
	{
		s = 0;  /* s是用来判断当前i是否为完数,所以每次开始要置为零 */
		for ( j = 1; j < i; j++ )
		{
			if ( i % j == 0 )
				s += j;
		}

		if ( s == i )
		{
			printf( "%d为完数\t", i ); /* 把输出的数用制表符隔开 */
			count++;
		}
	}
	printf( "\n完数个数为%d个\n", count );
	printf( "按任意键继续,按Esc键退出程序,按Q返回主菜单\n" );
	getchar();
	p = getch();
	if ( p == 113 )
		p = 81;  /* q转换为Q */
	return(p);
}


/* 抽签函数 */
int ChouQian()
{
	int	class_num	= 0;
	int	stu_num		= 0;

	srand( time( NULL ) + rand() ); /* 制作伪随机数字,防止同一秒同数字,每次运行的时候,起始种子都不一样 */
	class_num = rand() % 3;
	if ( class_num == 0 )
		class_num = 1;
	if ( class_num == 2 )
		class_num = 3;
	while ( 1 )
	{
		switch ( class_num )
		{
		case 1: stu_num = rand() % (66 - 1) + 1; break;
		case 3: stu_num = rand() % (33 - 1) + 1; break;
		}
		if ( stu_num != 0 )
		{
			break;
		}
	}
	printf( "\n恭喜%d班%d号同学\n", class_num, stu_num );
	printf( "按任意键继续,按Esc键退出程序,按Q返回主菜单\n" );
	p = getch();
	if ( p == 113 )
		p = 81;  /* q转换为Q */
	return(p);
}


/* 关机函数 */
int Shutdown()
{
	char	cmd[20] = "shutdown -s -t ";
	char	t[5]	= "0";
	char	c;
	system( "cls" );
	system( "title C语言关机程序" );              /* 设置cmd窗口标题 */
	system( "color f0" );                		   /* 可以写成 red 调出颜色组 */
	system( "date /T" );
	system( "TIME /T" );

	printf( "----------- C语言关机程序 -----------\n" );
	printf( "1.实现10分钟内的定时关闭计算机\n" );
	printf( "2.立即关闭计算机\n" );
	printf( "3.注销计算机\n" );
	printf( "4.按Esc键退出程序,按Q返回主菜单\n" );
	printf( "-------------------------------------\n" );
	c = getch();
	switch ( c )
	{
	case '1':
		printf( "您想在多少秒后自动关闭计算机?(0~600)\n" );
		scanf( "%s", t );
		system( strcat( cmd, t ) );
		break;
	case '2':
		system( "shutdown -p" );
		break;
	case '3':
		system( "shutdown -l" );
		break;
	case '4':
		break;
	default:
		printf( "输入错误\n" );
	}

	printf( "再次按Esc键退出程序,按Q返回主菜单\n" );
	p = getch();
	if ( p == 113 )
		p = 81;  /* q转换为Q */
	return(p);
}

 

  1. 2016:  一張貓咪被踹瞬間奇蹟照 背景竟然比主角搶戲! (0)
  2. 2016:  亲路人的猫咪(0)

评论

  • 南侠回复
    UC Browser 11 UC Browser 11 iPhone iOS 10.3.3 iPhone iOS 10.3.3

    多个printf可以合为一个……

    • Waylee回复
      Google Chrome 62 Google Chrome 62 Windows 10 Windows 10

      这倒是可以,不过,分开更加清晰。

发表评论