计算系统和程序设计基础课程设计Word文件下载.docx
- 文档编号:13196334
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:24
- 大小:79.81KB
计算系统和程序设计基础课程设计Word文件下载.docx
《计算系统和程序设计基础课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算系统和程序设计基础课程设计Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
2、【设计内容及思路】 10
3、【算法】 10
4、【程序清单与运行结果】 11
五:
【总结及设计体会】 12
捕鱼问题
1、【设计题目】
A、B、C、D、E五个人合伙夜间捕鱼,上岸时都疲惫不堪,各自在湖边的树丛中找地方睡觉了。
清晨,A第一个醒来,将鱼分成5份,把多余的一条扔回湖中,拿自己的一份回家了;
B第二个醒来,也将鱼分成5份,扔掉多余的一条鱼,拿自己的一份回家了;
接着,
C、D、E依次醒来,也都按同样的办法分鱼。
问:
5个人至少共捕到多少条鱼?
每个人醒来后看到多少条鱼?
2、【设计内容及思路】
根据题意,总计将所有的鱼进行了五次平均分配,每次分配时的策略是相同的,即扔掉一条鱼后剩下的鱼正好分成五份,然后拿走自己的一份,余下其它的四份。
假定鱼的总数为X,则X可以按照题目的要求进行五次分配:
X-1后可被5整除,余下的鱼为4*(X-1)、
5。
3、【算法】
采用正推法,fish[0]从1开始每次增加5,然后依次考查fish【n】是
否满足被5证书后余1,算法描述如下:
Step1:
初始化fish【0】=1;
Step2:
重复下述操作,直到fish【n】满足被5除后余1;
Step2.1:
fish【0】=fish【0】+5;
Step2.2:
循环变量i从1到4,重复执行下述操作;
Step2.2.1:
fish【i】=(fish【i-1】-1)/5*4;
Step2.2.2:
如果fish【i】不满足被5除后余1,则转step2.1;
Step2.2.3:
i++Step3:
依次输出数组fish【n】
4、【程序清单与运行结果】
#include<
stdio.h>
intmain()
{
charman[5]={'
A'
'
B'
C'
D'
E'
};
intfish[5],i;
fish[0]=1;
do
fish[0]=fish[0]+5;
for(i=1;
i<
5;
i++)
fish[i]=(fish[i-1]-1)/5*4;
if(fish[i]%5!
=1)break;
}
}while(i<
5);
for(i=0;
printf("
%c看到的鱼数是%d\n"
man[i],fish[i]);
return0;
显示结果:
A看到的鱼是3121
B看到的鱼是2493
C看到的鱼是1996
D看到的鱼是1596
E看到的鱼是1276
荷兰国旗问题
要求重新排列一个由Red、White和Blue(这是荷兰国旗的颜色)构成的数组,使得所有的Red都排在最前面,White排在其次,Blue排在最后。
荷兰国旗问题其实就是一个排序问题,可以将红,白,蓝3种颜色
分别用数字0,1,2表示,用一个数组来存储他们。
将相同颜色线条归为一类就相等于将数组中的数值按大小进行排序,只不过数组里存储的只有3种数值而已。
解题的基本策略是遍历两个颜色区域,如果颜色条不属于所在区域,则交换一个属于该区域的颜色条。
这样,每一次都是有必要的交换,从而实现最少交换次数。
输入:
数组Colora[n],有Red、White、和Blue三种元素功能:
荷兰国旗
输出:
有序数组Colora[n]
#include<
stdlib.h>
time.h>
#defineNUM10
enumColor{Red,White,Blue};
voidA(enumColora[],intn);
voidB(enumColora[],intn);
voidC(enumColora[],intn);
enumColora[50];
A(a,NUM);
初始序列为:
"
);
C(a,NUM);
B(a,NUM);
荷兰国旗是:
C(a,NUM);
return0;
voidA(enumColora[],intn)
inttemp,i;
srand(time(NULL));
n;
temp=rand()%3;
a[i]=(enumColor)temp;
voidB(enumColora[],intn)
inti=0,k=n-1,j=0;
enumColortemp;
while(j<
k)
switch(a[j])
caseRed:
temp=a[i];
a[i++]=a[j];
a[j++]=temp;
break;
caseWhite:
j++;
break;
caseBlue:
temp=a[j];
a[j]=a[k];
a[k--]=temp;
return;
voidC(enumColora[],intn)
inti;
for(i=0;
switch(a[i])
printf("
Red"
caseWhite:
White"
caseBlue:
Blue"
\n"
发纸牌
假设纸牌的花色有梅花、方块、红桃和黑桃,纸牌的点数有
A、2、3、4、5、6、7、8、9、10、J、Q、K,请根据用户输入的纸牌张数n,随机发四手纸牌,每手共有n张纸牌。
(所谓一手纸牌指的是一个玩家手里的纸牌)
为避免重复发牌,设二维数组sign【4】【13】记载是否法国某张牌,其中行下标,列下标表示点数,数组元素均为初始化为0.设字符串指针数组card【n】储存随机发的n张纸牌,例如card【0】=“梅花二”。
按以下方法一次发每一张牌:
首先产生一个0~3的随机数i表示花色,再产生一个1~12的随机数j表示点数,如果这张牌尚未发出,则将sign【i】【j】置1,并将这张牌储存到数组card【n】中。
数组card[13],有
A、2、3、4、5、6、7、8、9、10、J、Q、K十三种元素
功能:
有序数组card[13]
string.h>
char*str1[4]={"
梅花"
"
黑桃"
红桃"
方块"
//存储花色
char *str2[13] =
{"
A"
2"
3"
4"
5"
6"
7"
8"
9"
10"
J"
Q"
K"
char*card[13];
//最多发13张牌
voidSendCards(intn);
voidPrintcards(intn);
intmain()
intn;
请输入发牌张数:
scanf("
%d"
&
n);
SendCards(n);
Printcards(n);
voidSendCards(intn)
intsign[4][13]={0};
intk,i,j;
for(k=0;
k<
)
i=rand()%4;
j=rand()%13;
if(sign[i][j]==1)continue;
else
card[k]=(char*)malloc(6);
strcpy(card[k],str1[i]);
strcat(card[k],str2[j]);
sign[i][j]=1;
k++;
return;
voidPrintcards(intn)
for(intk=0;
k++)
%-10s"
card[k]);
数字旋转方阵
给定方阵的阶数,输出如图1所示N×
N(1≤N≤10)的顺时针旋转和逆时针旋转两种数字旋转方阵。
12019181716
22132313015
32233362914
1 2 3 4 5 6
20212223247
19323334258
(a)逆时针旋转方阵 (b)顺时针旋转方阵
图1数字旋转方阵示例
用二维数组data[N][N]储存N*N矩形方阵,分别求N*N的顺时针旋转逆时针旋转两种数字旋转方阵,观察其旋转方阵特点,从而得出
i、j、k之间的关系。
二维数组data[N][N]
给定方阵的阶数,输出N*N的顺时针旋转逆时针旋转两种数字旋转方阵。
N*N的顺时针旋转逆时针旋转两种数字旋转方阵。
#defineN10
intdata[N][N]={0};
voidFu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 系统 程序设计 基础 课程设计