ACM+第1课+正确处理输入输出
- 格式:doc
- 大小:262.00 KB
- 文档页数:7
本栏目责任编辑:王力计算机教学与教育信息化小学信息技术教材中的计算思维挖掘与教学案例浅析——以南方版“算法与程序设计初体验”一课为例蔡荣华,万梦思(湖南师范大学教育科学学院,湖南长沙410006)摘要:计算思维是当前教育领域和计算机科学领域重点关注的一个话题,在中小学阶段如何将计算思维更好地融入课堂教学,一直是一线教师比较关注的内容。
通过深度挖掘小学信息技术教材南方版六年级下册第一单元中的计算思维内容和对案例进行分析,以期为一线教师在用教材进行教学设计和课堂教学中融入计算思维提供新的视角。
关键词:中小学信息技术教材;计算思维;教学案例中图分类号:G642文献标识码:A文章编号:1009-3044(2021)14-0080-02开放科学(资源服务)标识码(OSID ):1引言计算思维这一概念的公开提出是周以真教授在2006年通过美国的权威刊物发表的,同时周教授还强调了计算思维的重要性,它应该跟读、写、算一样成为每个人都应该掌握的一种基本能力。
周教授认为,计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动[1]。
根据周教授的观点,计算思维是通过仿真、递归、抽象、自动化、冗余、分解等一系列核心的方法将复杂的问题转化成计算机能够识别的基本的解决问题步骤,并且将问题解决。
美国国际教育技术协会(简称ISTE )对基础教育阶段的计算思维培养给出了操作层面的定义,包括六个要素[2]。
目前针对计算思维国内外还没有统一的定义,国内外许多学者都对计算思维的定义和操作提出了自己的理解,南安普敦大学的CynthiaSelby 博士和John Woollard 博士提出的计算思维包括算法思维、抽象、分解、概括和评估这五个要素[3],如图1所示。
图1计算思维五要素Selby 博士和Woollard 博士关于对计算思维的定义比较适合中小学信息技术教育,本次文章里也是借用这个定义认为计算思维是由抽象思维、算法思维、分解思维、概括思维以及评估思维这五个思维要素组成的。
《嵌入式系统及应用》实验与课程设计指导书韩磊曹欲晓编南京工程学院前言目前,嵌入式系统已广泛地渗透到科学研究、工程建设、军事、各类产业,甚至商业、文化、艺术及人们日常生活的方方面面。
随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术的重要性日益凸显,这方面人才的需求量与日俱增,高等学校的培养任务迫在眉睫。
2004年,ACM和IEEE联合制定了新版的计算机学科的课程体系,其中一个主要的变化就是把嵌入式系统列为本科生的专业基础课,并且给出了基本的课程体系。
同时,美国卡内基梅隆大学、伯克利大学等国外高校也不断地在完善他们的嵌入式教育体系,欧盟也推出了面向欧盟高校和企业的嵌入式研究计划。
国内高校对嵌入式系统的教育教学也非常关注,嵌入式系统课程体系正在形成和完善。
《嵌入式系统及应用》是一门实践性很强的课程。
只有通过实验,才能使学生更深入地理解和掌握嵌入式系统的理论和技术。
本书根据课程的教学要求和教学实践经验,按照学生掌握知识的规律,循序渐进,由浅入深,阐述了配套实验系统的硬件平台以及软件开发平台的构建方法,编写了有助于学生理解与巩固理论知识的基本实验,提高分析问题和解决问题能力的设计性实验,以及培养创新思维和自学能力的综合性实验。
本书以武汉创维特公司的JXARM9-2410实验教学系统为嵌入式实验平台,以ADT IDE为软件开发环境。
本书共分五章:第1章介绍JXARM9-2410实验箱的硬件模块以及资源分配;第2章阐述了嵌入式系统的交叉开发模式、ADT IDE开发环境以及超级终端的使用;第3章基本实验部分让学生熟悉开发环境的使用、汇编语言编程以及操作系统的相关知识;第4章介绍驱动程序开发以及图形用户界面的设计;第5章介绍课程设计的题目及要求。
嵌入式系统技术综合全面,加上编者水平有限,编写时间仓促,书中错误和不妥之处在所难免,敬请读者批评指正。
编者目录第1章实验系统介绍 (1)1.1 概述 (1)1.2 硬件组成 (1)1.2.1 硬件模块 (1)1.2.2 硬件资源分配 (3)第2章软件开发环境搭建 (5)2.1 开发模式与工具 (5)2.1.1 开发模式 (5)2.1.2 开发工具介绍 (6)2.2 ADT IDE集成开发环境的安装 (9)2.2.1 系统配置要求 (9)2.2.2 ADT IDE安装 (9)2.3 超级终端的使用 (13)第3章基本实验 (15)3.1 ARM开发环境实验 (15)3.2 ARM汇编语言编程实验 (23)3.3 uC/OS-II移植实验 (26)3.4 uC/OS-II任务间通讯和同步实验 (32)3.5 uC/OS-II内核裁剪实验 (35)第4章设计性实验 (38)4.1 键盘驱动程序设计实验 (38)4.2 定时器设计实验 (42)4.3 GUI移植实验 (44)4.4 图形界面编程实验 (54)第5章课程设计 (59)5.1 课程设计任务安排 (59)5.1.1 目的和意义 (59)5.1.2 任务及要求 (59)5.1.3 进程安排 (59)5.1.4课程设计报告 (59)5.2 课题及设计思路 (60)第1章实验系统介绍嵌入式系统课程以武汉创维公司研发的JXARM-2410实验系统为实验平台,该实验平台功能齐全,调试方便,易于嵌入式系统入门与提高。
0 引 言在当前新工科+工程教育认证的背景下,以学生为本就是要面向需求、目标制导、能力为尺,面向专业人才的社会需求制定培养目标,根据专业培养目标设计培养计划中各课程的教学实施方案,以学生应用能力高低作为课程教学质量的检验标准 [1]。
程序设计是高校计算机类专业的核心基础课程,也是理工科类专业的重要基础课程之一,其教学目标是使学生掌握程序设计的思想和方法,以及基本的程序设计过程和技巧,具备初步的分析问题和利用计算机求解问题的能力[2]。
该课程的教学质量直接关系到后续其他专业课程的学习。
但是以知识传授为主的传统教学模式已不能适配以能力培养为目标的教学要求,学生的个性化学习需求也不能得到满足,使得课程教学效果大打折扣。
围绕这门课程,许多高校从理念导向、教学模式、实践体系等不同角度提出了多种形式的教学改革方案[3-6]。
围绕学生应用能力培养,全面深入地改革程序设计课程,形成系统的、可借鉴推广的优质课程教学实施方案和资源,对提高计算机类专业乃至理工科类专业的学生培养质量具有重要的意义。
1 理念与思路程序设计课程是计算机类专业的基础课程,其教学目标是以学生的计算机基础编程能力培养为核心,在课程教学改革时需要从教学内容与资源、教学过程、教学方法以及考核方式等方面统筹考虑和设计,形成一个完整的、可推广应用的教学实施方案,从而惠及课程相关的所有学生。
以知识为载体、应用能力培养为核心,全面重构程序设计课程教学各要素,包括主题式的教学进程重构、共建共享的支撑手段重构、混合式的教学模式重构、自评随测的学习评价重构,见图1,充分体现“两性一度”;同时,课程教学要注重持续改进,通过设计反馈机制,迭代改进和提升各教学环节,从而令课程教学质量螺旋上升。
基金项目:浙江省高等教育“十三五”教学改革研究项目“基于OBE 的程序设计类课程的目标达成设计及学习评价反馈机制研究”(JG20190567)。
第一作者简介:张泳,男,副教授,研究方向为软件工程、计算机网络安全,******************.cn 。
下篇莱昂氏UNIX源代码分析本书是U N I X操作系统版本6源代码的姐妹篇。
它对U N I X操作系统的源代码进行了分析。
U N I X软件系统是由贝尔实验室的肯・汤姆森和丹尼斯・里奇编写的。
本文档包含了贝尔系统专有的信息。
仅限于贝尔系统中工作与此相关的授权雇员使用。
不允许向非授权雇员泄露本书的内容或为其作复制。
在贝尔系统之外,只限于向U N I X分时操作系统版本6许可证的持有者配售此书。
使用、复制本文档受到Western Electric公司发出的这种许可权上所指明的限制。
前言本书力图详细解释一个操作系统的内核,该操作系统在几年内将成为最重要的系统之一。
这个操作系统就是U N I X分时系统,它在数字设备公司的P D P11计算机系统的较大型机上运行,由贝尔实验室的肯・汤姆森和丹尼斯・里奇设计并实现。
《A C M通信》(Communication of ACM)1974年7月号上宣布其问世。
在对U N I X稍加研究后,我们就发现U N I X可作为学生们深入学习的正式课程,其理由是:• UNIX在我们已具有的系统上运行。
• 该系统非常紧凑,源代码和有关资料都可方便取用。
• 它提供非常广泛的可用功能。
• 它是一个非常优良的操作系统,事实上它开辟了许多操作系统的新领地。
在U N I X分时系统的魅力和优越性中的一个重要点是其源代码的紧凑性。
当只提供少量外部设备时,该系统常驻内存的内核源代码长度大约只有9 000行。
通常认为一个人能够理解和维护的程序长度约为1 0000代码行。
大多数操作系统或者其长度超过这种限制1~2个数量级,或者只向用户提供非常有限的功能,也就是说或者除极少数非常专注、能投入大量时间的学生外大多数学生都无法了解其详细情况,或者这种系统是专用的,在技术方面没有进行学习的实际价值。
教授操作系统课程大致有三种方法:第一种是“一般原理”法(general principle),这种方法详细阐述基本工作原理,并引用若干个现存操作系统作为示例,但一般学生对这些系统都缺少直接经验。
基于CS模式的实验课评测系统摘要:计算机专业的学生除了要掌握算法理论,还要熟练掌握上机操作实现算法的能力。
本文谈到了如何去构建一个程序评测系统,来检验学生在实验课提交的程序的是否正确。
关键词:cs模式评测系统在计算机迅猛发展的今天,作为计算机专业的学生,应该扎扎实实地打下编程基础,提高自己的编程能力。
而实践是检验真理的唯一标准,因此计算机课程应该重视实验课。
而传统的实验课是老师布置了一些实验题目,然后让学生自由去编写,不计时间和空间复杂度,对输出内容也没有严格约束。
有些同学也不太重视实验课,仅仅是简单地得出结果就完成了。
有些同学还在实验课上上网,玩游戏或者做些其他事情。
针对这种情况,我们可以借鉴acm在线评测的经验,开发一个自动评测系统来对学生的程序进行检测。
我们希望通过这种方法来提升计算机实验课的质量。
一、系统分析与设计系统采用了cs模式的网络结构,即时服务器和客户端的结构。
服务器端是由任课教师去管理,客户端是给同学们登录到上面去提交程序。
主要思路是每次实验课上,老师给出实验题目的要求,给出输出样例,然后学生提交程序,如果学生的程序能通过老师准备的所有情况,而且输出正确,那么学生的程序就算成功了,这样学生的这次作业才算完成。
服务器和客户机都是实验室里的计算机。
服务器端在教师计算机上运行,客户端由学生计算机来运行。
为了便于管理,由老师统一给学生安排好登录账号和密码。
每次上课时,老师先启动服务器,然后学生的客户端才能连上服务器。
服务器端:服务器端包括四个方面的功能,分别是管理用户,增删数据,检测功能,数据统计和查看。
第一个是管理用户。
服务器能识别用户的账号和密码是否正确,只有账号和密码都输入正确了,才运行客户端与服务器成功连接。
服务器端拥有所有登录用户的列表和相关信息。
第二个是增删数据。
包括增加用户,增加题目,删除用户,删除题目,数据存储等。
服务器端应该拥有比较大的数据存储能力,而且安全性较高,有较强的数据恢复能力,数据不会轻易丢失。
ACM 第一课 正确处理输入输出 一, 输入输出原理
之所以我们平时编程输入输出都是在一个黑框框里面完成的,是因为你输入流和输入流都是在这个黑框框里面看到的。所以导致好多同学看到“Sample Input” 1 2 3 4 5 6 7 8
想到的是先把所有输入存起来,然后再输出a+b的结果。因为这样在黑框框里面看到的结果才和标准的一样。 如果你真的明白了什么是输入输出流,你就不会这么写了。 如上图,你给程序一个输入流,经过程序处理后,会给出一个输出流。默认情况下,输入流由键盘敲入,就是俗称的黑框框。输出流的显示也是在黑框框里面。如果我们人工改变它,比如,输入流成了一个文本文档,输出流也成了一个文本文档。 将这两项分开。你现在就应该明白为啥会这样写了吧?
其中 用途是将输入流重定向为一个文档文件 in.txt 同理 是将输出流重定向为一个文档文件 out.txt 打开当前cpp 文件所在目录 新建一个 名字为in 的txt文档 ,在里面输入 1 3 4 5 6 7
保存,然后执行上一段代码,会自动生成一个out.txt 打开里面,你就看到输出结果 5 9 13 怎样?是不是和题目给的 sample in 和sample out 格式看起来一样了? 所以你在考虑编程的时候要把输入输出流分开考虑。不必先把所有输出流存下来然后输出,来一个输一个就OK了。
细心的人会发现我在循环里面写的是 EOF 是 end of file 明白了吧?默认系统给他的值是-1 用-1 替换EOF 也行,不过为了程序的可阅读性。还是用EOF好。 为啥不用cin?cin,cout 的处理速度很慢,之所以你没有体会到,是因为给你的用力少,如果给你1000000000个用力,cin 接收字符的速度慢就会被放大,有的题就会超时。所以建议大家全用scanf 和printf 。 Scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b ); 如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。所以用来结束程序。好多人用while(1) 晕,不超时才怪。
二, 常见的输入 1), Input The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
Sample Input 1 5 10 20
这种输入是以EOF 为文件结尾,所以只要检测EOF就OK了。就是上面我写的那种方法。 2), Input Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair of integers a and b, separated by a space, one pair of integers per line. Sample Input 2 1 5 10 20
先给出测试用力个数n,然后 给出n行。 解决方法就是先接收字符n ,然后控制循环循环n次,每次接收两个数。代码不提供了,自己写。
3), Input Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.
Sample Input 1 5 10 20 0 0
结束条件不是EOF了!!是一个指定的 0 0 所以你一定别写成EOF 了。好多用例很阴的 比如 2 3 4 5 0 0 6 6 4 6 如果用EOF结束,你应该知道发生了啥。。。。。。 方法就是输入两个数,检测一下是不是0 0 ,简单吧?
4), 以上三种情况的组合。
给你举个比较复杂的例子: Input Input contains multiple test cases. Each test case contains a integer N, and then N integers follow in the same line. A test case starting with 0 terminates the input and this test case is not to be processed.
Sample Input 4 1 2 3 4 5 1 2 3 4 5 0 每行先给一个 数字 N ,然后后面跟着N个数 ,以0为结束。所以你只要检测 第一个数是否是0 ,如果不是 ,接收N个字符,是退出。
5),字符输入,比较恶心。 Input Input to this problem will consist of a (non-empty) series of up to 100 data sets. Each data set will be formatted according to the following description, and there will be no blank lines separating data sets. All characters will be uppercase.
A single data set has 3 components: Start line - A single line, "START" Cipher message - A single line containing from one to two hundred characters, inclusive, comprising a single message from Caesar
End line - A single line, "END" Following the final data set will be a single line, "ENDOFINPUT".
Sample Input START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END ENDOFINPUT
其中有几个特殊字符 start end endofinput 读懂题意就明白啥意思了。字符比较就能解决。 主要是怎么去接收这些字符串呢?而且还有空格。
scanf(“%s”,str); 可以么?不行啊,,,有空格,比如第一个 他收到 NS 就退出了。 gets(str); 可以么?显然他是可以的。但在用gets时要注意题目的输入中是否有数值输入,gets()会吸收 ‘\n’ 所以如果是一个数值 后面跟着一个 字符串 ,就要先吸收掉 一个 ‘\n’ 然后再接收字符串。 getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下: istream& getline(char line[], int size, char endchar = '\n'); 不用管它的返回类型,来关心它的三个参数: char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。 int size : 最多接受几个字符?用户超过size的输入都将不被接受。 char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。
结合后两个参数,getline可以方便地实现: 用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。 char name[4]; cin.getline(name,4,'\n'); 由于 endchar 默认已经是 '\n',所以后面那行也可以写成: cin.getline(name,4);
相关注意的事项请参考咱们本校资料里面的 cin和scanf在使用时的注意事项
三, 常见的输出 输出就比较容易了。 1), 见的最多 1 3 4
这种输出只要在正常输出的数值后面加个换行符就ok 2), Output For each pair of input integers a and b you should output the sum of a and b, and followed by a blank line. 每两个输出之间有空行。好多人刚开始都是用的这种方法:直接两个\n\n 你提交,他会提示你格式出错 因为结尾的地方你给了两个空行,显然是不行的。 解决方法是,用一个tag 初值为0 ,当输出的时候检查它是不是0 ,如果是0 ,说明是第一次输出,则输出 xxxxxxxxxxxx\n 然后把 tag值变成 1 。当第N次(N>1)输出时,检查到tag为1 按照 \nxxxxxxxxx\n 输出就OK了。 3), 形如 1 2 3 4 5 6 7 8 2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 0
这种输出看似简单,其实很阴,如果你的输出是 “%d空格” 那么最后一个输出也有一个空格,如果你的结果正确,提交后肯定是格式出错。 所以怎么解决这个问题呢?还是和2一样,检测,如果是第一次,输出一个数,没有空格,如果不是第一次,空格+数值,最后补个换行。Ok!!