C语言程序设计教程(第2版)-课件全套 余琴 第1-10章 C概述-文件_第1页
C语言程序设计教程(第2版)-课件全套 余琴 第1-10章 C概述-文件_第2页
C语言程序设计教程(第2版)-课件全套 余琴 第1-10章 C概述-文件_第3页
C语言程序设计教程(第2版)-课件全套 余琴 第1-10章 C概述-文件_第4页
C语言程序设计教程(第2版)-课件全套 余琴 第1-10章 C概述-文件_第5页
已阅读5页,还剩495页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计为什么要学习C语言?(1)计算机相关专业:

其他高级语言的基础,与其他语言进行混合编程(2)非计算机理工专业:乔布斯说过:每个人都应该学习编程,因为它教会你如何思考。C语言编程---教会编程思路、方法、设计模式IOS、Android底层开发---C语言

编程语言受欢迎程度排行2023年1月TOP10语言C语言的设计者两个骨灰级游戏玩家无心插柳柳成荫1969年,ken梦想能遨游宇宙,

设计了一款模拟在太阳系航行

的电子游戏—SpaceTravel,

1971年dmr加入游戏在PDP-7小型机上开发,因

为这台机器免费,但免费的机

器没有操作系统玩游戏前,先给PDP-7做个操作系统,命名为UNIX无心插柳柳成荫汇编编写UNIX太慢,而一般的高级语言难以实现汇编语言的某些功能Dmr改造B语言,设计了一种新的高级语言,命名C语言,把UNIX的90%以上代码用C改写1983年,因为UNIX和C语言的巨大成功,ken和dmr共同获得当年度计算机界最高奖—图灵奖C语言适合做什么?选语言的标准——适合的才是最好的!(1)编写系统软件(例如OS)和工具软件(2)运行效率要求较高的系统设备驱动程序,嵌入式系统(机器人、手机和智能家电)高性能、实时系统我能学好C语言吗?C语言枯燥不好学数学和英语不好能学好C语言吗?只要有小学四年级的水平和基础就能学好C语言!——啊哈磊(全国信息学奥林匹克竞赛NOI金牌教练)C语言程序设计

课程目标

熟记C语言的基本概念熟悉VisualC++的上机操作环境会读、会编、会调试C程序课程要求

多上机实践

考核形式机考(50%)+平时(50%)硬件系统(Hardware)软件系统(Software)内存储器随机存储器(RAM)只读存储器(ROM)输入设备:键盘鼠标扫描仪输出设备:显示器打印机绘图仪中央处理器(CPU)

运算器控制器系统软件应用软件高速缓存(Cache)主机外设外存:软盘硬盘光盘优盘网络设备:网络适配器调制解调器集线器操作系统:WindowsUNIXLinuxDOS语言处理程序:CJavaVBVF实用程序:诊断程序排错程序等通用应用软件:办公软件包等专用应用软件:各企业单位的管理信息系统等计算机系统知识回顾C语言与自然语言的比较

自然语言

C语言信息交流(地位平等)人-机对话(命令方式)(有思维、推理能力)(无思维、推理能力)语法规则、句法规则灵活语法规则、句法规则固定(可省略、颠倒)(一般不可省略、颠倒,必须按部就班)如:走,去晒太阳!如:x=a+b

去晒太阳,走!scanf(“%d%d”,a,b);表达方式多样算法多样√√scanf(“%d%d”,&a,&b);x=a+b;学习要点:熟记C语言的语法、句法学会算法分析与算法设计本课重点:第二章~第九章本课难点:第六章、第七章、第八章第一章C语言概述本章要点C语言的特点

C程序的结构

C程序的上机步骤1.1

C语言出现的历史背景C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。1983年,美国国家标准化协会(ANSI)制定了新的标准ANSIC,比标准C有了很大的发展。1987年,ANSI公布了新标准——87ANSIC。1990年,国际标准化组织接受了87ANSIC为ISOC的标准(ISO9899—1990)。1994年,ISO又修订了C语言标准。目前流行的C语言编译系统大多是以ANSIC为基础进行开发的。1.2C语言的特点(1)语言简洁、紧凑,使用方便、灵活。

32个关键字、9种控制语句,程序形式自由。(2)运算符丰富。(3)数据类型丰富,具有现代语言的各种数据结构。(4)具有结构化的控制语句,是完全模块化和结构化的语言。(5)语法限制不太严格,程序设计自由度大。(6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点。(7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。1.3简单的C语言程序几个简单的C语言程序例子例1.1

#include<stdio.h>intmain(){printf("ThisisaCprogram.\n");return0;}/*文件包含*//*主函数*//*函数体开始*//*输出语句*//*返回语句*//*函数体结束*/说明:main-主函数名,int-函数类型每个C程序必须有一个主函数main{}是函数开始和结束的标志,不可省每个C语句以分号结束使用标准库函数时应在程序开头一行写:

#include<stdio.h>说明:

本程序的作用是输出一行信息:ThisisaCprogram.例1.2求两数之和

#include<stdio.h>

intmain()/*求两数之和*/

{

inta,b,sum;/*声明,定义变量为整型*/

/*以下3行为C语句*/

a=123;b=456;

sum=a+b;

printf(″sumis%d\n″,sum);

return0;

}说明:

/*……*/表示注释。注释只是给人看的,对编译和运行不起作用。所以可以用汉字或英文字符表示,可以出现在一行中的最右侧,也可以单独成为一行。说明:

输出一行信息:sumis579例1.3求2个数中较大者。

#include<stdio.h>

intmain()/*主函数*/

{

intmax(intx,inty);/对被调用函数max的声明*/

inta,b,c;/*定义变量a、b、c*/

scanf(″%d,%d″,&a,&b);/*输入变量a和b的值*/

c=max(a,b);

/*调用max函数,将得到的值赋给c*/

printf(″max=%d\n″,c);/*输出c的值*/

return0;

}程序运行情况如下:8,5↙(输入8和5赋给a和b)max=8(输出c的值)intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}说明:本程序包括main和被调用函数max两个函数。max函数的作用是将x和y中较大者的值赋给变量z。return语句将z的值返回给主调函数main。C程序小结:(1)C程序是由函数构成的。这使得程序容易实现模块化。(2)一个函数由两部分组成:

函数首部:如intmax(intx,inty)

函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。函数体包括:声明部分:inta,b,c,可省执行部分:由若干语句组成,可省注意:函数的声明部分和执行部分都可缺省,例如:intdump(){}

这是一个空函数,什么也不做,但是是合法的函数。(3)C程序总是从main函数开始执行的,与main函数的位置无关。(4)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上,C程序没有行号。(5)每个语句和数据声明的最后必须有一个分号。(6)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。使用输入输出函数时必须在程序开头插入引用库函数所在头文件的声明。(7)用/*…*/或//做注释。1.4运行C程序的步骤与方法1.4.1运行C程序的步骤1.4.2常用IDE1.4.3Dev-C++介绍1.4.4Dev-C++安装1.4.5Dev-C++使用1.4.1运行C程序的步骤上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序1.4.2常用IDE目前使用的大多数C编译系统都是集成环境(IDE)的。可以用不同的编译系统对C程序进行操作。常见的有TurboC、VisualC++、QtCreator、Code::Blocks、Dev-C++等。1.4.3Dev-C++介绍Dev-C++是Windows环境下的一个轻量级C/C++免费开源的IDE开发环境,它遵守GPL许可协议,是一款自由软件。Dev-C++使用MingW64/TDM-GCC等编译器,遵循C99标准,同时兼容C90标准。官方最新版为Dev-C++5.11。Dev-C++安装卸载方便,打开和运行速度都非常快,功能简单实用。开发环境包括多页面窗口、工程管理、调试器等,集成了C/C++编译器、自定义编译器配置、调试等功能,提供高亮度语法显示,安装与调试方便,支持多国语言,是C语言初学者的首选开发工具。1.4.3Dev-C++介绍Dev-C++工具具有代码编写、代码分析、代码编译和调试等功能,又具有体积小、易上手等特点,是适合C语言初学者使用的轻量级开发工具。尽管Dev-C++5.11在2016年已停止,第三方DevC++工具功能更强大,比如基于原版DevC++4.9的RedPandaDevC++6.7,增加了代码自动补全,并修复了一些DevC++的bug等,但是作为初学者,还是建议以原版学习为宜。本课选用官方最新的Dev-C++5.11作为开发环境1.4.4Dev-C++安装(p11-p13)(1)打开Dev-C++的官网下载地址/projects/orwelldevcpp/,进入软件下载页面,如图所示。单击图中的【Download】按钮,选择文件存放路径,开始下载软件安装包。

(2)下载完成后,开始安装软件。安装比较简单,双击软件安装包文件打开安装程序,将弹出“InstallerLanguage”对话框,用户可在该窗口选择语言。此处保持默认选项“English”。(3)单击步骤(2)中的【OK】按钮,进入“LicenseAgreement”窗口。该窗口用于展示许可证协议,如图所示。(4)单击步骤(3)中的【IAgree】按钮,接受许可证协议,进入“ChooseComponents”窗口,在该窗口可选择Dev-C++的组件。单击该窗口的下拉列表,选择【Full】,安装所有组件,如图所示。(5)单击步骤(4)中的【Next】按钮,进入“ChooseInstallLocation”窗口,设置Dev-C++安装路径,如图所示。可单击图中的【Browse】按钮自行选择安装路径,亦可使用默认安装路径。此处保持默认设置。(6)单击图步骤(5)中的【Install】按钮,开始安装Dev-C++。安装完成后的界面如图所示。如果步骤(6)中勾选了“RunDev-C++5.11”,那么单击【Finish】按钮后会弹出首次运行配置的对话框,可以为Dev-C++设置语言和主题,具体如图所示。Dev-C++编辑界面包含菜单栏、快捷按钮、项目管理区、代码编辑区、编译信息显示区5个部分。(1)菜单栏:Dev-C++软件、编译器、代码风格等设置。(2)快捷按钮:快捷按钮是使用Dev-C++的快捷方式,单击后执行相关功能。(3)项目管理区:管理建立项目的所有工程文件,可以查看函数、结构体。(4)代码编辑区:在编辑器中输入代码,每行都有对应的编号。(5)编译信息显示区:用于在程序编译过程中显示编程中的错误信息、查看资源文件、记录编译过程中的日志信息及显示调试信息。1.4.5Dev-C++使用(p13-p15)(1)新建文件。打开Dev-C++后,在菜单栏依次单击【文件】→【新建】→【源代码】,如图所示。

1.4.5Dev-C++使用(p13-p15)(2)编写程序代码,如图所示。

1.4.5Dev-C++使用(p13-p15)(3)保存文件。编写完成之后单击菜单中【文件】→【保存】选项,将会弹出路径选择窗口,在该窗口可为文件选择保存路径,并设置文件名与文件类型,如图所示。此处将文件保存在本地目录下,设置文件名为HelloWorld,文件类型为Csourcefiles(*.c)。设置完成后单击【保存】按钮,保存文件。

1.4.5Dev-C++使用(p13-p15)(4)编译运行程序。在菜单栏选择【运行】→【编译运行】来运行程序,或按快捷键【F11】运行程序。编译运行结果如上图所示。编译完成后,会弹出打印有程序运行结果的命令行窗口,如下图所示。

第二章数据类型、运算符与表达式

本章要点数据的描述规则数据的操作规则C语言的基本元素一、符号集(字符集)(1)大写字母:A~Z(2)小写字母a~z(3)阿拉伯数字:0~9(4)下划线:_(5)标点符号和运算符二、标识符用来标记常量、变量、函数及文件名字的字符序列。标识符的构成规则:(1)以字母(大小写皆可)或下划线开头(2)随后可跟若干个(包括0个)字母、数字、下划线如:xy3_imaxELSEX

(合法)

7xint#Nobadone(不合法)注意:C语言区分大小写,如sum和SUM是两个标识符。三、关键字(附录B)也称“保留字”,它是C语言中具有特定含义、专门用作语言特定成分的一类标识符。ANSI推荐的C语言的关键字是32个如:int、char、float、void等注意:所有的关键字都有固定的意义,不能用作其他。所有关键字都必须小写。如:else与ELSE代表不同含义

else是关键字,ELSE用户定义的标识符2.1C的数据类型C语言提供了以下一些数据类型。数据类型构造类型指针类型空类型(无值类型)void枚举类型enum数组类型结构类型

struct联合类型union

基本类型整型int字符型char实型(浮点型)单精度实型

float双精度实型

double

2.2常量与变量1、常量:在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型:整型100,125,-100,0实型3.14,0.125,-3.789字符型‘a’,‘b’,‘2’字符串“a”,“ab”,“1232”常量和符号常量2、符号常量:用一个标识符代表的一个常量。定义方法:#define标识符常量例2.1符号常量的使用

#definePRICE30

#include<stdio.h>

intmain()

{

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d\n",total);}运行结果:

total=300说明:如再用赋值语句给PRICE赋值是错的

PRICE=40;/*错误,不能给符号常量赋值*/说明:程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算变量其值是可以改变的量,它用标识符(变量名)来表示,在内存中占据一定的存储单元。变量名实际上是以一个名字代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。变量的定义方法

类型符标识符如:inti,j;charc1,c2;floatx,y;doublez;变量命名的规定:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例:sum,_total,month,Student_name,

lotus_1_2_3,BASIC,li_ling

M.D.John,¥123,3D64,a>b

注意:编译系统将大写字母和小写字母认为是两个不同的字符(习惯上,符号常量用大写)。建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。student_name->s_namestudent_num->s_num2.3整型数据整型常量即整常数。在C语言中,整常数可用以下三种形式表示:(1)十进制整数。

如:123,-456,4。(2)八进制整数。以0开头的数是八进制数。

如:0123表示八进制数123,等于十进制数83,(3)十六进制整数。以0x开头的数是16进制数。如:0x123,代表16进制数123,等于十进制数291。

整型常量的表示方法整型变量(1)整型数据在内存中的存放形式在内存中是以二进制的补码表示。如:inti;/*定义为整型变量*/i=10;/*给i赋以整数10*/补码:

一个正整数的补码和该数的原码(即该数的二进制形式)相同。如果数值是负的,求负数的补码方法是:将该数的绝对值的二进制形式,按位取反再加1。注意:十进制数10的二进制形式为1010,TurboC2.0和TurboC++3.0为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不相同的,VC++6.0则分配4个字节)。数值是以补码(complement)表示的。存储有符号整数时存储单元中的第一个二进制位(即最高位)用来代表数值符号。(2)整型变量的分类有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int)注意:括号表示其中的内容是可选的。例如:整数13在内存中实际存放的情况:(3)整型变量的定义:

C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如:inta,b;(指定变量a、b为整型)

unsignedshortc,d;

(指定变量c、d为无符号短整型)

longe,f;(指定变量e、f为长整型)例2.2整型变量的定义与使用#include<stdio.h>intmain()

{inta,b,c,d;/*指定a、b、c、d为整型变量*/

unsignedu;/*指定u为无符号整型变量*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf(”a+u=%d,b+u=%d\n”,c,d);

}运行结果:a+u=22,b+u=-14

说明:可以看到不同种类的整型数据可以进行算术运算.

0000000000001100a0000000000001010u0000000000010110a+u1111111111101000b0000000000001010u1111111111110010b+ub=-24先计算其绝对值24的二进制形式0000000000011000

按位取反再加1为11111111111010001111111111110001减1取反0000000000001110负数的绝对值14是负数-?整型常量的类型

(1)一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和longint型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是为长整型。可以将它赋值给一个longint型变量。(3)如果所用的C版本(如TurboC)分配给shortint与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此一个int型的常量同时也是一个shortint型常量,可以赋给int型或shortint型量。

(4)一个整常量后面加一个字母u或U,认为是unsignedint型,如12345u,在内存中按unsignedint规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。(5)在一个整常量后面加一个字母l或L,则认为是longint型常量。例如:123l,432L,0L用于函数调用中。2.4浮点型数据两种表示形式浮点型常量的表示方法小数指数0.1233e-3注意:字母e(或E)前后必须有数字,且e后面的指数必须为整数.1e3、1.8e-3、-123e-6e3、2.1e3.5、.e3、e

类型:缺省为double;后缀f或F,为float型;后缀l或L,为longdouble型。规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.

例如:123.456可以表示为:

123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3称为“规范化的指数形式”。浮点型变量(1)浮点型数据在内存中的存放形式一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。(2)浮点型变量的分类浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(longdouble)三类形式。单精度(float型):占4个字节,7位有效数字(3.4e-38~3.4e+38)双精度(double型):占8个字节,15~16位有效数字(1.7e-308~1.7e+308)

longdouble型:占10个字节,15~16位有效数字(3.4e-4932~1.1e+4932)(3)浮点型数据的舍入误差

#include<stdio.h>

intmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf(“a=%f,b=%f\n”,a,b);

}

运行结果:a=12345678848.000000,b=12345678868.000000说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数.若数据超过有效位,则被舍去,故可能产生误差。

2.5字符型数据

(1)用单引号包含的一个字符是字符型常量如:‘a’、‘A’、‘b’、‘*’、‘$’(2)转义字符:特殊的字符常量,都以“\”开头(代表一个字符)\n换行,移到下一行开头\0空值\t横向跳格(每8列为一制表位)\v纵向跳格\r回车,移到本行开头\a报警\b退格\f走纸换页\\反斜杠\’

输出单引号\dddddd表示1到3位八进制数字(字符的ASCII码)

如:‘\101’

代表字符‘A’\xhh

hh表示1到2位十六进制数字如:‘\x41’

代表字符‘A’字符常量输出格式控制输出字符例2.5转义字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

显示屏上的运行结果:fg例2.5转义字符的使用

#include<stdio.h>

intmain(){printf(“a\t\rf\tg\n″);

printf("h\ti\b\bjk\n″);

显示屏上的运行结果:fghjk例2.5转义字符的使用

#include<stdio.h>

intmain(){printf("abc\tde\rf\tg\n″);

printf("h\ti\b\bjk\n″);

显示屏上的运行结果:fgdehjk字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:

charc1,c2;unsignedcharc3,c4;

字符型变量的赋值方法:

c1=‘a’;c2=‘\101’;c3=0xff;c4=‘\377’;一个字符变量在内存中占一个字节。字符数据在内存中的存储形式及其使用方法(1)一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。abab

#include<stdio.h>intmain(){charcl,c2;c1='a';c2='b'printf("oc%c",cl,c2);c1=97;c2=98;printf("oc%c",cl,c2);}(2)字符数据与整型数据可以相互赋值(3)字符数据可以以字符形式输出,也可以用整型数形式输出。intmain(){inti;charc;i=‘a’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}等同于:i=97;c=‘a’;例2.6向字符变量赋以整数。

#include<stdio.h>

intmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

printf(“%d%d\n”,c1,c2);

}运行结果:ab

9798说明:在第4和第5行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:

c1=’a’;c2=’b’;因为’a’和’b’的ASCII码为97和98例2.7大小写字母的转换

#include<stdio.h>

intmain()

{charc1,c2;

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c”,c1,c2);

}运行结果:AB说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。字符’a’的存储形式

01100001intmain(){charc;c=‘\376’;printf(“%c,%d\n”,c,c);}八进制数376(十进制为254)ASCII码字符为:11111110unsignedcharc;

,-2,2541111110100000010字符串常量1、字符串常量是一对双引号括起来的字符序列.

合法的字符串常量:

“Howdoyoudo.”,“CHINA”,“a”

,“$123.45”

可以输出一个字符串,如

printf(“Howdoyoudo.”);‘a’是字符常量,“a”是字符串常量,二者不同。如:假设c被指定为字符变量:charc;c=’a’;c=“a”;c=“CHINA”;

结论:不能把一个字符串常量赋给一个字符变量。2、C规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以字符’\0’作为字符串结束标志。如:如果有一个字符串常量”CHINA”

,实际上在内存中是:CHINA\0

它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。2.6变量赋初值(1)C语言允许在定义变量的同时使变量初始化如:inta=3;//指定a为整型变量,初值为3

floatf=3.56;//指定f为浮点型变量,初 // 值为3.56charc=‘a’;//指定c为字符变量,初值为‘a’(2)可以使被定义的变量的一部分赋初值。如:inta,b,c=5;表示指定a、b、c为整型变量,但只对c初始化,c的初值为5(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;

表示a、b、c的初值都是3。

不能写成:inta=b=c=3;

2.7各类数值型数据间的混合运算

整型(包括int,short,long)、浮点型(包括float,double)等可以混合运算。例如:10+’a’+12.3-3.14*’x’是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。

2.8算术运算符和算术表达式C运算符(1)基本的算术运算符:+(加法运算符,或正值运算符。如:3+5、+3)-(减法运算符,或负值运算符。如:5-2、-3)*(乘法运算符。如:3*5,2*x,3*(a+b))/(除法运算符。如:5/3,(x+y)/(a+b))1)两个整数相除,其值为整数,如:5/3值为1,舍去小数部分;2)除数、被除数有一个为负值时,结果”向零取整”,如-5/3=-1;3)除数、被除数有一个为实数时,结果为double型(1)基本的算术运算符:%(模运算符,或称求余运算符,%两侧均应为整型数据,如:7%4的值为3)。-7%4,7%-4,-7%-4的值为多少?-3,3,-3符号由被除数决定(2)算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。例如:a*b/c-1.5+’a’3.14*r*rx+sqrt(0.25*y)/(abs(a+b)-3.6)

优先级在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。结合性算术运算符的结合方向为“自左至右”,即先左后右。(3)强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:(double)a将a转换成double类型(int)(x+y)将x+y的值转换成整型(float)(5%3)将5%3的值转换成float型注意:与(int)x+y不同例2.8强制类型转换。

#include<stdio.h>

intmain(){floatx;

inti;

x=3.6;

i=(int)x;/*不影响x单元的内容*/printf("x=%f,i=%d\n",x,i);

运行结果:x=3.600000,i=3说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。注意:x的类型没有发生改变。(4)自增、自减运算符作用是使变量的值增1或减1如:++i,--i(在使用i之前,先使i的值加(减)1)i++,i--(在使用i之后,使i的值加(减)1)i++与++i的区别:++i是先执行i=i+1后,再使用i的值;i++是先使用i的值后,再执行i=i+1。例2.9:

#include<stdio.h>intmain(){inti=0,j;j=i++;printf(“%d%d\n”,i,j);i=0;j=++i;printf(“%d%d\n”,i,j);}区分:j=i+1;j=++i;011注意:

(1)自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式。如:5++、--(a+b)不合法。(2)++和--的优先级高于算术运算符,结合方向是“自右至左”。如:-i++相当于-(i++)。(3)C语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。例如:不要写成i+++j的形式,而应写成

(i++)+j的形式2.9逗号运算符和逗号表达式逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”.

如:3+5,6+8

一般形式:

表达式1,表达式2求解过程:

1)求解表达式1

2)再求解表达式2

3)整个逗号表达式的值是表达式2的值。逗号表达式的值为14例:逗号表达式a=3*5,a*4分析:逗号运算符是所有运算符中级别最低的,因此应先求解a=3*5。a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。

一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式如:(a=3*5,a*4),a+5先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。逗号表达式的一般形式可以扩展为表达式1,表达式2,表达式3,……,表达式n它的值为表达式n的值。逗号运算符是所有运算符中级别最低的例:①x=(a=3,6*3)②x=a=3,6*a逗号表达式,包括一个赋值表达式和一个算术表达式,x的值为3,整个逗号表达式的值为18。

注意:并不是任何地方出现的逗号都是作为逗号运算符。

如:printf(“%d,%d,%d”,a,b,c);“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c);

“(a,b,c)”是一个逗号表达式,它的值等于c的值。例:#include<stdio.h>intmain(){inta=1;printf(“结果为:%d\n”,a=3*a,3*a);}结果为:3(a=3*a,3*a)结果为:92.10赋值表达式和赋值语句一、赋值运算符“=”用法:变量=表达式作用:将表达式的值赋给变量(常量、变量是表达式的特例)如:a=5;

ave=(a+b)/10;注意:与数学中的等式不同!二、复合的赋值运算符在赋值符“=”之前加上其他运算符,构成复合赋值运算符+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3三、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。形式:变量=表达式如:a=5、a=b=5(右结合)计算1)计算赋值运算符右侧“表达式”的值过程:2)将计算结果赋给左侧的变量

3)赋值表达式的值就是被赋值的变量的值例:a=b=c=5a=(b=10)/(c=2)a=5+(c=6)a+=a-=a*aa=(b=4)+(c=6)四、赋值结果与类型转换1、实型数据(单、双精度)赋给整型变量时,舍弃实数的小数部分。2、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。

例:#include<stdio.h>intmain(){inti;floatf;i=5.34;f=23;printf(“%d%f\n”,i,f);}523.0000003、长度相同的有符号与无符号整型数间,原样赋值(但数值有时会有变化)#include<stdio.h>intmain(){unsigneda;

intb=-1;a=b;

printf(“%d->%u\n”,b,a);a=65534u;b=a;

printf(“%d->%u\n”,b,a);}-1->65535-2->655344、char、int、long等类型的转换

1)“短”数据赋给“长”变量符号扩展:若最高位为1(负数),则变量高字节补1;反之,补0。#include<stdio.h>intmain(){charc;inti;c=43;i=c;

printf(“i=%d\n”,i);c=‘\376’;i=c;

printf(“i=%d\n”,i);}2)“长”数据赋给“短”变量只将数据的低字节位原封不动送到变量中(数据有可能有差错)#include<stdio.h>intmain(){inta;longb=6324232L;a=b;

printf(“a=%d,b=%ld\n”,a,b);}a=-32760,b=6324232五、赋值语句

即赋值表达式后加“;”构成。

要区分赋值表达式与赋值语句如:if((a=b)>0)t=a;

表达式语句注意:赋值表达式可包含在其它表达式之中,而赋值语句不行;赋值语句只能作为一条单独的语句,或放在复合语句中。第三章最简单的C程序设计顺序程序设计内容提要:C语句概述

基本的数据输入/输出函数简单的C程序设计著名计算机科学家沃思提出:数据结构+算法=程序描述数据的类型、组织形式描述对数据的操作步骤3.1算法的概念

做事情都有---方法、步骤(顺序)---决定事情成败1、算法:计算机求解某一问题而采用的具体方法、步骤2、两大类计算机算法:数值运算算法、非数值运算算法(求数值解、成熟)(事务管理、广泛)3、算法的特性:有穷性、确定性、有效性等4、算法描述:描述算法的方法有多种归纳为二大类:①文字②图形(符号)3.2算法的描述方法常用的算法描述方法:(1)带序号的自然语言描述易懂却不直观,不严格(2)流程图:灵活、自由、形象、直观,可表示任何算法输入/输出处理判断起止连接点流程线(3)N-S图(盒图):完全去掉了带箭头的流程线,算法的所有处理步骤都写在一个大矩形框(表示简单、符合结构化思想)(4)伪代码:用介于自然语言与计算机语言之间的文字及符号来描述算法(方便、易懂、便于向计算机语言过渡)例1:计算S=,写出其算法。自然语言描述:流程图描述:N-S图描述:伪代码描述:3.3结构化程序设计方法一、结构化程序的三种基本结构

1966年提出三种基本结构,用这三种基本结构作为表示一种良好算法的基本单元:顺序、选择、循环任何复杂的算法都是由这三种基本结构按一定规律组成。(1)顺序结构ABABa=3;b=4;c=a+b;操作步骤按书写顺序执行(2)选择结构PABTFABTFPif(x!=0)y=sin(x)/x;elsey=1;

(3)循环结构根据条件P决定是否重复执行循环体中的操作。sum=0;i=1;while(i<=100){sum+=i;i++;}sum=0;i=1;do{sum+=i;i++;}while(i<=100);二、三种基本结构的共同特点

(1)单入口单出口(2)结构内的每一部分都有机会被执行(3)不存在“死循环”三、结构化程序设计的优点用三种基本结构组成的程序是结构化程序优点:易编、易读、易懂、易维护强调程序设计风格和程序结构的规范化核心思想:自顶向下、逐步细化,模块化设计,结构化编码举例:张丘建《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?(体会编程步骤)分析:cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100

其中:0≤cocks≤190≤hens≤330≤chicks≤100

思路:依次取cocks的值域中的值,然后求其余两数,看是否合乎题意算法描述:cocks=0当cocks≤19时

{找满足题意hens,chicks数

cocks加1}cocks=0当cocks≤19时{hens=0

当hens≤33时

{chicks=100-cocks-hens

如果(5*cocks+3*hens+chicks/3=100)则输出hens加1}cocks加1}cocks=0

当cocks≤19时

{hens=0

当hens≤33时

{找满足题意的chicks数

hens加1}cocks加1}细化细化用计算机语言写出程序

intmain(){intcocks=0,hens,chicks;while(cocks<=19){hens=0;while(hens<=33){chicks=100-cocks-hens;if(5.0*cocks+3.0*hens+chicks/3.0==100)printf(“%d%d%d\n”,cocks,hens,chicks);hens++;}cocks++;}}025752077187813801181683124843.4C语句的概述一、语句用来对数据进行加工(完成操作任务),是构成程序的基本单位,通常一个C程序由若干个函数(系统、用户提供)组成。每一函数由若干条语句组成。每条语句总是以“;”结束。二、C语句的分类(简单语句、复合语句、空语句)(一)简单语句1)表达式语句:由一个表达式后跟“;”组成如:a=3(赋值表达式)a=3;(赋值语句)i++i++;2)函数调用语句:函数调用表达式加一个“;”如:printf(“Hello,world!\n”);3)结构控制语句:控制程序流程选择语句:if…else…switch

循环语句:forwhiledo…while…

转向语句:continuebreakreturngoto(二)复合语句:将一组语句括在一对{}中如:while(i<100){sum+=i;i++;}

说明:

1)复合语句的{}之后不能有“;”

2)复合语句中可以是简单语句、复合语句、空语句(三)空语句:;/*仅有一个;*/

空语句什么也不做。有时用作被转向点,或为循环语句提供空体。如:for(i=0;i<=10;i++);3.5字符数据的输入输出引言:C语言没有输入/输出语句,I/O操作通过调用系统函数实现。在程序开头要有:#include“stdio.h”

或#include<stdio.h>默认的输入设备——键盘默认的输出设备——显示器一、字符输出函数putchar()形式:putchar(c)作用:向显示器上输出一个字符(将c的值输出到显示器上,c可以是字符型和整型的常量、变量、表达式)#include<stdio.h>intmain(){charc1,c2;c1=‘b’;c2=98;putchar(c1);putchar(c2);putchar(‘b’);putchar(98);}#include<stdio.h>intmain(){putchar(‘\101’);putchar(‘\n’);putchar(‘\\’);}二、字符输入函数getchar()形式:getchar()作用:从键盘缓冲区读入一个字符注意:1)当输入多个字符时,多余字符作废

(按回车后才开始接收字符)例:#include<stdio.h>intmain(){intc;printf(“Enteracharacter:”);c=getchar();printf(“%c:%d\n”,c,c);}Enteracharacter:aa:972)用getchar()得到的字符可以赋给字符型变量、整型变量,或作为表达式的一部分。如:c=getchar()+32;putchar(c);

若输入是:A

则输出是:a例:#include<stdio.h>intmain(){putchar(getchar());}aa3.6格式输入输出一、格式输出函数printf作用:向终端输出若干个类型任意的数据。形式:printf(格式控制符,输出项列表)双引号括起来的字符串要输出的内容(常量、变量、表达式等)格式控制字符串:

i=%3df=%5.1f%5.1f引导符宽度小数位数精度类型符#include<stdio.h>intmain(){inti=5;floatf=32.345;printf(“i=%3df=%5.1f\n”,i,f);printf(“End.\n”);}i=5f=32.3End.格式控制符完整的格式:

%-Om.nl/h格式字符说明:1、格式字符:指定输出项的数据类型和输出的格式

1)d——十进制整数

2)o——无符号八进制数

3)x——无符号十六进制数

4)u——不带符号的十进制整数#include<stdio.h>intmain(){unsignedinta=65535;intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“b=%d,%o,%x,%u\n”,b,b,b,b);}a=-1,177777,ffff,65535b=-2,177776,fffe,65534有符号的整型数b可以用%u输出无符号的整型数a可以用%d输出5)c输出一字符6)s输出一字符串7)e以指数的形式输出实型数8)f以小数的形式输出实型数9)%输出%#include<stdio.h>intmain(){floatt;charb=‘a’;inti=97;t=28.333;printf(“%f\n”,t);printf(“%c,%d\n”,b,b);printf(“%c,%d\n”,i,i);printf(“%s,%%\n”,“china”);}28.333000a,97a,97china,%

%-Om.nl/h格式字符2、长度修正符

l:对整型指长整型long

例:%ld,%lx,%lo,%lu

对实型指双精度double

例:%lf3、域宽及精度的描述

m:域宽,即对应的输出项在输出设备上所占的字符数若实际数据宽度>m,按实际数据宽度输出若实际数据宽度<m,左边补空

n:精度,说明输出的实型数的小数位数几点说明:编译程序只是检查printf函数的调用形式,不分析格式控制字符串,如果格式字符与输出项的类型不匹配,不进行类型转换;格式字符要用小写字母;格式控制字符串中可以包含转义字符;格式控制字符串中的普通字符则原样输出;输出项的参数除了常数、变量外还可以是表达式、函数调用如:printf(“max=%d\ti=%d\n”,imax(a,b),i++);#include<stdio.h>intmain(){inti=321;floatf=123.456;printf(“%5d:”,i);

printf(“%5.2f\n”,i);

printf(“%5d:”,f);printf(“%5.2f\n”,f);}321:403022178.210:123.463.6格式输入输出二、格式输入函数scanf作用:按格式控制符的要求将数据从终端传送到变量地址所指定的内存空间形式:scanf(格式控制符,变量地址列表)1、变量地址:通过对变量名“求地址”运算得到形式:&变量名#include<stdio.h>intmain(){inta;floatb;scanf(“%d%f”,&a,&b);printf(“%d,%f\n”,a,b);}

&a得到2字节空间的首地址&b得到4字节空间的首地址2、格式控制符(1)格式说明项例:#include<stdio.h>intmain(){inta,b,c,d;scanf(“%d%d”,&a,&b);printf(“%d,%d\n”,a,b);scanf(“%3d%3d”,&c,&d);printf(“%d,%d\n”,c,d);}123412,34111222111,222(2)输入数据的分隔采用隐含的分隔符:空格、回车键、Tab键例:#include<stdio.h>intmain(){inta;floatb,c;printf(“inputa,b,c:”);scanf(“%d%f%f”,&a,&b,&c);printf(“a=%d,b=%f,c=%f\n”,a,b,c);}inputa,b,c:1234a=12,b=3.000000,c=4.000000根据格式中指定的域宽分隔数据项(不提倡)采用用户指定的分隔符例:#include<stdio.h>intmain(){inta;floatb,c;scanf(“%2d%3f%2f”,&a,&b,&c);printf(“a=%d,b=%f,c=%f\n”,a,b,c);}scanf(“%d,%f,%f”,&a,&b,&c);12,3,4a=12,b=3.000000,c=4.000000scanf(“a=%d,b=%f,c=%f”,&a,&b,&c);a=12,b=3,c=4a=12,b=3.000000,c=4.000000注意:scanf中对unsigned型数据用u,o,x说明符输入输入数据时不能规定数据的精度如:scanf(“%4.2f”,&a);在“格式控制”字符串中,若有格式说明以外的其他字符,输入时应照原样输入如:scanf(“a=%d,b=%f”,&a,&b);

输入:a=123,b=45.678%c一次接收一个字符,无需单引号,空格字符是有效字符。思考:scanf(“Enteranumber?%d”,&n);的输入格式?3.7程序举例例:输入一个小写字母,打印该字母及其大写字母,以及它们的后续字母分析:大写字母的ASCII码比对应的小写字母小32

后续字母的ASCII码比该字母大1。#include<stdio.h>intmain(){charc;printf(“请输入任意一个小写字符:”);

c=getchar();printf(“%c,%c\n”,c,c+1);printf(“%c,%c\n”,c-32,c-31);}请输入任意一个小写字符:xx,yX,Y能否通过其他方法输入、输出?#include<stdio.h>intmain(){charc;printf(“请输入任意一个小写字符:”);

c=getchar();printf(“%c,%c\n”,c,c+1);printf(“%c,%c\n”,c-32,c-31);}可用putchar函数代替:putchar(c);putchar(c+1);若输入一个非字母字符,输出怎样?例:求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac>0。I处理O#include<stdio.h>

#include<math.h>

intmain()

{floata,b,c,disc,x1,x2,p,q;

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

disc=b*b-4*a*c;

p=-b/(2*a);

q=sqrt(disc)/(2*a);

x1=p+q;x2=p-q;

printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);

}运行情况:

a=1,b=3,c=2↙

x1=-1.00

x2=-2.00习题3-6#definePI3.14#include<stdio.h>intmain(){inth; floatr,l,s,s1,v1,v2; printf("请输入圆半径和圆柱高:\n"); scanf("%f,%d",&r,&h); l=2*PI*r; s=PI*r*r; s1=4*PI*r*r; v1=4*PI*r*r*r/3; v2=s*h; printf("圆周长=%.2f\n圆面积=%.2f\n圆球表面积=%.2f\n圆球体积=%.2f\n圆柱体体积=%.2f\n",l,s,s1,v1,v2);}鸡兔同笼已知鸡兔总头数为h,总脚数为f,求鸡兔各多少只?(要求通过输入语句给h和f赋值,并且在输入输出时加上必要的提示语句)例如:请输入总头数h,总脚数f:2,6鸡:1,兔:1#incl

温馨提示

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

评论

0/150

提交评论