當前位置:首頁 » 編程語言 » c語言大蘋果
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言大蘋果

發布時間: 2022-09-09 07:58:03

c語言編程經典282例,陽陽買蘋果

從你提出的疑問看,思路你也沒看懂。
注意程序語句執行的順序,循環體中money+=0.8*n是花錢的累加和,day++是天數:n*=2是計算下一天買蘋果的數量。
初始值n=2,d=0
執行while循環
money+=0.8*n;//第一天花的錢
day++;//1天,看到了吧,買2個蘋果是第1天,而不是第0天
n*=2;//這條語句你也寫錯了。計算第二天買的蘋果數量
n<100,繼續執行循環
money+=0.8*n;//兩天花的錢
day++;//2天
n*=2;//計算第三天買的蘋果數量
n<100,繼續執行,依次類推。
直到n*=2,n=128,不滿足循環條件,退出循環,此時n的值是128沒錯,可是並沒有計入花的錢以及天數。花的錢為5天花錢的總和,天數為5天。

Ⅱ 小學編程題目c語言摘紅蘋果

程序設計思路:

一、小朋友和蘋果都具有多樣屬性(比如高度、編號、狀態等,還可以擴展出姓名,重量等)。所以小朋友和蘋果要定義成結構體。

二、人和蘋果數量都是手動輸入,因此數組大小不確定,要使用動態數組(不使用動態,就得得限制用戶輸入的大小)。

三、題目要求確保摘到的總數最多,從最矮的小朋友開始摘,因此小朋友的數組要進行排序

四、遞歸函數實現摘蘋果邏輯,每人在自己夠到的范圍中隨機摘兩個(不夠就拿1個)。(遞歸函數每次發現一個可摘取的蘋果,有50%概率看中,都沒看中,默認摘取最後一個看中的蘋果)。

下面是代碼(控制台刷新函數中cls僅限window系統運行,其它操作系統,刪除或修改):

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<malloc.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;i<m;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(" =============每組圖像靠上的數值為高度,靠下的數值為編號============ ");

printf(" =============為確保能拿到最多的蘋果,小朋友們按升序排列============ ");

for(i=0;i<AFR;printf(" "),i++)

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

printf("%s ",appes[j].aframe[i]);

printf(" ");

for(i=0;i<CFR;printf(" "),i++)

for(j=0;j<m;j++)

printf("%s ",chns[j].cframe[i]);

printf(" ==================================================================== ");


printf("操作流水: ");

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

printf("%s ",strInfo[i]);

fflush(stdin);

printf("按下任意鍵進行下一步。。。。。。 ");

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;j<n;j++)

if(appes[j].status==0) {aflag=1;break;}

if(aflag==0) return 1;//所有蘋果均拿完,結束遞歸

indexSave=-1;

cflag=0;

for(j=0;j<n;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) ",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) ",chns[i].cid,chns[i].appes[0]->aid,chns[i].appes[1]->aid);

}

}

if(cflag==0 && chns[i].n==0) sprintf(strInfo[i],"編號%d的小朋友沒有能拿到的蘋果,非常沮喪! ",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;i<m-1;i++)

for(j=i+1;j<m;j++)

if(chns[i].height>chns[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位整數): ",m);

for(i=0;i<m;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);

for(i=0;i<n;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語言的困惑

一排蘋果,要從小到大排
從首個開始往後,兩個對比,大的繼續跟下一個比,比到最後就找出最大的
回到首個,再次兩個對比一遍,就找出第2大蘋果
再回到首個,再次兩個對比一遍,就找出第3大蘋果。
....
直到剩2個,回到首個,再次兩兩比一遍,就找出2個中較大的蘋果。
這樣就從小到大排了,大的往前冒,所以叫冒泡

Ⅳ C語言兄弟分蘋果

#include<stdio.h>
#include<stdlib.h>
intmain()
{
inta[6],b[6];
inti=0;
for(i=0;i<6;i++)
{
a[i]=2520/6;
b[i]=8-i;
}
a[0]=a[0]-(a[5]/(b[5]-1));//老大得到老六蘋果之前(老六拿到蘋果後,分出1/3剩下440個)
for(i=5;i>0;i--)
{
a[i]=a[i]+a[i]/(b[i]-1)-a[i-1]/(b[i-1]-1);
}
a[0]=a[0]*b[0]/(b[0]-1);
printf('六個人分到的蘋果是: ');
for(i=0;i<6;i++)
printf('%d',a[i]);
return0;
}

Ⅳ c語言錯誤: 陽陽買蘋果,每個蘋果0.8元,第一天他買2個,第二天開始每天買前一天的2倍,直到購買的蘋果

#include<stdio.h>
void main()
{
int day=1,num,t=0,i=2;
double average,money;
while(t<100) //判斷條件是所有買的蘋果數小於100
{
t+=i;
i=i*2;
day++;
}
num=t-i/4; //計算出總共的個數
money=num*0.8; //計算出花的所有的錢
printf("the nums of apple is %d\n",num);
printf("the totle money is %f\n",money);
average=money/(day-2);
printf("the ave price is %f\n",average);
}建議寫成這樣。。最簡單。。
你的問題我如下注釋:
#include<stdio.h>
void main()
{
int day=0,i=2;
float everage,money=0.0; //建議改成double類型
while(i<100)
{
money=0.8*i+money;
day=day+1;
i=i*2;
if (i>100) //if判斷多餘,沒意義。
{ money=money-0.8*i;
i=i/2;
break;
}
}
printf("the num of apple is %d\n",i);
printf("the totle money is %d\n",money); //那個%d改成%f,結果就沒那麼大了。。
everage=money/day;
printf("%d\n",everage); //這里的%d改成%f
}把我說的那些改過來就可以正常運行了。。。另外你的那個運算有問題,你再看看那些時間和個數問題。。

Ⅵ C語言放蘋果問題

可以用遞歸的方法實現。
#include<stdio.h>
int fun(int m,int n,int j);
int main(void)
{ int n,m,s;
printf("Please input : m n\n");
scanf("%d%d",&m,&n);
if(n>m) n=m; /*因為盤子是相同的,所以,盤子數>蘋果數的情況與n=m的情況相同*/
s=fun(m,n,0);
printf("%d\n",s);
}
int fun(int m,int n,int j)
{ int i,s=0;
if(n==1) return m>=j;
for(i=j;i<m;i++) s+=fun(m-i,n-1,i);
/*遞歸調用,先從m個蘋果中拿出i個放在第一個盤子,再計算m-i個蘋果放入n-1個盤子的問題(注意:為了不重復,放入下一個盤子的蘋果數要大於等於i個)*/
return s;
}

Ⅶ (C語言)水果拼盤

數學方法: 用組合 C5 3=20 種
編程: 五種水果 分別 用五個二進制位表示, 滿足其中三位為1,其餘兩位為0 就可以了 ,也就是 轉換為 整數 從 0 到63 中,有多少個轉換為二進制數後, 有三位為1 的 ,就可以了。 語言表達不是很好,大概意思應該可以看懂的。

Ⅷ C語言題目:小明有n個蘋果(n<20),每一個蘋果都有一定的重量,請找出最重的蘋果,並輸出該蘋果的重量.

#include "stdio.h"
int main()
{
float app[19],max;
int i,n;
printf("請問小明有多少個蘋果?(小於20個)");
scanf("%d",&n);
printf("請輸入每個蘋果的重量:");
for(i=0;i<n;i++)
scanf("%f",&app[i]);
max=app[0];
for(i=0;i<n;i++)
{
if(max<app[i])
max=app[i];
}
printf("小明最大的蘋果重量是:%.2f",max);
return 0;
}

Ⅸ C語言題目 蘋果和蟲子 描述 你買了一箱n個蘋果,很不幸的是買完時箱子里混進了一條蟲子。蟲子

#include<stdio.h>//蘋果和蟲子//
int main()
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
if(y/x==0||y==x)
printf("%d\n",n-1);
else
printf("%d\n",n-y/x-1);
}