本文目錄一覽:
小學編程題目c語言摘紅蘋果?
程序設計思路:
一、小朋友和蘋果都具有多樣屬性(比如高度、編號、狀態等,還可以擴展出姓名,重量等)。所以小朋友和蘋果要定義成結構體。
二、人和蘋果數量都是手動輸入,因此數組大小不確定,要使用動態數組(不使用動態,就得得限制用戶輸入的大小)。
三、題目要求確保摘到的總數最多,從最矮的小朋友開始摘,因此小朋友的數組要進行排序。
四、遞歸函數實現摘蘋果邏輯,每人在自己夠到的範圍中隨機摘兩個(不夠就拿1個)。(遞歸函數每次發現一個可摘取的蘋果,有50%概率看中,都沒看中,默認摘取最後一個看中的蘋果)。
下面是代碼(控制台刷新函數中cls僅限window系統運行,其它操作系統,刪除或修改):
#includestdio.h
#includestdlib.h
#includetime.h
#includemalloc.h
#define AFR 7//蘋果圖像的行數
#define AFC 6//蘋果圖像的行數
#define CFR 5//小朋友圖像的行數
#define CFC 6//小朋友圖像的行數
typedef struct apple//表示蘋果數據的結構體
{
int aid;//蘋果編號
int height;//蘋果的高度
int status;//0:表示未被摘取。1:表示已被摘取
char aframe[AFR][AFC];//表示蘋果的圖像
}APPE;
typedef struct childern//表示小孩子的編號
{
int cid;//小孩子的編號
int height;//小孩子的身高
int n;//小孩摘取的蘋果數量
char cframe[CFR][CFC];//表示小朋友的圖像
APPE **appes;//小孩摘取的蘋果結構指針數組
}CHN;
int n,m;//蘋果和小朋友的個數,設為全局變量
APPE *setApps();//設置蘋果。成功返回結構數組,失敗返回NULL
CHN *setChns();//設置小盆友。同上。
int orderChnByHeight(CHN *chns);//對小朋友數組按照身高升序排列
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100]);//遞歸,模擬小朋友依次選蘋果。異常返回-1
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100]);
int main()
{
int i;
char (*strInfo)[100]=NULL;//用於顯示操作流水
APPE *appes=NULL;
CHN *chns=NULL;
appes=setApps();
chns=setChns();
if(orderChnByHeight(chns)==-1)return 1;
srand(time(NULL));
strInfo=(char (*)[100])malloc(sizeof(char *)*m*100);
for(i=0;im;i++)strInfo[i][0]=0;
if(!strInfo) return 1;
showFrame(appes,chns,strInfo);
return 0;
}
int showFrame(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int k=1;
int i,j;
system(“cls”);
printf(“\n=============每組圖像靠上的數值為高度,靠下的數值為編號============\n”);
printf(“\n=============為確保能拿到最多的蘋果,小朋友們按升序排列============\n”);
for(i=0;iAFR;printf(“\n”),i++)
for(j=0;jn;j++)
printf(“%s “,appes[j].aframe[i]);
printf(“\n”);
for(i=0;iCFR;printf(“\n”),i++)
for(j=0;jm;j++)
printf(“%s “,chns[j].cframe[i]);
printf(“\n====================================================================\n”);
printf(“操作流水:\n”);
for(i=0;im;i++)
printf(“%s\n”,strInfo[i]);
fflush(stdin);
printf(“按下任意鍵進行下一步。。。。。。\n”);
getchar();
if(getApple(appes,chns,strInfo)==-1)return -1;
if(k)showFrame(appes,chns,strInfo),k–;
return 1;
}
int getApple(APPE *appes,CHN *chns,char (*strInfo)[100])
{
static int i=0,aflag,cflag;
int j,indexSave;
if(appes==NULL||chns==NULL) return -1;
if(chns[i].n==2)i++;//當前小朋友拿夠2個,換下一個小朋友
if(i==m)return 1;//所有人均拿過,結束遞歸
aflag=0;
for(j=0;jn;j++)
if(appes[j].status==0) {aflag=1;break;}
if(aflag==0) return 1;//所有蘋果均拿完,結束遞歸
indexSave=-1;
cflag=0;
for(j=0;jn;j++)
{
if(appes[j].status==0 appes[j].height=chns[i].height)
{
cflag=1;
indexSave=j;
if(rand()%2)//每次發現,有50%概率拿取,如所有可拿蘋果都沒選中,選最後發現的目標
break;
}
}
if(cflag)//小朋友拿起一個蘋果的過程
{
appes[indexSave].status=1;
//改變蘋果初始圖像
sprintf(appes[indexSave].aframe[6],” “);
chns[i].appes[chns[i].n]=appes[indexSave];
chns[i].n++;
if(chns[i].n==1)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0],” %c%c/ “,3,1);
sprintf(strInfo[i],”編號%d的小朋友拿取了1個蘋果(編號%d)\n”,chns[i].cid,chns[i].appes[0]-aid);
}
if(chns[i].n==2)
{
//改變小朋友初始圖像
sprintf(chns[i].cframe[0],” %c%c%c “,3,1,3);
sprintf(strInfo[i],”編號%d的小朋友拿取了2個蘋果(編號%d和編號%d)\n”,chns[i].cid,chns[i].appes[0]-aid,chns[i].appes[1]-aid);
}
}
if(cflag==0 chns[i].n==0) sprintf(strInfo[i],”編號%d的小朋友沒有能拿到的蘋果,非常沮喪!\n”,chns[i].cid),i++;
if(cflag==0 chns[i].n==1) i++;
return getApple(appes,chns,strInfo);
}
int orderChnByHeight(CHN *chns)
{
CHN chnTemp;
int i,j;
chnTemp.appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chnTemp.appes) return -1;
else
{
chnTemp.appes[0]=chnTemp.appes[1]=NULL;
if(chns)
for(i=0;im-1;i++)
for(j=i+1;jm;j++)
if(chns[i].heightchns[j].height)
chnTemp=chns[i],chns[i]=chns[j],chns[j]=chnTemp;
}
free(chnTemp.appes);
return 1;
}
CHN *setChns()
{
int i;
CHN *chns=NULL;
printf(“請輸入小朋友的個數:”);
scanf(“%d”,m);
chns=(CHN *)malloc(sizeof(CHN)*m);
if(!chns) return NULL;
printf(“請輸入%d個小朋友身高(不超過3位整數):\n”,m);
for(i=0;im;i++)
{
chns[i].cid=i+1;
scanf(“%d”,chns[i].height);
chns[i].height=chns[i].height%1000;//超出3位截取
chns[i].n=0;
chns[i].appes=(APPE **)malloc(sizeof(APPE*)*2);
if(!chns[i].appes) return NULL;
chns[i].appes[0]=chns[i].appes[1]=NULL;
//設置小朋友初始圖像
sprintf(chns[i].cframe[0],” \\%c/ “,1);
sprintf(chns[i].cframe[1],” / \\ “);
sprintf(chns[i].cframe[2],”—–“);
sprintf(chns[i].cframe[3],”高%3d”,chns[i].height);
sprintf(chns[i].cframe[4],”ID%3d”,chns[i].cid);
}
return chns;
}
APPE *setApps()
{
int i;
APPE *appes=NULL;
printf(“請輸入蘋果的個數:”);
scanf(“%d”,n);
appes=(APPE *)malloc(sizeof(APPE)*n);
if(!appes) return NULL;
printf(“請輸入%d個蘋果的高度(不超過3位整數):\n”,n);
for(i=0;in;i++)
{
appes[i].aid=i+1;
scanf(“%d”,appes[i].height);
appes[i].height=appes[i].height%1000;//超出3位截取
appes[i].status=0;
//設置蘋果初始圖像
sprintf(appes[i].aframe[0],”高%3d”,appes[i].height);
sprintf(appes[i].aframe[1],”ID%3d”,appes[i].aid);
sprintf(appes[i].aframe[2],”—–“);
sprintf(appes[i].aframe[3],” %c “,’|’);
sprintf(appes[i].aframe[4],” %c “,’|’);
sprintf(appes[i].aframe[5],” %c “,’|’);
sprintf(appes[i].aframe[6],” %c “,3);
}
return appes;
}
C語言對於小學生來說難不難?學python入門好還是VB好?
1.Python好學,易上手。如果你是第一次學習計算機編程語言,推薦你學這個。更重要的是,學會這門語言,也能方便你對電腦中的文檔進行處理。而無論是C、還是VB,面對大多數任務,編碼速度都不及Python的。
2.C比較接近機器語言,涉及到對數據的直接操作。高效,但同時也意味着你要花更多的心思在編寫代碼上面。當然也不太好學。
3.VB能快速的生成一個用戶界面。但編寫之後的代碼無論是執行效率還是可讀性,相對而言都是比較差的。
小學生編程課主要學什麼?
小學生編程課主要是c語言的學習內容。編程是我們大人們所接觸的Java、php、HTML、hTMEL5等相關的編程、計算機軟件的知識,現在都是電腦代替打字的時代。c語言是其中的一個板塊,主要有C加和Ctwo加兩個大內容,包含for循環以if語句等。
編程的簡單知識介紹
C語言編程是全國信奧賽等和國際編程比賽指定語言,被稱為必須學會的編程技能,是目前計算機及軟件程序開發的基礎語言,同時也被廣泛運用於單片機、機械人開發等高端科創競賽中,從小接觸並學習C語言編程,無疑會成為孩子日後升學過程中的重要王牌。
當小學生學習for循環或者if語句的時候,不僅能將編程的基礎知識能夠學會。還能讓小學生接觸更多的語法這樣對小學生之後英語的學習也有一定的幫助,通過編程的學習能夠讓他們更好的學習英語,從小打下的基礎對以後英語的學習會有很大的幫助。
編程與數學也是密不可分的。編程中包含數學。家長們應該知道數學是一個比較難以學習的學科。編程里大部分都包含數學,特別是函數的應用那真是到處的出現呀。所以編程的學習內容很廣泛,能從不同面方便開發小學生的智力,這些編程的基礎知識對未來的成長也是有很大的幫助的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/155322.html