C语言程序设计完整版教学课件全书电子讲义(最新)_第1页
C语言程序设计完整版教学课件全书电子讲义(最新)_第2页
C语言程序设计完整版教学课件全书电子讲义(最新)_第3页
C语言程序设计完整版教学课件全书电子讲义(最新)_第4页
C语言程序设计完整版教学课件全书电子讲义(最新)_第5页
已阅读5页,还剩470页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计第一讲 程序设计与C语言(2学时) 计算机学院主要内容1.1 程序设计课程目标1.2 程序设计概述1.3 C语言概述21.1 程序设计课程目标课程要求课程目标3课程要求学会从计算机角度思考问题培养学生逻辑思维能力和面向过程的程序设计方法能够针对非数值计算的具体问题选择合理的存储结构及构造较有效率的算法运用C语言编制结构清晰、可读性好的程序会设计测试用例,完成程序的测试,能撰写该程序的技术报告具备面向过程程序的独立设计及实现能力45用计算机解决问题示例某地刑侦大队对涉及6个嫌疑人的一桩疑案进行分析得到以下结论,试编一程序,将作案人找出来。A、B至少有1人作案;A、E、F 3人中至少

2、有2人参与作案;A D不可能是同案犯;B、C或同时作案,或都与本案无关:C、D中有且仅有1人作案;如果D没有参与作案,则E也不可能参与作案。课程目标61.培养逻辑思维和程序设计思想,重点培养分析问题和使用C语言进行程序设计以解决实际问题的能力。2.熟练掌握C语言基础知识、C语言程序结构、语法及函数库、简单算法和数据结构的设计方法。3.了解并初步掌握当前软件行业公认的程序设计风格和规范,增强程序可读性和易扩展性;能够熟练使用一种常用的编程工具和集成开发环境进行程序设计、编译、测试及调试。1.2 程序设计概述程序设计语言发展语言实现及开发环境78程序无处不在计算机移动设备外设智能设备9什么是程序一

3、系列遵循一定规则并能正确完成特定功能的代码或指令序列通常包括数据结构与算法两部分#include int main() int a=3,b=2,c=5; int d=a*b+c; printf(ab+c=%dn, d); return 0;源程序a.c可执行程序编译链接01100111100110程序设计语言及其发展程序设计语言一套规范的集合,主要包括该语言使用的字符集,直接和间接支持的数据类型集合、运算符集合、关键字集合、指令集合、语法规则、以及对特定构造的支持。11程序设计语言及其发展1834第一台机械式计算机(最早的程序员Ada)1896最早的程序载体穿孔卡片1937“图灵机”数学模型1

4、952MIT创建了汇编语言1953IBM研制Fortran语言1965BASIC语言出现1972贝尔实验室发明C语言20世纪80年代贝尔实验室发明C+语言1983Borland公司研制Turbo Pascal1991 - Python1995Java语言诞生2002Microsoft发布.NET12程序设计语言及其发展机器语言汇编语言高级语言(C,Java,C+,C#)13高级语言编译问题:计算d=ab+c00000001000000001000 将单元1000的数据 (a) 装入寄存器000000001000100001010 将单元1010的数据 (b) 装入寄存器100000101000

5、000000001 将寄存器1的数据乘到寄存器0上 (axb)00000001000100001100 将单元1100的数据 (c) 装入寄存器100000100000000000001 将寄存器1的数据累加到寄存器0上 (axb+c)00000010000000001110 将寄存器0的数据写入内存单元1110 (d=axb+c)机器语言load 0 a 将单元1000的数据 (a) 装入寄存器0load 1 b 将单元1010的数据 (b) 装入寄存器1mult 0 1 将寄存器1的数据乘到寄存器0上 (axb)load 1 c 将单元1100的数据 (c) 装入寄存器1add 0 1 将

6、寄存器1的数据累加到寄存器0上 (axb+c)save 0 d 将寄存器0的数据写入内存单元1110 (d=axb+c)汇编语言d=a*b+c高级语言程序设计语言热度(TIOBE Index)程序设计语言热度(TIOBE Index)16语言实现具体地实现一种语言的各种特征并支持特定的编程模式的技术和工具。表现形式:编译器(Compiler)和连接器(Linker)。语言是标准的但语言实现是因厂家而异的常见C语言实现:Borland C、Microsoft C、GCC 17开发环境泛指支持软件开发的一切工具操作系统代码编辑器编译器链接器调试器18开发环境集成开发环境(IDE)将编辑器、编译器、

7、连接器和调试器集成在一起的开发工具C/C+集成开发环境:Dev C+Code BlocksVisual C+Eclipse19命令行下需要记住编译命令不方便调试集成开发环境下操作方便,但后台仍然是以命令行方式运作V.S.1.3 C语言概述C语言简介(特点,发展等)C程序框架(主函数,语句,注释等)2021C语言能做什么纯粹的C语言只能做计算和文字处理扩充了函数库的C语言几乎可以完成任何和程序控制有关的任务C语言和第三方函数库,可以完成应用程序设计,嵌入式程序设计,驱动程序设计,游戏,.22C语言简介C 语言简史演变:ALGOL 60CPL BCPL B C 1973 Dennis Ritchi

8、e & Brian Kernighan (Bell Labs.)为开发 UNIX 而设计 C 语言的标准化ANSI C 标准化委员会:1983C89和C90C99C1123C语言特点中级语言:介于高级语言与低级语言之间高级语言的结构化与模块化(高级语言基本特性)低级语言的控制性与灵活性(指针,位操作)结构化顺序结构、分支结构、循环结构模块化函数、函数库可移植性虽然可在多种系统下使用,但可移植性不是非常好24第一个C程序/* hello.c: The first program author: wanbo date: 2017/10/9*/ #include int main() / singl

9、e line comment printf( * Hello, world *n ); return 0; 25C源程序构成头文件包含条件编译语句宏定义说明部分全局变量函数声明其它函数主函数(main)执行部分常量/* hello.c: The first program author: wanbo date: 2010/10/9*/ #include int main() / single line comment printf( * hello, world*n ); return 0; 预处理部分26一个最简单的C程序框架#include int main() return 0; 在这里

10、可以添加完成特定任务的代码这个头文件是绝大多数C程序必须包含的程序结束27main函数main函数的两种常见形式int main( ) return 0;int main( int argc, char *argv ) return 0;命令行参数28main函数C程序中可以有多个函数但必须有且只能有一个main函数所有C程序都从main函数开始执行main函数的名字不能改变(包括大小写)main函数由系统调用Main和main是不同的29语句和注释语句包含一个或多个表达式数值运算、函数调用等语句以英文分号(;)结束一条语句可以分成多行书写C语言使用自由格式的语法自由格式与代码风格注释多行注释

11、用/* */来分界单行注释用/开头/* 多行注释 hello.c: The first program author: wanbo date: 2017/10/9*/ #include int main() / 单行注释 printf( * hello, world*n ); return 0; 30自由格式与代码风格#include int main() printf( hello world ) ; return 0; #include int main() printf( hello worldn ) ; return 0;#include int main() printf( hell

12、o world ) ; return 0; 良好的代码风格适当的注释适当的换行适当的缩进适当的空行V.S.31建立一个可执行程序编辑(Edit)编译(Compile)链接(Link)f1.hf2.hf3.hs1.cs2.cprog.exe链接s1.objs2.obj编译编辑32命令行程序和GUI程序Windows下的文件复制命令行程序和GUI程序命令行下的文件复制33命令行程序和GUI程序一个C语言完成的文件复制程序(fcopy.c)34命令行才是本质逻辑,GUI只是建立在本质逻辑上的用户接口。#include #include #define BUF_SIZE 1024int main(in

13、t argc,char *argv) FILE *fp1,*fp2; unsigned char bufBUF_SIZE; int n; fp1=fopen(argv1,rb); fp2=fopen(argv2,wb); do n=fread(buf,1,BUF_SIZE,fp1); fwrite(buf,1,n,fp2); while(n=BUF_SIZE); fclose(fp1); fclose(fp2); return 0;35小结重点1:了解程序设计相关概念重点2:熟悉C语言源程序框架重点3:熟悉集成开发环境的使用重点4:熟悉计算机基本操作及命令行重点5:熟悉机试系统使用36作业完成

14、平台上的学习在你的开发环境中编译、运行本节中的两个程序试着修改第一个程序(hello.c)让它输出别的内容熟悉C语言源程序结构熟悉命令行用法C语言程序设计第二讲 数据对象与计算(4学时) 计算机学院一个温度转换的问题已知华氏温度(用f表示)到摄氏温度(用c表示)的转换公式为:c = 5/9 (f-32),写一个程序将输入的华氏温度转换为摄氏温度,输出结果保留两位小数381. 已知(输入):华氏温度f2. 计算过程:c = 5/9 (f-32)3. 结果(输出):输出摄氏温度c问题转换为程序需要解决的问题1. c和f在程序中用什么名字表示(标识符问题)?2. c和f在程序中用什么数据类型表示?3

15、. c和f的值如何给定?(输入和赋值问题)4. 数学表达式c = 5/9 (f-32) 在C程序中如何表示及计算(C语言表达式、运算符、优先级)?5. 如何输出c的值?(输出、精度控制)39目标用C语言程序解决简单计算问题掌握数据对象的表示方法掌握C语言表达式的写法掌握C语言输入/输出方法40主要内容数据对象表示2.1 基本字符、标识符、关键字2.2 数据、类型、变量计算过程2.3 运算符、表达式与计算用户交互2.4 结果输出与数据输入小结412.1 基本字符、标识符、关键字解决数据对象命名问题在C语言中可以使用哪些字符?在C语言中给对象命名要遵循哪些规则?是否符合命名规则的名字都可以使用?4

16、2基本字符数字字符:09大小写拉丁字母:az,AZ;其他一些可打印(可以显示)的字符,包括: !%&*()_-+= :;, . ? / | 特殊字符,如空格符、换行符、制表符等431.在注释中可以使用2.在双引号内可以使用中文字符能否使用?对象命名规则程序中一个程序对象的名字称为标识符,该名字必须满足以下规则由字母、数字和下划线(_)构成的一个连续序列,不能有空白字符(键盘上的空格键、TAB键)第一个字符必须是字母或下划线_(注意下划线_与横线-的区别)区别大小写:NAME和name是不同的标识符44标识符示例45标识符合法性abcdA_great_machineBeijingkey map3

17、set_f2048:ab4C_Programming合法合法合法合法合法不合法不合法不合法标识符命名惯例尽量使用有意义的单词第一个字符尽量不使用下划线标识符由多个单词构成时可以每个单词首字母大写标识符不宜太长,可以适当使用简写保持命名风格的一致性46几种常见命名规则驼峰命名法(Camel)混合使用大小写字母来构成变量和函数的名字例如:MyData匈牙利命名法(Hungarian)在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等例如:iMyData帕斯卡(Pascal)命名法: 与骆驼命名法类似只不过骆驼命名法是首字母大写,而帕斯卡命名法是首字母小写例如:myData

18、47关键字C语言合法标识符中的一个特殊的小集合作为关键字的标识符在程序里具有语言预先定义好的特殊意义,不能用于其他目的不能作为普通的名字(标识符)使用48C语言的32个关键字49auto break case charconst continue default dodouble else enum externfloat for goto ifint long register returnshort signed sizeof staticstruct switch typedef unionunsigned void volatile while问题转换为程序需要解决的问题1. 摄氏温度

19、c和华氏温度f在程序中用什么名字表示(标识符问题)?50可以就用c表示摄氏度,f表示华氏度问题转换为程序(版本0)下面的程序正确吗?51int main() f=20; c=5/9*(f-32); return 0; 如何才能让C语言编译器识别c和f?Error f undeclaredError c undeclared 2.2 数据、类型、变量解决数据对象的存储和表示问题计算机对不同的数据类型有不同的存储和表示方法计算机能够表示的数值范围总是有限的52 5.0和5在数学上是相同的,但在计算机内部表示上是不同的 2356.4359是一个有限小数,但在计算机上表示时可能不够准确数据与类型C语言

20、的基本数据类型包括整数类型实数类型字符类型程序中的每一个数据都必定属于某一种类型(基本类型或自定义类型)每一种数据类型都有表示方式(编码)和表示范围数据类型确定了数据对象支持的运算53整数类型和整数的表示longintshort字节数442表示范围-231231-1-231231-1-215215-154三种整数类型长整数 long int 可以简写为 long普通整数 int短整数 short int 可以简写为 short三种整数类型表示范围long int short,具体范围取决于不同的实现整数类型和整数的表示unsigned longunsigned intunsigned shor

21、t字节数442表示范围0232-10232-10216-155三种无符号整数类型长整数unsigned long int 可以简写为 unsigned long普通整数 unsigned int短整数 unsigned short int 可以简写为 unsigned short三种整数类型表示范围unsigned long unsigned int unsigned short整数常数的书写形式(int.c)十进制形式例如:123456,123,100八进制形式以0开头例如:0123456,0123,0100十六进制形式以0 x开头例如:0 x123456,0 x123,0 x10056整数

22、常数的书写形式示例八进制形式十进制值01234564279801238301006457十六进制形式十进制值0 x12345611930460 x1232910 x100256实数类型和实数表示三种实数类型单精度浮点数:float双精度浮点数:double长双精度浮点数:long double三种实数类型的表示范围(IEEE标准)58字节数指数位数尾数位数表示范围float4823-3.410383.41038double81152-1.7103083.410308long double1615112- 1.2 1049323.4 104932浮点数表示方法任意二进制浮点数公式:N=M2E其中

23、,M为尾数(纯小数部分),整数E为指数,M与E都带符号。二进制浮点数特征:尾数的位数决定数的精度;指数的位数决定数的范围。59指数符号指数E尾数符号尾数M(定点整数)(定点小数)实数常数的书写形式小数形式例如:12000000.00.00001指数形式例如:1.2E7 1E-5注意:以上形式表示的实数均被当做double类型存储,如果希望以float类型存储需要在后面加上F或f例如:12000000.0f ,0.00001F,1.2E7F ,1E-5F60Tips:在写程序时都使用double类型字符类型和字符的表示字符数据主要用于输入输出和文字处理字符类型:char字符类型在计算机中用一个字

24、节的整数存储unsigned char: 0255char: -128127每一个字符都有唯一一个对应的整数,该整数称为这个字符的ASCII码61ASCII码在计算机中每一个拉丁文字字母用一个0127的数字表示,这个数字称为该字母的ASCII码ASCII字符集:所有大小写英文字母、数字、各种标点符号字符,还有一些控制字符,一共128个62字符的书写形式1.用单引号括起的单个字符例如:A,a,12.以字符对应的ASCII码表示64/a,b都表示字符Achar a,b;a=A;b=65;字符的书写形式3.用转义字符表示特殊字符反斜线()开头的转义字符用来表示ASCII字符集中的特殊字符65注意:对

25、未定义的转义字符直接输出反斜线后的字符转义字符实际输出的字符n换行符号单引号反斜线双引号字符串字符串不是C语言的一种数据类型用双引号括起的一系列字符:CHINA Beijing University Welcomen其本质是字符数组主要用于输入输出printf( Hello C Program!n );字符串中间不能换行66Hello C ProgramHello C Program变量声明变量:用于存储程序的输入数据或计算结果的存储单元变量值在程序运行时可以改变变量声明:给存储单元定义一个名称及类型,便于程序中引用变量名必须是合法标识符变量必须有确定数据类型可以在一条语句中定义多个同类型变量

26、可以在变量声明时赋值67示例程序中的变量声明68#include int main() double f=50.0;/声明存储华氏温度的变量并赋值 double c;/声明存储摄氏温度的变量 . #include int main() double f=50.0, c;/一条语句中声明多个变量 . 变量基本操作赋值操作修改变量当前的值方法:使用赋值表达式(由操作符“=”构成的表达式)a=3.5b=5+3取值操作获得变量现在的值方法:直接引用变量名称s=a+bprintf(s=%dn, s);69问题转换为程序(版本1)70#include int main()double f=20, c; r

27、eturn 0;数学运算c = 59 (f-32),如何转换成C语言表达式?C语言表达式如何计算?2.3 运算符、表达式与计算解决数学运算到程序的转换问题数学运算符在程序中如何表示?数学运算的规则在程序中如何实现?71算术运算符72运算符使用形式数学意义适用数据类型+一元或二元运算符一元表示正号,二元表示加法所有基本数据类型-一元或二元运算符一元表示负号,二元表示减法所有基本数据类型*二元运算符乘法运算所有基本数据类型/二元运算符除法运算所有基本数据类型%二元运算符模运算(求余数)整数类型算术运算符示例(operator.c)73double a=3.0,b=2.0; int c=4,d=2;

28、表达式结果-a-3.0a+b5.0a-b1.0a*b6.0a/b1.5c/d2c%d0算术表达式由计算对象(例如数值的文字量、变量、函数调用等)、算术运算符及圆括号构成,基本形式与数学上的算术表达式类似-( 28 + 32 ) + (16 * 7 - 4)25 * (3 - 6) + 234a * b + c / 2a * sin( c * 3.1416 / 180 )74算术表达式数学公式C语言表达式b2-4ac a + b - cax-(b+c)75b * b 4 * a *ca+b-c(a+b)/(c+d)1/(1+x * x)a *x -(b+c)表达式求值给定了表达式中所有变量的值以

29、后表达式的值如何计算?表达式的计算过程优先级不同运算符哪个先算,哪个后算?结合性相同优先级的运算符哪个先算,哪个后算?76表达式求值优先级规则1.一元运算符优先级最高2.先乘除后加减3.括号中的表达式先计算77运算符优先级一元+和-高* / %中二元+和-低当不确定运算符优先级时,用括号来指定运算顺序是避免错误的最好方法14-4表达式值10 / 5 + 4 * 6 / 2-(2 + 6) * 4) / (3 + 5)表达式求值结合性确定具有相同优先级的运算符相邻出现时表达式的计算顺序。C语言规定一元算术运算符自右向左结合;二元算术运算符自左向右结合,优先级相同时左边的运算符先计算。784 *

30、7 / 2-+-8(4 * 7) / 2(-(+(-8)148问题转换为程序(版本2)下面的程序结果正确吗?79int main() double f=50; double c; c=5/9*(f-32); return 0; c的计算结果是多少c=10?计算和类型以上计算涉及的问题类型对计算的限制混合类型计算和自动(隐式)类型转换强制(显式)类型转换8013011.05 / 4 + 4 * 6 / 2=?1 / 3 * 3 = ?1 * 3 / 3 = ?1/3.0 * 3 = ?计算和类型类型对计算的限制1.两个相同类型数据使用二元运算符计算得到的结果类型相同。例如,两个整数运算结果仍然是

31、整数811 + 24/21 + 121 / 3 * 3 5 / 4 + 4 * 6 / 20 * 3 130计算和类型类型对计算的限制2.计算结果超出类型表示范围会导致溢出 (overflow.c)82#include int main()short a=32765, b=5;short c = a+b; / c=?printf(c=%dn,c); return 0;计算和类型混合类型计算和自动(隐式)类型转换两个不同类型数据使用二元运算符形成混合类型计算C语言里混合类型计算的方法是将混合类型计算中的某个运算对算转换为另一个运算对象的类型再计算转换原则是将表示范围小的类型转换为表示范围大的类型

32、以避免丢失精度83表示范围小 大类型shortintlongfloatdoublelong double计算和类型混合类型计算和自动(隐式)类型转换2 + 3 * 4.5 = 15.584234.53.0*13.52.0+15.5自动类型转换计算和类型强制(显式)类型转换任何类型均可相互转换,但转换可能丢失精度转换方式:(类型名) 表达式强制类型转换是一元运算符,其优先级和其他一元运算符相同(高于二元运算符)(int)3.3 * 2.2 + 4 = (int)(3.3 * 2.2) + 4 =类型转换不改变原来的值float a=3.3;int b=(int)a; /不改变a的值853 * 2

33、.2 + 4 = 10.6(int)(7.26) + 4 = 7 + 4 = 11计算和类型整数转浮点数不存在精度问题浮点数类型转换为整数时直接去掉小数部分86(int)(3.3 * 2.2) + 4 = 112.23.347*11+7.26强制类型转换问题转换为程序(版本3)87#include int main() double f=50.0;/存储华氏温度的变量 double c;/存储摄氏温度的变量 c=5.0/9.0*(f-32);/计算摄氏温度 return 0; 2.4 结果输出与数据输入解决程序与用户交互的问题如何将计算结果展现给用户?如何让用户输入需要的数据?88输出计算结果

34、格式化输出函数printfC语言标准库函数调用形式:printf( 格式字符串, 其他参数);89控制输出格式 输出类型 输出精度 对齐方式准备输出的值 0个或多个 所有基本类型变量或常量 表达式或其他函数调用结果输出计算结果printf函数的格式字符串双引号括起来的字符串,其中包括:格式字符:用%引导格式字符,控制输出格式转义字符:按转义后的含义输出其他字符:直接输出90格式字符串输出结果first programfirst programfirstnprogramfirstprogram输出计算结果用于输出整数的格式字符%d - 以十进制输出带符号整数%o - 以八进制输出无符号整数%x

35、- 以十六进制输出无符号整数int a=256,b=-180;格式字符串输出结果a= %d, b= %da= 256, b= -180a= %xa= 100a= %oa= 40091输出计算结果用于输出浮点数的格式字符%f - 以小数形式输出float/double型浮点数%e - 以指数形式输出float/double型浮点数以上两种形式默认小数点后输出6位有效数字double c=1234.567; float d=2356.4359f;格式字符串输出结果c=%f, d=%fc=1234.567000, d=2356.435791c=%e, d=%ec=1.234567e+003, d=2

36、.356436e+00392输出计算结果输出浮点数的精度(小数位数)控制%.nf n为整数,表示保留几位小数位数不足时末尾补零位数超出时四舍五入进位double c=1234.567; float d=2356.4359f;格式字符串输出结果c=%.4fc=1234.5670d=%.3fd=2356.43693输出计算结果用于输出字符和字符串的格式字符%c - 输出一个字符%s - 输出一个字符串char *s=c programming; char ch1=A,ch2=a;格式字符串输出结果ch1=%c, ch2=%cch1=A, ch2=ach1=%d, ch2=%dch1=65, ch2

37、=97I love %s !I love c programming !94输出计算结果使用printf需要注意的问题1.格式字符串中没有%引导的格式控制字符时,不需要其他参数,直接输出字符串内容,转义字符按转以后实际意义输出95格式字符串输出结果first programfirst programfirstnprogramfirstprogram输出计算结果使用printf需要注意的几个问题2.格式字符串中有%引导的格式控制字符时,其他参数的数量以及类型必须和格式控制字符一致。96#include int main() int a=123; double b=35.8; printf(“a=

38、%d, b=%dn, a, b); printf(a=%d, b=%fn, a ); printf(“a=%dn”, a, b ); return 0;输出计算结果示例(printf_error.c)97类型不一致时不会进行类型转换,而会将实际传入的值当作需要的类型来理解,因此可能出现非预期结果!#include int main() int a=123; double b=35.8; printf(“a=%d, b=%dn, a, b); /? return 0;输出计算结果示例(printf_error.c)98数量不一致时:1.如果缺少参数,会出现不可预知数据,取决于不同的编译器2.如果

39、有多余参数,则被忽略#include int main() int a=123; double b=35.8; printf(a=%d, b=%fn, a ); /? printf(a=%dn, a, b ); /? return 0;C99 对以上问题的解释99The fprintf function writes output to the stream pointed to by stream, under control of the string pointed to by format that specifies how subsequent arguments

40、 are converted for output.If there are insufficient arguments for the format, the behavior is undefined.If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored. The fprintf function returns when the end of the format string is encou

41、ntered通过编译选项来给出警告100问题转换为程序(版本4)101#include int main() double f=50.0;/存储华氏温度的变量 double c;/存储摄氏温度的变量 c=5.0/9.0*(f-32);/计算摄氏温度 printf( c=%.2fn, c);/输出摄氏温度 return 0; 如何得到用户输入温度转换程序存在的问题f是固定值,如果修改f的值需要重新编译102能否让用户输入f的值再计算?#include int main() double f=50.0; /存储华氏温度的变量 double c; /存储摄氏温度的变量 c=5.0/9.0*(f-32

42、); /计算摄氏温度 printf( c=%.2fn, c); /输出摄氏温度 return 0; 从键盘输入数据格式化输入函数scanf C语言标准库函数调用形式:scanf( 格式字符串, 其他参数);103控制输入数据格式(类型,精度等)的字符串,以%引导接受输入值的变量地址(在普通变量前加取地址运算符&可得到变量地址)scanf函数的格式字符串104格式控制字符接受输入值的变量类型要求的实际输入%dint十进制数%ldlong十进制数%ffloat十进制数,可以有小数点或指数%lfdouble十进制数,可以有小数点或指数%cchar一个字符scanf示例1105int x;float

43、y;double z;char c;scanf(%d %f %lf %c, &x ,&y ,&z, &c);printf(x=%d, y=%f, z=%fn,c=%c, x, y, z,c);用户从键盘输入以下内容(表示空格):2342252.18220.4A输出结果:x=234, y=2252.179932, z=220.400000,c=Ascanf使用注意事项接受输入值的参数是变量地址!必须要按下回车后才结束输入输入多个数据时,接受数据的变量的数量以及类型必须和格式控制字符一致输入多个数据时,格式字符之间一般用空格分隔或者不分隔,但输入数据要用空格分隔一旦在格式字符串中用了别的字符分隔,

44、输入时也要用相同字符分隔不要在scanf的格式字符串中加入n例如:scanf(“%dn”,&n);106scanf错误示例(scanf_error.c)107scanf示例2108int x;float y;double z;char c;scanf(%d ,%f, %lf, %c, &x ,&y ,&z, &c);printf(x=%d, y=%f, z=%fn,c=%c, x, y, z,c);用户从键盘输入以下内容:234, 2252.18, 220.4, A输出结果:x=234, y=2252.179932, z=220.400000,c=A问题转换为程序(版本5)109#includ

45、e int main() double f=50.0;/存储华氏温度的变量 double c;/存储摄氏温度的变量 scanf( %lf, &f );/输入华氏温度 c=5.0/9.0*(f-32);/计算摄氏温度 printf( c=%.2fn, c);/输出摄氏温度 return 0; 小结需要掌握的内容C语言字符集标识符基本数据类型运算符、表达式变量定义及使用格式化输入/输出函数scanf/printf110小结常用程序模式111#include int main() /输入数据 scanf(,); /计算 /输出结果 printf(. ., .); return 0;练习编写一个程序,

46、用于预测冰箱断电后经过时间t(以小时为单位,可以是小数)后的温度T。已知计算公式为 输入两个整数h和m分别表示断电后的小时和分钟。输出冰箱断电后经过时间t(以小时为单位)后的温度T,保留两位小数112C语言程序设计第三讲 程序流程控制(6学时) 计算机学院引言例1:写程序计算 ax2+bx+c=0的两个实根,如果两个实根相同只输出一个,如果不存在实根输出no real root根的判别式为b2-4ac,有三种可能b2-4ac小于0,无实根b2-4ac等于0,两个相同实根b2-4ac大于0,两个不同实根如何根据b2-4ac的值(条件)来选择输出?114引言例2:计算n的变化初始为1,结束为100

47、(条件),每次递增1重复做100次或更多次相同的事情如何解决?初始条件结束条件条件修改115主要内容如何表示条件关系表达式逻辑表达式流程控制条件语句循环语句1163.1如何表示条件条件是什么?例如:b2-4ac0条件是否成立如何判断?关系表达式两个数据之间的关系(条件)通常由关系运算符和数据构成的表达式来确定118关系运算符含义示例小于x 大于x 1=小于等于x =大于等于y = 2=等于y = 0!=不等于y !=0关系表达式关系表达式的结果是一个逻辑值,其值取决于关系是否成立关系成立,表达式结果为逻辑“真”(true)关系不成立,表达式结果为逻辑“假”(false)C语言没有专门的逻辑值类

48、型,用数值1表示逻辑“真”,数值0表示逻辑“假”任何基本类型均可当作逻辑值使用,非0表示逻辑“真”,0表示逻辑“假”119关系表达式示例120 xpoweryitemMIN_ITEMgendernum-5102471.5-999.0M999运算符关系表达式含义表达式的值=x = 0 x小于或等于0power =x = yx大于或等于yitem MIN_ITEMitem大于MIN_ITEM=gender = Mgender等于M10011条件表达式C语言中唯一的三元运算符表达式1 ? 表达式2 : 表达式3首先计算表达式1的值;如果这个表达式的值非 0(即,条件成立),那么接着计算表达式 2,并

49、用它的值作为整个条件表达式的值;如果条件不成立(表达式 1的值是 0),就计算表达式 3,并用它的值作为整个条件表达式的值。121特别注意: 在表达式 1非 0时不计算表达式 3;在表达式 1值为 0时不计算表达式 2。条件表达式示例(condition.c)122/示例1:求两个整数的较大值或较小值的方法int a=4, b=6, max, min;max = ab ? a : b; min = a3 ? (a=a+1) : (b=b+1);printf(“a=%d, b=%d, b=%dn, a, b, c);逻辑表达式用逻辑运算符连接多个关系表达式,用于描述多个关系的复杂组合例1:判断x

50、是否在区间 3, 5 )之内即x大于等于3,并且x小于5例2:判断某年是否是闰年:年份能够被400整除或者年份能够被4整除并且不能被100整除例3:判断x不在区间 3, 5 )之内例1的条件取反123逻辑运算符C语言的3种逻辑运算符124逻辑运算符含义示例&并且x =3&x5 |或者x=5!非!(x =3&x5)逻辑表达式逻辑与(表达式1 & 表达式2)只有两个表达式都非0时结果为1,否则为0125操作数1操作数2操作数1 & 操作数2非零(true)非零(true)1(true)非零(true)0(false)0(false)0(false)非零(true)0(false)0(false)0

51、(false)0(false)计算方式:先求表达式 1;若得到0则不计算表达式2,以0作为整个表达式的结果;否则(表达式1的值非 0)就计算表达式 2,如果表达式2值为0则整个表达式结果为0 ,否则结果为1 逻辑表达式逻辑或(表达式1 | 表达式2)两个表达式的值都为0时结果为0,否则为1126操作数1操作数2操作数1 | 操作数2非零(true)非零(true)1(true)非零(true)0(false)1(true)0(false)非零(true)1(true)0(false)0(false)0(false)计算方式:先求表达式 1;若得到非0则不计算表达式2,以1作为整个表达式的结果;

52、否则(当表达式1值为0时)计算表达式 2,如果它为0则整个表达式结果为0 ,否则结果为1 。逻辑表达式逻辑非(! 表达式)把表达式的值看作逻辑值,以该值的否定作为结果127操作数1!操作数1非零(true)0(false)0(false)1(true)计算方式:如果表达式的值非 0,则结果为 0;如果表达式值是 0则结果为 1。运算符优先级128运算符优先级函数调用! + - & (一元运算符)* / %+ - = = !=&|=(赋值运算符)低高逻辑表达式示例例1:判断x是否在区间 3, 5 )之内(range.c)即x大于等于3,并且x小于5129x = 3 & x 53= x 5 是否正

53、确?这是数学表示方式,在C语言中得不到想要的结果逻辑表达式示例例2:判断x是否在区间 3, 5 )之外即x小于3,或者x大于等于5130 x = 5!(x =3 & x 5)或者xx = 5!(x =3 & x =a & ch =0 & ch =A & ch y ) max = x; else max = y; 142if 语句的三种格式if语句/第三种格式if ( 条件1 ) /条件1成立else if ( 条件2 ) /条件1不成立且条件2成立else if ( 条件3 ) /条件1不成立且条件2不成 /立且条件3成立else /条件1,2,3均不成立if语句143当操作只有一条语句时,i

54、f和else后的大括号可以不要if和else对应的操作应该缩进,便于代码理解当操作有多条语句时,用大括号把语句包围起来形成复合结构使用if语句应注意:144复合结构多个语句由一对大括号包围起来构成复合结构int main () double s=123.5; printf(s=%f!n,s); return 0;int main () int a,abs; scanf(“%d”,&a); abs=a; if( a 0 ) abs=-a; 145编写程序,接受用户输入的整数,如果该整数为奇数则将其乘 3 加 1 后输出,偶数直接输出。简单if语句#include int main() int a

55、, result; /* 输入部分 */ printf( The program gets a number.nIf it is an even, output it directly, n ); printf( otherwise multiply it by 3 then plus 1.n ); printf( The number: ); scanf( %d ,&a); /* 计算部分 */ result = a; if( a % 2 = 1 ) result = a * 3 + 1; /* 输出部分 */ printf( The result is %d.n, result ); re

56、turn 0;146编写程序,接受用户输入的整数,如果该整数为奇数则将其乘 3 加 1 后输出,偶数除以 2 后输出if-else语句#include int main() int a, result; /* 输入部分 */ printf( The program gets a number.nIf it is an even, divide it by 2, n ); printf( otherwise multiply it by 3 then plus 1.n ); printf( The number: ); scanf( %d ,&a); /* 计算部分 */ if( a % 2 =

57、 1 ) result = a * 3 + 1; else result = a / 2; /* 输出部分 */ printf( The result is %d.n, result ); return 0;147if-else语句从键盘输入三个整数,计算其中的最大值并将其输出。#include int main() int a, b,c,max; /* 输入部分 */ printf( “该程序从键盘获取3个整数,输出最大值。 n ); printf( “请输入3个数: n ); scanf( %d %d %d ,&a,&b,&c); /* 计算部分 */ if (a b) max = a;e

58、lse max = b;if (c max) max = c;/* 输出部分 */ printf( “最大值为: %d.n, max ); return 0;148从键盘输入一个三角形的三条边,判断其为何种三角形。if-else if-else语句#include int main()int a,b,c;scanf(%d %d %d,&a,&b,&c);if (a+b = c | b+c = a | c+a = b)printf( 不是三角形);else if (a = b & b = c)printf(等边三角形);else if (a = b | b = c | c = a)printf(

59、 等腰三角形);else if (a*a+b*b = c*c | b*b+c*c = a*a | c*c+a*a = b*b)printf(直角三角形(非等腰));elseprintf( 其它三角形);printf( n); return 0;If语句的嵌套一般形式if ( )if ( ) 语句1else 语句2elseif ( ) 语句3else 语句4注意:语句1、2、3、4可以是复合语句,每层的if与else配对,或用 来确定层次关系。149150else 与哪个 if 配对?if( service_years = 28 ) salary_level += 1;elsesalary_le

60、vel += 2;else 与 if 配对规则-else部分属于前面最近的无对应else的if语句。if( service_years = 28 ) salary_level += 1;else salary_level += 2;降低第二个 if 的层次,使 else 与第一个 if 配对if语句的歧义151计算过程先计算整型表达式的值依次与常数表达式比较若相同则执行该分支(子句)否则转向 default 分支最后退出 switch 语句特别说明switch 后面的表达式必须为整型、字符型case 后面必须为常量表达式,且各个 case 值必须不同case 分支中的语句可以有多条,不需要花括

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论