计算系统及程序设计基础课程设计.docx_第1页
计算系统及程序设计基础课程设计.docx_第2页
计算系统及程序设计基础课程设计.docx_第3页
计算系统及程序设计基础课程设计.docx_第4页
计算系统及程序设计基础课程设计.docx_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机程序设计基础课程设计24目录一:捕鱼问题31、【设计题目】32、【设计内容及思路】33、【算法】34、【程序清单与运行结果】4二:荷兰国旗问题51、【设计题目】52、【设计内容及思路】53、【算法】54、【程序清单与运行结果】6三:发纸牌81、【设计题目】82、【设计内容及思路】83、【算法】84、【程序清单与运行结果】8四:数字旋转方阵101、【设计题目】102、【设计内容及思路】103、【算法】104、【程序清单与运行结果】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、【算法】采用正推法,fish0从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 int main()char man5 = A,B,C,D,E;int fish5, i;fish0 = 1;dofish0 = fish0 + 5;for (i = 1; i 5; i+)fishi = (fishi - 1 - 1) / 5 * 4;if (fishi % 5 != 1)break; while (i 5);for (i = 0; i 5; i+)printf(%c看到的鱼数是%dn, mani, fishi);return 0;显示结果:A看到的鱼是3121B看到的鱼是2493C看到的鱼是1996D看到的鱼是1596E看到的鱼是1276二:荷兰国旗问题1、【设计题目】要求重新排列一个由Red、White和Blue(这是荷兰国旗的颜色)构成的数组,使得所有的Red都排在最前面,White排在其次,Blue排在最后。2、【设计内容及思路】荷兰国旗问题其实就是一个排序问题,可以将红,白,蓝3种颜色分别用数字0,1,2表示,用一个数组来存储他们。将相同颜色线条归为一类就相等于将数组中的数值按大小进行排序,只不过数组里存储的只有3种数值而已。解题的基本策略是遍历两个颜色区域,如果颜色条不属于所在区域,则交换一个属于该区域的颜色条。这样,每一次都是有必要的交换,从而实现最少交换次数。3、【算法】输入:数组Color a n,有Red、White、和Blue三种元素功能:荷兰国旗输出:有序数组Color a n4、【程序清单与运行结果】#include #include #include #define NUM 10enum Color Red, White, Blue;void A(enum Color a , int n); void B(enum Color a , int n); void C(enum Color a , int n); int main()enum Color a50;A (a, NUM); printf(初始序列为:);C(a, NUM); B(a, NUM); printf(荷兰国旗是:);C(a, NUM); return 0;void A(enum Color a , int n)int temp, i;srand(time(NULL);for (i = 0; i n; i+)temp = rand( )%3; ai = (enum Color)temp; void B(enum Color a , int n) int i = 0, k = n - 1, j = 0;enum Color temp;while (j k)switch (aj) case Red : temp = ai; ai+ = aj;aj+ = temp; break;case White: j+; break; case Blue: temp = aj; aj = ak;ak- = temp; break; return ;void C(enum Color a , int n)int i;for(i = 0; i n; i+)switch(ai) case Red : printf(Red ); break;case White : printf(White ); break;case Blue : 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】=“梅花二”。按以下方法一次发每一张牌:首先产生一个03的随机数i表示花色,再产生一个112的随机数j表示点数,如果这张牌尚未发出,则将sign【i】【j】置1,并将这张牌储存到数组card【n】中。3、【算法】输入:数组card13,有A、2、3、4、5、6、7、8、9、10、J、Q、K十三种元素功能:发纸牌输出:有序数组card134、【程序清单与运行结果】#include #include #include #include char *str14 = 梅花,黑桃,红桃,方块; /存储花色 char *str213 = A,2,3,4,5,6,7,8,9,10,J,Q,K; char *card13; /最多发13张牌 void SendCards(int n); void Printcards(int n); int main( ) int n; printf(请输入发牌张数:); scanf(%d, &n); SendCards(n); Printcards(n); return 0; void SendCards(int n) int sign413 = 0; int k, i, j ; srand(time(NULL); for (k = 0; k n; ) i = rand( ) % 4 ; j = rand( ) % 13; if (signij = 1) continue; else cardk = (char *)malloc(6); strcpy(cardk, str1i); strcat(cardk, str2j); signij = 1; k+; return; void Printcards(int n) for (int k = 0; k n; k+) printf(%-10s, cardk); printf(n); return; 显示结果:四:数字旋转方阵1、【设计题目】给定方阵的阶数,输出如图1所示NN(1N10)的顺时针旋转和逆时针旋转两种数字旋转方阵。1 20 19 18 17 162 21 32 31 30 153 22 33 36 29 144 23 34 35 28 135 24 25 26 27 12 6 7 8 9 10 11(a) 逆时针旋转方阵1 2 3 4 5 620 21 22 23 24 719 32 33 34 25 818 31 36 35 26 917 30 29 28 27 1016 15 14 14 12 11(b) 顺时针旋转方阵图1 数字旋转方阵示例2、【设计内容及思路】用二维数组dataNN储存N*N矩形方阵,分别求N*N的顺时针旋转逆时针旋转两种数字旋转方阵,观察其旋转方阵特点,从而得出i、j、k之间的关系。3、【算法】输入:二维数组dataNN功能:给定方阵的阶数,输出N*N的顺时针旋转逆时针旋转两种数字旋转方阵。输出:N*N的顺时针旋转逆时针旋转两种数字旋转方阵。4、【程序清单与运行结果】#include #define N 10int dataNN = 0;void Full(int number, int begin, int size);voidOutPrint(int size);int main()int n;printf(请输入方阵的阶数(小于10):);scanf(%d, &n);Full(1, 0, n);OutPrint(n);return 0;void Full(int number, int begin, int size)int i, j, k;if (size = 0)return;if (size = 1)databeginbegin = number;return;i = begin; j = begin;for (k = 0; k size - 1; k+)dataij = number; number+;i+;for (k = 0; k size - 1; k+)dataij = number; number+;j+;for (k = 0; k size - 1; k+)dataij = number; number+;i-;for (k = 0; k size - 1; k+)dataij = number; number+;j-;Full(number, begin + 1, size - 2);return;voidOutPrint(int size)int i, j;for (i = 0; i size; i+)for (j = 0; j size; j+)printf(%4d, dataij);printf(n);return;显示结果:五:【总结及设计体会】这一次的程序设计不仅是一份作业更是我对于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论