⑴ 用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),這個函數每次調用產生的隨機數是一樣的
}