欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    新概念C语言案例教程.pdf

    • 资源ID:90929138       资源大小:31.49MB        全文页数:200页
    • 资源格式: PDF        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    新概念C语言案例教程.pdf

    新概念C程序设计教程上册第 一 章 C语言的基本概念1.1 c 语言程序的构成成分:例 题1.11)ftinclude /*编译预处理命令,将标准输入输出函数2)作为头文件包扩到用户源程序文件中*/3)8include /*编译预处理命令,将系统提供的数学函数4)作为头文件包扩到用户源文件中*/5)int main()/函数名为main的主函数的函数首部6)函数体开始7)float x,y;定义部分.定义变量及其类型8)x=45.2;语句部分.赋值语句9)y=sqrt(3*x+5.6);语句部分.赋值语句10)printf(“斌n”,y);语句部分.输出语句11)return 0;/语句部分.返回语句12)函数体结束注意:最左边的行号是为了说明方便而加上的,实际C语言程序中是不能有的。1.C语言的源程序的主要构成成分是函数定义(从第5到 第12行)。一个C语言源程序文件一般由多个函数定义顺序组成(直到第5章才讨论由两个以上函数构成的C语言源程序),但是其中必须有一个main函数。程序的运行都是从系统调用main函数开始的。2.函数定义由函数首部(第5行)和函数体(第6到 第12行)组成。函数体必须用大括号“”和“”括住。3.C语言源程序的次要构成成分是:编译预处理命令(第1、3两行的左边部分)、注 释(每一行右半部以/开始的内容,或以/*开始,以*/结束的内容)和 声 明(见第5章)。编译预处理命令和注释是不以分号结束的。4.C语言程序中,(任何函数的)函数体的主要构成成分是:定义序列(第7行的左半部)和语句序列(第8行到第11行的左半部)。这两种成分都要以分号结束(复合语句除外)。C语言函数体中,所有定义必须位于语句序列之前(*注)。*注:这是C89标准,其它高级编程语言不一定有此先后顺序要求。C99标准放宽了要求,可以在复合语句的前半部定义仅在复合语句中有效的局部变量,但目前不少编译器并不支持C99标准。所以,为了获得较好的程序可移植性,本书的论述以较老的C89标准为主。深入一步:定义序列被编译程序翻译成了内存中的数据序列(包括对存放数据的内存空间的事先安排),而语句序列则被翻译成了指示如何加工这些数据序列的机器语言的指令序列。将要运行的程序的指令序列也是位于内存中的。所以在运行某个程序前,程序用户必须借助于操作系统将位于外存文件中的这两部分内容加载到内存中。*5.在正式进行编译之前,编译预处理程序将根据源程序中的编译预处理命令对源程序文件进行一些辅助性的文本插入(i n c l u d e 命令)、替 换(#d e f i n e 命令)和编辑工作。编译预处理命令都是以“#”开始,不以分号结束。每条编译预处理命令必须书写在同一行上。6.注 释 以“/*”开始,以“*/”结束。注释会被编译程序首先删除掉。但良好的注释使程序更易被人们读懂。不要忘记书写注释的结束符号“*/”o注释有两种常用方式:一 种 是注释内容独自占据多行,对注释以下的一段程序或整个源程序文件进行说明;另一种是出现在一行的右边,对该行左边的内容进行说明。(注释部分在V C+6.0中是以绿色字体显示出来的。)单 行 注 释 以“”开始,它用起来比较方便,但它不是C语言标准规定的。1.2 C语言程序的语法要素1.1 X即争 除了格式控制串(见 1.4节 p r in t f O 和 scan f()函数)和注释部分以外的C语言源程序的其它部分,称为C语言的源程序的正文部分。(正文部分在V C 6.0中是以黑色字体显示出来的。)2.C语言的字符集,26 个大小写英文字母:A-Z,a-z;阿拉伯数字字符:09;特殊字符:!#%,&*+=()?:空格字符(对应键盘上的最长键Sp ace)换 行 符(对应E n t er 键)制 表 符(对应T ab键)以上所有这些字符构成了 C语言的字符集。书写C语言的源程序的正文部分,只能使用 C语言字符集中的字符,其它任何字符不得使用。字符集中的任何字符,只能用英文半角方式来进行输入。3.标识符是以26 个大小写英文字母、阿拉伯数字0 到 9 和下划线构成的字符序列;其中从左边开始的第一个字符不能是数字。在 C 语言中,只能使用符合标识符规定的名字,来对变量、符号常量、函数、语句标号命名。C语言对标识符的大小写敏感,也就是说m ain 与M ain,p r in t f 与 P r in t f 都是不同的标识符(m ain 和 p r in t f 都是C语言中的已经规定的函数名,所以,我们不能用来作为自定义的标识符)。4.关键字是被编译程序保留下来的特殊标识符;主要分为两大类:用于定义(或声明)的关键字和用于构成语句的关键字。(C 8 9 标准中的)关键字都是由小写英文字母组成的。关键 字(还包括预处理明令)在 V C+6.0中是以蓝色字体显示出来的。所有关键字列表如下:在 AN SI C 8 9 标准中共有32个关键字au t o br eak case char co n st co n t in u e def au l t do do u bl e el se en u mex t x r n f l o at f o r go t o if in t l o n g r egist er r et u r n sho r t sign edsiz eo f st at ic st r u ct sw it ch t y p edef u n io n u n sign ed v o id v o l at il e w hil e在 AN SI C 9 9 标准中增加了 5 个关键字B o o l C o m p l ex I m agin ar y in l in e r est r ict5.C语言源程序中可使用的分隔符有三个:空格、回车/换行、逗号。同类项之间要用逗号分隔,关键字和标识符之间要用空格或回车/换行来分隔,不能用逗号(比 如 i n t在 C语言中,合理地使用多余的空格和空行,可以使得程序更清晰、易懂、优美。6.C语言中常量分为数值常量(又称为字面常量)和符号常量两种。应当多使用符号常量,尽量少用数值常量。最常用的数值常量有以下儿种:1).整型常量 567,-425,0 等,是没有小数分量的数值。2).实 型(浮点型)常量:由正负号、数字、小数点构成。0.543、5 4 3.、543.0、0.0 都是十进制的小数形式。在数的左边还可以加上正负号。比 如-543.0。3).字符型常量 K ,*,8,,n,等,是用单引号括起来的ASCH码表中的字符,包括键盘上的可显示(或可打印)的字符和不可显示的一些控制字符(字符n 就是表示一个控制字符Enter键,详见附录ASCH码表)。深入一步:字符型量的本质字符常量在编写程序时,要用两个单引号括住它。它属于一种从表面上看来是非数值型的量。但其实在计算机的内存中,它就是以ASCII码的形式存储的,占用一个字节内存空间的一个二进制正整数(取值 在 0一127之间)。字符型量是用计算机进行文字处理的基础。符号常量一般由大写英文字母组成的标识符构成,用#define来进行定义,比如:#definc PI 3.1416。源程序中所有出现的记号P I 都会被编译预处理程序用3.1416替代。修改常量的值变得非常方便,程序的可读性也更好。7.变量定义变量的作用:要求系统为存放(其数值可以变化的)数据事先分配内存单元,变量名作为内存单元的行号地址。定义变量的形式是:类型名 变量列表:定义变量只能使用标识符。多个变量之间用逗号隔开,构成变量列表。C 语言中各种常用的变量类型是int(整型)、float(单精度浮点型)、char(字符型)、double(双精度浮点型)、long(长整型)。通过变量名score,可以找到(即映射为)相应的内存单元地址。假设地址为2000,语句:score=38.0;的含义和作用是:将数值38.0存放在地址为2000的内存单元中。变量的值是可以变化的。而变量名所对应的内存地址是不变的。8.变量一定要先进行定义,定义后一定要进行初始化(即存入一个初始值在变量对应的内存单元中,参 见 P页),然后才能在表达式中使用或进行输出。否则,变量所对应的内存单元中的垃圾掣般就会在程序中(的表达式或输出语句)被误用。9.运算符是用来告诉编译程序对运算量要做何种运算的抽象形式。由编译程序转化成具体的运算类指令。最常用的运算符分为三大类:算术运算符、关系运算符(见下一章)、逻辑运 算 符(见下一章)。各种算术运算符见下表表 2.x 各种算术运算符运算符运算举例结果+正号+88-负号-a(a 的值为3)-3+加11+516-减11-56*乘法11*555/除法11/52(这是整数除法)/除法11.0/52.2(这是实数除法)乘法运算符最容易漏写(比如:将 2*x*y,误写为2xy),不要把实数除法运算符误用为整数除法(比如:错 把 1.0/3写 成 1/3 o 1/3的值是0)。%取模(取整除的余数)11%51 (11除以5 的余数)10.所谓表达式,是用运算符将运算量(常量、变量、函数调用)连接起来的有意义的式子。其中还可使用圆括号来改变运算符固有的先后运算顺序圆括号内的部分优先进行运算。单个常量、变量和函数调用是最简单的表达式。在初学编程时,表达式极易出现多种书写错误。在命令型高级语言中,实际上只能用表达式和语句这种抽象的、形式化的方式,来命令计算机为你进行数据处理工作(由编译程序转化为一系列的取数指令和运算指令)。单个常量、单个变量和单个函数调用是最简单的表达式(比如x,可以看成是表达式x+0)深入一步:普 通 的(指没有副作用的,见本章提高部分)表达式中出现变量的含义表 达 式 x+y中,出现变量的含义是:根据变量名(这对应着一个内存单元的地址)到内存中去取该变量的值(取 到 CPU的某个寄存器中去),然 后(在运算器中)进行指定的运算。该变量的值依然不变。11.赋值语句的形式是:变量=&达 式 ;。赋值语句先计算出赋值号“=”右边表达式的值,然后将此值存放在赋值号左边的变量(所对应的内存单元)之中。注意:赋值号的左边不能是表达式,只能是单个变量。赋值语句中变量值的变与不变:“左边改变,右边不变”赋值号右边表达式中的变量(如果有的话)仅仅是取出它的值来参与表达式规定的运算,变量的值仍然未变。而赋值号左边变量(所对应的内存单元中)的原来值,将被表达式算出的新值存入而“覆盖”掉。12.形 式 如 x=包 含 方 堡/x 的乂滋X、;(x 可以是任何简单类型的变量)的赋值语句,大量的出现在程序中。它表示的是一种琴代天春即指明了如何由变量x 的一个 老 值(取出来参与表达式所规定的运算),最终得到了变量x 的一个新值(最终存入到赋值号右边的变量X中)。专题讨论:库函数和库函数调用库 函数:编译程序(又称为编译器)附带的,一批可以被任何别的C语 言 程 序“调用”的,通用的、命名了的子程序。所有这些库函数组成了一个标准函数库,与编译程序一道打包发行。安装了 C编译程序后,我们就能在编写程序时,咽为这些库函数。函数调用(function cal 1 ):在我们编写的C语言源程序中,可以调用库函数为我们的程序做一些复杂的(通常是辅助性的)运算和处理工作,函数的调用方式为:库函数名(参数列表)其中参数列表中的参数如果多于一个,参数之间就要用逗号隔开.比如要求出5.6 的 4次方是多少,就要调用库函数pow(5.6,4);将 2 开平方,就要调用库函数:sq rt(2)。调用库函数时千万不要忘记包含相应的头文件。参数可以是常量、变量、表达式。参数必须要用圆括号括住。比如pow(x,3.7),sin(alfa*3.1416/180);C语言中的各种常用库函数的调用方法说明,请见附录。编程时调用了库函数,这些事先编译好的、命名了的子程序,就可以通过“编译”步骤之 后 的“链接”这一步骤,“键入”到你所编写的程序之中,共同组成一个可执行的机器语言程序(可执行程序文件的扩展名是.e x e )。这样就可以大大减少编写程序的工作量.以下仅列出常用的数学库函数(要 包 含 头 文 件m a t h,h):s i n (x)x为弧度,正铉函数c o s (x)X为弧度,余铉函数e x p (x)Xe以e为底的指数函数l o g(x)l o gcx以e为底的对数函数l o gl O (x)l o gi o X以1 0为底的对数函数fa b s (x)X求X的绝对值函数fm o d (x,y)整除):/y的余数fl o o r (x)求不大于X的最大整数p o w(x,y)xy赛函数,s q r t (x)x1/2开平方函数1.3数据输出与输入:1.3.1数 据(变量或表达式的值)输出可调用格式化输出库函数:p rin tf()函数。调用的一般形式为p rin tf(参 数 1,参数2,参数3,参数n)其 中 参 数 1 是格式控制串。参数2,参数3,,参数n 是输出项列表例 题 1.2#ncludemain()(int num;float x;num=123;x=34.678p rin tf(/z%d%f”,num,x);程序运行结果为:123 34.678000格式控制串是用双引号括起来的字符串。%d是第一个输出项num的格式说明,以有符号的卜进制形式输出整数(正数不输出符号)%f是第二个输出项x 的格式说明,以小数形式输出单、双精度实数,默认输出6 位小数显然,%d是控制整数num的,%f是控制实数x 的。为了清晰起见,格式控制串中除了格式说明之外,还可以有按照原样输出的普通字符例如:printf(num=%d x=%f”,num,x);输出结果为:nu m=123 x=34.6 7 8 0 0 0如果n u m 是车牌号,而 x是车速的话,则以下的语句更为优秀:p r i n t f(车牌为d号,车速是%f 千米/小时 n”,n u m ,x );输出结果为:车牌为123号,车速是34.6 7 8 0 0 0 千米/小时在格式控制串中,还可以有换行符号 n (这是一种转义字符)例:p r i n t f(n u m=%d n x=%fw,n u m ,x );输出结果为:nu m-123x=34.6 7 8 0 0 0域宽和精度%m.n f:对于实数,要想改变默认的小数点后面显示6 位。可 改 为%,n f例如:p r i n t f 例 x=%.2 fw,x);输出结果为:x=34.6 8 4 舍 5 入p r i n t f(x=%7.2f ,x);输出结果为:产 34.6 8说明:3 4.6 8 左边多出两个空格,整个变量x的输出域宽(包括小数点)占了 7 位。如果指定域宽小于输出项的实际宽度,则指定的域宽不起作用。1.4.2数 据(变量)输 入,可调用格式化输出库函数:scanf。函数格式化输入库函数sca n f 的调用,可以使得程序运行暂停下来,等待用户的输入,程序用户可以通过键盘输入一个数值到变量(所对应的内存单元)中。不过在函数调用时,第一个参数是相应的占位符%d,%f 或c,它们与要输入的变量类型的对应关系如下表:占位符输入变量的类型%di n t%ff l oa t%cch a r库函数sca n f ()的调用通过键盘输入一个变量值的最简单形式是:sc a nf(占位符、&变量名);变量左边的 符 号 是 一 个 取 地 址 符 号。这个取地址符号,在 sca n f ()函数调用时,初学者最容易漏写。注意:占位符中的转携申明一定要与后面存储输入数据的变曩等犁相匹配。深 入 一 步:格式化库输入函数scanf()的工作原理简述等待程序用户从键盘上输入字符串,在用户按下回车键后,按照占位符中的转换说明,对输入字符串进行数值数制转换,变成二进制的整数、实数或ASCII码,然后将此二进制的整数、实数或ASCH码,存入到由后一个参数(即“&变量”)指定了地址的变量所对应的内存单元中。不必感到吃惊,你 在PC机或笔记本电脑的键盘上的任何多次(或一次)击键产生的输入,系统其实都是当作一串(或一个)字符来对待的。功能强大、复杂而又容易用错的格式化输入库函数scanf()的比较详细的讲解请参见本章提高部分。1.5 用计算机求解问题的一般步骤:到目前为止,我们学了不少有关c语言的基础语法知识。但是在进行编程工作时,其实只有变量、表达式、赋值语句、输入数据到变量和输出变量或表达式的结果,这些要素才是我们需要重点考虑的。其中的变量,成为我们编程解决实际问题时的核心和主线。要考虑的关键问题是:需要定义哪些变量;需要输入哪些L1知的变量;如何根据己知的变量构造出合适的表达式,从而用赋值语句来求出未知变量的值;最后将求出的变量(或表达式)的值输出。用计算机求解问题,解决问题的一般过程是:1.用普通语言简要并尽可能精确地叙述问题;2.问题中已知的量有几个,其中有几个量随求解的具体应用场合会发生变化?(这些量应当定义为变量)有哪几个不会发生变化(这些量可用数值常量或符号常量来表示)?其中会变化的已知量一般应当在程序中用到此数据前,用输入函数调用(有的高级语言用输入语句)进行数据输入。3.问题中要求出的有几个量?4.从已知的量如何得到要求出的量?有何公式可以利用?有何方程式可以利用?如果是公式,就可以直接将其转换为赋值语句,只需把公式右边的数学表达式转换为高级语言的算术表达式即可。如果是方程式,则需你自己亲自将方程式求解得到最后的公式,然后将其转换为赋值语句,只有到了这一步,才可以将工作交给计算机做。5.如果从已知的到要求的最终结果需要一些中间变量,则需要在程序中说明这些中间变量,并且得到怎么从已知的量到中间变量的值的公式,最终山已知量,中间变量得到所要求的结果的公式,将所有这些公式转换为赋值语句。6.将结果输出。其中最为困难的往往是第4步和第5步。这两步通常又被称为寻找求解问题的算法。1.6逐步求精的伪代码表示算法:表示问题求解的算法有多种方法,其中最为常用的是伪代码和流程图。但由于流程图只适合解决规模较小的、比较简单的问题。虽然初学者易于理解和掌握,但在程序员和编程高手中并不流行因为它不利于对算法的构思、修改和调整(仅适用于比较清晰地表达算法)。所以本书不作介绍(养成了用流程图来表示算法的习惯后,人们很难再转变成用其它更好的方式去构造算法,所以还不如一步到位,采用伪代码)。本书使用的是用逐步求精的伪代码来表示算法。所谓伪代码没有严格的规范(所以也比较灵活),但其中有一些结构要素,可以用一些比较规范的方式来表述对问题的计算和处理流程。一级算法只是解决问题的一个轮廓。有些复杂问题,只根据一级算法还难以直接写出c语言的源程序。这时可对一级算法进一步求精(称为二级求精),将它其中的某些步骤,扩展成更详细的步骤,.直到可以很容易写出C语言程序的语句时为止。对于某些人是很显然的算法描述,对于其他人可能并不显而易见。因此,算法求精的过程和步骤是因人而异的。你的编程经验越丰富,算法求精的步骤就可能越少。不过,算法求精的步骤太少也不一定是好事。因为程序员的个良好习惯,就是把伪代码表示的级算法(最多到二级求精),转变为源程序中的注释。注释太过简洁,会加大别人和自己阅读程序的困难。学 习 体 会:学习用伪代码来表达自己的编程思路和算法,笔者的体会是没有什么捷径让你能够迅速掌握它,开始只能是去模仿,去领悟。时间长了,看的、模仿的、写的算法多了,慢慢就会了。类似于学游泳和学骑自行车。在大量地模仿和大量地实践过程中,你就会不知不觉地掌握它。第1讲大小写字符之间的转换编写一个程序,运行时接受用户输入的小写英文字母,程序将其转换为大写英文字母并显示在屏幕上。类型必修题趣 味 性*难 度*分析:此程序主要是要考虑如何由输入的任意一个小写的英文字母,得到所对应的大写英文字母。查看A S C I I 码表,发现所有小写英文字母的A S C I I 码值都比相应的大写字母A S C I I码值大3 2。即存在以下等式关系:大写英文字母的A S C I I 码=小写英文字母的A S C H 码-3 2于是编写C 语言程序如下:1#i n c l u d e 2 m a i n ()3 4 c h a r c h i,c h 2;5 p r i n t f (请键入一个小写英文字母并按回车键 n”);6 s c a n f&c h l);7 c h 2=c h l-3 2;8 p r i n t f (“相对应的大写英文字母为c n ,c h 2);9 )程序说明:在 C语言中,字符变量其实就是占有一个字节内存的一种小整型变量,它的取值一般就是在0 1 2 7 之间的整数值,对应着标准A S C H 表上的1 2 8 个字符。细节问题请参考本章提高部分:对字符变量的进一步说明。问题1:是否可以将第4行与第6行互相调换?答:不可以。在 C 语言中,定 义(序列)必须放在语句(序列)的前面。问题2:是否可以漏掉第4 行到第8 行中的任意一行最后面的分号?答:不可以。在 C 语言中,任何定义或语句,都必须以分号作为结束符。只有一个例外一那就是复合语句,参见下一章。问题3:如果将第8 行改写为:printf(相对应的大写英文字母为%dn”,ch2);程序将会出现什么问题?答:这时输HI的是该字符所对应的ASCH码(其实也是字符变量在内存中的真正值转换成的十进制数)。第 2 讲求三个数的和及平均值类型必修题趣 味 性*难度*变量安排:3 个已知的数要用3 个变量al,a2,a3;三个数的和用1 个变量sum,平均值用1个变量ave,所有变量都为实型变量。一级算法:1.输入这三个数al,a2,a3;2.求这三个数的的和sum及平均值ave:3.输出 sum,ave;其中第二步由于不能直接转化成语句而需要进一步求精根据求和及求平均值的公式sum=a 1 +a2+a3ave=sum-?3只需将其转化为赋值语句即可第 2 步的二级求精:2.1 sum=al+a2+a3;/*求这三个数的和2.2 ave=sum/3;/*求这三个数的平均值转化成C 语言程序:/*求三个数的和及平均值*/1#include2 int main()3(4 float al,a2,a3;/*三个已知数,说明为实型变量*/5 float sum,ave;/*两个未知数,说明为实型变量*/6/*输入这三个数al,a2,a3*/7 p rin t/请输入3 个数,3 个数之间用空格隔开n);8 scanfT%f%f%F,&al,&a2,&a3);910/*求这三个数的的和sum及平均值ave*/11 sum=al+a2+a3;12 ave=sum/3;1314/*输出 sum,ave*/15 printf(sum=%f,ave=%f,sum,ave);16 return 0;17 注意:运行此程序时,要用键盘输入三个数值给变量al,a2,a 3,三个数之间要用空格隔开。输完后,按下回车键,程序才会继续运行下去(其中的道理参见9.5节)。、点评将算法的伪代码,转化为程序中的注释:注意,伪代码形式的一级算法,在程序中转变为注释,使得程序的可读性比较好。这是一种良好的编程习惯。问题:如果将第8 行 改 为 scanf(t4%f,%f,%f9,&al,&a2,&a3);数据应当如何输入?答:输入的数据之间现在不能用逗号隔开,而要用逗号隔开了。练习:请将程序第7 行删掉再编译运行,感受一下程序是否不友好了?第 3 讲 已知三角形的两边夹角,求对边长度及面积类型必修题趣 味 性*难 度*一级算法1.输入三角形的两边x,y 及夹角alfa2.求三角形对边长度一length3.求三角形面积farea4.输出三角形的对边长度及面积其中第2、第 3 步需要进一步求精C 语言的库函数中,有一批数学库函数,其中包含正弦函数sin()及余弦函数cos()(注意,库函数名都是小写的)。不过对这些库函数的调用,首先要包含头文件:#include 。其次,这两个三角函数所要用到的角度是以弧度作为单位的,而不是度,因此,如果输入的角度是以度为单位的,还必须转化位弧度为单位的角度。然后,才能利用公式来求三角形的对边长度和面积。sq rt函数,是用来求一个数的平方根的数学库函数。length=sqrt(x*x+y*y-2*x*y*cos(alfa*PI/180)area=x*y*sin(alfa*180/3.1416)*1/2转化成C 语言的程序1#include2#include3#define PI 3.14164 int main()5 6 float x,y,alfa;7 float length,area;89/*输入三角形的两边x,y 及夹角alfa*/10 printf(“请输入三角形的两边及夹角n);11 scanfC%f%f%F,&x,&y,&alfa);1213/*求三角形对边长度*/14 length=sqrt(x*x+y*y-2*x*y*cos(alfa*PI/l 80);1516/*求三角形面积*/17 area=x*y*sin(alfa*PI/l 80)/2;1819/*输出三角形的对边长度及面积*/2021 printf(三角形的对边长为f,面积为%f n?,length,area);2223 return 0;24 问题1:第2行是否可以不要?答:不行,只要调用库函数中的数学函数,必须包含此头文件。小结:对变量进行初始化的三种方式1.在变量定义时,立即给它一个初值(比 如 int i=0;);2.用赋值语句,将表达式计算出来的值,赋给变量;i=0;3.采用输入函数,将数据由外部(键盘或文件等输入设备)存入变量所代表的内存中(比如 scanf(%d,&i););。任何变量,在定义后,你都必须采用上述三种方式之一,对其进行初始化。没有进行初始化的变量,是决对不能出现在表达式中的。第4讲 将一个三位整数反向后输出类型必修题趣 味 性*难度*一级算法1.输入一个三位整数一n2.通过利用学过的算术运算符整除和取余数%进行分解,分别求出此三位整数n 的百位数n 3,十位数n2和个位数nl3.反向后的三位整数为num=n 1 *100+n2*10+n34.输出此三位数其中第2 步由于不能立即写出C 语言的语句,需要进一步求精:2.1 求出n 的百位数:n3=n/1002.2 求出 n 的十位数 n2=(n-n3*100)/102.3 求出n 的个位数nl=n%10算法验证:假设将一个任意指定的三位整数比如315-n(即存入变量n 中),用于验证上述算法过程的正确性:由 2.1可得到百位数n3的值为:315/100即等于3;由 2.2 可得到十位数n2的取值为:(315-3X100)/1 0 等 于 1;山 2.3 可得到个位数n l 的取值为:315%10等于5。再通过算法的第3 步,反向后的值num为:nl*100+n2*10+n3=5*100+l*100+3=513。最终值num确实等于513。算法验证是正确的(验证算法的其他重要方法请看第 讲洗扑克牌算法P 页)。转化为C 语言程序:1#include2 int main()3(4 int n;/*输入变量*/5 int n3 n2,nl;/*中间变量*/6 int num;/*结果变量*/7/*输入一个三位整数n*/8 printff请输入一个三位整数n);9 scanf(d,&n);1011/*分别求出它的百位数n 3,卜位数n 2,个位数nl*/12 n3=n/100;13 n2=(n-n3*l 00)/10;14 nl=n%10;1516/*反向后的三位整数为*/17 num=n 1 *100+n2*10+n3;1819/*输出此三位数*/20 printf(num=%d”,num);21 return 0;22 问 题 1 :第 8 行起什么作用?是否可以删掉这句?答,这一句起到提示的作用。可以删掉,但程序对使用者不友好(不好用),使得用户要面对黑屏进行数据输入,很容易出现输入错误。问题2:是否可以将第17行和第20句合并为下面这一句并删掉第6 行?printf(num=%d”,nl*100+n2*10+n3);答:可以。printf()函数调用时,格式串后的输出项参数,既可以是常量或变量,也可以是一个表达式。直接输出值时可以不定义变量,直接将表达式(的计算结果)作为输出参数。问题3:是否可以用赋值语句n=315,取代输入变量n 的第9 句 scanf(d”,&n);?答:可以,赋值语句n=315,和输入函数调用语句scanf(d”,&n);都可以使变量n 能够得到初始化(即得到有用的初值)。但用前者,程序失去了灵活性,它只能将一个固定的三位整数315反向输出。如果想要将别的三位整数反向输出,则需要编程者重新修改程序。输入函数调用语句scanf(d“,&n),则可以使得程序用户输入任何的三位整数。只需将程序重新运行一遍即可,不需要修改程序。问题4:将 第 12行和第13行颠倒次序是否可以?答:不可以,变量n3会出现初始化错误。因为颠倒次序以后,赋值语句n2=(n-n3*100)/10;中,的 表 达 式:(n-n3*100)/1 0 中的变量n 和 n 3,是要到相应变量的内存空间中去取出数值来,参与表达式所给定的运算的。变量n 的值没有问题,但变量 n 3 因为没有得到初始化,其内存中是垃圾数据。也就是说,13行的赋值语句:n2=(n-n3*100)/10;的执行,依 赖 于 12行的赋值语句:n3=n/100;的执行,变 量 n 3 的值才得以初始化。问题5:将 13行 与 14行互换是否可以?答:可以,因为两条赋值语句之间的变量并没有依赖关系。问题6:第 10条语句是否可改为printf(num=%d,&num);答:不可以,这样打印出来的一般是变量num 的内存地址,而不是在这个地址的存储单元中存放的(变量的)数据。也就是说,如果变量num 的内存地址是123456,而变量num的值是5 4 6,那么,此句运行后,得到的是:num=123456这显然是错的。问题7:是否可以将所有变量n,n3,n2,n l都用实型float来定义?答:不可以;程 序 12行、13行的赋值语句的表达式,都要求是整除运算。14行的n%10,运 算 符%也要求变量n 是整型,而不是实型。问题8:是否可以将4,5,6 行,用一行来表示?答:可以。但不好,最好是将已知变量(要初始化的)、结果变量(求出的结果)和中间(临时)变量分开写,这样有利于检查程序:已知变量是否初始化了,结果变量是否输出了。习 题 1.将一个两位整数反向输出;习题2.将一个4 位整数反向输出;第 5 讲鸡兔同笼问题类型必修题趣 味 性*难 度*题目,已知鸡和兔的总头数和总脚数,求鸡有多少只,兔有多少只?一级算法1.输入总头数heads,总脚数feet2.求鸡的只数chicken和兔的只数rabbit3.输出变量chicken和 rabbit的值其中只有第二步需要求精根据二元一次方程组可知四个变量heads,feet,chicken,rabbit之间的关系为heads=chicken+rabbitfeet=2 X ch i cken+4 X rabb i t解此方程组可得到如下两个公式:chicken=(4X heads-feet)/2rabbit=(feet-2 X heads)/2将此公式转化为赋值语句,考虑到输入的总头数和总脚数不一定能得到整数解,因此将变量 chicken(表示鸡的只数),rabbit(表示兔的只数),定义为实型变量。二级求精2.1 chicken=(4*heads-feet)/2.02.2 rabbit=(feet-2*heads)/2.0转化为C 语言程序1#include2 int main()3(4 int heads,feet;5 double chicken,rabbit;6/*输入总头数heads,总脚数feet*/78 printf(“请输入总头数和总脚数,两数间用空格隔开n”);9 scanf(%d%d,&heads,&feet);1011/*求鸡的只数chicken和兔的只数rabbit*/1213 chicken=(4.0*heads-feet)/2.0;14 rabbit=(feet-2.0*heads)/2.0;15/*输出变量chicken和 rabbit的值1617 printf(“鸡的只数f 只,兔的只数f 只,chicken,rabbit);18 return 0;19 问题1:如果不解方程组,而直接将其转变为赋值语句,也就是用heads=chicken+rabbit;feet=2*chicken+4*rabbit;取代第5 和第6 句,结果会如何?答:赋值语句右边的表达式中出现的变量,必须是已经是经过初始化的变量(参 见 P页)。赋值语句是用赋值号右边的表达式求出的值,存放到赋值号左边的变量表示的存储单元中。所以,这两句是不正确的,但大多编译程序不会报错。程序运行时会用内存存储单元中不确定的变量chicken,和 ra b b it的 值(垃圾数据),经过运算得到两个错误数值,去改变变量heads和 fe e t的原来值。换言之,方程式不能直接转变为赋值语句,只有公式才可以直接转变为赋值语句(公式是等号左边为一个要求值的变量,等号右边是一个数学代数式,数学代数式中出现的变量的值都是已知的)。、点评:所谓计算机的智能此题程序一旦编好,由另一个用户来使用计算机运行这个程序,他会觉得计算机很聪明,竟然会求解鸡兔同笼的方程式,得到正确答案。“深蓝”计算机为什么能够战胜人类的国际象棋世界冠军卡斯帕罗夫,其道理是类似的。人类的智能转变成了程序存存放在了计算机中,与计算机的强大计算能力(普通PC机目前每秒可运算几亿次)、“记忆能力”(存储容量巨大)结合起来,使得运行着程序的计算机让外行看起来非常聪明能干。1.3 一个小型C程序的开发过程一个小型c 程序的整个开发过程包括如下几个步骤:1.分析问题并进行构思,安排所需变量和符号常量;2.用逐步求精的伪代码或流程图构造算法(并验证算法,参见第 讲);3.(用编辑软件)编辑输入源程序,并保存在扩展名为.c 的文件中;(参见附录A)4.进行编译预处理;(参见8.2 节)5.用编译器进行编译;(在集成开发环境下,第 4 和第5 步是一次性完成的)6.根据编译错误和警告回到第3 步修改语法错误;7,编译无错后,生程目标文件(扩展名为.obj);8.将用户程序与库函数的程序进行连接,并生成可执行的程序(扩展名为.exe);9.运行程序,发现链接或运行时错误则回到第3 步修改;10.结束编程过程,保存并保管好无错误的源程序文件(II后进行软件维护这是必须的);11.将可执行程序交给用户使用。2.13用 C 语言编写科学计算类小型程序的般常用格式(在只有 个 main函数的情况下):#include/*头文件包含部分*/#define PI 3.1416/*符号常量宏定义部分*/int main()/*主函数首部*/*定义序列部分*/int 整型变量列表;float 单精度浮点型变量列表;char 字符型变量列表;/*变量初始化部分,主要是输入库函数的调用语句,在程序运行时从键盘上得到由用户输入的变量的初值,或者由赋值语句给变量赋初值*/printfC);输入的提示信息scanfC1”,地址 列 表);/*计算、处理流程部分,用来得到中间变量和最终结果的值,由计算型的赋值语句和流程控制型语句(选择结构语句和循环结构语句)构成*/*程序结果输出部分,主要是输出函数的调用,将变量的值输出在显示屏匕*/printf(.);return 0;/*返回到操作系统*/说明:程序输出部分,完全可以与其他语句混合在一起,变量的值的输入也可以出现在程序的说明序列后的任何部分,这里只是列出一个一般的科学计算类程序的编程格式,读者在后面的编程题中可以看到,不少非科学计算类的程序(比如游戏程序,管理程序),与此格式有不小区别。此处列出

    注意事项

    本文(新概念C语言案例教程.pdf)为本站会员(无***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开