信息学奥林匹克竞赛培训教程——C语言程序设计C语言程序设计——程序设计基础目录1.2进制计数及其转换1.4C语言程序的基本结构1.5算法简介1.3程序设计语言的发展1.1计算机系统组成C语言程序设计——程序设计基础计算机系统硬件系统软件系统运算器控制器存储器输入设备输出设备内存外存CPU系统软件应用软件硬件是指构成计算机的物理装置,看得见、摸得着,是一些实实在在的有形实体软件是指计算机程序及有关程序的技术文档资料1.1计算机系统组成主机外围设备C语言程序设计——程序设计基础1.1.1硬件系统输入设备内存储器外存储器运算器控制器输出设备信息(如程序、原始数据)(存)数据(取)数据运算命令输出命令输出信息(存)数据存取指令程序指令数据输入指令数据信息控制信息C语言程序设计——程序设计基础(1)运算器运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数据运算包括算术运算和逻辑运算,后者常被忽视,但恰恰是逻辑运算使计算机能进行因果关系分析。一般运算器都具有逻辑运算能力。(2)控制器控制器是计算机的指挥系统,计算机的工作就是在控制器控制下有条不紊协调工作的。控制器通过地址访问存储器,逐条取出选中单元的指令,分析指令,根据指令产生相应的控制信号作用于其它各个部件,控制其它部件完成指令要求的操作。上述过程周而复始,保证了计算机能自动、连续地工作(中央处理器)C语言程序设计——程序设计基础(3)存储器存储器是计算机中具有记忆能力的部件,用来存放程序或数据。程序和数据是两种不同的信息,应放在不同的地方,两者不可混淆。指令总是送到控制器,而数据则总是送到运算器。存储器就是一种能根据地址接收或提供指令或数据的装置。存储器可分为两大类:即内存储器和外存储器。C语言程序设计——程序设计基础(4)输入设备(5)输出设备输入设备是用来输入程序和数据的部件。常见的输入设备有:键盘、鼠标、麦克风、扫描仪、手写板、数码相机、摄像头等。输出设备正好与输入设备相反,是用来输出结果的部件。要求输出设备能以人们所能接受的形式输出信息,如以文字、图形的形式在显示器上输出。除显示器外,常用的输出设备还有音箱、打印机、绘图仪等。C语言程序设计——程序设计基础1.1.2软件系统软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太严格情况下,认为程序就是软件。根据软件用途将其分为两大类:系统软件和应用软件C语言程序设计——程序设计基础(1)系统软件(2)应用软件系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另一类是面向用户的软件,如各种语言处理程序(象BC、VC等)、实用程序、字处理程序等。应用软件是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。如财务报表软件、数据库应用软件等。初学C语言的读者主要任务是学习如何编写应用软件。C语言程序设计——程序设计基础1.2进制计数及其转换十进制:4956=410³+910²+510¹+610º二进制:1011=12³+02²+12¹+12º十六进制:81AE=816³+116²+1016¹+1416º八进制:4275=48³+28²+78¹+58º十进制数二进制数八进制数十六进制数0~90~10~70~9,A~F,a~f102816100,101,102,...20,21,22,...80,81,82,...160,161,162,...逢十进一逢二进一逢八进一逢十六进一1.2.1进制计数C语言程序设计——程序设计基础1.2.2进制间的相互转换二进制、八进制、十六进制转换成十进制方法:按权相加100123452592121202121211110111)()(:例10012894868381136:3)()(例1001231679781610162161516121:4)()(例AF103210123452625.59212021212120212121101.111011:2)()(例C语言程序设计——程序设计基础1.2.2进制间的相互转换十进制转换成二进制、八进制、十六进制步骤:首先进行整数部分转换,然后进行小数部分转换。整数部分转换方法:连续除以基,从低到高记录余数,直至商为0。(“除基取余倒记法”)例:把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2例:把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余11余12余1例:把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余C语言程序设计——程序设计基础1.2.2进制间的相互转换十进制转换成二进制、八进制、十六进制步骤:首先进行整数部分转换,然后进行小数部分转换。小数部分转换方法:连续乘以基,从高到低记录整数部分,直至结果的小数部分为0。例:将十进制数0.8125转换成二进制0.8125×2=1.625(b1=1)最高小数位0.625×2=1.25(b2=1)0.25×2=0.5(b3=0)0.5×2=1.0(b4=1)最低小数位所以(0.8125)10=(0.1101)2C语言程序设计——程序设计基础1.3程序设计语言的发展机器语言汇编语言高级语言一串串由“0”和“1”组成的指令序列用一些简介的英文字母、符号串来代替一个特定指令的二进制串接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上使用C语言程序设计——程序设计基础1.4C语言程序的结构【例1-1】最简单的C语言程序。/*ThisisthefirstCprogram*/#includestdio.hintmain(){printf(HelloWorld!\n);return0;}注释信息预处理命令返回值为int型的主函数主函数开始主函数结束函数调用函数返回值0语句结束标志内部函数名主函数名函数返回int型函数参数函数体C语言程序中,注释由“/*”开始,由“/*”结束,可多行注释。C语言的预处理命令都是以“#”开头,stdio.h是一个头文件。C语言规定,语句以分号结束。一个C语言程序中有且只有一个main函数。C语言程序执行时就是从main函数开始,具体讲就是从“{”开始,到“}”结束。printf是C语言的一个内部函数名,因为它后面跟了“()”,其功能就是把“HelloWorld!”输出到计算机的屏幕上,其中双引号和“\n”不显示。主函数正常结束,函数返回0。运行结果:HelloWorld!C语言程序设计——程序设计基础【例1-2】计算输入的两个整数的和。/*ThisisthesecondCprogram*/#includestdio.hintmain(){intx,y,z;scanf(%d%d,&x,&y);z=x+y;printf(“%d+%d=%d\n,x,y,z);return0;}注释信息预处理命令返回值为int型的主函数变量定义,变量间以逗号分隔,最后以分号结束。主函数结束变量数据类型变量名函数名带有三个参数,参数间以逗号分隔函数调用语句,以分号结束函数名第一个参数第四个参数输入:35运行结果:3+5=8C语言程序设计——程序设计基础【例1-3】求输入两个整数的最大数。/*ThisisthethirdCprogram*/#includestdio.hintmax(inta,intb);intmain(){intx,y,z;scanf(%d%d,&x,&y);z=max(x,y);printf(max=%d\n,z);}输入:35运行结果:max=5intmax(inta,intb){intc;if(ab)c=a;elsec=b;return(c);}自定义函数申明自定义函数调用自定义函数max返回值为int型带两个形参返回a,b中最大值cC语言程序设计——程序设计基础C程序是由多个函数构成的;每个C程序有且只有一个main函数;main函数是程序的入口和出口;不使用行号,无程序行的概念;程序中可使用空行和空格;C程序格式常用锯齿形书写格式;C程序中可加任意多的注释;引用C语言标准库函数,要使用文件包含预处理命令把头文件包含进来;用户自定义的函数,必须先定义后使用;变量必须先定义后使用;函数包含两个部分:声明部分和执行部分。在C程序中声明部分在前,执行部分在后,不能颠倒;C语言的语句都是以分号结束。总结C语言程序设计——程序设计基础1.5算法简介程序数据结构算法=+对数据的描述程序的灵魂,解决问题的办法C语言程序设计——程序设计基础1.5.1程序设计的基本方法分析问题确定数学模型与数据结构设计算法编写程序程序编译调试并运行C语言程序设计——程序设计基础【例1-4】已知半径求圆的面积。(1)分析问题:根据半径求圆面积公式,可以借助数学公式完成。(2)确定数学模型与数据结构:①数学模型:使用求面积公式S=r2②数据结构:本问题可以设计一个变量空间r存储半径的值,一个变量空间S存储面积的值。(3)设计算法:①输入半径r;②依据圆面积公式求圆面积S;③输出圆面积S。(4)编写程序:用计算机语言描述算法的过程。(5)程序编译调试和运行:通过编译调试和运行程序,获得正确的编码和正确的结果。#includestdio.h#definePI3.14159intmain(){floatr,S;scanf(%f,&r);S=PI*r*r;printf(%f\n,S);return0;}