C程序设计第1章_第1页
C程序设计第1章_第2页
C程序设计第1章_第3页
C程序设计第1章_第4页
C程序设计第1章_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

会计学1C程序设计第1章常量标识符为什么一个常量多次用到方便修改常量如何声明枚举常量表中的标识符就是常量标识符#define标识符常量如何使用

#defineSPEED55

第1页/共65页#definepai3.14#defineR10voidmain(){ floatx,y;x=2*pai*R;y=pai*R*R}#definepai3.14#defineR10voidmain(){ floatx,y;x=2*3.14*10;y=3.14*10*10}第2页/共65页#definepai3.14;#defineR10;voidmain(){ floatx,y;x=2*pai*R;y=pai*R*R}#definepai3.14;#defineR10;voidmain(){ floatx,y;x=2*3.14;*10;;y=3.14;*10;*10;}第3页/共65页变量(variable)相对于常量,变量是程序执行期间值可变的数据对象两个方面变量值:程序运行某一时刻,变量所具有的值变量属性:名字数据类型作用域存储空间存储地址等第4页/共65页

编译程序在把高级语言程序翻译成机器语言时给每个变量都分配一块适当的存储空间,以便随时保存变量的值。这块存储区就是变量的存储区变量的地址就是这块存储区的首地址变量的值就是这块存储区中现行保存的数据。变量v被分配在内存地址为0F000开始的存储区域,当前值为5。5V0F000:变量地址变量名变量值变量的存储区第5页/共65页变量声明声明变量的意义:引进新变量规定所引变量的属性语法 <变量声明>→<类型><变量项表>; <变量项表>→<变量项> ▌<变量项>,<变量项表> <变量项>→<标识符> ▌<标识符>=<初值>第6页/共65页不考虑初值的一般形式

Tid,id,...,id;变量类型变量名字变量的作用域例子

inti,j,k; charc; intt; floatamount,total; boolflag; enum{red,blue,green}color;第7页/共65页voidmain(){ intx,y;

z=x*2;charz;x=x+y;z=x+y;

w=z+x;}第8页/共65页变量出现形态声明出现赋值出现引用出现

intn,x;n=1;n=3;n=n*5+7x=n;n:

编译程序会给该变量分配一块存储空间。但是从程序开始执行的时刻一直到给该变量赋值之前该变量是没有值的,这时称该变量为“值无定义的”

为变量赋以一个它值域之内的(即所属类型的)一个数据。一旦为变量赋值,该变量就变成了“值有定义的”

引用性出现分成引用变量当前值一般在表达式中变量必须是“值有定义的”不会改变变量的值引用变量本身多出现在参数结合中可是“值无定义的”可能会改变变量的值

1322x:22第9页/共65页变量地址变量地址 变量在内存中的所在位置,即内存地址。求地址 将单目运算符“&”,缀在变量前, 求相应变量地址。例子被分配在内存地址为0F000开始的存储区域的变量V&V的值就是0F000,也称为V的指针第10页/共65页变量初始化形式

id=初值例子

inti=0,j=1,k=100*2,m=k*i*j; charc=‘A’; enum{red,blue,green}color=red;

变量在声明时被赋以初值,则在程序开始运行时,它便取得了相应值,它是值有定义的。第11页/共65页enumset{a,b,c,d}var_set;enumset{a,b,c,d}var_set=d;enumset{a,b,c,d};enumsetvar_set=d;enum{a,b,c,d}var_set=d;第12页/共65页变量使用注意事项程序中使用的一切变量都必须声明。在同一作用域内,任何两个变量不许重名,也不许与其它类标识符重名。从程序的静态行文顺序看,变量的声明必须出现在所有使用之前。从程序的静态行文顺序看,在变量声明中给变量赋初值处,相应表达式必须是可计算的。从程序的动态执行顺序看,为变量赋值的出现必须在所有使用值之前。第13页/共65页表达式表达式(expression)是C程序完成各类运算的主要部分,由运算符和运算分量组成。语法 <表达式>→<基本表达式> ▌<后缀表达式>▌<一元表达式>▌<二元表达式>▌<条件表达式> ▌<逻辑表达式>▌<赋值表达式> ▌<顺序表达式> <基本表达式>→<标识符> ▌<字面常量> ▌(<表达式>)

第14页/共65页基本表达式是C表达式的最底层,包括:标识符字面常量括号表达式标识符包括变量标识符和常量标识符,它们的类型由相应声明给出,当表达式计算时,变量应该是值有定义的。字面常量括号括表达式第15页/共65页 3*6u>0r=(x+y)*5<=(r-s)/83、6、u、r、x、y、5、s、8都是基本表达式经与运算符组合后的x+y、r-s是表达式;用括号括上的表达式(x+y)、(r-s)又变成基本表达式最终若干基本表达式与运算符组合得到的

r=(x+y)*5<=(r-s)/8

仍是表达式。第16页/共65页运算符优先级复合字

面值(类型名){初始化列表}自增自减++--间接选择->直接选择.函数调用F(…)从左到右后缀下标a[k]16无基本表达式简单记号标识符、字面常量、(…)优先级结合关系类别运算符记号第17页/共65页优先级结合关系类别运算符记号14类型转换(类型名)间接访问*地址&算术负、正-+逻辑非!按位取反~一元长度sizeof15从右到左前缀自增、自减++--第18页/共65页4逻辑或||5逻辑与&&6按位或|7按位异或^8按位与&9判等运算==!=10关系运算<><=>=11左移、右移<<>>12算术加、减+-13从左到右二元算术乘、除、求余数*/%1从左到右顺序表达式,2二元赋值=+=-=*=/=%=<<=>>=&=^=|=3从右到左三元条件表达式?:第19页/共65页C表达式与通常数学表达式的书写区别:所有字符必须写在一条水平线上。不允许出现上、下角标、分数线等。sqrt(x*y)x*x*x*x*x(x+y)/5fabs(x*y)第20页/共65页a乘baba·ba×ba*b除了下标使用方括号以外,所有括号必须用圆括号。

{a*[b+c*(a+b)]}

(a*(b+c*(a+b)))第21页/共65页数学中连续的关系运算,

a<y<b

应该写成

(a<y)&&(y<b)由两个或两个以上字符构成的运算符其各字符中间不许夹有空格等间隔符。

&&||>=<=++==第22页/共65页适当加括号是好习惯

x>y||y==2&&y<z||x+y>2

(x>y)||(y==2)&&(y<z)||(x+y>2)((x>y)||(y==2))&&((y<z)||(x+y>2))第23页/共65页表达式计算规则括号内的表达式先计算运算符分16个优先级,不同级运算符相邻,先计算优先级高的运算同级运算符相邻,按结合律的规定从左向右或从右向左进行计算二元运算符和三元运算符的各个运算分量的计算次序是依赖于实现的。第24页/共65页intx=3,y=4,r=1,s=9;r=(x+y)*5<=(r–s)/8

735-800-1第25页/共65页#includestdio.h /*1*/intx,y; /*2*/intf(intz){ /*3*/x=x+1; /*4*/return(z*z); /*5*/} /*6*/voidmain() /*7*/x=0; /*8*/printf(“%d\n”,x+f(2));/*9*/} /*10*/计算顺序从左至右 结果为4从右至左 结果为5第26页/共65页

设u=20、v=30、w=40、x=20、y=50则w==0||u+20>v||x<y||v+w/3>x false||truex<y&&w==0&&v+w/3>xtrue&&false第27页/共65页语句(statement)程序的一个侧面是描述对数据的操作,操作由一个个动作组成。在程序设计语言中,表示动作的是语句,语句的执行——执行相关动作。第28页/共65页语句分类空语句表达式语句返回语句break语句continue语句goto语句复合语句

if语句分支语句

switch语句

do语句重复性语句while语句

for语句简单语句结构语句语句第29页/共65页表达式语句语法<表达式语句>→<表达式>;例子3+5;b=a*c-3>x+y&&c+d<0;第30页/共65页赋值语句一般形式

v=e;v是一个左值(现在看就是一个变量),作为赋值运算符左端的运算分量。=是赋值运算符,由一个赋值号组成。e是一个表达式,作为赋值运算符右端的运算分量,e能计算出一个值。第31页/共65页 days=2+5; 执行结果是将值7赋给变量days。若days原来是值无定义的

现在它变成值有定义的,并取值7;若days原来是值有定义的,

则不论days原来值是什么,都将被7所取代days仍是值有定义的,值是7。最后整个表达式值也为7。第32页/共65页在赋值表达式中,赋值运算符“=”右端是计算值的表达式,左端回答“该值交给什么对象”因此下述语句都是正确的。

firstnumber=1;circumference=2*pi*radius

甚至数学上显然不成立的,也是正确的。

nextnumber=nextnumber+1

其执行结果是将变量nextnumber的值加1,得到一个新值,再送入变量nextnumber中去。第33页/共65页下述形式是错误的,因为左端不是变量(左值) 1=firstnumberlength*width=area第34页/共65页

例3-1设v1,v2,v是同一类型的三个变

量,且v1,v2都是值有定义的,则下

述语句列将使v1与v2的值互相交换

v=v1;v1=v2;v2=v;♠v1:♣v2:♠v:♣♠第35页/共65页

例3-2做一个长50cm,宽30cm,面积

500cm2

的各边等宽矩形的木框,计

算该木框多宽。x5003050

area=2(length*x+(width-2x)*x)即:4x*x-2(length+width)x+area=04x*x-2(length+width)x+500=0第36页/共65页计算x1计算b计算x2输出x1,x2计算△开始结束

#include"stdio.h"#include"math.h"

#definelength50.0#definewidth30.0#definearea500.0voidmain(){floatx1,x2,b,d;b=-2.0*(length+width);d=sqrt(b*b-4.0*4.0*area);x1=(-b+d)/(2*4);x2=(-b-d)/(2*4);printf("x1=%.2fx2=%.2f\n",x1,x2);}该程序运行后将输出:X1=36.58X2=3.42第37页/共65页左值实质是内存某个存储区的地址通俗的讲,左值是允许在赋值运算符左端出现的表达式。最基本的左值无字符串型常量无*e无e.名称e应为左值e->名称e应为左值(e)无e[k]应为变量名标识符附加条件表达式第38页/共65页++和--v0–1一元--vv0v0–1后缀v--v0+1一元++vv0v0+1后缀v++运算后表达式值运算后v的值类别表达式Eg:(1)intp=1,q;(2)intp=1,q;q=p++;q=++p;→q=1;p=2→q=2;p=2第39页/共65页类型转换为什么要进行类型转换对C而言,各种不同类型及其数据是有区别的C对参与运算的运算分量类型 在参数结合时对参数的类型都有一定的限制或进行一些必要的转换voidmain(){boolx=true,y=true,z=true; intw=x+y+z; boolu=x+y+z;}第40页/共65页隐式类型转换对象各种浮点类型各种整数类型转换的原因每一类型数据存储长度,表示形式不同第41页/共65页隐式转换规则单目运算(一元运算、后缀运算)转换规则所有浮点类型不转换长度大于int类型的整数类型不转换长度小于int类型的带符号整数类型转换成int类型长度小于int类型的无符号整数类型值可以用int类型表示,转换成int类型值不能用int类型表示,转换成unsignedint类型第42页/共65页双目运算和三目运算向类型高的运算分量转换把短类型转换成长类型把整数类型转换成浮点类型把有符号类型转换成无符号类型第43页/共65页longdouble↑double↑float↑unsignedlonglong↑longlong↑unsignedlong↑long↑unsignedint←unsignedchar、unsignedshort↑int←char、short把短类型转换成长类型把整数类型转换成浮点类型把有符号类型转换成无符号类型各占用多少字节?第44页/共65页强制类型转换形式 (类型名)例子

(char)(‘A’+’0’)结果为char类型小写的’q’ (int)5.2/2结果为int类型的2 (float)5/25/(float)2结果为float类型的2.5注意类型名必须用括号括上,该运算符就是这种形式;用括号把它的运算分量括上是一种好的习惯(char)(‘A’+’0’)结果为char类型小写的’q’(char)‘A’+’0’结果为int类型的113。第45页/共65页赋值运算过程计算赋值运算符右端表达式e的值若e与v赋值兼容,把e的值按赋值转换规则转换成赋值运算符左端v的类型把转换后的值送入v中例子

floatv;floatv=3.0; inti=3;inti; v=i+3;i=v+3;第46页/共65页赋值兼容 v=e中要求e的类型与v的类型兼容null指针常量任何类型void*类型T的指针T的指针void*类型T’

的指针,其中T’

与T兼容T的指针兼容的联合体类型联合体类型兼容的结构体类型结构体类型算术类型算术类型右端操作数类型左端操作数类型第47页/共65页算术赋值转换规则适应v的长度(精度)把e的值转换成v的类型浮点类型浮点类型把e的值直接转换成v的浮点类型,送入v中。整数类型浮点类型把e的值截尾取整,转换成整数类型;在按照v和e都是整数类型的规则进行转换。浮点类型整数类型适应v的长度,按补码方式直接转换e的值为v类型。若v的长度>e的长度,则e扩展到v的长度若v的长度<e的长度,从e的尾部截取合适的长度数据,保持数值e的符号,送入v中整数类型整数类型转换规则e的类型v的类型第48页/共65页输入/输出(I/O)输入 把数据从外部设备(磁盘、键盘、磁带、传感器、…)上读入计算机内。输出 指把计算机内部的数据送到外部设备(磁盘、显示器、打印机、…).C语言中的处理方式一切外部设备全部定义为文件C的I/O全部是针对文件的通过标准函数库中若干标准函数实现I/O。第49页/共65页程序文件分类头文件(.h)代码文件(.cpp或.c)

标准库函数#include命令意义将源文件包含到当前源程序文件中形式#include<文件名>#include“文件名”标准I/O函数头文件stdio.h 任何C程序使用I/O函数,必须引用该标准头文件:#include<stdio.h>第50页/共65页单个字符输入输入函数getchar()从标准输入设备(键盘)上读入一个字符,作为函数值使用

charch;

ch=getchar();读入一个字符送入变量ch中第51页/共65页单个字符输出输出函数putchar(int型表达式)int型表达式计算出的值转换成字符类型值输出到标准输出设备(显示器)上。函数值如果正确,输出的int型整数作为函数值如果错误,则EOF(-1)作为函数值使用charch=‘c’;putchar(ch+3);第52页/共65页格式输入函数形式

scanf(<格式控制>,<输入列表>)意义 其操作是从标准输入设备上读入一系列数据,按格式控制的要求进行转换并送入输入列表所列的诸变量中函数值输入的数据个数如果输入操作正确EOF否则第53页/共65页输入列表&v1,&v2,&v3,…,&vn格式控制 含有各种以百分号开始的格式控制符的常量字符串如下是一个格式控制:“%d%c%f%d”“%...d”第54页/共65页%g%e%f(float)以小数或指数形式浮点数%s(series)字符串%c(char)单个字符%u(undesigned)无符号10进制整数%d(designed)带符号10进制整数整数格式控制符输入要求输入数据类型第55页/共65页设i为

int型变量、ch为char型变量、

v为float型变量、k为int型变量

scanf(“%d%c%f%d”,&i,&ch,&v,&k)

从键盘上输入数据

1234□123e+2□987↙

变量i得到整数数据1234

变量ch得到字符型数据空格

v得到浮点型数据12300 k得到整数数据987第56页/共65页格式输出形式

printf(<格式控制>,<输出列表>)意义 其操作是按照格式控制的要求,把输出列表上的数据转换成字符串,送入标准输出设备上输出。函数值输出的字符个数如果输出操作正确;EOF否则。第57页/共65页输出列表e1,e2,e3,…,en格式控制以字符形式输出一个字符:c1%cc%-mu%mu以无符号10进制形式输出整数字段宽度m不应小于数据长度%uu%-md%md以带符号10进制形式输出整数(正数不输出符号)M为字段宽度,表示相应输出段所占字符个数%dd说明N省缺值m省缺值使用形式格式符“-”表示

温馨提示

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

评论

0/150

提交评论