2012C语言程序课程设计备选题目

更新时间:2024-01-14 03:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

说明:

1题目来源是:(1)较重要C语言程序设计教科书中的例题或习题;(2)与计算机学科相关的后续课程,如数据结构、离散数学、组合数学、计算方法等课程教科书中的例题或习题中,不需要相关后续课程的专门知识就可以很好解答的题目;其它有影响计算机程序设计类书籍或文章中的例题;(3)各级各类计算机程序设计竞赛(例如ACM大赛)、程序员考试、求职面试的训练题和考试题等。欢迎老师和同学们提供更好的题目。

2题目内容涉及的知识点不超过大学一年级的知识水平,主要目标是训练学生将实际问题转化为计算机可以处理的形式并编写程序给出解答的能力。去掉了较复杂事务管理如图书管理、学生成绩管理之类的题目,这类事务管理方面题目希望在后续课程如C++面向对象程序设计、数据库应用及各专业的课程设计中进行。 3 题目有多种完全不同的解答,给出的提示主要供指导教师参考。

题目1:文件存取练习:要求实现如下功能:

(1)定义函数Rand1000(), 随机生成1000个均不相同的正整数,并写入到文本文件“file1.dat” 中,各数之间用空格来分隔。(2)编写一个函数input(int a[],int n),将上述数据读入到数组a中。(3)编写一个函数digitcount(int a[],int n,int b[10]), 统计数组a的每个元素保存的整数中,每位数字出现的次数,并分别保存在b[0]到b[9]中。(4)编写函数maxprime(int *p,int n), 找出其中最大的素数,如果不存在素数函数结果为0。(5) 对于这些整数排序之后,分别输出相邻两数之差最大和之差最小的两个数,如果有多组满足条件要输出所有的。(6)定义函数myinput(int a[],int n),用fgetc函数从文件“file1.dat”上逐个读入字符,并将其转换成独立的正整数,并依次存入数组a中。

提示:可查阅任何一本C语言程序设计教科书中关于文件部分,例如谭浩强,C程序设计(第三版),第13章。还需要熟悉随机数生成函数rand(),需要编写判断一个奇整数是否素数的程序等。部分可供参考程序如下:

题目2:两个文件同时对照显示:程序从两个文件中读出文本行,并列显示在屏幕上。假定屏幕有80列,25行,则第0—34列显示第一个文件的内容,第40—74列显示第二个,第77-78行显示文本总的行序号。每屏显示20行,超过20行就显示在下一屏。程序应该能够以这种方式显示任意的两个文本文件,例如两个C程序源代码文件,两篇内容类似的文章形成的两个文本文件等。 提示:先把两个文本文件读入,存入数组,再考虑显示的安排。

题目3:实现一个C语言程序设计自助学习系统,要求实现的基本功能如下:

1、测验

(1)可以按固定的试题数目,从题库中随机选取题目进行测试,如每次测试5道题或10道题。

(2)每次只显示一道题,包括问题描述、备选答案;

(3)根据学生答题结果,对比试题答案,显示答题对错的信息;

(4)答题全部结束后给出本次测试的成绩,按百分制评分。

2、学习管理

(1)通过题目浏览,自我测验,查看题解的过程来帮助学生学习。

(2)需要为学生提供多种学习方式,至少应包括顺序选题学习和随机选题学习等方式。

(3)如果是采用顺序选题方式学习,需要做到可以从中间某个位置开始学习,不是每次一定从第一题开始学习。

3、题库管理

(1)试题库中保存全部试题及其相关信息。

(2)将要入库的试题,按固定格式编辑整理好保存在ASCII文件中,通过计算机程序读取该文件,并将文件中的全部试题添加到已有的试题库中。 (3)今后需要对于所有试题分类进行管理,在库结构设计时,要考虑这些扩展功能的数据接口要求。

(4)试题库初始化,将试题库内容全部清空,便于重新建立系统。 提示:可以参考:余江,肖淑芬主编,C语言程序设计,天津科学技术出版社,2001年5月,273-313页。

题目4:实现题目3中C语言程序设计自助学习系统得升级版,可考虑实现功能: 一、测验

1、系统自动组卷

(1)试卷结构说明:以题库提供的试题类别和各类试题的数量为依据来实现。系统组卷前需要获得的信息是对于每类试题要含有类别名称、试题数、分数,所有类别的分数累加在一起要恰好是100分。

(2)试卷保存:将上述组卷结果保存在二进制文件中,文件名由用户输入。 (3)个性化组卷:输入学号后,系统根据试卷结构说明的规定自动组卷,做到每个学生试卷不同。 2、错题本功能

(1)答错的题目自动加入到错题本中;

(2)可以对错题本中的题目逐题测验,不分题目类别; (3)可以制定分类测试。

3、多科目测试 二、学习管理 1、分类别学习 2、错题本内容学习 3、多科目学习,选择科目后可以进行指定类别的分类别学习和错题本内容学习。 三、题库管理

1、入库试题文件格式正确性检查。包括:试题的描述的合法性检查,类别信息合法性检查,给出出错位置的信息。

2、对于分类试题存储方式的优化,例如:同类试题连续存储的实现;

3、目前完成的是单科目多类别的题库管理,要实现多科目多类别的题库管理。 四、用户管理 1、系统注册 2、登录

3、错题本等个性化信息管理

4、屏幕背景颜色和字符颜色的设置

5、学习位置的记载,要按科目记载,每个科目要按类别记载。 提示:鼓励使用更多方法实现,例如使用数据库系统,VC++等。

题目5:给出一个正整数n,一个存放1到n共n个正整数的数字金字塔构造如下:(1)1在最上方第0层;(2)如果x大于y并且x除以y的余数为0(即x>y && x%y = = 0),x要放在y下方一层(即若y在第i层,x应在i+1层);(3)每个数应尽可能放在更下方,即如果可以放在第i层,就不能放在i-1层;(4)相同层上的数从左向右从小到大排列。其实第i层是有i个素数因子的数的从小到大的排列。例如对n=6,符合这组规则的数字金字塔如下: 1 2 3 5

4 6

每个数按照它在塔中的位置从上到下从左到右从1开始编号,例如5,编号应该是4。要求你编写程序,输入一个正整数n,5

4 6 //用数组形式表示数字金字塔。

3,5,4 //分别是3,4,5在数字金字塔中的编号。

程序编写完成后,要求给出你的程序对下列两组输入的结果: (1)10,7,8,9 (2)25,15,20,25

提示:本题为2010年ACM大赛题目,鼓励使用更多方法实现。

题目6:你一定很熟悉著名的Hanoi塔游戏,当理解了圆盘数目较多需要的时间太长之后,你可以放弃实际去移动圆盘,但你不应该放弃如下一个有点类似的游戏:设有n根柱子,每根柱子上有一个圆盘,圆盘上有一个正整数,不同圆盘上的数不同。初始时假定柱子按照其上圆盘上数的大小从左向右排列,移动规则是从左向右看,当前一根柱子最下圆盘上数与后一根柱子最上圆盘上数相加的和是一个完全平方数时,前一根柱子上所有圆盘移动到后一根柱子上方。要求你编写程序,输入柱子数目和圆盘上的整数,输出移动的过程和结果。例如,一组输入是:4,1,3,5,6,第一个数4表示有4根柱子,圆盘上的数依次是1,3,5,6。你的程序运行后,可以输出1->3->6, 5, c=2,表示移动是1到3,3到6,因为1+3=4, 3+6=9,而4和9是完全平方数,符合条件的移动只有这两次。移动结果是还有2根柱子上有圆盘,即c=2,有圆盘的一根柱子上圆盘3个,有数1->3->6,有圆盘另一根柱子上圆盘一个,有数5,它其实没有发生移动。程序编写完成后,要求给出你的程序对下列两组输入的结果:

(1)9,1,2,3,4,5,6,7,8,9 (2)10,1,3,5,7,9,11,13,15,17,19 (本题为2010年ACM大赛题目。)

提示:输入:9,1,2,3,4,5,6,7,8,9 输出:1->3->6, 2->7->9,4->5,8,c=4 输入:10,1,3,5,7,9,11,13,15,17,19 输出:1->3->13, 5->11,7->9,15,17->19,c=5

题目7:我们知道,在10进制数中有判断整除性的二个简单规则:一个正整数能够被3整除,当且仅当,它的各位数字之和能够被3整除;一个正整数能够被11整除,当且仅当,它的奇数位数字之和与偶数位数字之和的差能够被11整除;现在要问:对于b进制数,具有类似于10进制数的3和11的这种整除性判断的数是什么?具体地,请编写程序,输入进制的基数b,输出最小的可以如上判断整除性的数x和y。为确定,输入输出均采用10进制数。例如输入b为10,则自然要输出x为3,y为11;若输入b为8,则要输出x为7,y为3(例如8进制数25,按上述规则判断应能够被7和3整除,事实上,8进制数25是10进制数21,能够被7和3整除是显然的);若输入b为120,则要输出x为7,y为11(请自己验证这是对的)。(本题为2011年ACM大赛题目。) 提示:对于10进制数,10-1=9=3*3,10+1=11,10进制数n可以一般地表示为: n = ak10k + ak-110k-1 + ……+ a110 + a0

保持n不改变数值将10换为10 – 1和 10+1,可以看出3和11可以如上判断整除性的理由。对于b进制数, n = akbk + ak-1bk-1 + ……+ a1b + a0

可以想到只需考虑b – 1和 b+1的最小因子。

题目8:如果语文数学两门课程的成绩,甲同学分别是80分和90分,乙同学是90分和80分,丙同学是70和60分,这时比较甲同学和乙同学的成绩,只能说语文较差,数学较好,综合到一起就属于无法比较,但对丙同学可以比较,可以说甲和乙同学的成绩都比丙同学好。一般情况,设有一个三元向量的集合,若其中有向量P=(p1, p2, p3), Q=(q1, q2, q3), 规定P≦Q 当且仅当 p1≦q1, p2≦q2, p3≦q3 。其中一个向量称为是一个极小元素,当且仅当它只 ≦ 它自己。例如如下三个三元向量组成了向量组(80,90,100),(90,80,70),(60,70,60),其中只有一个最小元素,是(60,70,60)。请编写程序,输入n个三元向量,输出其中最小元素的数目。(本题为2011年ACM大赛题目。) 提示:先对第一个坐标排序,再考虑第二个坐标,第三个坐标。

题目9:在某城市有n座摩天大楼,问那二座之间的距离最小?设可以输入所有大楼的位置坐标,请编写程序输出距离最近的二座大楼及它们之间的距离。两点(x1, y1) 和 (x2, y2) 之间的距离d按照两种不同方式规定:(1)Euclid距离 d =(x1?x2)2?(y1?y2)2 (2)Manhattan距离 d = | x1 – x2 | + | y1 – y2 |。显然的解法是计算所有点对之间的距离再找出最小值,但本题只要求输出距离最近的二点及之间距离,所以应该给出不计算所有点对之间距离的更有效率的解法(本题

为2011年ACM大赛题目)。(可查阅:[沙特]M.H.Alsuwaiyel著,吴伟昶等译,算法设计技巧与分析,电子工业出版社,2004年8月,第121-124页。或者:[美]Michael T.Goodrich等著,霍红卫译,算法分析与设计,人民邮电出版社,2006年10月,第385-387页。)

提示:找到两点距离d后,接下去可检查宽不超过d的长条。

题目10:一条贪吃的蛇在一个n*m的网格中游走,它只能从一个方格走向另一个相邻的方格,这里相邻的意思是两个方格有公共边。每个方格可以看作是一个房间,其中一些是空的,一些存放有苹果。贪吃的蛇根本不进入空的房间,而进入有苹果的房间后就可以带走所有苹果使房间成为空的。蛇从一个指定的房间出发,最终回到它的家,把一路带来的苹果存储到家中,当然,它希望带来的苹果最多。请编写程序,输入有整数n和m,及n*m的一个矩阵,矩阵元素数值中有一个是 -1,表示蛇的出发位置,有一个是 -2,表示蛇的家的位置,其余数值是非负整数,0表示房间为空,非零整数表示苹果的数目。输出蛇选择的游走路径和获得的最多的苹果数目。例如输入4*4矩阵: 7 0 4 18 4 0 1 1 15 7 11 -1 0 12 -2 0

则应输出 (2, 3), (1, 3), (0, 3), (0, 2), (1, 2), (2, 2), (2, 1), (3, 1), (3, 2), 带回苹果数为1+18+4+1+11+7+12 = 54。(本题为2011年ACM大赛题目)。(可查阅:吕国英,任瑞征等编著,算法设计与分析(第2版),清华大学出版社,2009年1月,第200-202页。 提示:这是一个利用回溯算法的迷宫搜索类型问题,可参考类似问题的已有解法。

题目11:化学家研究原子团的行为时,认为每个原子具有整数能量,这个整数可以是正数、零和负数,绝对值不超过100。可以认为原子排列成为一行,一行中任意多个连续的原子可以形成原子团,原子团的能量是其中各原子能量的代数和。问题是怎样编写程序,求出具有最大能量的原子团和能量数值。要求程序输入一列原子的能量数值,以-1结束,输出找到的能量最大的原子团及能量数值。例如输入8,0,6,4,-2,-1,应输出原子团8,0,6,4,及能量数值18。(本题为2010年ACM大赛题目)(可查阅:吕国英,任瑞征等编著,算法设计与分析,清华大学出版社,2009年1月,第265-270页)。 提示:这是最大子段和问题。

题目12:一刀可以把蛋糕分为两个部分,现在给出要分为两部分的面积的比值,希望求出切口的弦的长度。这里当然要假定蛋糕是一个圆,并设其半径为1。例如,输入两部分比值为1:1,切口是直径,长为2;输入1:2,应输出1.9285;

输入10:1,应输出1.4145。(本题为2010年ACM大赛题目)

提示:计算半弦长,可以利用公式a2=2rh-h2,计算弓形面积,用公式s=0.5*xita*r*r-a*sqrt(r*r-a*a); 其中h是弓形的高,r是半径,xita是圆心角。一个思路是用二分搜索法寻找合适的h,使用该h求得的面积比值符合题目要求。

题目13:年历显示,要求至少具有如下功能:

(1) 输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在

1940-2040年之间。

(2) 输入年月,输出该月的日历。

(3) 输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 (4) 某人自1990年1月1日开始,“三天打鱼两天晒网”,输入一个1990年以

后的日期,输出他这一天是打鱼还是晒网。

(可查阅:杨克昌编著,计算机程序设计典型例题精解,国防科技大学大学出版社,1999年3月,第154-156页)

提示:应理解(1)能被4整除不能被100整除的年份是閏年;(2)能被100整除又能被400整除的年份也是閏年。可以查一下今年的日历看今年1月1日是星期几,用这些数据就可以编写程序。

题目14 小学生测验,面向小学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”。 提示:可以利用随机数生成函数rand()。

题目15:“上海自来水来自海上,黄山落叶松叶落山黄”,“客上天然居,居然天上客”,“人过大佛寺,寺佛大过人”,都是著名的“回文”的例子。回文就是正读和反读都相同的字符串。请编写程序判断输入的字符串是否回文,要求:(1)用循环和递归各编写一个程序;(2)如果不是回文,就从两端向中间检查,发现不同后,在后端加入一个与前端相同的字符,使得到一个回文字符串。(3)类似,正读和反读都相同的数字就是回文数,例如,23532就是一个回文数。请编写程序,输入两个正整数n1 和 n2,(4)如,n1 < n2,找出n1 和 n2之间的所有回文数。

果正整数m是一个回文数 ,m2和m3也是,m就是一个三重回文数,例如,11、112=121、113=1331都是回文数,因此11是三重回文数。请编写程序找出所有小于10000的三重回文数。(5)有人说,从任意一个数出发,用它加上把它倒过来重排得到的数,如此继续,必能得到回文数。例如139,139+931=1070,1070+701=1771。请对小于100的所有正整数验证这一猜想。(可查阅:杨克昌

编著,计算机程序设计典型例题精解,国防科技大学大学出版社,1999年3月,第265-269页)

提示:对于字符串,要使用字符串处理函数进行处理。对于数字,用10整除(C语言中用 / )就去掉了个位数字,用10整除取余数(C语言中用 % )就取得了个位数字。

题目16:回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,

容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串仅在二个字符相同时是回文字符串。回文字符串给人一种稳定和谐的感觉,引起了一些研究者的兴趣。他们发现一个任意的字符串通常不是回文字符串,但一定有一些子串是。这里子串理解为按照原有次序字符串中部分字符组成的字符串,例如长为4的字符串abcd, 长为3的子串有二个:abc 和bcd。于是可以定义一个任意字符串的稳定和谐数为它的子串是回文字符串的数目,例如字符串aab,稳定和谐数为4,因为有回文子串4 个:a, a, b, aa;字符串ababa, 稳定和谐数为9, 因为有回文子串9个:a, b, a, b, a, aba, bab, aba, ababa;提出的问题是请你编写程序:(1)输入一个任意字符串,输出它得稳定和谐数。(2)输入一个任意字符串,允许并且只允许修改其中一个字符,使这个字符串能够具有最大的稳定和谐数,输出这个稳定和谐数。例如,输入aab,应输出6,因为修改为aaa后,有回文子串a, a, a, aa, aa, aaa, 这也是aaa的全部子串;又如输入asdfasdf, 应输出12,因为修改为asdsasdf后,有回文子串a, s, d, s, a, s, d, f, sds, sas, asdsa, dsasd; 再如输入abbabab, 应输出15,因为修改为abbbbab后,有回文子串a, b, b, b, b, a, b, bb, bb, bb, bbb, bbb, bab, bbbb, abbbba。(本题为2011年ACM大赛题目。) 提示:(1)容易做一个判断任意字符串是否为回文字符串的函数,对于长n的字符串,其长为s的子串有n-s+1个,长1的子串n个自然计入,再对s从2至n,检查回文子串个数。(2)直接的想法是枚举法,即逐个修改每个字符并计算回文子串个数。一个可以考虑的启发式规则是将出现少的字符修改为出现多的字符。

题目17:两个字符串S和T,称按照字典序S > T, 如果T是S的前缀,或者存在整数i,使对于j < i有S[j]=T[j], 但S[i] > T[i]。例如字符串‖abcd‖ >‖abc‖ >‖abbd‖。请编写程序,输入一个任意的字符串,输出它的按照字典序最大的子串。这里对子串的理解见题目13,例如输入字符串dcbadcbbd, 应输出dcbbd;输入abbasd, 应输出sd。(本题为2011年ACM大赛题目。)

提示:本题属于比较容易,直接解法是检查所有子串,但显然可以优先考虑较大字符引起的字符串。

题目18:某期刊的编辑使用文本文件审阅和修改论文草稿,草稿文本正文后要列出参考文献,很多草稿对参考文献的使用不符合出版要求,你的任务是编写程序,输入不一定符合出版要求的草稿文本,输出修改后至少在列出的参考文献方面符合出版要求的文本。具体要求是:(1)参考文献要按照在论文中首次被引用的次序从1开始连续编号;(2)所有参考文献按照新编号次序依次放在论文末尾;(3)不改变论文的段落顺序,不改变论文其它内容。例如,输入数据: [28] Auther1, Auther2, ―Paper name one‖, Magazine1, August 1983. You and me, [15] and [28]; Me and you,[28] and [15].

[15] Auther1, Auther2, Auther3, ―Paper name two‖ ,Magazine1, August 1983.

这时应该得到的输出数据是:

You and me, [1] and [2]; Me and you,[2] and [1].

[1] Auther1, Auther2, ―Paper name one‖, Magazine1, August 1983.

[2] Auther1, Auther2, Auther3, ―Paper name two‖ ,Magazine1, August 1983.

(可查阅文献:董东,周丙寅编著,计算机算法与程序设计实践,北京:清华大学出版社,2010年5月,93-97页)

提示:此题属于练习字符串操作,应设草稿存于文本文件,首先读入并存储,再考虑进行转换。要将论文正文出现的参考文献编号按照出现顺序重新编号,记录新旧编号间对应关系。输出时,先输出正文段落,再输出新编号序号和按照对应旧编号的参考文献段落。

题目19:排班系统:学校实验楼有7名保安人员:钱、赵、孙、李、周、吴、陈。由于工作需要进行轮休制度,一星期中每人休息一天。预先让每一个人选择自己认为合适的休息日。请编制程序,打印轮休的所有可能方案。当然使每个人都满意,例如每人选择的休息日如下: 钱:星期一、星期六 赵:星期二、星期四 孙:星期三、星期日 李:星期五

周:星期一、星期四、星期六 吴:星期二、星期五

陈:星期三、星期六、星期日 运行结果: Solution: 1

赵 钱 孙 李 周 吴 陈

============================================================= 星期四 星期一 星期三 星期五 星期六 星期二 星期日 Solution: 2

赵 钱 孙 李 周 吴 陈

============================================================= 星期四 星期一 星期日 星期五 星期六 星期二 星期三 Solution: 3

赵 钱 孙 李 周 吴 陈

============================================================= 星期四 星期六 星期三 星期五 星期一 星期二 星期日 Solution: 4

赵 钱 孙 李 周 吴 陈

============================================================= 星期四 星期六 星期日 星期五 星期一 星期二 星期三

题目20:用英文单词模拟数学计算:读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。 具体的输入输出格式规定如下:

输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为 \ + B = \,相邻两字符串有一个空格间隔。当A和B同时为zero时输入结束,相应的结果不要输出。

输出格式:对每个测试用例输出1行,即A+B的值。 输入样例:

one + two =

three four + five six = zero seven + eight nine = zero + zero = 输出样例: three

nine zero nine six

题目21:C语言关键字中英翻译机。

要求输入中文的名词和关键字,可以将其翻译成英语,如输入“基本整型”+回车,得到int;输入英文的单词int,则可以翻译成中文“基本整型”。可多次查询,输入bye时退出。

提示:可模拟文曲星来实现。

题目22:2003年突发的非典型肺炎(SARS)是一种病源还不完全了解的新型传染病,需要隔离所有疑似病例。在N大学,有许多学生团体,一个学生可以加入多个团体,同一个学生团体内部成员被认为是经常接触的。N大学为了应付SARS,规定若一个学生被认为是疑似病例,则他所在团体的所有学生都被认为是疑似病例。现在需要你编写一个程序,在发现一个学生是疑似病例后,找到所有与之直接或间接接触过的疑似病例。可以设每一名学生用数字0到n-1编号,输入有学生总数n, 学生团体数k,每个学生团体的人数和成员的编号,可能是SARS疑似病例的学生编号,输出所有找到的疑似病例学生编号。例如,输入数据如下:

100 4 //100名学生,4个学生团体; 2 1 2 //第一个学生团体有2人,是编号1和2的两位学生,以下三个团体类似; 5 10 13 11 12 14 2 0 1 2 99 2

0 //现在发现编号0的学生是疑似病例。 这时应输出如下:

4,0,1,2,99 表示发现有4位疑似病例,是编号是0,1,2,99的四位。 (可查阅文献:董东,周丙寅编著,计算机算法与程序设计实践,北京:清华大学出版社,2010年5月,55-58页) 提示:需要将互相接触过的同学组成集合,再检查发现是疑似病例学生所在的集合的学生成员并计算学生数。初始每个学生自己组成一个集合,然后不断合并参加了同一个团体的学生所在集合,完成后再寻找给出疑似病例学生所在集合。

题目23:设计多种解法计算圆周率π,并进行方法比较。例如可以考虑下述方法:

(1)随机数法,思路是取一个边长为1的单位正方形,在其中做它的内切圆,再向正方形内扔点,点落在圆内则计数,落在圆外不计数。扔到5000个点后停止,用落入圆内的点数的4倍除以总的扔的点数,就得到π的一个近似值。(2)用我国古代数学家祖冲之的方法,即用圆内接正多边形逼近。可以从圆内接正六边形出发,迭代计算园内接正12、24…… 边形的边长。(3)采用级数:π/2 = 1 + 1/3 + (1*2)/(3*5) +(1*2*3)/(3*5*7) + …… +(1*2*…n)/(3*5*…(2n+1))

=1+1/3*(1+2/5*(1+……+(n-1)/(2n-1)*(1+n/(2n+1)......)。说明解法(3)最有利于高精度计算,例如你用这一解法编写的的程序应该能够求出圆周率π精确到小数点后100位,求出 圆周率π = 3. 1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 5923078164 0628620899 8628034825 3421170677。 提示:(2)可以推导得出若圆内接正i边形边长的一半为xi , 则正2i边形边长的一半是: x2i?(2?21?xi2)/2

(3)可查阅:杨克昌编著,计算机程序设计典型例题精解,国防科技大学大学出版社,1999年3月,第297-299页)

题目24:请编写程序,输入正整数n,1

提示:一般都可以用枚举法求解,即按照定义检查一定范围内的所有数。

题目25:请编写程序,(1) 输入正整数n,输出杨辉三角形的前n行,1

提示:可查阅:谭浩强著,C程序设计,清华大学出版社(第3版),2005年7月第153页,习题7.6。最上和最左算0行0列,则第m行n列是组合数Cmn,

附录2 C语言程序课程设计案例:简单海龟作图

简单海龟作图

一、设计任务与目标

利用文本方式,用打印“*”号,模拟海龟爬行踪迹,形成简单图形。爬行过程中,可以落笔纪录海龟爬行踪迹,也可以抬笔不纪录踪迹,只是移动位置。约定1表示抬笔,2表示落笔,3左转弯,4右转弯,5,x向前走x格,6在屏幕上输出以便观察 9结束

本次上机实践所使用的平台和相关软件。 平台:Windows 2000 相关软件:VC6.0……

二、方案设计与论证

用scanf语句接受输入,用printf语句输出“*”号构成图形。海龟爬行踪迹记录在二维数组step[51][51]中,绘图区域为(0, 0) ->( 50, 50)……….(略)

三、程序框图或流程图,程序清单与调用关系

main()函数调用了两个函数……print函数在屏幕上输出海龟踪迹。Step函数当笔朝上时海龟走过的数组值加一….(略)

四、全部源程序清单

/*简单海龟作图,活动区域50*50,超出区域,海龟死亡*/ #include void print(int [][51]);

void move(int [][51],int,int,int);

int x=0,y=0; //海龟位置坐标,为全局变量,初始在左上角。 int main() {

int step[51][51];

int i,j,a=1,gostep=1,direct=1,record=1; for(i=0;i<=49;i++) for(j=0;j<=49;j++)

step[i][j]=0;

for(;;){

printf(\,x,y);

printf(\请输入 a \ scanf(\

if(a==2) record=1; if(a==1) record=0; if(a==4) {

direct++;

if(direct==5) direct=1;

continue;

} if(a==3) {

direct--;

if(direct==0) direct=4;

continue;

} if(a==5)

{ printf(\请输入 gostep\

scanf(\

} if(a==6)

if(a==9)

print(step);

move(step,gostep,direct,record); continue;

}

}

return 0;

//打印海龟踪迹,显示在屏幕上 void print(int s[][51]) { }

//海龟移动,i,j,k分别对应:gostep,direct,record void move(int t[][51],int i,int j,int k) {

int xmove,ymove,num; if(j==1) {

xmove=1;ymove=0;} int i,j;

for(i=0;i<50;i++){

for(j=0;j<50;j++){ }

printf(s[i][j]==0? \

printf(\}

if(j==2) { } if(j==3) { }

xmove=-1;ymove=0; xmove=0;ymove=1;

}

if(j==4) { }

for(num=0;num

xmove=0;ymove=-1;

if(x<0||x>50||y<0||y>50)

{

printf(\

return; }

t[y][x]+=k; x=x+xmove;

y=y+ymove; }

五、程序运行的测试与分析

运行程序,依次输入:

1,4,5,5,3,2,5,50,1,4,5,5,4,2,5,50,1,4,5,10,4,5,25,2,4,5,10,1,5,5,4,2,5,22,3,50,5,10,3,5,44,3,5,4,3,5,10,3,5,22

结果是在屏幕上写出一个“吉”字 如此检验,运行结果正确。

六、结论与心得

1. 设计中遇到的问题及解决过程

调试过程中出现一些逻辑和语法错误,但是语法错误容易纠正,而 逻辑错误则比较难纠正。有时会漏掉―,‖,―;‖,―}‖等符号 2. 设计体会和收获。

发现自己也能解决有点复杂的问题 ….(略)

七、参考资料….(略)

本文来源:https://www.bwwdw.com/article/5h1o.html

Top