计算系统和程序设计基础课程设计.docx

上传人:b****1 文档编号:266320 上传时间:2022-10-08 格式:DOCX 页数:24 大小:79.81KB
下载 相关 举报
计算系统和程序设计基础课程设计.docx_第1页
第1页 / 共24页
计算系统和程序设计基础课程设计.docx_第2页
第2页 / 共24页
计算系统和程序设计基础课程设计.docx_第3页
第3页 / 共24页
计算系统和程序设计基础课程设计.docx_第4页
第4页 / 共24页
计算系统和程序设计基础课程设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

计算系统和程序设计基础课程设计.docx

《计算系统和程序设计基础课程设计.docx》由会员分享,可在线阅读,更多相关《计算系统和程序设计基础课程设计.docx(24页珍藏版)》请在冰豆网上搜索。

计算系统和程序设计基础课程设计.docx

计算机程序设计基础

课程设计

24

目录

一:

捕鱼问题 3

1、【设计题目】 3

2、【设计内容及思路】 3

3、【算法】 3

4、【程序清单与运行结果】 4

二:

荷兰国旗问题 5

1、【设计题目】 5

2、【设计内容及思路】 5

3、【算法】 5

4、【程序清单与运行结果】 6

三:

发纸牌 8

1、【设计题目】 8

2、【设计内容及思路】 8

3、【算法】 8

4、【程序清单与运行结果】 8

四:

数字旋转方阵 10

1、【设计题目】 10

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

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;i<5;i++)

printf("%c看到的鱼数是%d\n",man[i],fish[i]);return0;

}

显示结果:

A看到的鱼是3121

B看到的鱼是2493

C看到的鱼是1996

D看到的鱼是1596

E看到的鱼是1276

二:

荷兰国旗问题

1、【设计题目】

要求重新排列一个由Red、White和Blue(这是荷兰国旗的颜色)构成的数组,使得所有的Red都排在最前面,White排在其次,Blue排在最后。

2、【设计内容及思路】

荷兰国旗问题其实就是一个排序问题,可以将红,白,蓝3种颜色

分别用数字0,1,2表示,用一个数组来存储他们。

将相同颜色线条归为一类就相等于将数组中的数值按大小进行排序,只不过数组里存储的只有3种数值而已。

解题的基本策略是遍历两个颜色区域,如果颜色条不属于所在区域,则交换一个属于该区域的颜色条。

这样,每一次都是有必要的交换,从而实现最少交换次数。

3、【算法】

输入:

数组Colora[n],有Red、White、和Blue三种元素功能:

荷兰国旗

输出:

有序数组Colora[n]

4、【程序清单与运行结果】

#include#include#include#defineNUM10

enumColor{Red,White,Blue};

voidA(enumColora[],intn);voidB(enumColora[],intn);

voidC(enumColora[],intn);

intmain()

{

enumColora[50];A(a,NUM);

printf("初始序列为:

");

C(a,NUM);

B(a,NUM);

printf("荷兰国旗是:

");C(a,NUM);

return0;

}

voidA(enumColora[],intn)

{

inttemp,i;srand(time(NULL));

for(i=0;i

{

temp=rand()%3;a[i]=(enumColor)temp;

}

}

voidB(enumColora[],intn)

{

inti=0,k=n-1,j=0;enumColortemp;

while(j

{

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;

break;

}

}

return;

}

voidC(enumColora[],intn)

{

inti;

for(i=0;i

{

switch(a[i])

{

caseRed:

printf("Red");break;caseWhite:

printf("White");break;caseBlue:

printf("Blue");break;

}

}

printf("\n");

}

}

显示结果:

三:

发纸牌

1、【设计题目】

假设纸牌的花色有梅花、方块、红桃和黑桃,纸牌的点数有

A、2、3、4、5、6、7、8、9、10、J、Q、K,请根据用户输入的纸牌张数n,随机发四手纸牌,每手共有n张纸牌。

(所谓一手纸牌指的是一个玩家手里的纸牌)

2、【设计内容及思路】

为避免重复发牌,设二维数组sign【4】【13】记载是否法国某张牌,其中行下标,列下标表示点数,数组元素均为初始化为0.设字符串指针数组card【n】储存随机发的n张纸牌,例如card【0】=“梅花二”。

按以下方法一次发每一张牌:

首先产生一个0~3的随机数i表示花色,再产生一个1~12的随机数j表示点数,如果这张牌尚未发出,则将sign【i】【j】置1,并将这张牌储存到数组card【n】中。

3、【算法】

输入:

数组card[13],有

A、2、3、4、5、6、7、8、9、10、J、Q、K十三种元素

功能:

发纸牌

输出:

有序数组card[13]

4、【程序清单与运行结果】

#include#include#include#include

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;

printf("请输入发牌张数:

");scanf("%d",&n);SendCards(n);

Printcards(n);return0;

}

voidSendCards(intn)

{

intsign[4][13]={0};intk,i,j;srand(time(NULL));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

printf("%-10s",card[k]);printf("\n");

return;

}

显示结果:

四:

数字旋转方阵

1、【设计题目】

给定方阵的阶数,输出如图1所示N×N(1≤N≤10)的顺时针旋转和逆时针旋转两种数字旋转方阵。

12019181716

22132313015

32233362914

1 2 3 4 5 6

20212223247

19323334258

(a)逆时针旋转方阵 (b)顺时针旋转方阵

图1数字旋转方阵示例

2、【设计内容及思路】

用二维数组data[N][N]储存N*N矩形方阵,分别求N*N的顺时针旋转逆时针旋转两种数字旋转方阵,观察其旋转方阵特点,从而得出

i、j、k之间的关系。

3、【算法】

输入:

二维数组data[N][N]

功能:

给定方阵的阶数,输出N*N的顺时针旋转逆时针旋转两种数字旋转方阵。

输出:

N*N的顺时针旋转逆时针旋转两种数字旋转方阵。

4、【程序清单与运行结果】

#include#defineN10

intdata[N][N]={0};

voidFu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1