1、用sleep延时刷新并获取系统时间来显示。
2、例程:
#include<graphicsh>#include<mathh>
#include<dosh>
#define PI 31415926
//屏幕中心的坐标(640X480模式下)
#define mid_x 320
#define mid_y 240
int main()
{ int graphdriver=DETECT,graphmode;
int end_x,end_y;
struct time curtime;
float th_hour,th_min,th_sec;
initgraph(&graphdriver,&graphmode,"C:\\TC2"); //初始化VGA屏幕模式
setbkcolor(BLACK); //使用黑色的背景色
while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序
{ setcolor(GREEN); //把画笔设为绿色
circle(mid_x,mid_y,180); //钟的外圆
circle(mid_x,mid_y,150); //钟的内圆
circle(mid_x,mid_y,1); //画出钟的圆心
gettime(&curtime); //取得系统当前时间
th_sec=(float)curtimeti_sec01047197551; //把秒针的角度化为弧度,为以后绘制时方便,下同
th_min=(float)curtimeti_min01047197551+th_sec/600; //分针的弧度
th_hour=(float)curtimeti_hour05235987755+th_min/120; //时度的弧度,注意整时是12等分的,所时乘的是314/1805
//计算出时针的尾的坐标(时针长70)
end_x=mid_x+70sin(th_hour);
end_y=mid_y-70cos(th_hour);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //用红色线画出时针
//计算出分针坐标(分针长110)
end_x=mid_x+110sin(th_min);
end_y=mid_y-110cos(th_min);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //用红色画出分针
end_x=mid_x+140sin(th_sec);
end_y=mid_y-140cos(th_sec);
setcolor(RED);
line(mid_x,mid_y,end_x,end_y); //同上,画出秒针,长为140
//画出钟盘上的刻度,刻度长20
line(140,240,160,240); //9点对应的大刻度
line(320,60,320,80); //12点对应的大刻度
line(500,240,480,240); //3点的刻度
line(320,420,320,400); //6点的刻度
line(410,3957,400,3784); //5点
line(4757,330,4584,320); //4点
line(4757,150,4584,160); //2点
line(410,843,400,1016); //1点
line(230,843,240,1016); //11点
line(1643,150,1816,160); //10点
line(1643,330,1816,320); //8点
line(230,3957,240,3784); //7点
sleep(BLUE); //这里应该是打错,停止一秒,应为sleep(1000)
cleardevice(); //清除屏幕上的显示
}
closegraph(); //关闭VGA屏幕,即返回文本方式
return 0;
}
#include <stdioh>
#include <stringh> //字符串库
#include <timeh> //时间库
//开发游戏开始界面。
void InitGameDisplay()
{
printf("================================欢迎您进入游戏================================");
printf("||");
printf("| 游戏规则 |");
printf("| 选择1代表剪刀、选择2代表石头、选择3代表布 |");
printf("| 1°用户首先选择一个1~3的整数 |");
printf("| 2°电脑会随机从1~3选择一个整数 |");
printf("| 3°由剪刀>布>石头>剪刀作出结果 |");
printf("| |");
printf("| Author: 刘超 |");
printf(" instructor:刘国柱 |");
printf("||");
}
//开发游戏结束界面。
void EndGameDisplay()
{
printf("||");
printf("| |");
printf("| GAME OVER |");
printf("| |");
printf("| 欢迎下次使用! |");
printf("| QQ:2542872403 |");
printf("||");
}
//计算机出牌(数字牌)
//输入: 无
//返回数值: 数字牌 (1,2,3)
int ComputerCreateNumberCard()
{
return time(NULL)%3+1;
}
//把用户与计算机产生的数字牌转化为文字牌
//输入: 数字牌(计算机或者用户: eg 1, 2,3)
//输出: 文字牌(“剪刀”,“石头”,“布”)
//返回数值: 无
void ConvertNumberToWord(int intNumberCard, char charWord[])
{
if(intNumberCard==1)
{
strcpy(charWord,"剪子"); //字符串赋值
}else if(intNumberCard==2)
{
strcpy(charWord,"石头");
}else if(intNumberCard==3)
{
strcpy(charWord,"布");
}
}
//判断胜负
//输入: 用户的数字牌
// 计算机产生的数字牌
//输出: 结果字符串 (“计赢”,“用赢”,“平”)
//返回数值: 无
//
//判断原理:
// 计算机 用户 判断结果
// 1 1 平
// 1 2 用赢
// 1 3 计赢
// 2 1 计赢
// 2 2 平
// 2 3 用赢
// 3 1 用赢
// 3 2 计赢
// 3 3 平
void JudgeWiner(int intUserNumberCard,int intComputerNumberCard,char charWiner[])
{
if(intUserNumberCard==intComputerNumberCard)
{
strcpy(charWiner,"平");
}else{
if(intComputerNumberCard==1 && intUserNumberCard==3)
{
strcpy(charWiner,"输");
}else if(intComputerNumberCard==1 && intUserNumberCard==2)
{
strcpy(charWiner,"赢");
}else if(intComputerNumberCard==2 && intUserNumberCard==3 )
{
strcpy(charWiner,"赢");
}else if(intComputerNumberCard==2 && intUserNumberCard==1 )
{
strcpy(charWiner,"输");
}else if(intComputerNumberCard==3 && intUserNumberCard==2 )
{
strcpy(charWiner,"输");
}else if(intComputerNumberCard==3 && intUserNumberCard==1 )
{
strcpy(charWiner,"赢");
}
}
}//JudgeWiner_end
void main()
{
int intUseNumCard; //用户出的数字牌
int intComputerNumCard; //计算机出的数字牌
char charWiner[100]; //判断结果
int n,m,number1,number2;
//1: 开发游戏开始界面。
InitGameDisplay();
int num[3] = {0}; //用于计数
printf("\n请从1,2,3中选择一个数字");
while(num[1]+num[2]+num[0] !=3)
{
while(true)
{
//2: 用户出牌。
printf("请劳驾出牌\n");
scanf("%d",&intUseNumCard);
if(intUseNumCard>=1 && intUseNumCard<=3)
{
break;
}else{
printf("输入错误,请重新输入!\n");
}
}
//3: 计算机出牌
intComputerNumCard=ComputerCreateNumberCard();
//31) 把用户与计算机产生的数字牌转化为文字牌
char CharUseTextCard[6];
char CharComputerTextCard[6];
ConvertNumberToWord(intUseNumCard,CharUseTextCard);
ConvertNumberToWord(intComputerNumCard,CharComputerTextCard);
printf("您出的牌是 %s,计算机出的牌是 %s\n",CharUseTextCard,CharComputerTextCard);
//4: 判断胜负
JudgeWiner(intUseNumCard,intComputerNumCard,charWiner);
//显示
if(strcmp(charWiner,"平")==0)
{
printf("%s=%s结果: 平!!\n",CharUseTextCard,CharComputerTextCard);
num[0]++;
}else if(strcmp(charWiner,"赢")==0){
printf("%s>%s结果: 赢!\n",CharUseTextCard,CharComputerTextCard);
num[1]++;
}else if(strcmp(charWiner,"输")==0){
printf("%s<%s结果: 输!\n",CharUseTextCard,CharComputerTextCard);
num[2]++;
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
}//while_end
printf("一共进行了3局比赛,你赢了%d局,计算机赢了%d局,平局%d次\n",num[1],num[2],num[0]);
//6: 游戏结束界面。
EndGameDisplay();
}
1
连接实验电路并检查无误。
带进位运算实验接线图
2
打开电源开关。
3
用输入开关向暂存器DR1和DR2置数,方法与344相同:
a)
用输入开关向暂存器DR1置数:
拨动输入开关形成二进制数01100101(或其它数值)。(数据显示灯亮为0,灭为1)。
使SWITCHUNIT单元中的开关SW-B=0(打开数据输入三态门)、
ALU-B=1(关闭ALU输出三态门)、
《计算机组成原理》实验报告正文用纸
2
LDDR1=1、LDDR2=0。
按动微动开关KK2,则将二进制数01100101置入DR1中。
b)
用输入开关向暂存器DR2置数。
拨动输入开关形成二进制数10100111(或其它数值)。
SW-B=0、ALU-B=1保持不变,
改变LDDR1、LDDR2:使LDDR1=0、LDDR2=1,
按动微动开关KK2,则将二进制数10100111置入DR2中。
4
关闭数据输入三态门(SW-B=1),
打开ALU输出三态门(ALU-B=0),
使LDDR1=0、LDDR2=0,关闭寄存器。
5
对进位标志清零:CLR=1→0→1(每次计算前都要对进位标志清零,实验板
上“SWITCH
UNIT”单元中的CLR开关为标志CY、ZI的清零开关,它为零时是清零状态,所以将此开关做1→0→1 *** 作,即可使标志位清零)。
注意:
本实验中运算结果是否产生进位、结果是否为0是根据进位指示灯CY和零标志指示灯ZI的状态来判断的。
进位标志指示灯CY亮(cy=0)时表示进位标志为假[此时运算没有产生进位];标志指示灯CY灭(cy=1)时表示进位标志为真[此时运算产生了进位]。
零标志指示灯ZI灯亮时表示零标志为假[此时运算结果不为“0”],灯灭时表示零标志为真[此时运算结果为“0”]。
6
验证带进位运算及进位锁存功能。
置Cn=1、AR=0,然后进行带进位算术运算:
例如做加法运算,使ALU-B=0,S3、S2、S1、S0、M和状态依次为1、0、0、1、0,此时数据总线上显示的数据为DR1加DR2加当前进位标志的和,但此时的进位状态位还没有打入进位锁存器中(它是要靠T4节拍来打入的)。这个结果是否有进位产生,则要按动微动开关KK2,若进位标灯亮,则无进位,反之则有进位。因为做加法运算时,数据总线一直显示的数据为DR1+DR2+CY,所以当有进位输入到进位锁存器后,总线显示的数据将为加上当前进位锁存器中锁存的进位的结果。
以上就是关于用c语言模拟一个数字时钟,要求延时一秒运行全部的内容,包括:用c语言模拟一个数字时钟,要求延时一秒运行、编写一个C程序,模拟一个“剪刀、石头、布”的游戏、c语言模拟加法及进位控制实验等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)