程序设计杂谈 2014级 ACM班 柯嵩宇.

Slides:



Advertisements
Similar presentations
定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
Advertisements

2007 年 6 月 楚雄师范学院计科系 离 散 数 学 第三章 逻辑代数 ( 上 ) 命题演算.
强力打造湖北农业信息网 全面推进湖北农村信息化
黄金时代 黄金时代:老子,释迦牟尼,苏格拉底,孔子,庄子,耶稣…… 他们是人类智慧的顶峰,他们用人生展示了智慧与慈爱。
第四章 商代之舞蹈 本檔案圖片來源:google圖片.
嗇色園主辦可立小學 故宮 製作日期:2011年3月21日.
狂犬病 保護你我,愛護動物 武漢國中 黃憶暄.
九十二年度第二次 會計作業實務座談會 主辦單位:會計室.
迪士尼動畫 玩具總動員1.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
请说出牛顿第一定律的内容。.
第 2 章 初探 C++.
課程實錄.
四資二甲 第三週作業 物件導向程式設計.
基于“贪吃蛇”游戏的C#大案例剖析 邓锐.
Memory Pool ACM Yanqing Peng.
徵收苗栗市福全段147、1588及文心段10、11地號等4筆土地之
動物的繁殖行為.
5,2 新时代的劳动者.
105年臺北市 優先免試入學 高中職免試入學 五專免試入學 報名方式宣導
行動報告人:丁俊源 行動參與人和單位: 我們全家人 社區鄰居、管委會 新北市環保局
讲 义 大家好!根据局领导的指示,在局会计科和各业务科室的安排下,我给各位简要介绍支付中心的工作职能和集中支付的业务流程。这样使我们之间沟通更融洽,便于我们为预算单位提供更优质的服务。 下面我主要从三方面介绍集中支付业务,一是网上支付系统,二是集中支付业务流程及规定等,
中国人民公安大学经费管理办法(试行) 第一章总则 第四条:“一支笔” “一支笔”--仅指单位主要负责人。负责对本 单位的经费进行审核审批。
劳模的风采.
單車失竊記心得.
庆阳香包.
第二章 JAVA语言基础.
01 C++ (Dynamic Array, Sort & STL)
專有名詞故事化.
跨校選課 說明會 主辦人:[國文系學會學權股] 葉軒如、李美玟.
也許你很疑惑: 最近升官的同事,專業能力又沒你強! 情場得意的朋友,長的又沒你帥或美! 小曹要交新朋友,為什麼就是比較簡單!
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
臺北市立大學 資訊科學系(含碩士班) 賴阿福 CS TEAM
南华大学计算机学院 软件工程系 QQ讨论群:
JAVA程序设计 第5章 深入理解JAVA语言----补充.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
代码风格 ACM Class 2016 范舟.
詩文的形成 有意義的字詞 句子 段落 一首詩文的形成,是由有意義的字詞組成句子,再由句子組成段落。
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
Shanghai Jiao Tong University
稅知多少.
第 1 章 文字媒體 多媒體導論與應用-第三版 1.1 文字的格式 1.2 數位化文字的應用 1.3 課後練習
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
上海交通大学 ACM班 原作者 2015级 卢思迪 部分调整 2016级 刘啸远 加了一点点 2017级 侯博涵
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
稅知多少 國家的重要基礎.
微信商城系统操作说明 色卡会智能门店.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
105學年第1學期期初校務會議 圖書館工作報告 報告人: 林佩佳主任.
岗位聘任管理系统使用说明 浙江师范大学人事处 咨询电话: 、
Review 1~3.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
98年度兒童課後照顧學程 修課名單確認暨課程說明會 2009/09/15(二) 08:40~09:20.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
全陽圓格局位置最好的A6-2樓 面中庭花園3房2廳2衛三面採光 捷運藍線江子翠捷運站1號出口Google距離210公尺
C++程序设计 概述 潘荣江 山东大学软件学院.
大綱 一.受試者之禮券/禮品所得稅規範 二.範例介紹 三.自主管理 四.財務室提醒.
第二章 Java基础语法 北京传智播客教育
提醒實驗做完了 實驗失敗,自動發通知 到line群組發通知 自動抓paper, 然後貼到Line群組
Presentation transcript:

程序设计杂谈 2014级 ACM班 柯嵩宇

讲些什么呢? 代码风格 Debug C++11

代码风格 合理的空格 合理的空行 花括号的位置 统一的缩进 合理的define 合理的头文件引用(鄙视没事干打了二三十行头文件的人) 命名规则 模块化的设计(非常重要,降低DEBUG难度)

空格 单目运算符应紧贴操作数 双目运算符前后有空格 逗号,分号,如果不是行尾请加空格 for, while, if, switch等之后加一个空格以突出关键字。

空行 两个函数定义之间加一个空行 不同阶段的语句块之间加空行(或者注释)(如图论算法的建图和其余操作)

缩进 Google Code Style推荐是2个空格,但是。。。 两个空格的缩进实在是太小了,有的时候很难看出代码的层次,因此推荐使用 TAB字符缩进。 主流的文本编辑器都支持自定义TAB字符的宽度,TAB字符可以方便其他阅读程 序的人。

关于define 定义常量应使用const/constexpr而不是用define 使用inline来定义简单函数,如max,min,sqr等 #define x first … 什么的绝对不可以出现

头文件包含 建议顺序: 尽量避免循环引用 自己写的头文件一定要带头文件保护 自己编写的先包含,然后是各类库,同一类的按照下面的顺序 输入/输出(如果有区别的话先输入再输出)(<iostream>,<cstdio>…) 工具(<cmath>,<algorithm>…) 尽量避免循环引用 自己写的头文件一定要带头文件保护

命名规则 应当直观且可以拼读 函数名用动词短语 常量/变量名,类名用形容词+名词 不要出现完全相同的局部变量和全局变量。

拼写规则 大小写混排(驼峰式)(InsertElement) 小写+下划线(insert_element) 常量名,全部大写+下划线连接 类名,函数名大驼峰 Matrix,TreapNode,InsertElement… 变量名小驼峰 bestAns,pivot… 小写+下划线(insert_element) 常量名,全部大写+下划线连接

什么时候需要DEBUG 程序运行不正常(崩溃,内存泄露) 程序运行结果不对 执行效率与期望不符(循环范围or死循环)

DEBUG 先自顶向下的确认一下代码的逻辑,程序流程是否正确。 划分模块,单独执行模块,查看运行结果是否正确。 确认到出错的模块。

DEBUG方法 本质上都是通过一些办法在程序运行的同时查看程序的执行情况。 with IDE or Debug tools like Code::Blocks, Visual Studio, Xcode Code::Blocks跨平台 VS、Xcode功能更加强大 with printing message 把变量的信息以一定的格式输出到屏幕或者文件。 建议:输出的时候使用cerr或者是stderr,这样子不会影响程序原有的输出,提交到OJ上 面也不会因为忘记删调试语句的问题WA。

Example(with Visual Studio 2015) 对于RE的程序,很简单,直接F5(调试),会执行到引起RE的语句同时报错。 查看变量,思考程序逻辑(想一下那些设计上的细节问题会引起RE,如数组越界, 空指针,野指针等) 对于WA的程序,设断点,然后逐过程,逐语句的执行。

过了样例但是WA 了怎么办 读题,确认自己没有看错题目,理解错题意。 读代码,确认代码逻辑是否正确。 小数据测试 大数据测试 优点:可以手算答案。 缺点:可能错误在自己的思维误区。 大数据测试 优点:可以测试程序在大数据下的运行状况。 缺点:并不能正确的知道数据的输出是什么,即,难测试程序的正确性,除非你知道这个 数据的正确输出。——对拍

对拍 需要: C++执行外部程序 Python执行外部程序 答案正确的程序 随机数据生成器 自动化脚本 生成数据 执行选手程序 执行答案正确的程序,得到正确输出 将选手的输出和正确输出比较,如果一致,重复以上操作,否则停止并保留数据和执行结果。 C++执行外部程序 int system(const char *s); // <cstdlib> Python执行外部程序 os.system(“command”) need “import os”

For TLE 暴力算法,大数据TLE——很正常,想想合理的算法吧 没有办法的办法——优化输入输出效率等各种黑科技。 尽量不要用动态空间,new的效率堪忧。。。

For MLE 检查一下数据范围和数组大小,是不是多打了几个0 去掉不必要的变量,重复利用尽量多的空间

For RE Stackoverflow Dived by zero std::exception 数组越界 减少递归层数,减少每层递归需要的内存空间 Dived by zero 仔细阅读代码,找到引起问题的语句 std::exception STL的异常,一般是引用了不合法的位置 数组越界 检查循环范围以及边界条件

C++11 字面值 二进制字面值 Unicode字面值 range-for thread

字面值 二进制字面值 Unicode字面值 0b001=0x1=01=1 0b10=0x2=02=2 UTF-8 u8”乐乐和琛哥”

rang-for for (<type> variant : STL’s data structures) { ...... }

thread 奔走相告 C++自带多线程了

std::thread Thread() noexcept; 默认构造函数,构造一个空的thread对象 template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... args); 构造一个thread对象,执行函数fn,参数通过后面的参数表给出。对象构造之后立即被执行。 Thread(const thread &th) = delete; 没有复制构造函数,线程不能被复制。 Thread(thread &&th) noexcept; 移动构造函数。

线程相关操作:

namespace std::this_thread std::this_thread::get_id();返回调用该函数的线程的ID。 std::this_thread::yield();放弃调用该函数的线程的执行。(CPU会先执行 别的线程,然后在试图执行这个线程,可以用于等待别的线程执行结果) std::this_thread::sleep_until(…);该线程暂停直到给定的时间点。 std::this_thread::sleep_for(…);该线程暂停一段时间。 时间都是通过C++11标准的时间类给出,详见<chrono>。

工程作业 full of dark technology