C语言课件非常详细_第1页
C语言课件非常详细_第2页
C语言课件非常详细_第3页
C语言课件非常详细_第4页
C语言课件非常详细_第5页
已阅读5页,还剩600页未读 继续免费阅读

下载本文档

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

文档简介

会计学1C语言课件非常详细2课程介绍课程性质:大学计算机公共基础课(必修)课程内容C语言程序设计的基本方法和技巧预备知识《计算机基础》教材《C语言程序设计教程》汪同庆张华杨先娣主编机械工业出版社《C语言程序设计实验教程》汪同庆关焕梅汤洁主编机械工业出版社C语言程序设计第1页/共605页3授课计划C语言程序设计周次理论内容实验内容1第1讲C语言概述与理论课对应2第2讲C语言快速入门与理论课对应3第3讲基本数据类型与理论课对应4第4讲输入输出和库函数与理论课对应5第5讲运算符和表达式与理论课对应6第6讲语句和算法与理论课对应7第7讲选择结构与理论课对应8第8讲循环结构与理论课对应9第9讲函数与理论课对应10第10讲作用范围和存储类别与理论课对应11第11讲数组与理论课对应12第11讲数组与理论课对应13第12讲指针与理论课对应14第13讲字符串与理论课对应15第14讲结构体与理论课对应16第15讲编译预处理与理论课对应17第16讲文件与理论课对应18*第17讲高级数据结构(选讲)与理论课对应第2页/共605页4考试与考核办法学分:3学分学时:72(讲课36+实验36)总评成绩=平时成绩×#%+期末考试成绩×#%平时成绩:(实验,单元测验)期末考试成绩C语言程序设计第3页/共605页第一讲C语言概述C语言程序设计第4页/共605页6第一讲C语言概述预备知识计算机组成和工作原理计算机语言和程序C语言的简史为什么学习和使用C语言C语言程序的开发过程C语言编程环境C语言编程实验环境C语言程序设计第5页/共605页7计算机计算机(Computer)能进行计算和逻辑判断的设备在一组指令(instructions)——程序(programs)的控制下处理数据硬件(Hardware)组成计算机的各种物理部件键盘、鼠标、显示器、内存、硬盘、光驱等等软件(Software)计算机中运行的程序和数据C语言概述第6页/共605页8计算机的组成计算机包括六大部件输入单元(Inputunit)从输入设备(键盘、鼠标)获得数据输出单元(Outputunit)把数据输出到输出设备(显示器、打印机等)内存(Memoryunit)临时存储正在处理的数据和运行的程序可以快速地访问容量不大C语言概述第7页/共605页9计算机的组成中央处理单元(Centralprocessingunit,CPU)算术逻辑单元(Arithmeticandlogicunit,ALU)进行算术运算和逻辑判断控制器(Controlunit)管理和协调计算机的其它部件辅助存储器(Secondarystorageunit)保存需长期存储的数据和非活动的程序保存时间长价格便宜、容量大例如硬盘、光盘、磁带C语言概述第8页/共605页10计算机的工作原理六大部件紧密协作C语言概述第9页/共605页11计算机的工作原理CPU负责执行程序从内存中读取一条指令执行该指令从内存中读取下一条指令并执行……一个主频为1GHz的CPU可以在一秒钟内进行大约一亿次这样的操作

CPU有自己的工作区:包括若干个寄存器(Registers)CPU只能理解有限的指令(CPU的指令集)指令能够完成的任务是具体的例如,把一个数从内存移动到某一个寄存器C语言概述第10页/共605页12计算机程序和语言存储在计算机中的一切内容都是二进制的数字形式数据:数、字符、图片、声音、动画等等指令计算机程序确切告诉计算机如何完成某项任务的指令序列就是一套程序计算机语言用来编写程序C语言概述#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}011000110000011001100101110011000000110000011011011000110000011001100101110011000000110000011011第11页/共605页13机器语言数字形式的指令码就是机器语言(Machinelanguage)用机器语言编写的程序能够被计算机直接理解和执行但是,编写程序非常费力例如,编写程序完成两个数相加的任务需要以下几步把地址为2000的内存单元中的数复制到寄存器1;把地址为2004的内存单元中的数复制到寄存器2;把寄存器2中的数与寄存器1中的数相加,结果保留在寄存器1中;把寄存器1中的数复制到地址为2008的内存单元中。C语言概述011000110000011001100101110011000000110000011011第12页/共605页14汇编语言符号化的指令码就是汇编语言(Assemblylanguage)例如,完成两个数相加的汇编语言程序汇编语言程序必须被翻译成机器语言程序才能被执行汇编程序(Assembler)充当“翻译”C语言概述ldregn1,r1

把变量n1的值复制到寄存器1(r1);ldregn2,r2

把变量n2的值复制到寄存器2(r2);addr1,r2

把r2中的数与r1中的数相加,结果保留在r1中;storer1,sum

把r1中的数复制到变量sum。第13页/共605页15高级语言高级语言(High-levellanguage)使用数学符号和类似英语的单词例如,完成两个数相加的C语言程序从多方面提高了编程效率不必考虑CPU的指令集不必考虑CPU实现特定任务的精确步骤采用接近人类思考问题的方式去书写程序高级语言程序必须被编译程序(Compiler)翻译成机器语言程序才能被执行C语言概述sum=n1+n2;第14页/共605页16C语言的简史C语言的起源美国贝尔实验室的DennisRitchie在1972年开发的用于设计UNIX操作系统其前身是B语言(KenThompson于1970年为第一个UNIX系统开发的语言)C语言的标准美国国家标准化组织(ANSI)于1983年成立了一个委员会(X3J11),以确定C语言的标准。该标准(ANSIC)于1989年被正式采用,即C89。最新的标准是C99标准。目前,大多数C语言编译器没有完全实现C99的所有修改。C语言概述第15页/共605页17为什么学习和使用C语言C语言的特点C语言是一种强大而灵活的语言,可以用来编写任意复杂的程序。C语言简洁、紧凑,使用方便、灵活。C语言程序效率高、运行速度快。C语言是可移植的。C语言很适合结构化程序设计,因而要求用户以功能模块的方式来思考问题。C语言具有自我扩展能力。C语言概述第16页/共605页18为什么学习和使用C语言C与C++(C加加,see-plus-plus)贝尔实验室于二十世纪八十年代在C语言的基础上开发的。C++是C语言的超集,包含了C语言的所有内容,同时增加了面向对象编程方面的内容。C与Java(爪哇)Sun公司于1995年发布的面向对象编程语言。Java也是基于C语言的。C与C#(see-sharp)微软在2000年6月与.NET平台一同推出。C#也是从C语言派生的一种面向对象语言。C语言概述第17页/共605页19C语言程序的开发过程一般分成五个步骤定义程序目标设计程序编写代码编译运行、测试和调试程序C语言概述第18页/共605页20C语言程序的开发过程定义程序目标在开始解决问题之前,程序的开发人员必须彻底了解问题的是什么,对即将要创建的程序要做的事情有个清晰的想法。这需要仔细考虑以下问题程序需要什么信息程序需要执行哪些计算和操作程序应该报告什么信息例如,计算任意一个圆环的面积提出问题,明确目标圆环是什么?如何计算?计算精度?C语言概述第19页/共605页21C语言程序的开发过程设计程序决定程序如何去解决问题。需要考虑如何给程序提供必要的数据程序中如何表示数据用什么方法来处理数据程序如何组织程序怎样报告结果完成这个程序需要多长时间应该用一般的概念考虑设计中的问题,而不是考虑具体的代码。C语言概述第20页/共605页22C语言程序的开发过程编写代码编写代码来实现前面的设计,即用某一门语言来表示程序设计。需要开发人员熟练掌握该语言的知识。可以在草稿纸上勾画自己的想法或书写代码,但最终必须将代码输入计算机。输入代码所采用的机制则取决于具体的编程环境。一般来说,需要使用文本编辑器(例如Windows的记事本程序)来创建一种文件,称为源文件源文件包含程序设计的C语言表示形式(称为源程序或源代码)C语言概述第21页/共605页23C语言程序的开发过程编译把C语言源程序转换成机器语言表示的程序。这种程序可以直接被计算机理解和执行,所以称之为可执行程序,放在可执行文件中。编译的具体细节取决于使用的编程环境。C语言分两步完成这一工作:编译和链接。编译器将源代码转换为目标代码,并存在目标文件中。链接器将目标代码与其他代码结合起来生成可执行文件。这种把编译和链接分开来做的方法便于程序的模块化。可以分别编译程序的各个模块,然后用链接器把编译过的模块结合起来。这样,如果需要改变一个模块,则不需要重新编译所有其他模块。C语言概述第22页/共605页24C语言程序的开发过程运行、测试和调试程序运行包含可执行程序的文件,观察运行的结果。在不同的系统中运行程序的方式可能不同。例如,Windows的控制台和资源管理器。应该对程序进行仔细的检查,看程序是否在做该做的事。比较好的做法是为验证程序的正确性设计一个测试计划。越早做越好,因为它有助于理清程序员的思路。程序中的错误被称为bug,调试(Debug)就是要发现并修正错误。C语言概述第23页/共605页25C语言的编程环境开发程序的具体操作取决于使用的编程环境因为C语言是可移植的,所以它在许多环境中都是可用的。例如UNIX、Linux、Windows和MS-DOS。C语言编程环境包括一系列程序。编辑器编译器链接器运行和调试环境C语言概述Hello.cHello.objHello.exe编辑器源代码编译器目标代码链接器可执行代码……启动代码库代码执行如果有错如果有错如果有错第24页/共605页26C语言的编程环境编辑器使用一个文本编辑器程序输入源代码,并将代码保存在源文件中。一般,C程序的源文件名称的扩展名是.c例如welcometoyou.c和Hello.c。该名称应该遵循特定的操作系统的命名规则。例如,MS-DOS要求基本名包含的字符数不能大于8,所以welcometoyou.c不是合法的DOS文件名。Windows允许长文件名,所以welcometoyou.c是合法的Windows文件名。C语言概述Hello.c编辑器源代码第25页/共605页27C语言的编程环境编译器编译器接收源文件,生成目标文件,扩展名为.obj或.o。编译器还会检查输入的程序是否是有效的C语言程序。如果编译器发现错误,就会报告出错,且不能生成可执行程序。这时就必须修改错误,然后再编译。显然,为了能迅速找到错误,理解特定编译器的报错信息是一项有用的技能。C语言概述Hello.cHello.obj编辑器源代码编译器目标代码如果有错第26页/共605页28C语言的编程环境链接器目标代码虽然已经是机器代码,但还不能被执行。缺少下面两个东西启动代码:相当于程序和操作系统之间的接口。库函数的代码:库文件中包含许多函数的目标代码。链接器的作用就是将这三个元素(目标代码、启动代码和库代码)结合起来,并将它们放在一个文件中,即可执行文件,扩展名为.exe或.out。C语言概述Hello.objHello.exe目标代码链接器可执行代码……启动代码库代码如果有错第27页/共605页29Windows的C语言编程环境Windows的C语言编程环境Windows并不包含C编译器,所以需要获得并安装一个C编译器。许多现代的编译器都是集成开发环境(或叫IDE)的一部分。包括一个编辑器、编译器、链接器和包括一个符号调试程序在内的运行支持系统。许多软件厂商都提供了基于Windows的集成开发环境Microsoft公司的VisualC/C++Borland公司的C/C++BuilderMetrowerks公司的CodeWarrior目前,大多数IDE把C和C++编译器结合在一起。C语言概述第28页/共605页30DOS的C语言编程环境DOS的C语言编程环境基于DOS的IDEBorland公司的TurboCBorland公司的BorlandC++许多Windows上的IDE也提供了在DOS命令行环境中编程的命令行工具。C语言概述第29页/共605页31C语言编程实验环境简介上机实验环境简介举例演示VisualC++6.0的基本操作启动创建源文件构建工程(编译、链接)运行程序C语言概述第30页/共605页32小结C是一种通用的程序设计语言,具有许多突出的优点。程序设计的初学者应该严格按照C语言程序的开发过程进行训练,以便尽快掌握程序设计的基本原则。C是一种需要编译的高级语言。进行C语言编程的具体操作依赖于所使用的编程环境。程序设计是一门实践性很强的课程,在学习过程中必须十分重视实验环节。C语言概述第31页/共605页第二讲C语言快速入门第32页/共605页34第二讲C语言快速入门C语言程序的基本结构C语言的字符集和关键字VisualC++6.0编程环境C语言程序设计第33页/共605页35C语言程序的基本结构一个简单的C语言程序问题:在屏幕上显示一行文字:“HelloWorld!”源程序运行结果C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{printf("HelloWorld!\n");}HelloWorld!第34页/共605页36C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()

/*定义主函数*/{printf("HelloWorld!\n");}

注释部分以增加程序的可读性。不被执行。第35页/共605页37C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{printf("HelloWorld!\n");}

预处理命令程序中包含某一文件内容。

“stdio.h”为标准输入输出函数头文件名。第36页/共605页38C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{printf("HelloWorld!\n");}

函数

C程序由函数组成。一个C程序有且仅有一个主函数(main函数)。第37页/共605页39C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{printf("HelloWorld!\n");}

函数说明说明函数类型、函数名和函数参数。第38页/共605页40C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{printf("HelloWorld!\n");}

函数体包括变量说明和语句执行部分。第39页/共605页41C语言程序的基本结构一个简单的C语言程序程序结构分析C语言快速入门/*在屏幕上显示HelloWorld!*/#include<stdio.h>voidmain()/*定义主函数*/{

printf("HelloWorld!\n");

}

函数调用语句格式输出函数printf()。输出“Helloworld!”。HelloWorld!第40页/共605页42C语言程序的基本结构含有算术运算的C语言程序问题:求方程的根(设)。源程序C语言快速入门#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}第41页/共605页43C语言程序的基本结构含有算术运算的C语言程序程序结构分析C语言快速入门#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

预处理命令第42页/共605页44C语言程序的基本结构含有算术运算的C语言程序程序结构分析C语言快速入门#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函数一个主函数(main函数)。第43页/共605页45C语言程序的基本结构含有算术运算的C语言程序程序结构分析C语言快速入门#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函数说明部分第44页/共605页46C语言程序的基本结构含有算术运算的C语言程序程序结构分析C语言快速入门#include<stdio.h>#include<math.h>voidmain(){

floata,b,c,p,disc,q,x1,x2;scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%f,x2=%f",x1,x2);}

函数体

变量说明部分

执行部分第45页/共605页47C语言程序的基本结构含有算术运算的C语言程序程序结构分析C语言快速入门#include<stdio.h>#include<math.h>voidmain(){floata,b,c,p,disc,q,x1,x2;

scanf("%f%f%f",&a,&b,&c);p=-b/(2*a);disc=b*b-4*a*c;q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;

printf("x1=%f,x2=%f",x1,x2);}

运行程序键盘输入a、b、c的值;屏幕显示x1和x2的值。10-4x1=2.000000,x2=-2.000000第46页/共605页48C语言程序的基本结构包含多个函数的C语言程序问题:求|a|+|b|的值。源程序C语言快速入门#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}第47页/共605页49C语言程序的基本结构包含多个函数的C语言程序程序结构分析C语言快速入门#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

程序由两个函数组成:

absv函数

main函数第48页/共605页50C语言程序的基本结构包含多个函数的C语言程序程序结构分析C语言快速入门#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

调用absv函数求绝对值。第49页/共605页51C语言程序的基本结构包含多个函数的C语言程序程序结构分析C语言快速入门#include<stdio.h>floatabsv(floatx){floaty;y=x>=0?x:-x;returny;}voidmain(){floata,b,c;printf("inputa,b:\n");scanf("%f%f",&a,&b);c=absv(a)+absv(b);printf("|a|+|b|=%f\n",c);}

运行程序屏幕显示提示信息;键盘输入a、b的值;屏幕显示a、b绝对值之和。inputa,b:-513|a|+|b|=18.000000第50页/共605页52C语言程序的基本结构C语言程序的基本结构小结C语言快速入门⑴一个C程序由一个或多个函数组成,但有且仅有一个主函数(main函数);main函数是程序执行的入口,可置于程序的任何位置。⑵程序中可以有预处理命令(如:include命令)。预处理命令通常放在程序的最前面。⑶每个语句以分号结尾;预处理命令、函数头和花括号“}”之后不能加分号。⑷函数包括函数的说明部分和函数体;函数体包括变量说明部分和执行部分;函数体由一对花括号“{}”括起来。⑸括在/*…*/内的文本为注释。⑹一行可以写几个语句,一个语句也可以写在多行上。⑺程序区分大小写字母。一般变量、语句等用小写字母书写;符号常量、宏名等用大写字母书写。⑻标识符和保留字之间须加空格以示分隔。第51页/共605页53C语言的字符集C语言源程序中使用的字符来自C语言的字符集。字符集(Characterset)——来自ASCII表52个大小写字母(Letters)ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz10个数字(Digits)0123456789空白符(Blanks)空格符、制表符、回车符、换行符图形符号(Graphiccharacters)!#%^&*(_)-+=~[]'|\;:"{},.<>/?C语言快速入门第52页/共605页54C语言的关键字关键字(Keywords)是C语言中的词汇。也称为保留字(Reservedwords)类型说明

int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum、struct、union语句定义

if、else、goto、switch、case、do、while、for、continue、break、return、default、typedef存储类别说明

auto、register、extern、static长度运算符

sizeofC语言快速入门第53页/共605页55C语言的标识符标识符(Identifiers)是程序中引用对象的名称。用来标识变量、符号常量、数组、函数、结构体、共用体、自定义类型等。命名规则只能包括大小写字母、数字和下划线;首字符必须是字母或下划线;一般内部标识符的前31个字符有效,而外部标识符的前6个字符有效;(视具体编译器的规定)不能与关键字相同。C语言快速入门count,student_name,sum,test13,_number,SumM.John,$123,hi!,12xyz,void第54页/共605页56VisualC++6.0编程环境举例演示VisualC++6.0的基本操作创建工作区创建工程(程序)并添加到工作区创建源文件并添加到工程构建工程(编译、链接)运行程序C语言快速入门第55页/共605页57程序的测试与调试程序错误语法错误未遵循C的语法规则。编译器可以检查。运行时错误在程序运行时执行了无法处理的操作。逻辑错误程序不能按照预期的方式运行,不能产生预期的结果。C语言快速入门第56页/共605页58程序的测试与调试程序测试审查和运行程序,检测程序是否存在错误。测试步骤在编译前仔细检查程序的源代码,看看是否有明显的错误。查看编译器发现的语法错误。对于运行时错误和逻辑错误可以采用正确输出测试。想找出所有错误是不切实际的。C语言快速入门第57页/共605页59程序的测试与调试程序调试隔离和修正错误。调试方法采用手工方式来跟踪程序。在程序中的关键点放置输出语句来显示变量的值。使用调试器。C语言快速入门第58页/共605页60小结C程序的基本结构C语言程序是由一个或多个函数组成的。函数可以是标准库函数和自定义的函数。C语言的语句可以包含一个表达式,也可以包含一个函数调用,以一个分号作为结束标志。C语言中的变量在使用之前必须先声明,通过声明语句中为变量指定一个名字和数据类型。可以通过赋值运算改变变量的值。C语言可以使用scanf()函数和printf()函数输入和输出数据。C语言快速入门第59页/共605页61小结编译器可以发现程序中的语法错误,但是程序中的运行时错误和逻辑错误只有在程序运行时才表现出来。检测运行时错误和逻辑错误的一种简单实用的方法是跟踪程序的运行状态,即程序每执行一步之后所有或主要变量的值。C语言快速入门第60页/共605页第三讲基本数据类型第61页/共605页63第三讲基本数据类型引例变量与常量预备知识内储存器的组织数据类型基本数据类型整数类型字符浮点类型C语言程序设计第62页/共605页64引例引例问题计算任意一个圆的面积。源程序(cw02-01.c)基本数据类型#include<stdio.h>voidmain(){floatr,area;//定义变量

scanf(“%f”,&r);//读取输入的半径

area=3.14*r*r;//计算圆的面积

printf(“area=%f”,area);//输出}1area=3.140000areararea=Лr2第63页/共605页65变量与常量数据(Data)程序需要使用数据。数据是信息的载体。数据有多种形式:数、字符、图片等。常量(Constants)在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。例如引例中的圆周率3.14。变量(Variables)在程序运行过程中可能变化或被赋值的数据。例如引例中的半径和面积。基本数据类型第64页/共605页66数据类型数据类型的作用决定数据的存储方式和占用的存储空间的大小。决定可以进行的操作。C语言的数据类型基本类型 整型(integer),字符型(character),浮点型(floating-point),枚举类型(enumeration)构造类型 结构体(structure),共用体(union),数组(array)指针类型(pointer)空类型(void)基本数据类型第65页/共605页67位、字节和字内存储器的组织基本数据类型位(bit):最小的存储单位,可以容纳两个值之一,即0或1。200020012002字节(Byte):基本的存储单位,8位。字(word):自然的存储单位,包含若干个字节。例如32位机的一个字就是32位。地址:以字节为单位从0开始编号。第66页/共605页68整数的存储方式有符号的正整数在内存中以二进制补码形式存放。正整数的补码与原码相同。例如:10基本数据类型符号位00000000000010100000000000001010RAM数轴0215-1=32767可表示的数的范围-215=-32768第67页/共605页69整数的存储方式有符号的负整数在内存中以二进制补码的形式存放。例如:-10基本数据类型符号位11111111111101101111111111110110RAM-10的原码100000000000101011111111111101011111111111110110按位取反加一后得到-10的补码符号位不变第68页/共605页70整数的存储方式无符号整数所有二进制位都存放数值。例如:65535基本数据类型11111111111111111111111111111111RAM0216-1=65535可表示的数的范围第69页/共605页71整数的类型C语言提供多种整数类型为程序员提供了针对不同用途的多种选择。基本数据类型类型名称类型说明符字节数数值范围基本整型[signed]int4-2147483648~2147483647短整型[signed]short[int]2-32768~32767长整型[signed]long[int]4-2147483648~2147483647无符号基本整型unsigned[int]40~4294967295无符号短整型unsignedshort[int]20~65535无符号长整型unsignedlong[int]40~4294967295C标准只规定:short≤int≤long最大最小值参考<limits.h>仅供参考,实际值与所使用的操作系统、编译系统、机器有关。第70页/共605页72整型常量整型常量有三种形式:十进制(decimal)整数126565535八进制(octal)整数:带前缀0(zero)01401010177777十六进制(hexadecimal)整数:带前缀0x

或0X0xc0x410xffff默认类型是int,即有符号的基本整型。可以加上后缀u

或U

表示无符号整数,或者l

或L

表示长整数。0xb5Lu基本数据类型第71页/共605页73RAM整型变量声明变量(Declaration)变量在使用之前必须被声明。声明语句的格式:举例基本数据类型<类型说明符><变量名>[,<变量名>[,...]];intcounter;intwidth,height;shortx,y;longnumber;变量声明创建了变量:为变量分配了存储空间。height第72页/共605页74整型变量初始化(Initialize)变量为变量赋一个初始值。可以在声明语句中初始化变量。举例变量获得值的方法直接赋值输入初始化基本数据类型intcounter=0;intwidth=352,height=288;初始化式RAM288height第73页/共605页75整型变量输出变量的值可以使用printf()函数。与int类型对应的格式说明符是%d。举例(cw02-02a.c)基本数据类型#include<stdio.h>voidmain(){inta,b;a=32767;b=-32768;printf("a=%d,b=%d\n",a,b);}a=32767,b=-32768第74页/共605页76整数的溢出溢出整数太大,超出了整数类型的数值范围。使用printf()

时与unsignedint类型对应的格式说明符是%u。举例(cw02-02b.c)基本数据类型#include<stdio.h>voidmain(){inta,b;unsignedc,d;a=2147483647;b=a+1;c=4294967295;d=c+1;printf("a=%d,b=%d\n",a,b);printf("c=%u,d=%u",c,d);}a=2147483647,b=-2147483648c=4294967295,d=0???第75页/共605页77整数的溢出溢出结果分析结论a+1的结果(2147483648)超出了基本整型变量b所能容纳(表示)的数值范围(-2147483648~2147483647)。请分析d的结果。基本数据类型01111111...111111110000000...0000000a(2147483647)10000000...0000000a+1(2147483648)b(-2147483648)12加正数减正数第76页/共605页78字符的存储方式字符编码计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。常用的编码是ASCII(美国信息交换用标准码)。7位二进制数,十进制码值范围从0到127。一般用一个字节保存,最高位为0。字符的存储方式与整数相同举例字母A的ASCII码值为65,那么在内存中以65的二进制形式存储,且占一个字节。基本数据类型0100000101000001RAM第77页/共605页79字符的类型和字符变量C语言的字符类型:char占一个字节;可视为一个有符号的整数。举例(cw02-03.c)基本数据类型#include<stdio.h>voidmain(){charc1,c2;//声明字符变量

c1=97;//把一个整数赋值给字符变量

c2=c1-32;//字符变量可以进行算术运算

printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);}c1=a,c2=Ac1=97,c2=65第78页/共605页80字符常量字符常量用单引号括起来的一个字符。'x''9''+‘C语言将字符常量视为int类型。举例(cw02-04.c)如果int类型为16位,char类型为8位,那么对于’bc’,将把’b’和’c’的ASCII码值存储在两个字节中,并把’c’赋值给变量c2。注意:不同系统处理方式不同,结果不同。基本数据类型charc1,c2;c1=‘a’;c2=‘bc’;01100001c101100011c20110001101100010‘bc’LH97999998第79页/共605页81字符常量转义字符(escapecharacter)指代一些特殊的字符。(打印不出来的字符)举例(cw02-05.c)基本数据类型\a

警报 \\

反斜杠(\)\b

退格 \?

问号(?)\f

走纸 \‘

单引号(’)\n

换行 \“

双引号(”)\r

回车 \ooo

八进制值(o表示一个八进制数字)\t

水平制表符 \xhh

十六进制值(h表示一个十六进制数字)\v

垂直制表符#include<stdio.h>voidmain(){printf("a\tb\nc\bd\100\x40\n");}abd@@第80页/共605页82浮点数的存储方式浮点数浮点型数据在内存中按指数形式存放。例如:314.15=3.1415×102基本数据类型0(3.14159)100(2)10数符尾数部分阶符阶码+3.14159×10+2由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽度决定了数值范围。RAM科学计数法允许使用少量的数字表示很大范围的数和很小的数。第81页/共605页83浮点数的类型浮点数也有多种类型类型名称及典型大小基本数据类型类型名称类型说明符字节数有效数字数值范围单精度float46~7(s)10-37~1038双精度double815~16(s)10-307~10308长双精度longdouble1018~19(s)10-4931~104932S=±1参考<float.h>仅供参考,实际值与所使用的操作系统、编译系统、机器有关。数轴0可表示的正数可表示的负数第82页/共605页84浮点型常量浮点型常量有两种形式:十进制形式12.3.650.指数形式:<小数><e|E><整数>1.2e-2 .1E5 7E01.2×10-2 0.1×105 7.0×100默认类型是double。可以加上后缀f

或F

表示float类型,或者l

或L

表示longdouble类型,否则该常量是double类型。2.3f1.2L.1E5f基本数据类型第83页/共605页85浮点型变量浮点型变量的声明和初始化举例基本数据类型floatradius;doublex=0.0,y=0.0;不能写成:doublex=y=0.0;第84页/共605页86浮点型变量浮点数的输出使用printf()函数float和double对应的格式说明符为%f、%e。举例(cw02-06.c)基本数据类型#include<stdio.h>voidmain(){floatf;doubled;f=33333.33333f;d=33333.3333333333;printf("f=%f\nd=%f",f,d);}f=33333.332031d=33333.333333有效数字位数是有限的,在可表示的有效位之外的数字被舍去。因此可能会产生误差。第85页/共605页87浮点数的舍入误差浮点数的舍入误差举例(cw02-07.c)基本数据类型#include<stdio.h>voidmain(){floata,b;a=123456.789e5;b=a+20;printf("a=%f\nb=%f",a,b);}a=12345678848.000000b=12345678848.000000???第86页/共605页88浮点数的舍入误差浮点数的舍入误差结果分析基本数据类型a=123456.789e5;b=a+20;a+20的理论值应该是:12345678920但是,一个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。因此,最后得到b=12345678848.000000应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”较小的数。第87页/共605页89浮点数的溢出上溢举例(cw02-08.c)若某系统中的最大float值为3.4e38,进行如下操作得到结果下溢举例:假设-10是最小的指数,能够保留四位有效数字如果把数0.1234e-10除以10,将得到结果0.0123e-10,但损失了一位有效数字。基本数据类型floattoobig=3.4e38*100.0f;printf(“toobig=%f",toobig);…inf…无穷大(infinity)第88页/共605页90小结C语言有多种数据类型。基本的数据类型包括两大类:整数类型浮点类型开发程序时,应当注意所需变量及其类型的选择。一般使用int和float表示数,用char表示字符。在使用变量的函数的可执行语句之前声明该变量,并为它选择有意义的名字。初始化变量使用的常量应当与变量的类型相匹配。基本数据类型第89页/共605页第四讲输入输出和库函数第90页/共605页92第四讲输入输出和库函数引例字符串常量符号常量格式化输入输出字符输入输出库函数C语言程序设计第91页/共605页93引例引例问题:计算任意一个球体的体积。源程序(cw03-01.c)输入输出和库函数#include<stdio.h>#include<math.h>#definePI3.14159//定义符号常量voidmain(){doubler,volume;printf("Pleaseinputtheradiusofaball:");scanf("%lf",&r);volume=4.0/3.0*PI*pow(r,3.0);//使用数学函数

printf(“Volume=%.5f\n”,volume);//按格式输出}Pleaseinputtheradiusofaball:1Volume=4.18879volume=4/3Лr3第92页/共605页94字符串常量字符串常量用双引号括起来的字符序列。

"thisisastring""x""12345"字符串常量的存储方式字符串中的字符存放在相邻的存储单元中,每个字符占用一个单元,在最后加上一个空字符(\0)作为结束标识符。举例输入输出和库函数thisisastring\0每个字符占一个字节结束标记第93页/共605页95字符串常量字符串常量和字符常量的区别字符‘x’是基本型数据。字符串”x”是构造型数据。占用的存储空间大小不同。输入输出和库函数‘x’x在内存中占一个字节“x”x在内存中占两个字节\0第94页/共605页96符号常量符号常量符号常量是用一个标识符表示的常量。定义规则

#define<符号常量名><字符串>举例输入输出和库函数#defineMAXSIZE20#defineWELCOME"Welcometoyou!"#definePI3.14编译预处理器将会用3.14替换以后出现的PI标识符。第95页/共605页97符号常量为什么需要符号常量名字比数字包含的信息多。便于维护如果需要在多个地方用到同一个常量,而且必须改变它的值,则只需要修改其符号常量的定义。另一种定义符号常量的方法使用const把一个变量声明转换成常量声明。举例输入输出和库函数constintMAX_NUMBER=30;MAX_NUMBER是只读的。第96页/共605页98输入输出输入输出是以计算机主机为主体而言的。输出(Output):从主机向外部输出设备输出数据。输入(Input):从外部通过输入设备向主机输入数据。输入输出和库函数主机键盘磁盘光盘扫描仪……显示器打印机磁盘……输入输出第97页/共605页99输入输出流流(stream)按直线排列的字符序列每个序列包括0个或多个字符,并用换行符结尾ANSIC支持至少254个字符的序列所有的输入/输出都是用流来进行的。输入输出和库函数S@!ci’[]源目的第98页/共605页100标准输入输出流开始执行程序时,3个流自动连接到程序上标准输入流(standardinput)对应的源端设备:keyboard标准输出流(standardoutput)对应的目的端设备:screen标准错误流(standarderror)对应的目的端设备:screen操作系统允许这些流重定向到其它设备输入输出和库函数typemyprog.c>prn输出重定向符myprog<data.txt输入重定向符第99页/共605页101输入输出函数C语言中数据的输入、输出是由函数来实现的。字符输入函数:getchar()字符输出函数:putchar()格式输入函数:scanf()格式输出函数:printf()它们都属于标准输入输出库函数,其原型(prototype)都在stdio.h头文件(headerfile)中。输入输出和库函数第100页/共605页102字符输入输出putchar()函数getchar()函数使用说明程序中必须包含stdio.h头文件输入输出和库函数#include<stdio.h>第101页/共605页103字符输出putchar使用形式putchar(character);向标准输出流输出一个字符character使用说明character可以是以下数据:字符型数据整型数据转义字符输入输出和库函数第102页/共605页104字符输出举例(cw0302.c)输入输出和库函数#include<stdio.h>voidmain(){chara;intb;a=‘B’;b=79;putchar(a);putchar(‘\n’);putchar(b);putchar(‘\n’);putchar(‘Y’);}BOY第103页/共605页105字符输入getchar使用形式variable

=

getchar();从标准输入流读取一个字符。使用说明只读取一个字符。该字符可赋给字符变量、整型变量或作为表达式的一部分。输入输出和库函数第104页/共605页106字符输入举例(cw0303.c)输入输出和库函数#include<stdio.h>voidmain(){charc;c=getchar();putchar(c);}aaabca989123第105页/共605页107格式输入输出printf()函数scanf()函数使用说明程序中可以不明确指定包含stdio.h头文件输入输出和库函数#include<stdio.h>可以省略此命令第106页/共605页108格式输出printf使用形式printf(<格式控制字符串>,<输出列表>);按格式控制字符串规定的格式,向指定的输出设备输出输出列表中的输出项。使用说明格式控制字符串由双引号括起来的字符串,用于指定输出格式输出列表需要输出的数据列表,彼此间用逗号分隔输出项可以是任意合法的表达式输入输出和库函数第107页/共605页109格式输出格式控制字符串举例输入输出和库函数printf(“n=%5d,f=%5.2f\n”,3,6.235)普通字符原样输出格式说明符(转换规则)%[修饰符]格式字符指定数据的输出格式n=3,f=6.24第108页/共605页110格式输出格式字符输入输出和库函数格式字符功能d,i以十进制有符号形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前缀)x,X以十六进制无符号形式输出整数(不输出前缀)u以十进制无符号形式输出整数f以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G选用%f和%e格式中输出宽度较短的一种,不输出无意义的零c以字符形式输出,输出一个字符s输出字符串第109页/共605页111格式输出格式修饰符输入输出和库函数修饰符意义l用于长整型和长双精度实型数据,可加在格式字符d、o、x、u、f前面。m(正整数)数据最小宽度。.n(正整数)对于实数,表示输出n位小数;对于字符串,表示截取的字符个数。-输出的数字或字符在域内向左靠,右边填空格。#当整数以八进制或十六进制形式输出时,输出前缀。可加在格式字符o、x前面。第110页/共605页112格式输出格式说明符小结输入输出和库函数格式字符形式d,i%d,%md,%-md,%ld,%mld,%-mld,%i,……o%o,%mo,%-mo,%lo,%mlo,%-mlo,%#o,……x,X%x,%mx,%-mx,%lx,%mlx,%-mlx,%#x,……u%u,%mu,%-mu,%lu,%mlu,%-mluf%f,%mf,%m.nf,%lf,……e,E%e,%me,%m.ne,……g,G%gc%cs%s,%ms,%m.ns,……要输出%就用%%第111页/共605页113格式输出举例(cw0304.c)输入输出和库函数voidmain(){inta=97,b=-1;floatf=123.4;printf(“%d,%c\n”,a,a);printf(“%d,%o,%x,%u\n”,b,b,b,b);printf(“%f,%e,%gEND”,f,f,f);}97,a-1,177777,ffff,65535123.400002,1.234000e+02,123.4END1111111111111111BC第112页/共605页114格式输出举例(cw0305.c)输入输出和库函数voidmain(){inta=1,b=2,c=3;printf(“%d,%d,%d,%d\n”,a,b,c);printf(“%d,%d,%d\n”,a,b,c,a+b+c);}1,2,3,8981,2,3格式说明符和输出项在数量和类型上应该一一对应。第113页/共605页115格式输入scanf使用形式scanf(<格式控制字符串>,<地址列表>);按格式控制字符串规定的格式,从指定的输入设备读入数据,并存放到地址列表中的各地址项指定的变量中使用说明格式控制字符串由双引号括起来的字符串,用于指定输入格式地址列表由若干个变量的地址组成输入输出和库函数第114页/共605页116格式输入地址列表取地址运算符:&&<变量>得到变量在内存中的地址。输入输出和库函数scanf(“%d,%d”,&a,&b)FF00FF02ab第115页/共605页117格式输入格式字符输入输出和库函数格式字符功能d,i以十进制形式输入有符号整数o以八进制形式输入无符号整数x,X以十六进制形式输入无符号整数u以十进制形式输入无符号整数f以小数形式或指数形式输入实数e,E,g,G同f,它们之间可以互换c输入单个字符s输入字符串第116页/共605页118格式输入格式修饰符输入输出和库函数修饰符意义l用于输入长整型和双精度实型数据,可加在格式字符d、o、x、u、f、e前面。h用于输入短整型数据。m(正整数)域宽,指定输入数据所占的宽度。*表示本输入项读入后不赋给任何变量,即跳过该输入值。第117页/共605页119格式输入格式说明符小结输入输出和库函数格式字符形式d,i%d,%md,%ld,%mld,%i,……o%o,%mo,%lo,%mlox,X%x,%mx,%lx,%mlxu%u,%mu,%lu,%mluf%f,%mf,%lf,%mlfe,E,g,G%e,%me,%le,%mle,%g,……c%cs%s,%ms第118页/共605页120格式输入举例(cw0306.c)输入输出和库函数voidmain(){chara,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(“a=%c,b=%c,c=%c",a,b,c);}abca=a,b=b,c=cabca=a,b=,c=ba bca=a,b= ,c=baba=a,b=,c=b1234用c格式字符输入字符时,若格式控制字符串中无普通字符,那么认为所有输入的字符(包括空格、制表符、换行符)均为有效字符。第119页/共605页121格式输入输入过程分析输入输出和库函数a<nl>b<nl>2,3.4输入缓冲区scanf();getchar();…输入流输入流第120页/共605页122格式输入用c格式字符输入字符时,若格式控制字符串中加入空格作为分隔符,那么输入时各数据之间可以加任意多个空格、制表符或回车符)。例:scanf(“%c%c%c”,&a,&b,&c);输入:abc↙则a=a,b=b,c=c在下列情况下可认为数据输入结束:遇到空格、回车、制表符按指定的宽度结束遇非法输入输入输出和库函数第121页/共605页123数学库函数使用标准库中的数学函数包含数学函数库的头文件

#include<math.h>常用的数学函数的原型intabs(intn)doublefabs(doublex)doublepow(doublex,doubley)doublesqrt(doublex)使用举例intn=abs(-21);doublev=pow(r,3.0);输入输出和库函数第122页/共605页124小结C语言中的字符串常量C语言中的符号常量C语言中常用的输入输出函数使用标准库中的数学函数输入输出和库函数第123页/共605页第五讲运算符和表达式第124页/共605页126第五讲运算符和表达式引例算术运算符运算符的优先级和结合性类型转换自增自减运算符逗号运算符C语言程序设计第125页/共605页127引例引例问题输入一个四位的正整数,反序输出该四位数的四个数字字符。设计用一个无符号整型变量number保存输入的四位正整数。依次分解出个位数字、十位数字、百位数字和千位数字,并分别放到字符变量c1、c2、c3和c4中。怎么分解?利用除法、取模等运算。顺序输出变量c1、c2、c3和c4中的字符。运算符和表达式第126页/共605页128引例引例源程序(cw04-01.c)运算符和表达式#include<stdio.h>voidmain(){unsignednumber;charc1,c2,c3,c4;printf("请输入一个四位的正整数:");scanf("%u",&number);c1=number%10+'0';//得到个位数字

c2=number/10%10+'0';//得到十位数字

c3=number/100%10+'0';//得到百位数字

c4=number/1000+'0';//得到千位数字

printf("\n%c%c%c%c\n",c1,c2,c3,c4);}请输入一个四位的正整数:12344321第127页/共605页129算术运算符常用的算术运算及运算符说明取模运算(%),结果是两个整数相除的余数。例如,7%5=2,-2%3=-2

温馨提示

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

最新文档

评论

0/150

提交评论