文档库 最新最全的文档下载
当前位置:文档库 › [C语言课程设计题目](丁海军)

[C语言课程设计题目](丁海军)

[C语言课程设计题目](丁海军)
[C语言课程设计题目](丁海军)

C语言课程设计设计题

丁海军

本手册提供的设计题大致可分为为3类:第一类侧重于算法设计与实现;第二类侧重于文件操作。

(一)算法设计类题目

1. Fibonacci数列。Fibonacci数列的计算公式如下:

fib(1) = 1;

fib(2) = 1;

fib(n) = fib(n-1) + fib(n-2); //对大于等于3的任意n

(1)简单变量“数据平移”方法计算Fibonacci数列的第n项(正整数n通过键盘输入):说明变量old1=1,old2=1,newItem;新的Fibonacci项newItem总是“距它最近”的前两项(old1与old2)的累加和。而后通过“old1=old2; old2=newItem;”进行所谓的“数据平移”。接着计算另一个新的Fibonacci项newItem,依次循环,直到求出数列的第n项时为止。

(2)使用数组求出Fibonacci数列的第n项(正整数n通过键盘输入)并显示在屏幕上:说明数组f用来存放Fibonacci数列的各项之值,且仅初始化前两个元素f[0]=1,f[1]=1,而后通过f[i]=f[i-2]+f[i-1];依次计算出f[2]到f[n-1](注意f[n-1]恰为所要求出的第n项)并将该值显示在屏幕上。

2.编程序,循环进行如下的处理过程:由计算机生成简单的四则运算题;用户给出答案;计算机判断对错。直到用户回答说不再继续做了时结束程序。

提示:可让用户选择指定出加、减、乘、除哪一种运算题,以及出一位数还是两位数的运算题;而后通过使用“rand()%10”或“rand()%100”来获得一个0到9的一位整数随机值或得到0到99的两位整数随机值来为用户出题。还可进一步对用户所做算术题的对错次数进行记录,结束程序时给出一个某种形式的成绩。

3.数的进制转换

(1)将输入的2进制数(一个非“0”即“1”的字符串)化为10进制数。

提示:用字符数组a盛放所输入的二进制数;而后从后往前逐一计算每一位的“位权”w (2的0次方、2的1次方、...),再计算“位权”乘以“位值”并累加到一个初值为0的变量value 上,最后输出该value。

(2)如何把8进制数或16进制数化为10进制数。

(3)如何把某一个k进制的数化为10进制数呢?

4.编程序,输入正整数m,它代表一个人民币钱数(元数)。求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。

注意,现在共有7种元以上面值的人民币纸币,分别为:100,50,20,10,5,2,1。

5.在体育、文艺比赛及选举等打分类项目中,为了公平起见,往往n个评委打出分数后,要去掉一个最高分和一个最低分,然后求取平均得分。当n较大时(本题设为9),则应取掉两个最高分和两个最低分,然后求取平均分。编程实现该算法。

6.用户任意输入一个年份以及该年的1月1日是星期几,而后再输入该年的任意一个月份,由程序负责在屏幕上按照你所设计的格式显示出这一个月的月历。

思考:利用元年元月元日(即1年1月1日)是星期一的已知事实,可对程序进行改造,让用户仅输入任意一个年份和一个月份,则程序就应按格式显示出该年那一个月的月历。

7.有n人围坐成一圈(假设他们的编号沿顺时针方向依次为1到n)。编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户通过cin输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。请输出先后被“淘汰”的人的编号。

8.编制具有如下原型的函数prime,用来判断整数n是否为素数:bool prime(int n); 而后编制主函数,任意输入一个大于4的偶数d,找出满足d=d1+d2的所有数对,其中要求d1与d2均为素数(通过调用prime来判断素数)。如偶数18可以分解为11+7以及13+5;而偶数80可以分解为:43+37、61+19、67+13、73+7。

提示:i与d-i的和恰为偶数d,而且只有当i与d-i均为奇数时才有可能成为所求的“数对”。

9.编一通用排序程序,程序可以对任意类型的数值常数或字符串构成的行进行排序,通过人机对话选择程序是按数值进行排序还是按字符顺序进行排序。排序是针对数据文件的。例如初始数据为:12,24,9,128,3,76,345

按数值大小排序应为:3,9,12,24,76,128,345

按字符串大小排序应为:12,128,24,3,345,76,9

10.编一程序对至少三个排序方法进行比较,比较方法是生成一组数据(≥400),用选定的排序方法进行排序。输出每种方法数据比较或交换的次数。最后输出所花费的时间。

注:此题要用到VC++函数库中time()函数

time_t time(time_t *timeptr)

参数说明:time_t *timeptr 指向存放自格林威治标准时间1970年1月1日00:00:00:至现在经过多少秒数,类型为time_t的指针变量。

功能描述:函数读取当前时间,然后计算自格林威治标准时间1970年1月1日00:00:00:至现在经过多少秒数,结果被放在类型为time_t的指针变量所指向的地址变量中。

函数返回值:返回自格林威治标准时间1970年1月1日00:00:00:至现在经过多少秒数头文件:time.h

11.编一函数(过程)集, 可分别将整数、实数、布尔值转换成相应的字串,及将以字串表示的整数、实数、布尔值转换成相应类型的值。(整数->字串,实数->字串均应规定位宽)。

12.输入一批学生某门课程考试的各题的分数,计算每个人的总分,统计各分数段0~49, 50~59,

1

60~69,70~79, 80~89, 90~100的人数及占总人数的百分比。要求输入:课程名称,考试日期,学生班号,学生姓名,学号,课程考试得分。输出要求:课程名称,考试日期,学生班号;各分数段的人数及百分比。

13.验证卡布列克运算

任意一个四位数,只要它们各个位置上的数字是不全相同的,就有这样的规律:

(1)将组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;

(2)将组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位);

(3)求两个数之差,得到一个新的四位数。

(4)重复以上过程,最后得到的结果总是6174。

14.100!的末尾有多少个零

由于计算机所能表示的整数范围有限,不可能用求出100!之后再数其尾数有多少个零的方法。必须从数学上分析100!末尾出产生零的条件。不难看出:一个整数若含有一个5的因子则必然会在求100!时产生一个零。因此原问题转换为求1到100这100个整数中包含了多少5的因子。

15.高次方数的尾数

求13的13次方的尾数。乘法的规律:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。

16.输出正六边型

编写程序输出边长为N的空心正六边型(N由用户输入),其边由’*”组成。

思考:输出边长为N的空心正M边型(N,M由用户输入)。

17. 输出空心圆

编写程序在屏幕上输出一个由”*”围成的空心圆。由于屏幕是25行×80列,故将园心定在屏幕中心40列的位置,将半径定为10行,这样可保证整个图形显示在一屏中。利用圆的方程X2+Y2=R2(R=10)可求出坐标(X,Y),然后用对称性算出右侧对应点的坐标。

18.横向绘制余弦曲线

在屏幕上用”*”横向显示0~360度的cos(x)曲线。此题关键在于余弦曲线在0~360度的范围内,一行要显示两个点。考虑到cos的对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形是左右对称的。若将图形的总宽度定义为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就应为62-m。程序中利用反余弦函数acos计算坐标(x,y)的对应关系。

19.绘制余弦曲线和直线

在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(x-1)+31的迭加图形。其中cos图形”*”表示,f(x)用”+”表示,在两个图形交叉点处则用f(x)图形的符号。图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。为此,可以先判定图形的交点,再分别控制打印不同的图形。

20.模拟人工洗牌

编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。

使用结构card 来描述一张牌,用随机函数来模拟人工洗牌的过程,最后将洗好的52张牌顺2

序分别发给四个人。

对每个人的牌要按桥牌的规则输出。即一个人的牌要先按牌的花色(顺序为梅花、方块、红心和黑桃)进行分类,同一类的牌要再按A、K、Q、J、…、3、2牌的大小顺序排列。另发牌应按四个人的顺序依次分发。

注:C随机数函数有:

void srand(unsigned seed)

功能:函数可以设置rand函数所用得到随机数产生算法的种子值。任何大于1的种子值都会将rand随机数产生函数所产生的虚拟随机数序列重新设置一个起始点。

int rand(void)

功能:此函数可以产生介于0到32767间的虚拟随机数,所谓虚拟随机数的意思就是因为当只设置相同的启动种子值,所产生的数值序列都是可预测的。要产生不可预测的数值序列,必须通过srand函数不断改变随机数的启始种子值,已产生最佳的随机数。

头文件:stdlib.h

21.用户猜测藏物位置:计算机在n行n列(行号为0到n-1,列号为0到n-1)的“棋盘”的某一位置处“藏放一物件”(具体位置通过使用“rand()%10”来随机产生);用户通过输入行列号来“寻找”该物件;若没猜对时计算机要告诉用户与藏放物件的位置有多远(取整后的近似距离)。

思考:若没猜对时也可增加告诉用户藏物的方向信息;另外在猜对结束时,还可告诉用户共猜了几次。

22.编写具有如下函数原型的递归与非递归两种函数f,负责判断数组a的前n个元素是否从大到小完全有序了,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。

bool f(int a[], int n);

提示:

(1)非递归函数中只需逐对地判断各a[i]与a[i+1]是否都已从大到小有序排列(i = 0,1,…,n-2)。

(2)递归函数中将问题分解处理为:若n=1(即只有1个元素时)则返回true而递归出口;n>1时,若最后一对元素不顺序则返回false,否则进行递归调用(传去实参a与 n-1,去判断前n-1个元素的顺序性),并返回递归调用的结果(与前n-1个元素的是否顺序性相同)。

23.编写具有如下函数原型的递归与非递归两种函数equ,负责判断数组a与b的前n个元素值是否按下标对应完全相同,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。

bool equ(int a[], int b[], int n);

提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),并返回递归调用的结果(与前n-1个元素的是否相等性相同)。

24.编程序,让计算机来猜测用户“暗记”的某张扑克牌:计算机从一副扑克牌(54张)中任意抽出27张,摆放在不同的三行上(每行9张),用户“暗记”某张纸牌,而后告诉计算机所

3

“暗记”的那张纸牌处于哪一行中;之后计算机再两次将纸牌重新摆放,并让用户再回答两次相同的提问(那张纸牌在重新摆放后又处在哪一行上);此时计算机会将用户所“暗记”的那张纸牌给挑出来。

例如,程序执行后的屏幕显示结果可设计为(其中的前缀a、b、c、d代表四种不同的花色):-------------------------------------------------------------

Line 1: c-9 d-3 a-7 d-9 a-9 c-3 b-8 a-A d-7

Line 2: b-10 a-Q d-6 b-4 a-3 b-9 b-K c-A d-8

Line 3: KING2 d-A b-A a-4 a-2 b-7 d-5 c-7 a-8

-------------------------------------------------------------

Remember a card, and tell me what line it reside in(1/2/3): 3

-------------------------------------------------------------

Line 1: c-9 d-3 a-7 b-10 a-Q d-6 KING2 d-A b-A

Line 2: d-9 a-9 c-3 b-4 a-3 b-9 a-4 a-2 b-7

Line 3: b-8 a-A d-7 b-K c-A d-8 d-5 c-7 a-8

-------------------------------------------------------------

What line the card you remembered reside in now (1/2/3) : 1

-------------------------------------------------------------

Line 1: c-9 b-10 KING2 d-9 b-4 a-4 b-8 b-K d-5

Line 2: d-3 a-Q d-A a-9 a-3 a-2 a-A c-A c-7

Line 3: a-7 d-6 b-A c-3 b-9 b-7 d-7 d-8 a-8

-------------------------------------------------------------

What line the card you remembered reside in now (1/2/3) : 1

-------------------------------------------------------------

Your remembered card is : KING2

提示:

(1)要从一副54张的扑克牌中任意抽出27张,可通过“rand()%54”所产生的随机值来确定。但注意,一旦随机抽走哪张,下次牌中就没有这张了。

(2)程序总按照一种策略将三行纸牌重新“摆放”,而后进一步让用户进行指定。上述所谓的策略指的是,总将纸牌“一分为三”:第一次要将每一行的9张分散到不同的3行上(每行仅“剩”3张),而第二次则要将上次“确定”出的某3张进一步分散到不同的3行上(每行只“剩”1张。此时靠用户再指定一次行号则可唯一确定所“暗记”的那张纸牌)。

25.编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=5),假设一位骑士(按象棋中“马走日”的行走法)从初始坐标位置(x1,y1)出发,要遍访(巡游)棋盘中的每一个位置一次。请编一个程序,为骑士求解巡游“路线图”(或告诉骑士,从某位置出发时,无法遍访整个棋盘—问题无解)。

当n=5时,意味着要在5行5列的棋盘的25个“点”处,按骑士行走规则,依次将1至25这25个“棋子”(数码)分别摆放到棋盘上(摆满25个位置则成功,否则失败问题无解)。

例如,当n=5且初始坐标位置定为(1,1) —即最左上角的那个点时,如下是一种巡游“路线图”。程序执行后的输出结果为:

4

(x1,y1)? => (1=>5, 1=>5) : 1 1

1 6 15 10 21

14 9 20 5 16

19 2 7 22 11

8 13 24 17 4

25 18 3 12 23

提示:

(1)“棋盘”可用二维数组B表示。

(2)编制一个具有如下原型的递归函数solve,用于完成任务:从(i,j)点出发,做第k至第n*n(即n的平方)次的移动—将k直到n的平方这些数码按规则分别摆放到棋盘即数组B 中,若成功则通过引用参数ok返回true,否则返回false。

void solve(int i, int j, int k, bool& ok);

(3)编制主函数,让用户输入作为巡游起点的初始坐标位置(x1,y1),在该处摆放“棋子”(数码)1,而后进行调用“solve(x1, y1, 2, ok);”来完成所求任务。

欲处理的初始问题为:从某点(x1,y1)出发,按所给行走规则,作24次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。

可分解化简为如下两个子问题(正是形成递归函数的基础):

① 由点(x1,y1)出发,按所给行走规则作1次移动到达(g,h)(或发现无路可走);

② 从(g,h)点出发,按所给行走规则,作23次移动,遍访棋盘中没被访问过的各点(或发现无路可走)。

solve函数具体实现时,若由(i,j)点出发已“无路可走”,则将引用参数ok置为false而递归出口;否则,先“迈一步”到达(g,h)点,而后再进行递归调用:solve(g, h, k+1, ok);以实现从新点(g,h)出发,将k+1直到25这些“棋子”(数码)分别摆放到棋盘上,若成功则通过引用参数ok返回true(否则返回false)。

点评:

(1)也可编制第二种解法的主函数:将棋盘上的n平方个点依次作为巡游起点的初始坐标位置(x1,y1),判断从每一位置出发是否有解或无解(输出“OK!”或“NO!”,但并不输出“路线图”)。

(2)若更改程序中的n值(如改为4或6等),便可求解其他阶数的巡游“路线图”。

(3)可改用非递归方法设计并编写solve函数,那样的话,通常要增加一个记录摆放“棋子”信息的数组,可记录下是沿着什么方向到达了当前的什么位置(在那儿摆放了“棋子”)等,而且对上述数组可按照栈(stack)的方式来使用(栈总是采用FILO即所谓的先进后出使用方式),以便在“无路可走”的情况下,回退(回溯)到上一个位置,接着按照另外的方向去寻找其他的“行走”方法。

26.设计程序在棋盘上放尽可能多的马,以使相互间不能被吃掉。最后给出最大可放置的马的数量及其放置方法。

27.编写程序对八皇后问题进行求解:在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后(注:皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子),并将结果以某种方式显示出来。

5

例如,当求出下述的一个解时,可输出如下信息来表示该解(输出了表示摆放皇后的坐标位置以及“棋盘状态”—棋盘中有皇后的位置放一个“Q”字符,其他位置为“+”字符)。

(1,1) (5,2) (8,3) (6,4) (3,5) (7,6) (2,7) (4,8)

Q + + + + + + +

+ + + + + + Q +

+ + + + Q + + +

+ + + + + + + Q

+ Q + + + + + +

+ + + Q + + + +

+ + + + + Q + +

+ + Q + + + + +

提示:

(1)通过“int LineNum[9]; bool a[9], b[15], c[15];”说明具有全局作用域的4个数组。其中的:

LineNum[i]表示第i列的皇后要放的行位置(只用其中的列号1到8);

a[i]为true(i =1,2,…,8)表示第i行上尚未放皇后;

b[i]为true(i =0,1,2,…,14)表示第i条斜对角线上尚未放皇后(斜对角线指的是“/”状对角线,该对角线上各点的行列号之和i+j为一个常数);

c[i]为true(i=0,1,2,…,14)表示第i条反斜对角线上尚未放皇后(反斜对角线指的是“\”状对角线,该对角线上各点的行列号之差i-j为一个常数)。

从而当使用语句“if ( a[j] && b[i+j-2] && c[i-j+7] ) LineNum[i]=j;”时,可用于判断并实现:如果在第j行的第i列上放置皇后安全的话,则将一枚皇后放置到那儿。

(2)编制一个具有如下原型的递归函数solve,它负责往第i列开始的连续8-i+1列上均放上皇后,若成功则通过引用参数ok返回true(否则返回false)。

void solve(int i, bool& ok);

摆放皇后之后,若i=8即已放满时则递归出口;否则通过solve(i+1,ok);进行递归调用。

(3)编制主函数,首先初始化一个“空棋盘”,即将a、b、c数组的各元素均置为true(表示当前棋盘的8个行、15条斜对角线以及15条反斜对角线上都尚未摆放皇后)。而后执行调用语句“solve(1, ok);”,它负责往第1列开始的连续8列上均放上皇后,若成功则通过引用参数ok返回true(否则返回false)。

点评:

(1)可改用非递归方法设计并编写solve函数,那样的话,通常要设置数组来记录皇后的摆放位置信息,还要记录这些皇后所产生的“影响面”(所建立的“势力范围”)—使得哪些行列位置不可再摆放皇后。当在新的行列位置摆放了皇后、但此时又无法进一步摆放其他的皇后时,要回退(回溯)到上一个位置接着去考虑另外的“行走”方法(若还有的话)等等。但注意,“回退”一步后,要同时“撤销”由于该步的回退而关联的那些“影响面”(释放“势力范围”)。

(2)本程序只是找到了某一种“摆放方案”而终止,还可进一步考虑寻找其他各种不同的“摆放方案”(实际上共有92种)。

(3)也可用同样的方法去处理其他“阶数”的皇后问题,如求解四皇后问题等。

6

28.八车问题。设计程序在棋盘上放八个车,以使相互间不能被吃掉。

29.编一迷宫游戏程序,迷宫生成有用户输入和程序自动生成两种方式(迷宫以矩阵表示),要求输出迷宫和走出迷宫的路径。

30.编一棋盘游戏程序,人为一方,计算机为一方,人下时字符* 将放在所指定的位置,而计算机下时字符@ 将放在某一空格位置。行、列、或两对角线有连续三个相同字符一方为胜方,也有平局情况。要求能动态演示。

*@

@*

**

31.一个人带有一只羊, 一框菜和一只狼要过河, 但船上除了载一人以外, 最多每次只能再带一样东西。而当人不在场的情况下, 羊和菜在一起, 羊要吃菜, 狼和羊在一起, 狼会吃羊。问怎样安排, 人才可以安全地把三样东西都运过河去。

32.Hanoi(汉诺)塔问题。据说这是古代印度布拉玛神庙里的僧侣玩的一种游戏。游戏的装置是一块铜板,上面有3根金刚石的针,在其中一根针上放着从大到小的64个盘子。游戏的目标是把所有盘子从以根针上移到另一根针上,还有一根针作为中间过渡。游戏规定每次只能移动一个盘子,并且大盘子不能压在小盘子上面。由于需要移动的次数太多,该游戏的结束标志着世界的末日。要求用动画形式演示盘移动结果。

33.魔方阵。把整数1到n2排成一个n×n方阵, 使方阵中的每一行, 每一列以及对角线上的数之和都相同。如n为奇数, 魔方阵可按下述方法构成:

(1) 把1填在第一行的正中间, 然后填入后续的数;

(2) 若数k填在第i行第j列的格子中, 那么k+1应填在它的左上方, 即第i-1行第j-1列的那个格子中, 如果左上方无格子,即:若i-1为0, 那么填在第n行第j-1列的格子中;若j-1为0, 那么填在第i-1行第n列的格子中; 若i-1和j-1都为0, 那么填在第n行第n列的格子中。

(3) 若按(2)的方法找到的格子中已填过数了, 那么数k+1改填在第k个数的正下方。即填在第i+1行和第j列的那个格子中。编一程序实现上述算法,并模拟显示其过程。

34.一个有机体生命游戏在一个矩阵上进行, 每一个矩阵方格可以包含一个有机体, 不在边上的方格有8个相邻的方格, 用occ(k)表示与方格k相邻的有机体个数, 应用简单的规则从前一代有机体配置产生下一代有机体的配置:

(1) 如果2≤occ(k)≤3, 那么方格中的有机体活倒下一代, 否则或孤独而死亡, 或因拥挤而死亡;

(2) 如果occ(k)=3, 那么在一个空方格k中诞生出一个新有机体。

7

8 编一程序实现上述算法,并模拟显示其过程。

35. 23根火柴游戏: 两个游戏者开始拥有23根火柴(或小棒)。每个游戏者轮流移走1根、2根或3根火柴,拿到最后一根火柴的就算输了。编一程序与计算机玩这个游戏。

36. 设计一种结构能表示最多有1000位(或其它指定位数)的大整数(正、负整数均可),并实现这类数的加、减、乘、除法运算。

37.搬山游戏

设有n 座山,计算机与人作为比赛的双方,双方轮流搬山。规定每次搬山的数目不能超过k 座,谁搬最后一座谁输。游戏开始时,计算机请人输入山的总数(n)和每次允许搬山的最大数目(k)。然后请人先开始,人输入了需要搬走的山的数目后,计算机马上输出它搬多少座山,并提示尚余多少座山。双方轮流搬山直到最后一座山搬完为止。计算机显示谁是赢家,并问人是否要继续比赛。若人不想玩了,可以输入山的总数为0,计算机便会告诉人共完了几局,双方胜负如何。

解决这类问题的基本方法是先进行分析,找出游戏对弈的规律性,然后让计算机按照游戏的规则,模拟人进行游戏。这类程序中计算机游戏水平的高低,实际上取决于程序设计者对游戏规律的认识。

首先设计计算机参加游戏的算法,计算机每次搬山时应遵循如下原则:

(1) 当:剩余山的数目-1<=可移动的最大数k 时,计算机要移(剩余山的数目-1)座,以便

将最后一座山留给人。

(2) 对于任意正整数x, y ,一定有:

0<=x%(y+1)<=y

因此,对于我们的问题来说,在有n 座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k ,它应搬山的数目要满足下列关系:

搬山数量=(当前所剩的山数-1)%(k+1)

如果算出结果为0,即整除无余数,则规定只搬一座山,以防止冒进后发生问题。

38.调车头

下面铁路线A 段中,有n 个车头,按图中所示的顺序编号为1,2,...,n 。每个车头都可以在铁路上独立行驶,但约定,当B 段或C 段已有车头时,新进入这二段的车头号必须比该段中已有的车头号小。设计一个程序,调用递归过程,将A 段中车头的顺序颠倒过来。

39.地图着色 地图上有不同国家(不同区域),每个国家都与其他一些国家邻接。现要求对地图着色,使所有的国家与它的邻接的国家有不同的颜色。通常由四种颜色就已足够。

提示:可采取试探的方法逐步逼近最后解,即按某种模式生成一个部分解,检查它是否合格。如为合格,在扩展这个部分解向最后解逼近,否则为不合格,不管如何扩展这个部分解都不会得到最后解。这时必须放弃已生成的部分解中的某些结果,“回朔”到先前的部分解,在生成一个部分解,直到获得最后解。这种算法称为回朔算法。以着色一个六个区域的地图为例。

n-1 1 n ... 2 A 段 C 段 B 段

区域邻接区域

1 2 3 4 5 6 0

2 1

3

4 0

3 1 2

4

5

6 0

4 1 2 3 6 0

5 1 3

6 0

6 1 3 4 5 0

表中数据正是所需输入的数据,

可以用一个n×n的矩阵来存放(n为

区域数目)。0表示邻接区域的结束。

设着色的颜色次序为红、蓝、绿、黄。

对于区域起首先着成红色。对于区域2,因与区域1邻接,所以不能再着红色,而只能着第二种颜色,即蓝色。同理区域3着绿色,区域4着黄色,区域5着蓝色,区域6由于与区域1、3、4和5邻接,所以四种颜色都不合适。这时,必须回溯到区域5,它不能是已着好的蓝色,也不能着蓝色的下一种颜色绿色,因为这会使它与区域3同色,再选下一种颜色,即黄色,它与区域1和3不同色。所以区域5退去蓝色,改着黄色。此后,区域6可着蓝色。最后,得到的解为各区域的颜色依次为红、蓝、绿、黄、黄、蓝。

采用递归算法:

区域编号以自然数编号1…n(n为区域数)

颜色可用枚举值enum color {red=1, blue, green, yellow};

算法描述为:

V oid colorarea(int j) //参数j为当前要着色的区域编号

for(c=red; c<=yellow; c++)

{

if(区域j可着c色) //即区域j的邻接区域都没有着过c色

if(j==n) prtmap; //输出结果

else colorarea(j+1); //进一步着色下一个区域

区域j退去c色

}

40. 安排研究生课程表。设有m个研究生和可选修的n门课程,如果某个研究生选修的两门课程安排在同一时间内上课,则这两门课程就会发生冲突,要求不冲突地安排课程表。

提示:研究生选课信息可存放在m×n矩阵a中,a[i,j]=1表示研究生i选修了课程j,a[i,j]=0

表示研究生i未选修了课程j。

9

41.编写程序,计算3a的值,其中a的任意的正的实数

(二)文件类题目

1.统计一源程序语句数、行数、字符数、类及函数的个数。

2.将源程序每行前加上行号并删除其所有注释后生成一打印文件。

注意C++语言程序注释形式有://注释内容和/* 注释内容*/ 两种形式。

3.编一查找给定字符串程序,要求输出给定字符串在文件中的出现的行数,第一个字符在此行中的位置。应区分给定字符串本身构成一个字和作为另外一个字的子串两种情况。

4.设计一文件阅读器, 可以一次一屏(20或22行)显示文件内容, 每次显示完一屏内容后, 提示使用者键入一控制字符以控制屏幕翻滚。如字符'n'显示下一屏, 字符'p'返回上一屏, 字符'q'结束阅读。

5.编一程序显示指定文件的第n 行, 并可对此行执行拷贝、修改、删除、在此行后增加一行等功能。

6.编程序CompFile,首先让用户输入两个文件名及其路径(二文件均为text文件),而后通过使用类成员函数getline逐行读入这两个指定文件的内容并进行比较。若发现有不同,则在屏幕上显示出相异二行的行号及其内容,并暂停下来询问用户是否需要继续比较后继行,直到用户回答不需要继续进行比较,或者已经比到了二文件的结束时停止处理。

思考:也可改写程序,将“让用户输入两个文件名及其路径”改为从命令行参数处获取这两个文件名及其路径。

7. 编程序,从键盘输入某个C++源程序文件名,而后通过getline依次读入该文件中的各行(假设每行都不超过100个字符),并统计显示出该源程序文件中出现了哪些你所关心的C++关键字,以及各关键字出现的次数(所关心的那一批关键字由程序进行指定)。

提示:可将m个所关心的关键字存放在一个二维字符数组A之中,而后从各读入行中“分解”出每一个“字”,并依次与A中的各关键字进行比较。若二维字符数组A中的关键字是按“从小到大”的顺序存放的话,则还可以使用折半查找方法在A中进行“查找”以提高速度。

8.设计一个程序,该程序输入一个英语单词和它的释义(应考虑一个单词可以有多个释义)。将单词和它的释义分别存放在文件word.dat和meaning.dat中。文件word.dat中存储的数据的结构为:

class index

{ public:

char word[20];

streampos offset;

};

其中,数据成员offset用于记录单词word的释义在文件meaning.dat中的位置。用户输入一个单词,屏幕输出该单词的释义。

10

9.编写程序,从键盘读入一个文本文件名字(可带路径),为该文件中的所有单词建立一个词汇索引。按字母顺序显示所有单词(仅一次),后面紧跟着它们所在的行号。大写与小写字母被认为是相同的。例如,对于下列的输入文件:

To be or

not to be,

that is the question.

产生的词汇索引如下:

be 1 2

is 3

not 2

or 1

question 3

that 3

the 3

to 1 2

10. 编写程序,检查所给的两个文本文件是否包含相同的单词(不分大小写),不管它们的顺序和出现次数。假设这两个文件是A和B,如果出现在A中的单词也出现在B中,则输出这个单词,以及它在文件A和文件B中第一次出现的行好。

思考:两个文本文件是否包含完全相同的单词(不分大小写),不管它们的顺序和出现次数。假设这两个文件是A和B,如果出现在A中的每一个单词也出现在B中,并且出现在B中的每一个单词也出现在A中,则这两个文件就包含完全相同的单词。

11.编写程序,读取任何文本文件,查看圆括号和大括号是否匹配,即只允许成对出现,并按正常的方式排列。例如,下面是正确的例子:

({((…)(…))}())

注意,两个大括号{}之间的圆括号()是按适当的方式成对出现的。不正确的例子有:

{(})

{)(}

11

大一C语言课程设计题目

课 程 设 计 任 务 书 信息工程与自动化 学院 计算机科学与技术 专业 2011 年级 学生姓名: 课程设计题目: 程序设计语言课程设计 课程设计主要内容: 一、 基础程序设计: 本设计部分主要完成与链表操作相关的基本运算,其中包含:链表的建立、链表的输出、链表的插入、链表的删除等运算。. 二、 综合程序设计: 该部分主要是培养学生在程序编写方面综合能力的训练,学生选作其中的一至二题程序的编写与实施。 1、设计统计任意文本字数的程序(张力老师组必做): 要求包括:中英文文本的:中文字数、数字数目、英文字符数、英文单词数及其他符号。 2、车票订购统计系统(张力老师组必做): 下图是昆明——北京的沿途车站与票价: 请用C 语言为之开发一个售票程序,要求如下: (1)乘客购票时用菜单选择起点站和终到站。如果选择的起点站和终到站为同一个站则报错,程序退出。 (2)选好起点站和终到站之后,通过调用函数int BuyTicket() 为之计算票价和里程,并在屏幕上显示出来。 (3)用文件类型存储每一次售票记录,包括:售票流水号,起点站,终点站,里程,金额等数据,并统计所有存储记录的总售票金额及各站的旅客流量(进站流量+出站流量)。 3、万年历的设计: 要求: 模仿现实生活中的挂历,能够显示年历、月历、日历,并具备退出功能。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月。 4、通讯录管理系统:

制作一个通讯录程序,该程序具有查找、添加、修改、删除功能。通讯录包括:姓名,电话,街道,城市,省,邮编等。 模块设计参考: 第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块——Menu()的功能是:显示英文提示选单。 第三个模块——Quit()的功能是:退出选单。 第四个模块——Create()的功能是:创建新的通讯录。 第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。 第六个模块——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。 第七个模块——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。 第八个模块——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。 第九个模块——List()的功能是:显示通讯录中的所有记录。 设计指导教师(签字): 教学基层组织负责人(签字): 年月日

《C语言课程设计》实验报告

《C语言课程设计》报告 学院:信息工程学院 专业:信息管理与信息系统设计题目:通讯录程序设计班级:2016级一班 学号:201601510138 姓名:张进步 指导教师:杨菲菲 时间:12.24

学生通讯管理系统 1.1 设计目的 学习如何实现一个复杂的信息管理系统——学生通讯管理系统,能够实现老师对学生基本信息的记录、查询、修改。 通过本次学习,读者能够掌握: (1)如何设计主菜单和子菜单,以及各级菜单的响应与返回操作; (2)如何合理设计不同的结构体对系统中多个实体进行封装; (3)如何合理设计多个结构体数组管理不同实体对应的数据; (4)如何对复杂的函数过程进行拆分,用多个子函数进行封装; (5)进一步熟悉文件读取的相关操作。 1.2需求分析 本章的学生信息管理系统的主要功能面向老师,能够实现对学生信息进行录入、修改、查询。 学生信息方面的功能需求如下。 (1)新增学生信息,包括姓名、籍贯、电话号码(2)、电子邮箱。 (2)修改学生信息,可以选择对某个学生的某个属性值进行修改。 (3)查找学生信息,即输入要查找的学生学号,实现学生信息查询。 (4)显示所有学生信息,并以列表的形式清晰呈现。 1.3总体设计 系统功能结构图如图所示;学生信息管理系统 学生信息管理模块:包括4个子模块,分别是学生信息的录入,学生信息的修改,学生信息的查询,学生信息的浏览。

1.4详细设计与实现 1.4.1 预处理及数据结构 1.头文件 本项目涉及4个头文件,其中#include使用字符串的函数的时候需要添加此头文件,#include #include /*system使用的函数*/ #include /*getchar、getch函数使用的头文件*/ #include /*strcmp比较2个字符串是否一样*/ 2.宏定义 LEN sizeof(struct student)表示struct student的长度。DATA是按格式输出结构体的各项数据,能够方便输出操作,减少代码量。 #define_CRT_SECURE_NO_W ARNINGS #include #include #include #include #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-15s%-15d%-15d%-15s\n" #define DATA stu[i].numb,stu[i].name,stu[i].nat,stu[i].num1,stu[i].num2,stu[i].mail 3.结构体 利用一个结构体struct student struct student/*定义学生信息结构体*/ { int numb;/*学号*/ char name[15];/*姓名*/ char nat[16];/*籍贯*/ int num1;/*电话号码1*/ int num2;/*电话号码2*/ char mail[40];/*邮箱*/ }; 4.全局变量 分别利用全局变量结构体数组struct student stu[50];来记录所有学生的基本信息,避免程序运行过程中多次初始化,方便各个式子函数调用。 struct student stu[50];

[C语言课程设计题目](丁海军)

C语言课程设计设计题 丁海军 本手册提供的设计题大致可分为为3类:第一类侧重于算法设计与实现;第二类侧重于文件操作。 (一)算法设计类题目 1. Fibonacci数列。Fibonacci数列的计算公式如下: fib(1) = 1; fib(2) = 1; fib(n) = fib(n-1) + fib(n-2); //对大于等于3的任意n (1)简单变量“数据平移”方法计算Fibonacci数列的第n项(正整数n通过键盘输入):说明变量old1=1,old2=1,newItem;新的Fibonacci项newItem总是“距它最近”的前两项(old1与old2)的累加和。而后通过“old1=old2; old2=newItem;”进行所谓的“数据平移”。接着计算另一个新的Fibonacci项newItem,依次循环,直到求出数列的第n项时为止。 (2)使用数组求出Fibonacci数列的第n项(正整数n通过键盘输入)并显示在屏幕上:说明数组f用来存放Fibonacci数列的各项之值,且仅初始化前两个元素f[0]=1,f[1]=1,而后通过f[i]=f[i-2]+f[i-1];依次计算出f[2]到f[n-1](注意f[n-1]恰为所要求出的第n项)并将该值显示在屏幕上。 2.编程序,循环进行如下的处理过程:由计算机生成简单的四则运算题;用户给出答案;计算机判断对错。直到用户回答说不再继续做了时结束程序。 提示:可让用户选择指定出加、减、乘、除哪一种运算题,以及出一位数还是两位数的运算题;而后通过使用“rand()%10”或“rand()%100”来获得一个0到9的一位整数随机值或得到0到99的两位整数随机值来为用户出题。还可进一步对用户所做算术题的对错次数进行记录,结束程序时给出一个某种形式的成绩。 3.数的进制转换 (1)将输入的2进制数(一个非“0”即“1”的字符串)化为10进制数。 提示:用字符数组a盛放所输入的二进制数;而后从后往前逐一计算每一位的“位权”w (2的0次方、2的1次方、...),再计算“位权”乘以“位值”并累加到一个初值为0的变量value 上,最后输出该value。 (2)如何把8进制数或16进制数化为10进制数。 (3)如何把某一个k进制的数化为10进制数呢? 4.编程序,输入正整数m,它代表一个人民币钱数(元数)。求取这样一个方案,使用最少张数的人民币纸币,凑成上述的钱数m,并输出求取结果。

C语言程序设计课程设计题目

1一元稀疏多项式的运算 问题描述:设有两个带头指针的单链表表示两个一元稀疏多项式A、B,实现两个一元稀疏多项式的处理。 实现要求: ⑴输入并建立多项式; ⑵输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……c n,e n,其中n 是多项式的项数,c i,e i分别为第i项的系数和指数。序列按指数降序排列; ⑶多项式A和B相加,建立多项式A+B,输出相加的多项式; ⑷多项式A和B相减,建立多项式A-B,输出相减的多项式; ⑸多项式A和B相乘,建立多项式A×B,输出相乘的多项式; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(x+x2+x3)+0 (4)(x+x3)-(-x-x-3) 2成绩排序 假设某年级有4个班,每班有45名同学。本学期有5门课程考试,每门课程成绩是百分制。假定每个同学的成绩记录包含:学号、姓名各门课程的成绩共7项,其中学号是一个10位的字符串,每个学生都有唯一的学号,并且这4个班的成绩分别放在4个数组中,完成以下操作要求: ⑴编写一个成绩生成函数,使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0∽100之间的整数),通过调用该函数生成全部学生的成绩; ⑵编写一个平均成绩计算函数,计算每个同学的平均成绩并保存在成绩数组中; ⑶用冒泡排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进

行班内排序; ⑷用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序; ⑸对已按平均成绩排好序的4个班的同学的构造一个所有按平均成绩的以非递增方式排列的新的单链表; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 3迷宫问题 问题描述:以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 ⑵编写递归形式的算法,求得迷宫中所有可能的通路; ⑶以方阵形式输出迷宫及其通路。 [测试数据] 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 1 2 3 4 5 6 7 8 实现提示:

华中科技大学计算机学院C语言课设实验报告

华中科技大学计算机科学与技术学院 《C语言程序设计》课程设计 实验报告 题目:科研项目信息管理系统 专业:计算机 班级: 学号: 姓名: 成绩: 指导教师:李开 完成日期:2009年10 月20 日

科研项目信息管理系统一、系统功能结构模块图 二、数据结构设计及其用法说明 typedef struct lakey{ char name[30];/*团队名称*/ int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/ struct lakey *next; }*plakey;/*统计3中用到的数据结构*/ typedef struct emmey{ char name[30];/*团队名称*/ int teacher;/*老师人数*/ int harden;/*项目数*/ float bizhi;/*比值*/ struct emmey *next; }*pemmey;/*统计4中用到的数据结构*/ typedef struct kPro{ char code[15];/*项目编号*/ char sort;/*项目种类*/ int aking1; char time[8];/*项目时间*/ float dudu;/*项目经费*/ int aking2;

char beiler[15];/*负责人*/ int aking3; char keynoName[30];/*所在团队名称*/ struct kPro *next; }harden,*pHarden; typedef struct Komo{ int teacher;/*老师人数*/ char name[20];/*院系名称*/ int student;/*学生人数*/ float bizhi;/*二者比值*/ struct Komo *next; }*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/ typedef struct kTea{ char name[30];/*团队名称*/ char beiler[15];/*负责人*/ int stuNum;/*学生人数*/ int aking2; int coco;/*老师人数*/ char colName[20];/*所在院系的名称*/ int aking1; struct kTea *next; pHarden child; }keyno,*pKeyno; typedef struct edward{ char name[20];/*院系名称*/ int totalnum;/*项目总数*/ int num973;/*973项目数*/ int num863;/*863项目数*/ float amount;/*经费数*/ struct edward *next; }*pedward;/*统计2中用到的数据结构*/ typedef struct kCol{ char name[20];/*院系名称*/ int aking; char beiler[15];/*院系负责人*/ struct kCol *next; char call[15];/*负责人电话号码*/ pKeyno child; }kekey,*pKekey;

C语言课程设计报告

XX大学 课程设计报告 课程设计名称:C语言课程设计 课程设计题目:排班系统 院(系):XX学院 专业:XX 班级:XX 学号:XXXXXXXXXXXXX 姓名:XX 指导教师:XXX 完成日期:XX年X月X日

沈阳航空航天大学课程设计报告 目录 第1章需求分析与概要设计 (1) 1.1需求分析 (1) 1.2概要设计 (1) 第2章详细设计 (2) 2.1排班系统基本结构 (2) 2.1.1 排班系统细节剖析 (2) 2.2程序详细介绍(算法实现) (3) 第3章调试分析 (5) 3.1我的调试: (5) 3.2运行结果 (5) 第4章用户手册及结束语 (8) 4.1用户手册 (8) 4.2结束语 (8) 参考文献 (9) 附录(程序清单) (10)

沈阳航空航天大学课程设计报告第1章需求分析与概要设计第1章需求分析与概要设计 1.1 需求分析 1.题目要求:为多名保安设计一个排班系统,每人可以自行预先选出一天为休息日,系统打印可能的轮班方案并存储结果。尽可能做到令所有人满意,保排班方案的公平性。 2.题目分析:本题的重点和难点在于保安的人数是不确定的,且他们可能选择的休息日也无法确定,所以方案的结果也就不仅仅有一种。由此可以看出只有解决好这两个问题,才能够符合该题目的要求,完成保安的排班工作。 1.2 概要设计 1.总体思路:对于这道题目,我的思路是采用二维数组的方式来解决。大概过程是先假设所有人都上班,即没有休息日。然后再让每个人进行选择自己希望的休息日。先每个人选择出一天,然后系统进行排班,输出其所输入数据的对应方案。然后在第一次所输数据的基础上,若还有其他选择,则进行二次输入,以此更改初始数据,重新设计可能的排班方案。 2.细节实现:因为题目的要求是打印可能的方案,那么如何来实现打印呢?我采用了通过对二位数组中的每一个值用阿拉伯数字0和1来标记,以1来表示工作,0来表示休息。 3.功能作用:本系统系保安的排班系统,可以完成基本的排班功能,在此基础上,还为用户设计了二次输入的选项,以此来解决当所输数据不满足要求,无法完成排班的问题,同时也可以为用户提供更多的可行方案,而不是仅仅局限于一种。

C语言程序设计课程设计报告

C语言程序设计课程设 计报告 内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)

《C语言程序设计》课程设计报告 (2013— 2014学年第 3 学期) 题目: C语言课程设计 专业:软件工程 班级:软件工程技术2班 姓名学号: 1 林燕萍 指导教师:吴芸 成绩: 计算机科学与技术系 2014 年6月23日

目录 一、课程设计的目的与要求 (1) 二、方案实现与调试 (3) 2.1 掷骰子游戏 (5) 2.2 射击游戏 (7) 2.3 计算存款本息之和 (8) 2.4肇事逃逸 (10) 2.5 礼炮 (12) 2.6 汽车加油 (14) 2.7 大优惠 (16) 2.8 金币 (19) 三、课程设计分析与总结 (23) 附录程序清单 (25) 一、课程设计的目的与要求(含设计指标) C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了基知识,如概念,方法和语法规则之外更重要的是进行实训,以提高学习者的动手和编程能力,从应试课程转变为实践工具。这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C 语言程序设计任务书》,以在实训过程中给学生提供帮助。达到如下目的: 1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;

2.让学生扎实掌握C程序设计语言的相关知识; 3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。 编写程序要求遵循如下基本要求: ①模块化程序设计 ②锯齿型书写格式 ③必须上机调试通过 二、方案实现与调试 2.1掷骰子游戏 2.1.1 题目内容的描述 1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。 2) 将每人每次的分值累加计分 3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。 2.1.2输入数据类型、格式和内容限制和输出数据的说明 数据类型:整型;内容限制:随机数的产生;输入数据结果:胜利的一方 2.1.3主要模块的算法描述

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

C语言课程设计(1)

C语言课程设计 学院:机电 专业:机械设计制造班级:数控(2)班学号:2520110201 姓名:徐莹 指导教师:宋亚岚2012年6月22日

目录 第一章选择和循环程序设计 (3) 第二章数组 (7) 第三章函数 (9) 第四章指针 (11) 第五章课程设计总结 (14)

例1:输入任意的三位整数以反向形式输出。如输入678则输出876。 【算法分析】(用文字或流程图进行描述) 对于三位数n以反向输出要求将构成这三位数的元素进行拆分。个位上的元素乘100加上十位上的元素乘10加上百位上的元素乘1得到一个新三位数。将新的三位数输出即可。如何将三位数进行拆分则需用到表达式中整除和求余运算具体方法如下: 用x1,x2,x3分别存放拆分后的百位、十位个位数 x1=n/100 则得到百位数 x2=n/10%10 则得到十位数 x3=n%10 则得到个位数 y=x3*100+x2*10+x1*1 【源程序代码】 #include void main() { int x1,x2,x3,n,y ; printf(“please input number n :”); scanf(“%d”,&n); x1=n/100 ; x2=n/10%10 ; x3=n%10 ; y=x3*100+x2*10+x1*1 ; printf(“y= %d”,y) ; } 【编译示图】(示图中要有0 error,0 warning的提示)

【运行结果示图】 第一章选择和循环程序设计 1、企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提10%,利润高于100000元,低于200000元(1000001000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。 要求: (1)用if 语句编程 (2)用switch语句编程序 【算法分析】(用文字或流程图进行描述)根据利润的范围,确定可提成的百分比,利润为i 1.i<=100000,w=i*0.1 2.100000

C语言课程设计题目

C语言程序课程设计题目 一、程序设计题目:简单的学生成绩管理程序 程序设计功能及要求: (1) 总人数定义为宏,数据使用文件存放; (2) 输入学生姓名学号,及五门成绩,并计算每个学生五门功课的平均分,并按平均分排列名次,若平均分相同则名次并列;结果写入文件并按格式打印在屏幕上。 ⑶ 统计全班每门课程的平均分,并计算各分数段(60以下,60~69,70~79,80~89,90以上)的学生人数;结果写入文件,并按格式在屏幕上打印; ⑷ 在屏幕上打印出所有不及格学生的下列信息:学号,不及格的课程名,该不及格课程成绩; ⑸ 在开始画面加入简单的菜单便于选择各种功能。 例: 1学生条目输入 2 成绩统计 3分数段统计 4不及格学生筛选 ⑹文件格式要求 1.原始数据文件格式(具体数据和项目自行编写) 学号姓名英语C语言高等数学………….. 1 张三76 89 78 2 李四…. …. …. 2.输出数据文件(由程序自动生成) 1)学生综合成绩文件。 2)学号姓名英语C语言高等数学…………….平均成绩名次 1张三76 89 78 ………….. 2李四…. …. …. 3)统计结果文件。 4)分数段英语C语言高等数学…………………. <60 2 … 60~69 8 … 70~79 5 … 80~89 10 … ⑺加入优等生统计功能,要求按优等生条件筛选出优等生的条目存入单独文件,并输出到屏幕。 优等生标准(满足之一即可): 1 平均成绩上80。 2平均成绩及格但未上80,有单科成绩上90。 3平均成绩未及格,有单科满分。 二、程序设计题目:简单的同学通讯录程序设计 [问题描述]

具有数据插入、修改、删除、显示、查询和统计功能的电话簿管理程序。 [程序设计功能及要求] ⑴人数不定,数据使用文件存放。 ⑵记录每位同学的学号、姓名、性别、工作单位、电话号码和E-mail地址建立单独的条目,存入数 据文件。 ⑶可对记录中的姓名和电话号码等进行修改。 ⑷可增加或删除记录 ⑸可显示所有保存的记录 ⑹加入统计功能,可以统计男女同学或总人数。 ⑺加入查询功能,通过姓名、学号或电话号码查询到同学的条目。 ⑻在开始画面加入简单的菜单便于选择功能。 ⑼文件格式 1.储存数据文件格式 学号姓名性别工作单位电话号码E-mail 1 李四…. …. …. ⑽选做:加入文件加密系统,对储存数据文件进行简单的加密,要求通过直接打开储存数据文件无法获得其中的数据。但同时不影响程序对储存数据文件的调用。 [设计提示] 本程序建议采用结构体类型和文件系统实现。 三、程序设计题目:图书管理系统 [问题描述] 设计一个具有数据插入、修改、删除、显示和查询功能的图书管理程序。 [设计要求] (1)用户登录功能; (2)设计程序运行界面; (3)能用菜单选择各功能。 说明: (1)数据包括:书名、作者、书号、出版社、出版日期和单价; (2)可对图书信息修改; (3)可增加或删除图书信息; (4)可显示所有保存的图书信息; (5)可按书名、作者、书号或出版社进行图书信息的查询。 四、职工信息管理系统设计 1. 目的: (1)要求学生熟练掌握C语言的基本知识和编程技能; (2)基本掌握结构化程序设计的基本思路和方法; 2. 要求 基本要求: (1)试设计一个职工信息管理系统,使之能提供以下功能: (2)系统以菜单方式工作

C语言程序设计课程设计

《C语言程序设计》课程设计 1课程设计目的 C语言课程设计是在“C语言程序设计”课程后集中安排的1周相关的实践技能训练环节。它的目的是通过实践环节的训练,培养学生查阅资料的能力、分析与解决问题的能力、应用C语言开发与设计程序的能力。 2课程设计选题 2.1 题目1 必做题目,其余题目任选一题完成 题目1:年历显示。 功能要求: (1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 (2)输入年月,输出该月的日历。 (3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 题目2:小学生测验 面向小学1-2年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求: (1)电脑随机出10道题,每题10分,程序结束时显示学生得分; (2)确保算式没有超出1-2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0-50的范围,负数更是不允许的; (3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案; (4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; (5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN” 题目3:学生学籍管理系统(可以2人合作完成) 用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。 功能要求: (1)系统以菜单方式工作。 (2)登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的学生信息; (3)删除已知学号的学生信息; (4)查找已知学号的学生信息; (5)按学号,专业输出学生籍贯表。 (6)查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业。 题目4:通讯录程序设计 设计一个实用的小型通讯录程序,具有添加,查询和删除功能。由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码。电话号码可由字符和数字组成。实现功能:(1)系统以菜单方式工作 (2)信息录入功能 (3)信息浏览功能

c语言课程设计题目

c语言课程设计题目 Revised by BETTY on December 25,2020

C语言课程设计题目 一、实训要求 1)C语言课程设计要求 1.可自己选定一题目,限1人选的题目只能由1人单独完成,如限3人选的题目可由1-3人 完成。 2.模块化程序设计 3. 4.锯齿型书写格式 5. 6.必须上机调试通过 7. 2)课程设计报告内容要求: 1.课程设计题目 2.总体设计(程序设计组成框图、流程图) 3.详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) 4.调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的 解决措施 5.源程序清单和执行结果:清单中应有足够的注释 6.具体格式另附说明。 3)检查要求: 1.每个人必须有程序运行结果; 2.每个人必须交《课程设计报告》打印稿---—注:各班班长将本班学生的课程设计报告电 子版用优盘拷贝(标上学号、姓名、班级)上交。 4)打分标准: 1.根据平时上机考勤;注重平时上机成绩,教师要不定期检查学生进度,学生不得以自己 有私人电脑为借口而不来上机。 2.根据程序运行结果; 3.根据《C语言课程设计报告》,学生能对自己的程序面对教师提问并能熟练地解释清楚以上三项缺一不可,否则不能到得相应学分 二、课程设计题目: 1:职工信息管理系统设计(限最多3人完成) 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能: 系统以菜单方式工作 职工信息录入功能(职工信息可用文件保存)--输入 职工信息浏览功能--输出 查询和排序功能:(至少一种查询方式)--算法 按工资查询 按学历查询等

C语言课程设计题目汇总

目录 题目6:通讯录程序设计(限2人)........................................................................................................................................... 题目10:机房机位预定系统(限2人)..................................................................................................................................... 题目13:工资纳税系统............................................................................................................................................................. 题目41:条件编译.....................................................................................................................................................................

题目6:回文数的形成............................................................................................................................................................... 杨顺民题目 C语言程序课程设计题目 题目1:年历显示 功能要求: (1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。(2)输入年月,输出该月的日历。 (3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 题目2:小学生测验 面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求: (1)电脑随机出10道题,每题10分,程序结束时显示学生得分; (2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的; (3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案; (4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分; (5)总成绩90以上显示“SMART” ,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”

C语言课程设计参考题目 (1)

C语言课程设计参考设计题目 1、学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: ●系统以菜单方式工作 ●学生信息录入功能(学生信息用文件保存)---输入 ●学生信息浏览功能——输出 ●查询、排序功能——算法 1、按学号查询 2、按姓名查询 ●学生信息的删除与修改(可选项) (2)功能要求 ●界面简单明了; ●有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新 输入; ●最好用链表的方式实现。 (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 2、学生综合测评系统 每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。 A、学生信息处理 (1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。 提示:学生信息可先输入到数组中,排序后可写到文件中。 (2) 插入(修改)同学信息: 提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容, (3) 删除同学信息: 提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删

C语言程序课程设计猜数字游戏

C语言程序设计课程设计 : 自 动 化 级 : 名: 学号: 指导教师: 兰州交通大学自动化与电气工程学院 2015年07月21日

一.引言 设计目的 复习和巩固C语言基础知识,进一步加深对C语言的理解和掌握。提高同学将课本上的理论知识和实际结合的能力,锻炼同学的分析解决实际问题的能力,提高同学团队合作的能力。使同学们善于观察和思考,善于合作,具备实践编程的基础素质,和实际问题分析的思考方式。 设计要求 在设计时充分地分析和理解问题本身,综合考虑系统功能,怎样使系统结构清晰、合理、简单和易于调试。然后详细设计,确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。最后认真完成课程设计说明书,并对设计方法,结果等进行总结。 充分地分析和理解问题本身,弄清要求做什么(What to do)。在确定解决方案框架过程中(How to do),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。 确定算法的主要流程,在此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。 上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。静态检查主要有两种途径:(1)用一组测试数据手工执行程序;(2)通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。 二.基础题 题目 用选择法对10个数进行排序。 有一个已排好序的数组。现输入一个数,要求按原来的规律插入到原数组中。解题思路 程序的主要功能是对数组元素用排序函数按从小到大的顺序进行排序。 先定义一个10个元素的一维数组a[10],然后从电脑输入10个数(也就是对数组赋值),然后使用一次fun()函数,对这10个数进行排序;然后再定义一个11个元素的一维数组b[11],同时再从电脑输入一个数同a[10]一起赋值给b[11],然后再使用fun()函数,重新排序的到最后的有顺序的一组数据。 流程图 子函数流程图如图1所示:

(完整版)C语言课程设计实验报告

目录 目录 (1) 第1章问题描述 (2) 1.1 题目 (2) 1.2基本要求 (2) 第2章需求分析 (2) 1.1软件的基本功能 (2) 1.2输入/输出形式 (2) 1.3测试数据要求 (3) 第3章概要设计 (3) 1.1主程序 (3) 第4章详细设计 (4) 1.1数据类型 (4) 1.2伪码算法 (4) 1.3 程序流程图 (7) 第5章操作 (8) 1.1 进入足球比赛积分排行榜界面 (8) 1.2进入目录 (8) 1.3输入球队比赛信息 (10) 1.4 显示九轮比赛排行榜 (12) 1.5 保存数据 (15) 1.6 由D 盘查看数据 (16) 第6章参考文献 (16)

第1章问题描述 1.1 题目 足球比赛积分排行榜程序 1.2基本要求 (1)10个足球队进行9轮循环赛,胜一场积3分,平一场积1分,输一场积0分。 (2)如果两个队积分相同,进行净胜球的比较,如果净胜球再相同进行总进球的比较。 (3)编写一程序输入每轮比赛的比分,并可以存储。 (4)最后统计出每轮比赛的积分榜。 第2章需求分析 1.1软件的基本功能 (1)输入10个足球队的9轮比赛进球数。 (2)计算10个球队的积分,净胜球,总进球。 (3)对9轮比赛进行排序。 1.2输入/输出形式 由键盘输入,屏幕输出,并且以TXT形式保存。

1.3测试数据要求 输入九轮比赛10个足球队的进球数,由系统统计积分、净胜球、总进球数,并输出。 第3章概要设计 1.1主程序 头文件: #include 说明:main函数的头文件,控制整个程序。 #include 说明:清屏的头文件。 #include 说明:包括了大量的函数原型,调用现成的库函数。 #include 说明:基于char*的字符串处理函数。 全局变量: void input(); 输入数据函数 void sort(); 排序数据函数 void display(); 显示数据函数 void save(); 保存数据函数

C语言课程设计总结报告1

C语言课程设计总结报告 题目银行排队系统 指导教师 院系工学院 专业 班级网络 【 学号 姓名 成绩 七月八日 "

表1 进度安排表 表2 中期报告表

通客户,vip客户人数。 三、. 四、系统设计 1.程序总体结构 2.界面设计 主菜单: —————————————欢迎光临XX银行————————————— 、 1 顾客到达 2 顾客离开 3 查看业务办理 4 查看排队情况 5 系统查询 6 退出 现在时刻:Sat Jul 07 11:28:04 2018 …

目录 第一章系统功能说明 (1) 第二章程序结构 (1) 2.1程序结构说明 (1) 2.2重要数据说明 (2) 2.3函数清单 (2) 第三章使用说明 (7) 3.1安装手册 (7) 3.2使用手册 (7) 第四章系统设计难点及其解决方法 (10) 4.1顾客的到达和离开 (10) 第五章不足之处 (10)

第一章系统功能说明 本程序可实现银行排队功能,对客户进行排序、业务管理,并能对错误的输入进行提示,对溢出进行判断并提示错误的功能。 为了实现“银行排队系统”的各项功能,首先要设计一个含有多个菜单的主控制菜单子程序,以链接系统的各项子功能,方便客户使用本系统。本系统采用队列存储银行排队中的顾客信息。其中:用数组存放办理业务的窗口;用链式队列存放排队顾客的信息。 系统分成六个功能模块。 一.主菜单。显示五个功能模块。 二.顾客到达。分为VIP客户和普通客户进行拿号排队,普通用户进入逻辑队列。 VIP客户通过VIP认证函数认证后直接到VIP柜台办理业务,跳出该循环。 三.顾客离开。顾客离开时,将顾客从从列队中删除,并提供让客户对银行窗口职员评价的平台。此时时间函数结束,输出其使用时间。然后执行柜台评分函数四.查看业务办理。可以查看每个业务窗口正在给第几个顾客办理业务。 五.查看排队情况。通过逻辑队列查看当前顾客前有多个顾客在排队等待。 六.系统查询。可以查询本系统为多个普通客户和VIP客户办理过业务。 顾客的到达是通过队列实现的。每增加一个顾客就增加一个元素和一个编号,其中设置了一个判断的操作,如果是VIP客户,输入卡号密码就可以直接到VIP柜台办理;如果是普通客户则归入队列。 顾客的离开包含了一个时间函数和评分函数。在顾客离开时,时间函数结束显示顾客办理业务所需时间。配分函数通过IF函数判断输入是否正确,然后用将分数累加再均除得到柜台的平均评分。 业务办理是一个For循环函数,分别将顾客对应柜台,已查看办理情况。 排队情况则是队列中剩余的元素个数。 第二章程序结构 2.1程序结构说明 该银行排队程序大体结构如图2-1所示。

相关文档