問題描述:
用c語言實現保齡球的計分程序。
保齡球:每壹局***有10小格,每格可有兩次投球機會.擊倒的瓶數,即為其分數,滿分為10分;定義設每格擊球的數據結構為:
struct strike {int first:int second;struct strike*next;}
按要求完成程序:
1)編寫函數creat(void)建立壹個包含11格擊球組成的單向鏈表,返回指向鏈表的指針;
2)編寫函數setScore(struct strike *head)讀取從鍵盤上連續錄入的擊球得分將得分存入鏈表並返回實際擊球的格數:(註:如果每格第1次全擊倒10瓶,將直接進入下1格;若不全擊倒可以補擊壹次:在第10格第1次若是全擊倒,將在第11格再擊2球,若是補中全擊倒則在11格再擊1球:若補擊仍然未全擊倒,則沒有第11格的擊球機會;)
3)編寫函數getScore(struct strike *head)計算出該局實際總得分;(註:每格計分規則為:每格若未滿10分按實際分記;若1次全擊倒,該格成績累加後兩擊的成績;若補擊全擊倒,則累加後壹擊成績,最後再累加各格成績。)
4)編寫main()函數完成整個程序。
解析:
記分函數我不太懂所以沒有寫
struct strike
{
int first;
int second;
struct strike *next;
};
struct strike *creat()
{
struct strike *head;
struct strike *p;
struct strike *last;
int n=0;
while(n++<11)
{
p=(struct strike*)malloc(sizeof(struct strike));
if(head=NULL)
head=p;
else
last->next=p;
last=p;
}
return head;
}
void setScore(struct strike *head)
{
struct strike *p;
p=head;
int n=0;
int num;
int num2;
while(n++<10)
{
printf("qing shuru %n ju de diyicichengji:",n+1);
scanf("%d",&num);
p->first=num;
if(num==10)
{
p++;continue;
}
else
{
printf("qing shuru %n ju de diyierchengji fenshuxiaoyu%n:",n+1,10-num);
scanf("%d",&num2);
p->second=num2;
p++;
}
}
p--;
if(p->first==10)
{
scanf("%d",&num);
p->next->first=num;
if(num==10)
p->next->second=0;
else{
scanf("%d",&num2);
p->next->second=num2;
}
else
{
if(p->first+p->second==10)
{
scanf("%d",&num);
p->next->first=num;
p->next->second=0;
}
}
}
}