⑴ 用C语言编写一个52张扑克牌随即洗牌的程序 并写上注释
定义一个int p[52],里面的元素就是1~52,然后,直接 for循环i:1~52,每次随机一个数 m=rand()%52 ,swap(p[i],p[m]),就ok了
⑵ 用c语言创建一个数组用来表示52张扑克牌,然后洗牌后输出,要求每行输出13张
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<cstdlib>;
usingnamespacestd;
inta[55];
voidpt(intid){//printacardbyid
//printcolor
if(id%4==0)printf("A-");
if(id%4==1)printf("B-");
if(id%4==2)printf("C-");
if(id%4==3)printf("D-");
//printnumber
if(id/4==0)printf("A");
elseif(id/4+1<=10)printf("%d",id/4+1);
if(id/4==10)printf("J");
if(id/4==11)printf("Q");
if(id/4==12)printf("K");
}
voidshuffle(){
for(inti=0;i<52;i++)
swap(a[i],a[rand()%(i+1)]);//randomshuffle
}
intmain(){
srand((unsignedint)time(NULL));
for(inti=0;i<52;i++)
a[i]=i;
shuffle();
for(inti=0;i<52;i++){
pt(a[i]);
if(i%13==12)printf(" ");
}
return0;
}
为每张牌定义id
随机洗牌
⑶ C语言 输出结果-52
你输入的数字大小超过了127
这是个位溢出问题或者说超过了该类型能表示的范围,结果自然不是我们想要的
输入在-128~127(char能表示的范围)之间是正常的,超过127的输入转换成二进制位将大于七位,(你的接收变量为char a)第八个二进制位不为0将代表符号位的负号兼数字,目测你输入的是204,或者更大的。。。
不管你输入多少,结果a只会在-128~127之间
⑷ C52单片机输出1K频率的程序(C语言)最好可以有如何计算频率的方法
#include<reg51.h>
//设CPU是时钟12MHz的8051系列
voidSetupTimer0()
{
TMOD&=0XF0;//仅保留T1信息
TMOD|=0X02;//设置T0:定时功能,方式2,自动重载8位定时器/计数器
TH0=256-250;//每个周期为1us,250us=0.25ms,定时每0.25ms中断一次
TL0=256-250;//自动重装,TL0,TH0均置256-250
TR0=1;//开启定时器
ET0=1;//定时器0中断打开
}
voidTimer0_ISR()interrupt1//中断服务程序
{
staticdataunsignedcharus250;
staticdataunsignedcharp1;
if(++us250>=2)
{
us250=0;//每0.25msx2=0.5ms中断一次。
p1^=1;P1=p1;//p1完成翻转后输出到P1,两次翻转完成一个周期输出
}
}
voidmain()
{
dataunsignedcharp1,p2;
SetupTimer0();
EA=1;//全局中断打开
while(1);//死循环,中断程序完成波形输出
}
⑸ 求52单片机用C语言产生随机数的程序
#include <reg52.h>
#include <stdlib.h>
int main(void)
{
int i;
int dat = 123;
srand(dat);//这里的参数你要使用的话最好用日期,调用了这个函数,下面的rand函数产生的随机数就不会////每次一样,其实就是先产生一个种子
i = rand();//产生随机数,如果不调用srand(dat),这个函数每次调用产生的随机数是一样的
}