计算概论(C语言)习题课讲义01 内容概要 作业系统OpenJudge 编程环境CodeBlocks 图灵停机问题 作业系统:OpenJudge 网址:http://openjudge.cn/ 准备工作 网上注册 点击此处注册,用户名格式:学号+姓名 加入小组 注册完成后,在小组栏目中查找数院计概(C语言),并加入 使用演示 提交作业方式:对源代码全选,复制和粘帖。即Ctrl+A, Ctrl+C, Ctrl+V 举例“Hello C”程序 #include <stdio.h> int main() { printf("Hello C"); /*向屏幕输出结果*/ return 0; } 系统判定流程 还有一些其他错误,例如Time Limit Exceeded/Memory Limit Exceeded等。 一些典型错误 错误一: #include <stdio.h> int main() { printf("Hello C") /*向屏幕输出结果*/ return 0; } 错误二: #include <stdio.h> int main() { printf("Hello,C"); /*向屏幕输出结果*/ return 0; } 错误三: int main() { printf("Hello C") /*向屏幕输出结果*/ return 0; } 编程建议 OpenJudge的帮助文档给出了下述建议:...
C_Programmings
计算概论(C语言)习题课讲义02 内容概要 数的存储 字符的存储 数的存储 两个事实: 计算机以二进制存储所有的数据,无论是文件、图片,还是视频及程序。 计算机的存储空间是有限的;所以,计算机只能表示有限的数。 整数的存储 不同电脑间的变量长度,有所差异。具体可以使用 sizeof 运算符测试。 short int 类型的整数用四个字节的二进制表示 int 类型的整数用八个字节的二进制表示 long int 类型的整数用十六字节的二进制表示 上述三种类型,未用 unsigned 关键词修饰,均表示带符号的整数。即类型的最高一位为符号位,用0表示正数,1表示负数。 所以,根据上述信息,请思考: short int 类型能够表示的最大整数为? 再加一的话,结果如何? short int 类型能够表示的最小整数为? 再减一的话,结果如何? 上述问题中的类型换成 unsigned short int 或者 int 呢? 演示:整数的上下溢出 小数的存储 为什么小数,又被叫做浮点数呢? 这是由于计算机内部在存储小数时,使用的是如下的二进制的科学计数法: Number=A*2^B。其中,A被称为尾数,指数B称为阶码。小数点的位置是“浮动”的,浮点数的名称由此而来。 float 类型为单精度浮点数,长32位,尾数长度23,指数长度8,首位为符号位,指数偏移量127; double 类型为双精度浮点数,长64位,尾数长度52,指数长度11,首位为符号位,指数偏移量1023; 约定小数点左边隐含有一位,通常这位数是1,所以上述单精度尾数的实际长度为24(默认省略小数点左边的1则为23),双精度尾数长度实际为53(默认省略小数点左边的1则问52); 机器精度 Wikipedia上机器精度Machine Epsilon是这样描述的:“Machine epsilon gives an upper bound on the relative error due to rounding in floating point arithmetic”。因为浮点数是离散的,所以实数的表示存在着误差。例如圆周率这样的无限不循环小数不可能精确地由某一个浮点数表示。 我们需要一些具体的量去刻画这种误差,以估计结果的准确性。机器精度便是其中之一:它是所有相对误差的上限。相对误差是绝对误差与精确值的比值的绝对值。例如一个精确的实数x,所有单精度浮点数中与x距离最近的数为y,绝对误差为|y-x|,相对误差即|y−x|/|x|,而所有相对误差的上限便是单精度浮点数的机器精度。 对单精度而言,是2的-23次方,约为1.1921e-07;对双精度而言,是2的-52次方,约为2.2204e-16。...
计算概论(C语言)习题课讲义03 内容概要 从源代码到可执行程序 变量的使用 函数的使用 从源代码到可执行程序 更为具体流程如下图所示, 预处理(Preprocessing) 使用预处理器cpp (也可使用gcc -E),将所有的#include头文件以及宏定义替换成其真正的内容。预处理之后得到的仍然是文本文件,但文件体积会大很多。 编译(Compilation) 使用编译器gcc (或者gcc -S),将经过预处理之后的文件转换成特定的汇编代码。 汇编(Assemble) 使用汇编器as (也可以使用gcc -c),将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式。 链接(Linking) 使用链接器ld,将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。 演示:从源代码到程序 名词解释:GCC the GNU Compiler Collection Link The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,…). GCC was originally written as the compiler for the GNU operating system. 变量的使用 一个变量是一个固定大小的“仓库”,用于存储一定类型的数据。变量的定义是“申请仓库”的过程,变量的赋值或取值,是“使用仓库”的过程。值得注意的是,C语言对局部变量,并不“主动打扫仓库”。 演示: 变量的未初始化 名词解释:局部变量和全局变量...
计算概论(C语言)习题课讲义04 内容概要 判断语句 循环语句 循环算法举例 判断语句 if(boolean_expression) { /* 如果布尔表达式为真将执行的语句 */ } else { /* 如果布尔表达式为假将执行的语句 */ } 或者嵌套时, if(boolean_expression 1) { /* 当布尔表达式 1 为真时执行 */ } else if( boolean_expression 2) { /* 当布尔表达式 2 为真时执行 */ } else if( boolean_expression 3) { /* 当布尔表达式 3 为真时执行 */ } else { /* 当上面条件都不为真时执行 */ } 关系表达式只有两种可能的结果,成立为真,反之为假。由于C语言没有专门表示逻辑值的类型,所以任何基本类型的值都可以当做逻辑值使用。零表示假,非零表示真。 演示:零表示假,非零表示真 条件运算符?:,可以用来替代 if…else 语句. 注意点 5>=3>=1的理解 将==打成=的手误 循环语句 while循环 do…while循环 for循环 while(condition) { statement(s); } do { statement(s); }while(condition); for ( init; condition; increment ) { statement(s); } 演示:三种循环方式实现 1+2+…+100 循环算法举例 辗转相除法 又名欧几里得方法,是求两个整数数最大公约数的经典算法。...
计算概论(C语言)习题课讲义05 内容概要 递归 循环 调试 递归 The process in which a function calls itself directly or indirectly is called recursion. 两个要素: 1. 递归出口 2. 递归公式 int fact(int n) { if (n == 0) // 递归出口 return 1; else return n * fact(n - 1); //递归公式 } 演示:调试演示递归程序执行次序 This illustration is in English, rather than an actual programming language, but is useful for explaining the process in a non-technical way: A child couldn't sleep, so her mother told a story about a little frog, who couldn't sleep, so the frog's mother told a story about a little bear, who couldn't sleep, so bear's mother told a story about a little weasel ....