C语言编程:10以内加减法,根据输入题数出题,判断做题是否正确,最后计算分数。

C语言编程:10以内加减法,根据输入题数出题,判断做题是否正确,最后计算分数。,第1张

#include<stdioh>

#include<stdlibh>

#include<timeh>

#define SWAP(a,b,c) (c)=(a);(a)=(b);(b)=(c);

void main()

{

int i,n,fen=0,p;

int a,b,num;

printf("你要几道题");

scanf("%d",&n);

srand(time(NULL));

for(i=0;i<n;i++)

{ a=rand()%10+1;

b=rand()%10+1;

if(p){p=0;

printf("%d + %d = ",a,b);

scanf("%d",&num);

if(num==a+b)fen++;

}

else

{ p=1;

if(a<b)SWAP(a,b,p);

printf("%d - %d = ",a,b);

scanf("%d",&num);

if(num==a-b)fen++;

}

}

printf("总分 %d,得分%d ",n,fen);

}

#include<reg51h>

#include<INTRINSh>

#define u16 unsigned int

#define u8 unsigned char

sbit k1=P1^0;//加1

sbit k2=P1^1;//加2

sbit k3=P1^2;//加3

sbit k4=P1^3;//减1

sbit k5=P1^4;//连按2下开始或停止计时,按下该键再按加减分键给另一边加分

sbit bz=P1^6; //按按键时响,不按不响

sbit led=P1^5;//创新能力不够没想到在哪加

u8 key=0xff;//消抖后的有效按键值

u8 key_down=0x00;//按键下降沿扫描结果,1有效

u8 key_up=0x00;  //上升沿扫描结果,1有效

u8 key_sc=0xff;//上次扫描的按键值

//按键扫描程序

void scanKey(){

static u8 temp0;

static u8 ms;

u8 temp=0xff;

if(k1==0)temp&=0xfe;

if(k2==0)temp&=0xfd;

if(k3==0)temp&=0xfb;

if(k4==0)temp&=0xf7;

if(k5==0)temp&=0xef;

if(temp==temp0){// 按键消抖

if(++ms>=5){//连续5次扫描的值一样,则认为是稳定状态

key=temp;

ms=0;

}

}else {

temp0=temp;

ms=0;

}

key_down=key_sc&(~key);//下降沿扫描

key_up=(~key_sc)&key;//下降沿扫描

key_sc=key;

}

u8 readPIN(u8 port,u8 pin){

code u8 tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};

    return ((port&tab[pin])==00:1);

}

sbit dx=P3^2;

u8 ds[8]; //数码管显示缓存

code u8 w[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80,}; //位码

code u8 d[]={~0xc0,~0xf9,~0xa4,~0xb0,~0x99,~0x92,~0x82,~0xf8,~0x80,~0x90,0x00};//断码

code u8 d_huo[]={0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x00,};

void dispaly(){//显示函数

static u8 a;

if(++a>7)a=0;

P2=0xff;

P0=d[ds[a]]|d_huo[a];

dx=1;dx=0;

P2=w[a];

}

void init() //初始化函数

{   TMOD=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

EA=1;

    ET0=1;

}

//加分和减分

void jjf(u16 val){

if(readPIN(key_down,0)==1){//加1

val+=1;

}

if(readPIN(key_down,1)==1){//加2

val+=2;

}

if(readPIN(key_down,2)==1){//加3

val+=3;

}

if(readPIN(key_down,3)==1){//减1

if(val>0)val-=1;

}

}

// 连按程序

u8 la_count=0;

u16 la_js=0;

void lan(){

if(la_js>=1000||((key&0xef)!=0xef))la_count=0;

if(readPIN(key_down,4)==1){

la_count++;

la_js=0;

}

}

u16 count=0;

u16 count1=0;

u16 s24=24000;

u8 s24off_flag=0;

void main()//主函数

{

init();

TR0=1;

while(1){

ds[0]=(count>99count/100%10:10);//将当前分值送到数码管缓存

ds[1]=(count>9 count/10%10 :10);

ds[2]=count%10;

ds[3]=(s24>9999s24/10000%10:10);

ds[4]=s24/1000%10;

ds[5]=(count1>99count1/100%10:10);//将当前分值送到数码管缓存

ds[6]=(count1>9 count1/10%10 :10);

ds[7]=count1%10;

scanKey();//扫描按键

bz=(key!=0xff0:1);//按下按键,蜂鸣器响

if(readPIN(key,4)==0){//判断给哪一方加减分

jjf(&count);

}else {

jjf(&count1);

}

lan();

if(la_count==2){

if(s24off_flag==0){

s24=24000;

s24off_flag=1;

}else {

s24off_flag=0;

}

la_count=3;

}

}

}

void timer0() interrupt 1//定时器

{   

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

dispaly();

if(s24off_flag==1){

if(s24>0)s24--;

}

if(la_js<60000)la_js++;

}

单片机最小系统自己画吧,功能设计可以再探讨,你在问一下出这题的人,为什么不用两个573,用一个跟没用有什么区别

这道题考察的是最大公约数和最小公倍数,你先定义两个函数,求最大公约数的和求最小公倍数的.int gongyueshu(int a,int b) int gongbeishu(int a,int b)

cin>>n1>>'/'>>n2>>c>>d1>>'/'>>d2;

以上就是关于C语言编程:10以内加减法,根据输入题数出题,判断做题是否正确,最后计算分数。全部的内容,包括:C语言编程:10以内加减法,根据输入题数出题,判断做题是否正确,最后计算分数。、篮球计分牌 (1)3位数码管显示篮球分数 (2)通过按键进行加减分数 求大神,帮忙必有报酬。、c++编程序要的是原代码的输入n1 n2 d1 d2,输出n1/d1,n2/d2(注意要有化简的),并有分数的加减乘除结果...等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9676501.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存