《计算机科学》课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597
练习一:下面的程序,输出了52张扑克牌(如图),请补充完整程序。
#include <stdio.h>
int main( )
{
char c[4]= {'H','S','D','C'};
int v[13]= {1,2,3,4,5,6,7,8,9,10,11,12,13};
int i,j;
for(i=0; i<4; i++)
{
for(j=0; j<13; j++)
{
printf("%c",________);
if(v[j]==1)
printf("A");
else if(___________)
printf("J");
else if(v[j]==12)
______________;
else if(v[j]==13)
printf("K");
else
printf("%d",________);
printf(" ");
}
printf("\n");
}
return 0;
}
运行图:
练习二:运行“发奖金”程序(运行时,可以将村民的人数改少一些,避免输入太多的数据),对照代码,理解解题过程。(发奖金的由来:过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。例如:1995年11月8日=1995+11+8=2014。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?)
村民要求修改游戏规则,请你改写程序,找出获奖者。你和你的小伙伴们写几个数字玩一玩这个游戏,挺有意思,赢家请大家吃晚饭。
#include <stdio.h>
#define LUCKY_M 2014 //幸运数字
#define POPULATION 128 //村民人数
int main( )
{
int people[POPULATION]; //记录村民上报数据
int luckyPeople[POPULATION]; //记录获奖者编号
int nLucky=0; //获奖者人数
int i;
for (i=0; i<POPULATION; i++) //输入村民报的数字
{
scanf("%d",&people[i]);
}
for (i=0; i<POPULATION; i++) //村民从0开始编号
{
if ( people[i] == LUCKY_M)
{
luckyPeople[nLucky] = i;
nLucky ++;
}
}
//输出获奖者编号及所获奖金数额
for (i=0; i<nLucky; i++)
printf("%d %d\n", luckyPeople[i], LUCKY_M/nLucky);
return 0;
}
有村民提出村长在幸运数字上做手脚,不公平。修改后的规则是:每人写一个1000以内的数字,谁写的数字与平均值最接近,M元的奖金就由谁拿,有多人与平均值差值相同,则均分。例如,参加的村民有5个人,报的数字分别为98、7、50、980、1,平均值为227(平均值也取成整数就行了),与98最接近,编号为0的村民得奖。这个游戏实际上有很强的政治学背景,一种策略是串通,大家都报一样的数,平分奖金;在每个人都想争取最大利益的前提下,各人报的数字又对结果都有影响,这里面包含一系列非常有意思的研究课题。
提示:输入数据后,用一次循环求和,进而求出平均值;再一次循环,求出最小的差值;再一次循环,将差值最小的村民的编号放入幸运数组(因为可能不止一位,所以需要这个数组)。
练习三:输入年、月、日,输出这是该年的第几天。请在下面程序基础上补充
#include <stdio.h>
int main( )
{
int y,m,d;
//a[1]-a[12]中保存了1-12月的天数,a[0]没有用
int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0;
int i;
printf("请输入年月日:");
scanf("%d %d %d", &y, &m, &d);
……
printf("这是本年的第%d天", sum);
return 0;
}
提示:需要补充的程序段,可以循环累加每月的天数,前m-1月的天数已经在a数组中给出,再加上第m月的即可。另外,如果是2月以后,要考虑闰年要多天。