程序设计(上机)指导书

更新时间:2024-01-30 13:46:01 阅读量: 教育文库 文档下载

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

程序设计(上机)指导书

第 六 版

南 京 邮 电 大 学 通 达 学 院 专 用

主编:吴 伟 敏

南京邮电大学 教育科学与技术学院

2011 年 5 月

目录 一、课程设计的性质、目的................................................................................. 2 二、课程设计的任务............................................................................................. 2 三、课程内容、学时分配及基本要求................................................................. 2 三、考核方式及成绩评定方法............................................................................. 3 四、推荐教材与参考书......................................................................................... 3 五、验证及基础练习题......................................................................................... 4

1.改错题........................................................................................................... 4 2.完善程序....................................................................................................... 7 3.简单程序编写............................................................................................... 9 六、上机实习题目............................................................................................... 13

1.算法实现..................................................................................................... 13 2.文本字符串处理......................................................................................... 16 3.常用程序设计............................................................................................. 18 七、程序设计(上机)报告格式及要求........................................................... 21

1

一、课程设计的性质、目的

本课程是非计算机相关专业的通识基础课,属于集中实践环节,是数据结构、数学建模、操作系统等课程的前导课程,也是一门实践性很强的课程。在掌握编程基本概念的基础上,进行上机实践是一个必不可少的环节,本课程有助于学生全面掌握使用C语言进行程序设计的综合技术。通过本课程,可以培养学生的上机动手能力,使学生巩固《高级语言程序设计》课程中所学习的内容,掌握工程化软件设计的基本方法,强化上机动手能力;为后续各门计算机课程的学习打下坚实基础。

二、课程设计的任务

通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。

三、课程内容、学时分配及基本要求

课程设计为时二周(计40学时),其具体安排如下:

课程内容 学时 基本要求 1、每人至少1题,其中难度最好为“M”; 实验设备 选题 2 借参考书* 2、每班分若干组、每组最多5人,每小组中组员的难度为“H”的题目至少一道,各小组间难度为“H”的题目至少有一道不与任何其他小组重复。 完成一套基础编程题,一套中包括南京邮电大学公共机房微机 编程准备 8 改错/完善程序/简单程序编写三种类型至少各一道。 计算机及Internet 2

编程 18~22 结果正确,程序健壮,代码可读性计算机及强,界面美观友好,易操作。 Internet 交流及汇报 4 陈述课题的成果和心得,并解答其计算机及他同学的疑问。 主要包含如下几个部分:1、问题分Internet 书写软件报告文档 4~8 析。2、设计方案。3、流程图。4、计算机及测试数据、测试结果、结果分析。5、Internet 相关运行界面。6、源代码

*注:对于选题和分组,其操作流程如下:

1. 同学们根据自己的兴趣、爱好,选择自己想做的题目。 2. 一旦确定以后,交与班长登记。

3. 班长按照先来先登记的方式依次进行分组。例如,将先来的同学分到第

一组,就这样依次分下去。

4. 对于每个小组所选择难度为“H”题目,如果发现重复,则需要重新选择。 5. 以上的组织形式应该安照班级和学生的具体情况做灵活的调整。

三、考核方式及成绩评定方法

本课程考核由平时考核、软件验收、程序设计(上机)报告三部分组成。其中,平时考核占总成绩的10%,软件验收占总成绩的40%,设计报告占总成绩的50%。 注:如有以下情况,视为抄袭:

? 与已验收的程序明显雷同;

? 面试时不能解释程序中的某些基本功能,或对所写程序一无所知。

四、推荐教材与参考书

教 材:

[1] 秦军.程序设计(C语言).北京: 机械工业出版社,2007 [2] 吴伟敏.程序设计(上机)指导书.南京:南京邮电大学自编教材,

2010

3

[3] 程序设计基础(C语言版)学习与实验指导.北京:机械工业出版

社,2008

参考书:

[1] 张福炎.大学计算机信息技术教程[M] .南京:南京大学出版社,

2003

[2] 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005 [3] (美)Brian W.Kernighan、Dennis M.Ritchie.C程序设计语言

(第二版).徐宝文、李志译.北京:机械工业出版社,2003 [4] 苏小红等.C 语言大学实用教程(第二版)[M].北京:电子工

业出版社,2007

五、验证及基础练习题

1.改错题

(1)以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请改正程序中的错误,使程序能得到正确的结果。包含错误的源程序如下:

#include void main()

{ char str1[100],str2[100]; int i,s;

printf(\ getchar(str1);

printf(\ getchar (str2); i=0;

while((strl[i]!=str2[i]&&(str1[i]=='\\0')) i++;

s=str1[i]+str2[i]; printf(\ }

4

(2)以下程序中函数fun()的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。例如:输入ewjfio23450ejgvb0erio3mg0wgjn 23,则输出2345003023。请改正程序中的错误,使程序能得到正确的结果。包含错误的源程序如下:

#include #include void fun (char *s) ; { int i,j; } main() { }

char item[80];

printf(\gets(item);

printf(\fun (item);

printf(\for (i=0,j=0;s[i]!='\\0';i++) {

if (s[i]>='0' && s[i]<='9')

s[j]=s[i]; }

s[j]=”\\0”;

(3)以下程序的功能是在有序数组中插入一个新数,程序中共存在6个错误,请改正程序中的错误,使程序能得到正确的结果。包含错误的源程序如下:

void main() {

int i,j,num,n=7;

int temp1,temp2;

int a[n]={1,3,5,7,9,11}; for(i=0;i<6;i++)

printf(\

printf(\scanf(\ if(num>a[5])

a[6]=num;

5

}

else { }

for(i=0;i<7;i++)

printf(\for(i=0;i<6;i++) { }

if(a[i]

temp1=a[i]; a[i]=num;

for(j=i+1;j<6;j++) { }

countinue;

temp2=a[j]; a[j]=temp1; temp1=temp2;

printf(\

(4)在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线。以下是对该问题的分析:

如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本文要求的图形就必须在一行中一次输出两个“*”。

为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性。将屏幕的行方向定义为x,列方向定义为y,则0~180度的图 形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度 的y点的坐标就 应为62-m。程序中利用反余弦函数acos计算坐标(x,y)的对应关系。使用这种方法编出的程序短小精炼,体现了一定的技巧。请改正程序中的错误,使程序能得到正确的结果。包含错误的源程序如下:

#include

6

#include int main() {

double y; int x,m;

for(;y>=-1;y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/ {

m=(int)acos(y); /*计算出y对应的弧度m,乘以10为图形放大倍数*/ for(x=1;x

printf(\控制打印同一行中对称的右侧*号*/ } return 0; }

2.完善程序

(1)从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请完善以下程序:

#include void main() { FILE *fp;

char str[100]; int i=0;

if((fp=fopen(\ { printf(\ exit(0);}

printf(\ gest(str); while (str[i])

{ if(str[i]='a'&&str[i]<='z') str[i]= ___(2)__; fputc(str[i],fp); i++; }

fclose(fp);

7

fp=fopen(\ fgets(___(4)__); printf(\ fclose(fp); }

(2)已知strcpy()函数的原型为:char *strcpy(char *strDest,char *strSrc);其中strDest是目的字符串,strSrc是源字符串,返回目的字符串的首地址。完成以下的空白部分并实现正确的strcpy()函数功能。

char *copy_string(char *from,char *to) { }

char *address; __(1)___ while(__(2)___) { }

___(4)__ return address;

___(3)__ from++; to++;

(3)以下程序计算所输入的字符串中某个子串所出现的次数。请完善以下程序:

#include \#include \main() { }

8

char str1[20],str2[20],*p1,*p2; int sum=0;

printf(\gets(str1); gets(str2); p1=str1; p2=str2; while(*p1!='\\0') {

___(1)__ }

printf(\

//此处可填写多条语句

(4)验证歌德巴赫猜想。将2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。为了验证这个推论,首先可将整数分

解为两部分,然后判断出分解出的两个整数是否均为素数。若是,则满足题意;否则重新进行分解和判断。本程序对判断是否为素数的算法进行了改进,对整数判断“用从2开始到该整数的一半”改为“2开始到该整数的平方根”。读者可自行分析其原理。请完善以下程序:

#include #include int fflag(int n); int main() { int i,n;

for(i=4;i<=2000;i+=2) {

___(1)__ //此处可填写多条语句

if(n==i) printf(\ } }

int fflag(int i) /*判断是否为素数*/ { int j;

if(i<=1)return 0; if(i==2)return 1;

if(!(i%2))return 0; /*if no,return 0*/ for(j=3;j<=(int)

(sqrt((double)i)+1);j+=2) if(!(i%j)) return 0;

return 1; /*if yes,return 1*/ }

3.简单程序编写

(1)编写函数jsValue,它的功能是:求Fibonacci数列中大于t的最小的一个

数,结果由函数返回。其中Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2)

9

最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。例如:当t=1000时,函数值为:1597。

(2)有一个已按从小到大排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组中。

(3)编程实现如下功能:选取100到1000范围内所有个位与十位数字之和被10整除所得余数是百位数字的素数(如293),计算并输出上述这些素数的个数CNT以及这些素数值的和SUM,最后调用函数writerData()把结果CNT和SUM输出到文件out.dat中。

(4)编程并实现函数 char* IntToStr (int number),该函数将一个给定的整数转换为字符串。再编写main()函数验证上面所编写的IntToStr()函数。 (5)打印日历:编写一个程序,输出当前月的日历。计算生成当月的日历,打印当月的日历,输出到以自己学号命名的文件中(如:thismonth_07000122.txt),同时也在屏幕显示。输出的格式如下(假设当天日期为2008年11月29日):

Calendar Nov

------------------------------------- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

今天是: 2008年11月29日 星期6 当前时间是: 8:5:24

在C/C++中对日期和时间操作所用到的数据结构和函数,下面将作简单介绍,这些相关的函数和数据结构的声明都在time.h文件中。详细的技术资料请参考C语言手册。

1)日历时间:是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量。日历时间在系统中是一个long int型数据。

2)标准时间:就是我们通常所使用的年月日小时分钟秒等,在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:

#ifndef _TM_DEFINED

10

struct tm {

int tm_sec; /* 秒 - 取值区间为[0,59] */ int tm_min; /* 分 - 取值区间为[0,59] */ int tm_hour; /* 时 - 取值区间为[0,23] */

int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */ int tm_year; /* 年份,其值等于实际年份减去1900 */

int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */ int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */

int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/ };

#define _TM_DEFINED #endif

3)获取当前日期:这里介绍两个函数

time()函数获得当前的日历时间(Calendar Time),其原型为:

long time( long * timer );

localtime()函数是将日历时间转化为本地时间,其原型为:

struct tm * localtime( const time_t * timer );

我们可以先用time()函数获得当前的日历时间(long int型数),再将之通过localtime()转换为我们所需要的日期格式等等就可以了。例子如下(在VC++6.0环境下编译通过):

// examp1e.cpp : This example shows that how date information is got. #include #include int main(void) {

struct tm *local;

long t; time(&t);

cout << \local = localtime(&t);

local->tm_year = local->tm_year + 1900; local->tm_mon ++;

cout << \<< \

11

<< \ \ << \ << \ << \ \

return 0;

}

运行的结果如下:

The Calendar Time now is:1135176221 Today is: 2005-12-21 22:43:41 3

(6)猜数游戏:程序要求学生用随机函数产生一个数,判断用户是否猜对,如果猜错了,则提示偏大还是偏小,记录用户猜数所用的时间和次数。 (7)计算分数的精确值:使用数组精确计算M/N(0

由于计算机字长的限制,常规的浮点运算都有精度限制,为了得到高精度的计算结果,就必须自行设计实现方法。

为了实现高精度的计算,可将商存放在一维数组中,数组的每个元素存放一位十进制数,即商的第一位存放在第一个元素中,商的第二位存放在第二个元素中?.,依次类推。这样就可以使用数组不表示一个高精度的计算结果。

进行除法运算时可以模拟人的手工操作,即每次求出商的第一位后,将余数乘以10,再计算商的下一位,重复以上过程,当某次计算后的余数为0 时,表示M/N为有限不循环小数某次计算后的余数与前面的某个余数相同时,则M/N为无限循环小数,从该余数第一次出现之后所求得的各位数就是小数的循环节。

程序具体实现时,采用了数组和其它一些技巧来保存除法运算所得到的余数和商的各位数。

(8)自动发牌:一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。

按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过 程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应数字3,

12

黑桃3 对应数字4,红桃3对应数字5,...然后从52 张牌中随机的为每个人抽牌。

此处可采用C语言库函数的随机函数,生成0到51之间的共52个随机数,以产生洗牌后发牌的效果。

六、上机实习题目

1.算法实现

题目编号 内容 要求 难度 R001E 输入1~20的整数n,把从1到n的n个整数摆成一个环,使E 得该环上任意相邻的两个数之和为素数。求出所有可能组合。 R002E 求第1500个只有2,3,5因子的数。数是从小到大排列,第一个E 数是1,1=2^0*3^0*5^0。 R003E 编写一个程序,能够根据用户要求输出相应阶次的杨辉三角。 E R004M 一个人带着一只羊,一条狼和一颗白菜想过河,假设他每次只M 能带一只羊,或者一条狼,或者一颗白菜过河,并限定人不在场时,狼和羊,或羊和白菜不能单独在一起,试编写程序求出他带一只羊,一条狼和一颗白菜过河的办法。 R005H 一辆重型卡车欲通过1000公里的沙漠,卡车耗油量为1公升/H 公里,卡车总载油量为500公升,显然卡车装一次油是通过不了沙漠的。因此司机必须在沿途设立几个储油点,使卡车能顺利通过沙漠。试问司机如何建这些储油点?每个储油点应该储多少升油?才能使用卡车以最小耗油量的代价通过沙漠? R006E 有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一E 对小老鼠,自己变成一对大老鼠,上周的小老鼠变成了大老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老鼠? R007M 某级数的前两项A1=1,A2=1,以后各项具有如下的关系:M An?An?2?2An?1。下列程序的功能是:要求依次对于整数 13

M=100,1000和10000求出对应的n值,使其满足:Sn?M且Sn?1?M,这里Sn?A1?A2???An,并依次把n值存入数值单元b[0],b[1],b[2]中,请编制jsValue()函数来实现此功能,最后调用函数WriteDat()把数组b[]中的值输出到out.Dat文件中。 R008M 函数ReadDat()的功能是从文件in.dat中读取20行数据存放M 到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),该函数的功能是:以行为单位对字符串按下面的给定条件进行排序,排序后的结果仍按下面的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果输出到文件out.Dat中。条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后,左边部分与右边部分按例子所示进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 R009M 200个学生不按身高任意排成10行﹑20列的长方形队列。在每M 一列中选出一个最矮者(如这样人有几个,可任选其中一个)。然后在所选的20个矮人中挑出最高者一人,叫做“矮人中的高个子”。然后,令这20个矮人各回原位。再在每一行中选出一个最高者,又从这10个高人中挑出最矮者一人,叫“高个子中的矮子”。请问“矮人中的高个子”和“高个子中的矮子”这二人中哪个高? R010E 将一个正整数n(长整型)输出成“千分位”形式,即从个位数起,E 每三位之间加一个逗号,例如,将7654321输出成7,654,321。 R011M 编写一个子程序NewTon(float x0,float eps,float x1)。它的M 功能是用牛顿迭代法求 f(x)=x3?2x2?4x?1在x=0附近的一个实根。牛顿迭代公式为: 14

xn?1?xn?f(xn)f(xn)' 迭代收敛判据为:f(xn?1)?eps(eps为指定的迭代精度,例如1e-6)。若迭代成功,则返回非零值;否则,返回0。 R012E 编程实现从三个红球﹑五个白球﹑六个黑球中任意取出八个E 球,且其中必须有白球,输出所有可能的方案。 R013E 寻找并输出11~999之间的整数m,满足m,m2,m3均为回文数,E 所谓回文数即各位数字左右对称的数,如m皆为回文数。 R014H 输入N个点的坐标,判断这N个点能否构成一个凸多边形。 H ?11,m2?121,m3?1331R015M 给定n个点的坐标,这n个点依次围成一闭合多边形,再给一M 点(x,y),判断它是否在多边形中。 R016E 在一行字符串中删去指定的字符。例如,要求在一行文字:“I E have 50 Yuan.”中,删去字符“0”,使其变为“I have 5 Yuan.”。 R017E 3位正整数中,既是完全平方数,又有两位数相同,如144,676E 等,找出所有这样的数。 R018E 设计一个支持矩阵加减乘运算的程序 R019E 输入一个自然数n,求n!,同时统计结果中有多少个0。 E E R020E 实现用于计算素数的算法。假定我们要找出小于10的所有素E 数,其中共有2,3,4,5,6,7,8,9,10九个数,然后取走最小的数2并声明它就素数,然后筛掉2的倍数。重复上面的步骤直到空筛时,就可选出所有素数。 R021E 排序算法。要求在界面上显示包括原始数据(如以10个数据为E 例),排序过程以及排序后数据。 R022H 由n2个方块排成n行n列的正方形称为“n元棋盘”。如果两个H 皇后位于n元棋盘上的同一行或同一列或同一对角线上,则称它们为互相攻击。要求输出使n无棋盘上的n个皇后互不攻击的所有布局。 15

具体要求如下; (1)n可由键盘输入。 (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该 存储空间。 (3)分别用n=4,5,6运行你的程序。 R023E 排序,要求: (1)输入任意一串字母或数字。 (2)用选择法和冒泡法分别对(1)进行降幂排序。 (3)比较这两种排序方法所用的时间。 (4)具有输入输出界面。 R024M 设有n个人围坐在圆桌周围,从某个位置开始用自然数进行编M 号为1,2,?,n。然后从编号为k的人从1开始报数,数到m的人便出列;下一个人(第m十1个)又从1开始报数,数到m的人便是第二个出列的人。如此继续下去,直到最后一个人出列为止。要求输出这个出列的顺序。 这个问题称为雅瑟夫(Josephu)问题。 具体要求如下: (1)n、m、k由键盘输入,输入前要有提示。 (2)在输入n后,动态建立方法说明中所需要建立的数组空间;程序运行结束时释放该 存储空间。 (3)分别用n=8,m=4,k=1以及n=10,m=12,k = 4调试运行你的程序。 E 2.文本字符串处理

题目编号 内容 要求 难度 16

W001E 输入字符串s,将s中的前导空格和尾随空格删去,中间连续多E 个空格缩减为一个空格。 W002M 实现txt文件中的查找与替换功能 M W003E 编制程序实现字符串的逆转功能。要求具有友好的输入、输出界E 面。如输入This is a test 输出 tset a si sihT W004E 字母统计 要求:(1)输入任意一段英文。 (2)统计(1)中各字母出现的概率。 (3)具有输入输·#!出界面,并对输入的数字和其他符号给予提示。 W005M 单词统计 要求:(1)输入任意一段英文。 (2)根据(1)中各单词出现概率的高低输出前五个单词。 (3)具有输入输出界面 W006E 编写一个小程序,可以读入一个英文的文本文件,显示这个文件,E 并统计这个文件有多少个字符,多少个单词,多少个空白(空格、TAB),多少个段落,按照单词的长度进行统计。 W007H 编写一个小程序,能够实现将一个很长的英文行折成两行或者更H 多的行。要求能够在指定的列前换行,也可以在界面的边界换行。注意程序应当比较智能,如考虑在一个单词很长,或者在指定的列前面没有空白等特殊情况。尽可能的考虑较多的异常情况。具体功能参照Word的自动换行功能。 W008M 编程实现一个字数统计工具。要求可以直接在程序的文字区域输M 入文字,然后开始统计相关字数,也可以将要统计的文本粘贴到该程序中,然后进行统计。点击“开始统计”按钮,对应文本的字母字数和汉字字数就可以在程序窗口中的编辑框中显示出来。 M E 17

3.常用程序设计

题目编号 内容 要求 难度 P001E 已知在文件IN.DAT中存有100个产品的销售记录,每个产品记E 录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)几部分组成。其中:金额=单价×数量可计算出。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制SortDat(),其功能要求:按金额从大到小进行排列,最后调用函数WriteDat()把结果输出到文件OUT.DAT中。 P002M 在文件in.dat中有200个正整数,且每个数均在1000至9999之M 间。函数ReadDat()的功能是读取这200个数并存放到数组aa中。请编制函数jsSort(),该功能是:要求按每个数的后三位的大小进行升序排列,将排序后的前10个数存入数组aa中。如果数组bb中出现后三位相等的数值,则对这些数值按原始4位数据进行降序排列。最后调用函数WriteDat()把结果bb输出到文件OUT.DAT中 P003M 已知在文件IN.DAT中存在若干个(个数〈200〉四位数字的正M 整数,函数ReadDat()的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出这文件中共有多少个正整数totNum;(2)求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,把所有的结果输出到文件OUT.DAT中。 P004E 输入两个整数m和n,及另一正整数k,计算m/n,结果精确到E 小数点后k位 P005H 输入任意四个整数(0到10),运算符只有加减乘除,还有括号.H 每个数只能且必须用一次。要求判断这些表达的结果中是否有 18

24。如果有,输出计算表达式:如输入4,6,1,1 输出 4*6*1*1 =24 (允许有括号)。 P006E 文件拷贝,实现命令行式的COPY功能。 E P007M 编制不同数制间的转换程序。要求提供输入输出界面,当输完一M 个任意十进制数字,程序能自动将其转化为另外的数制表示的值,包括二进制、八进制和十六进制,其中转化用算法实现,而不是用printf函数显示。 P008E 分数统计 要求:(1)输入某班级学生的姓名、分数; (2)对(1)的分数进行排序,按分数从大到小输出; P009E 文本编辑器 要求:(1)编辑文本; (2)保存、打开指定位置的文本文件; P010M 解方程 要求:(1)用牛顿法求解下列方程在x?1.8附近的根(??10?6); x3?5x2?3x?5?0 (2)改变初始值、误差后重新求解。 P011M 产生随机数 要求: (1)满足均匀分布的[M,N]区间随机数,其中M,N是正整数。 (2) 满足指数分布的[M,N]区间随机数,其中M,N是正整数。 P012H 编写程序,查找c程序中的基本语法错误,如圆括号、方括号、 H 花括号的不匹配;如单引号和双引号等。要求能够显示错误信息, 并给出错误行数。注意尽可能的考虑软件的通用性。 P013M 编写一个程序,读入一个c程序,按照字母表的顺序分组打印变 M M M E E 19

量名字。字符串和注释中的单词不考虑。 P014M 设计一个程序,统计一个班(最多有35人)的学生成绩,要求能M 实现如下四个功能: (1)由键盘输入每个学生的学号和四门课程的成绩。 (2)计算每个学生的平均分和总分。 (3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。 (4)根据用户要求输出某门课程(由键盘输入课程号)成绩在90分以上(含90分)且总分在前五名的学生情况,包括:学号、各科成绩、平均分和总分。 具体要求如下: (1)每个功能为一个独立的函数。 (2)所有的输入之前都要有提示。

4.链表设计

题目编号 L001M 利用循环链表表示位数大于10的大整数 链表的头结点值为-1,其余结点依次存放数据,各结点最多存放四位整数。如下表示233238766 -1 2 内容 要求 难度 M 3323 8766 L002H -13323在利用上述数据结构完成大整数的表示后,实现两个大数的H 加法、减法运算(两个链表表示操作数)。 L003H 一元多项式简单的计算 1主要功能: (1)输入并建立多项式; H 20

(2)输出多项式; (3)两个多项式相加,建立并输出和多项式; (4)两个多项式相减,建立并输出差多项式。 实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。 2.要求: 一元多项式简单计算的基本功能 L004M 双向链表的排序。 要求: 输入一个双向链表,显示些双向链表并对此双向链表排序 *注:难易度:H/M/E 难/中/易 M 七、程序设计(上机)报告格式及要求

1.问题描述:课题要求及总体功能分析及描述

2.课题分析:将各功能模块进行分解,形成程序结构图

3.数据结构的设计:对所使用的各种不同数据进行分析及详细说明 4.处理结构的设计:程序流程图及详细说明 5.源程序:重要源代码及其说明

6.调试记录:程序编制过程中碰到的问题、解决过程及结果

7.软件说明:对软件的功能、界面、使用方法及改进意见等进行详细介绍 8.附录

21

本文来源:https://www.bwwdw.com/article/8kmw.html

Top