杭电短学期算法与编程

上传人:宝路 文档编号:23524619 上传时间:2017-12-01 格式:DOC 页数:10 大小:42.01KB
返回 下载 相关 举报
杭电短学期算法与编程_第1页
第1页 / 共10页
杭电短学期算法与编程_第2页
第2页 / 共10页
杭电短学期算法与编程_第3页
第3页 / 共10页
杭电短学期算法与编程_第4页
第4页 / 共10页
杭电短学期算法与编程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《杭电短学期算法与编程》由会员分享,可在线阅读,更多相关《杭电短学期算法与编程(10页珍藏版)》请在金锄头文库上搜索。

1、 11.指示灯控制一.问题描述: N 盏灯排成一排,从 1 到 N 按顺序依次编号。有 N 个人也从 1 到 N依次编号。第一个人(1 号)将灯全部关闭。第二个人(2 号)将凡是 2 和 2 的倍数的灯打开。第三个人(3 号)将凡是 3 和 3 的倍数的灯做相反的处理(如果该灯为打开的,则将它关闭;如果该灯为关闭的,则将它打开) 。以后的人都和 3 号一样,将凡是与自己编号相同的灯,以及是自己编号倍数的灯做相反处理。请编写程序实现。要求:程序中要显示每一个人所做工作的过程,例如:当第 i 个人操作时,则显示将 i 和 i 的倍数的灯做相反的处理过程;当第 N 个人操作之后,显示灯的最后状态。

2、(建议:采用图形法,显示每一盏灯,并为每一盏灯加边框,用不同的颜色显示开灯或关灯) 。 二.功能描述:实现对路灯的控制三.解决方案(流程图)先定义一个函数来实现对指示灯的控制,该函数用到了 for 循环语句,取余(因为跟倍数有关) ,还有 if 语句,定义一个指针*light 来存放灯亮灭的情况,并为其分配动态内存。最后在主函数中进行函数调用来完成编程。四.主要函数描述colloc 动态内存分配函数 可分配连续的存储空间free 释放动态分配函数存储空间 25.主要技术问题程序代码#include#includeint main(void)int i,N,*light;void on_off(

3、int n,int k,int p);printf(Enter N:);scanf(%d,&N);if(light=(int *)calloc(N,sizeof(int)=NULL) printf(Not able to allocate memory.n); exit(0); /如果 light=0 则说明无法分配内存空间,退出for(i=0;i | ai-1, ai D,a i-1 using namespace std;typedef struct LNodeint num; /编号 int code; /密码 struct LNode *next;LNode;void create(L

4、Node *&tail, int m, int n)LNode *p, *q; /辅助节点LNode *head; /头结点if(n = 2 时head = new LNode;p = head;p - num = 1;cin p -code; /输入第一个密码for(int i = 2; i next = q;q - num = i; /写入编号 cin q - code; /输入其余的密码 p = q; /p 指向已建链表的最后一个节点 tail = p;tail - next = head; /建立循环链表 void run(LNode *&tail, int m, int n)LNod

5、e *p, *q; /辅助节点p = tail; 6for(int i = 1 ; i next;q = p - next; /q 指向出列者cout num; /输出出列者的编号 i code; /更新报数上限 p - next = q - next; /p 指向出列者的下一人delete q; /删除出列者节点 int main()LNode *tt; /尾节点int m; /报数上限 int n; /人数cout n;cout m;create(tt, m, n);run(tt, m, n);return 0;运行结果:Input the number of people:7Input

6、the first code:203 1 7 2 4 8 46 1 4 7 2 3 5五结论(实验心得)1、 当输入人数为 1 时,程序出现了意想不到的错误,在程序中加入对非法数据和边缘数据的处理。2、 第一组数据输出正确的出列顺序,但第二组却输出了错误的出列顺序,发现是在对 m mod n 上当结果为 0 时没有特殊处理,在 7程序把这个加速操作删去。3、原来程序是使用全局变量的,但是全局变量不安全,全部改为局部变量。这样一修改后,发现程序在传指针的时候程序崩溃了,想了很久没想到什么原因。后来改成用传引用后程序就能顺利运行,并成为最终这个程序。再后来的时候突然想到了原因,在传指针的时候函数要

7、用指向指针的指针作为形参。做这个程序是想挑战一下自己的,没想到出了这么多问题,当时很头疼,不过最后还是耐心一个一个的把错误找了出来,这是编的最后一个程序,完成了,很开心。3.处理文件:通信录一.问题描述: 从键盘读入姓名,电话号码和住宅地址,人数要 10 人以上。输入的符号由英文字母、数字及中文构成。将它们写入一个文件。如果这个文件不存在,就写入新文件。如果文件已存在,就将它们写入该文件。程序可添加新的姓名、电话号码和住宅地址。二.功能描述:对文件进行灵活操作三.解决方案(流程图)(1)如果没有文件名,要求用户输入。 8(2)打开文件并显示文件的内容(3)将字符串写入文本文件(4)从文本文件读

8、取字符串(5)更新文件的内容四.主要函数描述struct 定义一个结构体存放姓名住址和电话FILE*fp 打开文件fclose 关闭文件五主要技术问题程序代码#include#includestruct tx char name100;char address100;char tel100;void main()FILE*fp; int n;struct tx x;if(fp=fopen(a.txt,w)=NULL)printf(不能打开文件 a.txt!);exit(0);printf(人数 n=);scanf(%d,&n);while(n0)scanf(%s %s %s,x.name,x.

9、address,x.tel);fprintf(fp,%s %s %sn,x.name,x.address,x.tel);n-; 9六结论(实验心得)对文件的处理,还是比较得心应手的,不过创新的部分就有点无从下手了。总体不难,用到了结构体。4.单词开头大写一.问题描述:输入一个由多个英文单词组成的句子,两个单词之间包括空格或标点符号,长度不超过 200 个字符。最后输出这个英文句子使句中每个单词开头第一个字母大写,其他不变。2.功能描述:从一个英语句子中找出单词,并把单词的首字母变成大写。3.解决方案(流程图)先判断空格和标点符号的出现,利用空格和标点符号区分单词。然后对字母大小写进行代替。四.

10、主要技术问题程序代码#includevoid main()char a200,*p;printf(Please input a string:n);gets(a);p=a; 10if(*p=a&*pz|*pZ|*p=a&*(p+1)=z) *(p+1)-=32; /将此小写字母变成大写else*p=*p;puts(a);运行结果输入:hi jack,welcome to china.i miss you.输出:Hi Jack,Welcome To China.I Miss You.五结论(实验心得)此程序用到了指针,考查了 ASCII 码,总体不难。但如何把标点符号全部考虑进去是个突破点,小女不才,只能用最笨的办法了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号