教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

程序设计(上机)指导书(3)

来源:网络收集 时间:2026-08-27
导读: 最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out.dat中。例如:当t=1000时,函数值为:1597。 (2)有一个已按从小到大排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组

最后调用函数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 对小老鼠,自己变成一对大老鼠,上周的小老鼠变成了大老鼠 …… 此处隐藏:2685字,全部文档内容请下载后查看。喜欢就下载吧 ……

程序设计(上机)指导书(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/435625.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)