




已阅读5页,还剩446页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C程序设计,考核方式:闭卷笔试+上机,期末笔试成绩占70%,上机与作业共占30%。,答疑时间:周三下午16:0017:30,答疑地点:机械学院508室,本课程教学安排,祝爱萍:办公室:机械学院508室电话,第一章C语言概述第二章数据类型、运算符与表达式第三章最简单的C程序设计第四章逻辑运算和判断选取控制第五章循环控制第六章数组第七章函数第八章C的指针第九章C的文件,目录,C语言程序设计课程简介,C语言是当今使用最广泛的高级语言,是操作系统、编译系统等大型复杂系统的首选语言。实践证明,用该语言编写的程序,灵活、方便、简洁、高效、数据结构丰富、功能齐全。C语言自问世以来,很快就流行于全世界,并为各种规模的通用计算机所必备。同时,C语言以其灵活方便的特点,成为培养学生计算机语言思维,了解计算机编程思想的最佳语言,它已被当今国内外众多主要高校列为各理工科专业必修课程。,第一章C语言概述,【学习目标】通过本章的学习,学生应该能够:掌握C语言的主要特点、C语言程序的结构以及C程序的执行过程和C语言的上机步骤。,本章作业:P15习题5,7,重点和难点是:C语言程序的结构以及C程序的上机方法。,解决方法:课堂演示教学。,课外指导:指导学生上机练习,熟悉C程序的使用环境。,教学效果检测方法:观测学生上机操作的熟练程度。,一、C语言的特点:二、简单的C程序介绍:三、C程序的执行过程:四、C语言的上机步骤:,本章主要内容:,C语言的特点:,1.语言简洁紧凑,使用方便灵活。C语言一共只有32个关键字,9种控制语句,且书写形式自由,编写的源程序短,输入程序时工作量小。,3.数据结构丰富(链表,树,栈等),data类型也较多,整型,实型,字符型,逻辑型,数组型,指针型,结构体类型,公用体类型等,有可实现现代化语言的各种结构。,2.共有34种运算符,具有较强的运算功能。,C语言的特点:,4.C语言编制的程序可以实现程序的模块化,符合现代编程要求。,6.既有高级语言的特点(可移植性好),又有低级语言的许多功能(能对硬件操作)。,5.C语法限制不严,程序设计自由度大。如整型量,字符量及逻辑型变量等可以通用,但对程序设计员的要求高些。,简单的C程序介绍,main()/*主函数*/inta,c;/*声明部分,定义变量*/a=9;c=a*a+6;printf(“%dn”,c);/*输出c的值*/,例1:,简单的C程序介绍,main()/*主函数*/inta,b,c;/*声明部分,定义变量*/scanf(%d,%d,/*输出c的值*/,例2:,intmax(intx,inty)/*定义max函数,函数值为整型,形式参数x,y为整型*/intz;/*max函数中的声明部分,定义本函数中用到的变量z为整型*/if(xy)z=x;elsez=y;return(z);/*将z的值返回,通过max带回调用处*/,简单的C程序介绍,1.C程序由函数构成,一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数。,3.C程序书写格式自由,一行内可写几个语句,一个语句也可分写在多行,且不必写行号。,2.main函数可放在C源程序的任何位置,都表示该程序从这里开始执行。,简单的C程序介绍,4.每个C语句最后必须有一个分号(包括最后一个语句在内)。,7.在C语言中,大小写字母是不通用的,C语言的保留字必须要使用小写。,6.可在语句之后用符号/*/对C程序作注释,以增加程序的可读性,/与*之间不能有空格。,5.C语言无in/out语句,in/out由scanf、printf等其它库函数完成。,例1、指出下列程序中的几处错误main()INTsum;/*computeresultsum=25+37-19;/*displayResult*/printf(“theansweris%dn”,Sum),简单的C程序介绍,int,*/,sum;,*/,例2、指出下面程序的输出结果main()intanswer,result;answer=100;result=answer-100;printf(“theresultis%dn”,result+5);,简单的C程序介绍,输出结果:,theresultis5,C程序的执行过程,源程序:用户用C语言编制的原始程序,其后缀一般定为.C。编译程序:也是一种程序,用于分析由特定计算机语言开发的程序,然后把此程序翻译成在特定计算机中执行的适当形式。操作系统:是一种程序,它控制计算机系统的整个操作,所有的I/O通道操作都要通过操作系统来实现,操作系统还要控制计算机系统的资源和程序的执行,UNIX操作系统是目前最常用的操作系统之一,主要用C语言编写,很容易移植到不同的计算机系统上。,C程序的执行过程,注意:编译只能发现语法错误,不能发现算法错误。,C语言的上机步骤,例1:编写一个C程序,在屏幕上输出以下信息:*Verygood!*,main()printf(“*n”);printf(“*Verygood!*n”);printf(“*n”);,20,P15:5,7,本章上机练习题:,第二章数据类型、运算符与表达式,【学习目标】通过本章的学习,学生应该能够:熟悉C语言的数据类型和常量、变量的定义方法;掌握C语言的各种运算符和它们的优先级,以及表达式的构成规则。,重点和难点是:数据类型、运算符、赋值表达式、逗号表达式。,解决方法:多结合实例教学。,课外指导:结合学生上机练习,适当多布置习题。,教学效果检测方法:通过给学生答疑和质疑,观测学生对本章重点和难点内容掌握的程度。,2.1C的数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据,本章主要内容:,2.6变量的赋值2.7各类数值型数据之间的转换2.8算术运算符和算术表达式2.9赋值运算符和赋值表达式2.10逗号运算符与逗号表达式,本章主要内容:,25,什么是数据类型?,26,所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。,C的数据类型,常量与变量,常量:在程序运行中,其值不可能被改变的量称为常量。如任何数字值、单个字符或字符串及转义符均为常量。,一、常量与符号常量,直接常量(字面常量):12,-44.6,a,Hello!”,n符号常量:用一个标识符代表一个常量。,常量与变量,类型:常见的常量类型有:int,char,float(double);字符常量与转义符要用单引号引起来;字符串要用双引号括起来。,符号常量:用标识符代表的一个常量,此标识符必须先定义后使用,定义格式为:#definePRICE30(宏定义命令),常量与变量,宏定义#define的作用域由定义的起始位置至宏定义解除(#undef标识符)处或本程序末尾。,注:#define为宏定义命令,表示用标识符(又称符号)PRICE来代表常量30。,宏定义命令#define必须写在函数的最前面,且此句之后不带分号。,常量与变量,习惯上符号常量用大写,变量用小写,以示区别。,在宏定义的作用域内,该符号(标识符)不能再被重新赋值。,符号常量的定义,格式:#define常量名字面常量举例:#definePRICE100#definePI3.14#defineC1a,习惯上常量名用大写,变量名用小写。,符号常量的定义放在函数外面。,习惯上常量名用大写,变量名用小写。,二、变量,常量与变量,定义:程序执行过程中其值可以被改变的量称为变量。,变量的定义:C语言中所有变量都必须先定义后使用。,标识符:C语言中用来标识变量名,函数名,数组名,类型名,文件名的有效字符序列称为标识符。,标识符规定:只能由字母,数字,下划线三种字符组成,且第一个字符必须为字母或下划线。,常量与变量,变量的基本类型有:int,float,char,enum.,标识符长度:系统不同,允许的长度不同,一般取长度8即可,标识符大小写不通用。,关键字:就是具有特定含义的标识符,用户不能用来作自定义标识符。(类似于自然语言中的有特定意义的单词、词汇),常用的有:,与数据类型有关的:char,int,floatdouble,signed,unsigned,short,longvoid,struct,union,typedef,enum,sizeof,与存储类别有关的:auto,extern,register,static,与程序控制结构有关的:do,while,forif,else,switch,case,defaultgoto,continue,break,return,常量与变量,例:指出以下哪些是非法变量名?,value$sumpieceflags5_93sp_sy5temint,$为非法变量名字符变量名中间不允许有空格不允许数字打头C语言中的保留名或关键字,例如:合法标识符:_22A,lea_1,avg3,day,ABCde43xyw8不合法标识符:M.J.YORK,$_238,#xy,a*b,8Tea,整型数据,一、整型常量:,2.八进制整数:由正负号与07共8个数字组成,且八进制整常量第一个数字一定为0,例-011,终端输出时printf中的格式为%o(字母o)。,1.十进制整数:由正负号与09共10个数字组成,终端输出时printf中的格式为%d。,整型常量即整常数(可正可负),C中的int常量有三种形式:十进制、八进制、十六进制。,整型数据,十六进制整数:由正负号与0F共16个字符组成,此类常数最前面要由数字0与字母x引导,如:-0 x12,输出函数printf中格式规定为%x。,二、整型变量:有四类:int,short(int),long(int),unsigned(int)或:unsigned(short)、unsigned(long)。,各类型整型变量所占内存字节数,在C语言中没有统一规定,看P43表3.1。,整型数据,思考:inta=20000,b=20000,c;c=a+b;c的值为多少?如果c定义为long型是否能解决问题?,三、整型常量与变量的关系:,整型数据,3若short型长度与int数范围相同,则它们可互相赋值。,2常量在-231231-1之间可以赋给longint型变量(32位)。,1常量在-215215-1之间可以赋给int和longint型变量(16位)。,5在一个整常量后面加字母l或L,则此整常量被认为是long型常量。,整型数据,4非负的整常量可以赋给相应的unsigned变量。,实型数据,一、实型常量:有两种表示方法:,1.十进制表示形式:由小数点、正负号和十个数字表示,必须有小数点,小数点最前面和最后面的0均可省,但小数点不能单独出现。,2.指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成,如:aEn其中:a为十进制数,n为十进制整数,表示的值为a*10n。,实型数据,指数形式(科学计数法):由数字、正负号、小数点和字母e或E组成。要求字母e或E的两边必须有数(1也不可省),e或E后面的数字必须为整数(可带正负号),最多可以是3位,此数字代表10的幂次。例:1.23E+5=123103,说明:,实型数据,二、实型变量:(浮点数)有float和double两种。其中:,longdouble有效数字为19位,占16个字节。,double实数提供16位有效数字,在内存中占8个字节。,float实数一般在内存中占4个字节。(32位),float实数提供7位有效数字,赋值时当多余7位数字,则7位以上的数字对变量无意义。,实型数据,C规定:如果将一个浮点数赋给整型变量,则系统自动将该浮点数的小数部分截取。,实型数据存在舍入误差:,如果将一个整数赋给实型变量,则在数值上不会引起任何变化。,三、整数与浮点数的转换:,main()floata,b;a=1.23456789e10;b=a+20;printf(“%f”,b);,实型数据,注意:应当避免将一个很大的数和一个很小的数直接相加减,否则就会“丢失”小数。,输出结果为:123456788848.000000,字符型数据,一、字符常量:有两类:1单个的ASCII字符:用单引号引起来,在内存中以ASCII码值的形式存储,看P374附录。2以反斜杠“”开头的字符系列:他们是一些特殊字符的转义字符,看P40表3.1。,字符型数据,例3.5转义字符的使用。,转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后跟一个或几个字符。用来表示那些用一般字符不便于表示的控制代码。,将后面的字符转换为另外的意义.即是一种控制符号.,main()printf(abctderftgn);printf(htibbjk);,字符型数据,程序运行时在显示屏上得到的结果是:fgdehjk程序运行时在打印机上得到的结果是:fabcgdehjik,二、字符变量:用char定义每一个字符变量只能存放一个字符,不能存放字符串,字符串需用数组来存放。可以给字符变量赋0255的正整数。因为这是ASCII码值。看P50例3.6和例3.7。字符变量显示时,可用格式%c显示字符本身,也可用%d显示字符的ASCII码值。(当ASCII值在0127时显示ASCII码值,若ASCII值在128255时显示-128-1)。,字符型数据,字符型数据,例3.6向字符变量赋以整数。main()charcl,c2;cl=97;c2=98;printf(%c%cn,cl,c2);printf(%d%dn,cl,c2);,程序运行时输出结果是:ab9798,例3.7大小写字母的转换。main()charcl,c2;cl=a;c2=b;cl=cl-32;c2=c2-32;printf(%c%c,cl,c2);,字符型数据,程序运行时输出结果是:AB,字符型数据,三、字符串常量与变量:,字符串常量:用双引号引起来的字符序列。字符串在内存中存放时,系统会自动为字符串末尾加上结束符O,但书写时不加O,显示也不会出现任何操作。例:a与“a”不同。其中:a在内存中以一个字节61H(97)存储,“a”用2个字节61H和00H存储。字符串常量值若要存放在变量中,必须用字符数组来存放。做P65题3.63.8。,main()charcl=a,c2=b,c3=c;charc4=101,c5=116;printf(a%cb%ctc%ctabcn,cl,c2,c3);printf(tb%c%c,c4,c5);,3.6写出以下程序运行的结果。,aabbccabcAN,程序的运行结果为:,3.7要将“China”译成密码,密码规律是:用原来的字母后面第个字母代替原来的字母。例如,字母“”后面第个字母是“”,用“”代替“”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为、h、i、n、a,经过运算,使c1、c2、c3、c4、c5分别变为G、l、m、r、e,并输出。,main()charc1=C,c2=h,c3=i;charc4=n,c5=a;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(密码是%c%c%c%c%cn,c1,c2,c3,c4,c5);,程序的运行结果为:,密码是Glmre,3.8例3.6能否改成如下:运行时显示什么内容?为什么?main()intcl,c2;(原为charcl,c2)cl=97;c2=98;printf(%c%cn,cl,c2);printf(%d%dn,cl,c2);,解:可以。因为在可输出的字符范围内,使用整型和使用字符型作用相同。,输出结果是:ab9798,变量的赋值,程序中常需要对变量赋予初值,C中赋初值的方法有以下几种:在定义变量的同时赋值。例:floatb=3.14;inta,b,c=5;在变量定义之后再为变量赋值。例:inta,b,c;a=b=c=1;不可以在定义变量时,同时给多个变量赋值.例:inta=b=c=1;(TurboC不认可),62,转换规则,1、纵向向上的箭头表示不同类型的转换方向(由低类型转化为高类型),不表示转换所经的步骤。2、横向向左的箭头表示必定的转换。,各类数值型数据之间的转换,C中允许int,float,double和char型数据混合运算,运算时首先必须将不同类型转化为同一类型方可进行运算,转化的规则见右图,转化过程由系统自动进行。,图中横向向左的箭头是运算过程中必定要进行的转化过程。图中纵向箭头表示当运算对象为不同类型时的转化方向。,算术运算符和算术表达式,一、C运算符简介:看P55和P375附录,算术运算符和算术表达式,1.基本的算术运算符:+,-,*,/,%(模,求余)对于除法(/)运算:若两个正整数相除,则结果为正整数(舍去小数部分)例:7/3=2若不同符号的两个整数相除,结果为负整数,小数舍入方向不固定,有的系统采用四舍五入,二、算术运算符和算术表达式:,有的采用“向零取整”。例:-5/3=-1.67有的系统给出-2,有的给出-1,多数系统采用后种。除法运算中,只要有一数为实型,则所有数和结果均为double型。模运算符%:只能用于int型数,即两个数均为int型。要求运算结果与被除数同符号。例如:7%3=1,-5%3=-2,5%(-3)=2。,算术运算符和算术表达式,此类运算符要求所有运算分量都必须是算术类型。(int,float或double),算术运算符和算术表达式,2算术运算符的优先级与结合性优先级:先*、/、%,后+、,但+,-号用于单目运算时其优先级最高,用于双目运算时优先级最低,同级运算符按规定的结合方向处理。,结合方向:自左至右,具有左结合性,即运算时由左向右计算。(先处理操作对象左边的运算符,再处理右边的运算符)注:双目运算符中,除赋值运算符为右结合外,其余均为左结合。单目运算符均为右结合。条件运算符为右结合。豆号运算符为左结合。,算术运算符和算术表达式,三、强制类型转换运算符:功能:这样的运算符可以将表达式的值强制转换为所需类型(当系统不能实现自动转换的情况下使用)。形式为:(类型名)(表达式)例:(double)a,(int)(x+y),(float)(7%4)注意:在运行强制类型转换时,得到一个所需类,算术运算符和算术表达式,型的中间变量,而原变量的类型不发生变化。,算术运算符和算术表达式,例:main()floatx=3.6,y=6.7;floati,j;i=(int)(x+y);j=(int)x;printf(“x=%f,j=%f,i=%f”,x,j,i);,运行结果为:,x=3.600000,j=3.000000,i=10.000000,3.9求下面算术表达式的值。(1)x+a%3*(int)(x+y)%2/4设x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5,2.53.5,算术运算符和算术表达式,四、自增自减运算符:+或-,功能:使单个自变量的值加1或减1。格式:+i;-i;功能为在使用i值之前先使i的值加1(或减1)-前置例:i=3;j=+i;则有:j=4;i=4i+;i-;功能为先使用i的值,之后再使i的值加1(或减1)-后置例:i=3;j=i+;则有:j=3;i=4,算术运算符和算术表达式,一个变量进行自增或自减运算时,当单独构成语句而不是作为一个表达式时,运算符前置或后置不影响变量本身的值,即+i与i+都等价于i=i+1,-i与i-都等价于i=i-1。,算术运算符和算术表达式,无论前置或后置,是单独构成语句或作为一个表达式时运算后,变量本身的值都是相同的,但会影响表达式的值。,说明:,使用时需要注意:,+或-是单个运算符,所以他们之中不能有空格,否则会被看成两个+或两个-对待。+或-运算符只能用于变量,而不能用于常量和表达式,如5+或(a+b)均违法。自增自减运算符有副作用,因为此类运算符在运算时不仅可以向外提供一个值,而且同时还改变了运算分量自身的值,正确使用可使程序简练,使用不当会出现意想的结果。,算术运算符和算术表达式,例1:x=+i+i;对于第一个i,其值先加1,对于第二个i值,是使用自加前的i值还是使用自加后的i值,与具体实现有关,结果不确定。所以编程时尽可能将此副作用隔离,使之仅在一个小范围内起作用。如上面语句可改为:+i;x=i+i;或x=2*(+i),算术运算符和算术表达式,例2:k=(i+)+(i+)+(i+),设i=3(ZJ.c)在TurboC和msC上:,k=9,i=6,k=18,i=6,当表达式中连续出现多个+或-时,C编译在处理时尽可能多的自左而右将若干个字符组成一个运算符。,算术运算符和算术表达式,k=(+i)+(+i)+(+i),设i=3(ZJI.c)在TurboC和msC上:,设a=3,b=(+a)+(a+),则有:,b=8,a=5,例:x=i+j;理解为:x=(i+)+j;最好写成:x=(i+)+j;或:x=i+j;,函数调用时,实参数的求值顺序因不同的系统而不同,要注意上机试试。例:printf(“%d,%d”,i,i+);设i=3(ZJ2.c)自左至右求值顺序的系统输出结果为:3,3自右至左求值顺序的系统输出结果为:4,3,TC为此结果.(求值顺序与输出顺序概念不同),算术运算符和算术表达式,+和-为右结合性。例:printf(“%d”,-i+);(ZJ3.c)当i=3时问上述语句执行后的结果及i的值。输出结果:-3,但i变为+4,先使用i值后自加右结合时,-i+相当于:-(i+)而左结合时,-i+相当于:(-i)+,算术运算符和算术表达式,赋值运算符和赋值表达式,一、简单赋值运算符“=”及其表达式:,int型数据赋给float型变量,数值不变,以浮点形式存到变量中。,float型数据赋给int型变量,则小数自动舍弃。,赋值时注意类型转换:,此运算符功能为:将赋值号右边的常量或变量或表达式的值赋给左边的变量。,char型数据赋给int型变量:一般将符号位扩展到高8位,但对于unsignedint最高位补0。,赋值运算符和赋值表达式,将符号数赋给长度相同的无符号变量时,数值(连同符号)原样照赋,只是赋值后,原来数值中的符号(例负号),现在变为数值的最高位了。,无符号数unsignedint赋给longint型变量,最高位补0即可。,带符号的int型数据赋给longint型变量:,对longint型的高16位进行扩展。,二、复合赋值运算符:有十类它们的格式为:算术运算符或位运算符再加上“=”,共有以下10种:+=,-=,*=,/=,%=,=,=,,?a,x,a=15,x=20表达式的值为20,a值未变,a=15,x=a=3,6*a;,?a,x,a=3,x=3表达式的值为18,逗号运算符与逗号表达式,printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);,并非所有地方的逗号均为运算符,要会分辨。看下面两个printf中(a,b,c)的区别:,写出下面程序的运行结果。#includevoidmain()inti,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);,本周上机练习题:,【学习目标】通过本章的学习,学生应该能够:熟练掌握输入输出语句的功能和格式,了解顺序结构的C程序。,第三章最简单的C程序设计本章对C程序作一个概括的简介,重点和难点是:输入输出函数的功能和格式。,解决方法:告诉学生这部分内容应当熟记。,课外指导:布置上机练习题,要求学生自我检查内容掌握的程度。,教学效果检测方法:结合课堂提问,观测学生对本章重点和难点内容掌握的程度。,本章作业:P83习题38,3.1C语言语句概述3.2C程序的三种基本结构3.3赋值语句3.4数据输出3.5数据输入3.6简单的C程序举例,本章主要内容:,函数调用语句:由一个函数名加一个分号构成。表达式语句:由一个表达式加一个分号构成。,C语言语句概述,C语言的语句用来向计算机系统发出操作命令。在C中,语句可分为5大类:,控制语句:完成一定控制功能,有9种语句:ifelse,for,while,dowhile,goto,continue,break,switch,return。,空语句:只有一个分号,什么操作也不进行,可用作程序的转向点,也可用在循环中。,C语言概述,复合语句:由一个花括号和上面四种语句组成。常用于选择和循环中。,C程序的三种基本结构,目前广泛流行结构化程序设计方法,以使程序结构清晰、易懂,且可提高程序设计的质量和效率。结构化程序设计由若干个基本结构组成,最常见的有三种基本结构:,顺序结构:程序按编写的先后顺序执行。,循环结构:据条件决定执行或重复执行某一段程序,常用的有当型循环和直到型循环。,选择结构:程序的走向由条件的真假来选择。又称多分支结构。,赋值语句,由赋值表达式加分号构成。,例:x=9;y=(sqrt(x)+x*3/2)/5;,数据输出,C本身无输入输出语句,输入输出操作是调用标准函数库中的输入输出函数来实现的。本章详细介绍四个标准库函数:,一、putchar函数(字符输出函数):功能:用于向终端输出一个字符。格式:putchar(变量)例:putchar(a),putchar(),printf(),getchar()和scanf()。,数据输出,变量必须是int型或char型。int型变量其值必须在ASCII码范围内(0255)。,putchar还可以一个输出常量或转义字符,只要在括号中将需输出的内容用单引号括起即可。但ASCII码必须以转义字符形式出现。,使用标准库函数时,要使用“#include”预编辑命令将“stdio.h”文件包括到用户源文件中。,例.1输出单个字符。(ZJ8)includemain()chara,c;a=B;c=Y;putchar(a);putchar(n);putchar(O);putchar(c);,数据输出,BOY,运行结果为:,数据输出,二、printf函数(格式输出函数)功能:可以输出若干个任意类型的数据。格式:printf(格式控制符,输出表列),输出表列:里面列出了所有用户希望输出的变量名或表达式,它们之间可以用逗号相隔。,格式控制符:由双引号括起来的字符,有两种,普通字符:原样照印的内容;格式说明符:以%开始,共有九种。,数据输出,格式控制符,d格式符:用于输出十进制整数。有4种形式:%d:按整型的实际长度输出。%md:按指定宽度m输出整型数。若数据长度小于m,则左端补空格,若大于m,则按实际位数输出。,%ld:输出长整型数据,长整型数据只能用此格式输出。,数据输出,“o”格式符:用于输出无符号八进制整数。对此格式符也可指定宽度m和长整形l,规定同上。,%mld:按指定宽度m输出长整型数。若数据长度小于m,则左端补空格,若大于m,则按实际位数输出。,数据输出,3.x格式符:用于输出无符号十六进制整数。规定同o格式符。,5.c格式符:用于输出一个字符。0255之间的整数均可用字符形式输出。,4.u格式符:用于输出无符号十进制(unsigend)整数。此类型的数据也可用d,o,x格式输出。如下例:,数据输出,例4.3无符号数据的输出。main()unsignedinta=65535;intb=-2;printf(a=%d,%o,%x,%un,a,a,a,a);printf(b=%d,%o,%x,%un,b,b,b,b);,a=-1,177777,ffff,65535b=-2,177776,fffe,65534,运行结果为:,(L41),数据输出,%s:按字符串的实际长度输出。如:printf(“%s”,“CHINA”);输出结果里CHINA不包括双引号。,6.s格式符:用于输出一个字符串。字符串必须用双引号括起来,有以下5种用法:,%ms:按指定宽度m输出字符串。若数据长度小于m,则左端补空格,若大于m,,则按实际位数输出。,数据输出,-m.ns:字符输出宽度为m列,但只取字符中前,m.ns:字符输出宽度为m列,但只取字符中前n个字符。nm自动输出n个字符。,%-ms:按指定宽度m输出字符串。若数据长度小于m,则右端补空格,若大于m,则按实际位数输出。,n个字符,nm自动输出n个字符。,数据输出,例4.5字符串的输出。main()printf(%3s,%7.2s,%.4s,%-5.3sn,“CHINA”,“CHINA”,”“CHINA”,“CHINA”);,注:在s格式中,如果只指定n而不指定m,则系统自动认为m=n。,%f:对单精度数而言:整数部分全部输出,小数部分输出6位,但数值的前7位有效。对双精度数而言:整数部分全部输出,小数部分输出6位,但数值的前16位有效。,数据输出,运行结果为:CHINA,CH,CHIN,CHI,f格式符:以实数形式输出单、双精度实数。,数据输出,例4.6输出实数时的有效位数。main()floatx,y;x=111111.111;y=222222.222;printf(%f,x+y);,运行结果为:333333.328125,数据输出,例4.7输出双精度数时的有效位数。main()doublex,y;x=1111111111111.111111111;y=2222222222222.222222222;printf(%f,x+y);,运行结果为:3333333333333.333001,%m.nf:指定输出数据共占m列,其中小数占n列(小数点占一位,不包括在n列内),数据长度小于m,则左端补空格。,数据输出,例4.8输出实数时指定小数位数。main(),%-m.nf:指定输出数据共占m列,其中小数占n列(小数点占一位,不包括在列n内),数据值小于m,则右端补空格。,数据输出,floatf=123.456;printf(%f%10f%10.2f%.2f%-10.2fn,f,f,f,f,f);,运行结果为:123.456001123.456001123.46123.46123.468.e格式符:以指数形式输出数值,有两种形式:%e:什么也不指定,系统输出5位尾数(e三位整数),1位非零整数,自动取6位小数。,例:printf(“%e”,123456);运行结果为:1.234560e+005,数据输出,%m.ne和%-m.ne:“m,n,-”含义均同前。即n指小数位数,m指全部数据长度(包括5位尾数),当不指定n时,系统自动使n=6;不指定m时,系统自动使m等于数据应占的长度;如果nm值,则系统自动突破m,按数据实际宽度输出。“-”表示右补空格。,数据输出,10.在使用printf函数时,还有几点要说明:除了,L外,其他格式说明符必须用小写字母,如d不能写成。可以在printf函数中的“格式控制”字符串内,9g格式符:用来输出实数,自动按f或e格式输出(选择输出占宽度较小的一种),且不输出无意义的零。,包含第章.5节3.5.1段中的“转义字符”,如“n”、“t”、“b”、“r”、“f”、“377”等。,数据输出,上面介绍的d、o、x、u、c、s、f、e、g等字符,如用在“”后面就作为格式符号。一个格式说明以“”开头,以上述个格式说明符之一为结束,中间可以插入附加格式字符(也称修饰符)。,第一个格式说明为“c”,而不包括其后的f,第二个格式说明为“f”,不包括其后的s,第三个格式说明为“s”,其它的字符为原样输出的普通字符。,数据输出,如果想输出字符“”,则应该在“格式控制”字符串中用连续两个表示。,如:printf(%f%,1.0/3*100);(ZJ4.c)输出:33.333333%,数据输出,例4.5请写出下面程序的输出结果:main()inta=5,b=7;longn=1234567;floatx=67.8564,y=-789.124;charc=A;unsignedu=65535;,printf(%d%dn,a,b);printf(%3d%3dn,a,b);printf(%f,%fn,x,y);printf(%-10f,%-10fn,x,y);printf(%8.2f,%8.2f,%.4f,%3fn,x,y,x,y);printf(%e,%10.2en,x,y);printf(%c,%d,%o,%xn,c,c,c,c);,575767.856400,-789.12402367.856400,-789.124023,67.86,-789.12,67.8564,-789.124023,6.785640e+001,-7.89e+002,A,65,101,41,数据输出,printf(%ld,%lo,%xn,n,n,n);printf(%u,%o,%X,%dn,u,u,u,u);printf(%s,%5.3sn,COMPUTER,COMPUTER);,COMPUTER,COM,1234567,4553207,d687(n=ox12d687),65535,177777,FFFF,-1,数据输出,数据输入,一、getchar()函数(字符输入函数)功能:由终端接收一个输入字符。形式:getchar(),无参数函数。,getchar()函数得到输入字符可以赋给int型或char型变量,也可以不赋给任何变量,值,使用getchar()函数,在程序的最前面要用预编译命令#include将头文件中信息息包含进来。,作为表达式中的一部分,函数的值就是由终端输入的字符。,数据输入,include“stdio.h”main()charc;c=getchar();putchar(c);,设由键盘键入字母“N”则运行结果为:N,例4.2输入单个字符。,getchar()只能接收一个字符。二、格式输入函数scanf:功能:可以输入任何类型的多个数据。格式:scanf(格式控制符,地址表列),数据输入,其中:格式控制含义同printf中的格式控制,地址表列是由若干个地址组成的表列,可,由终端输入字符必须按回车键,字符才会送到内存中。,以是变量的地址,或字符串的首地址,不能是变量名。,数据输入,例4.9用scanf函数输入数据。main()inta,b,c;scanf(%d%d%d,例4.10输入三角形的三边长,求三角形面积。为简单起见,设输入的三边长a、b、c能构成三角形。从数学知识已知求三角形面积的公式为:area=其中:s=(a+b+c)/2据此编写程序如下:,数据输入,include“math.h”main()floata,b,c,s,area;scanf(%f,%f,%f,数据输入,数据输入,4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,cl=A,c2=a。问在键盘上如何输入?,floatx,y;charcl,c2;scanf(a=%db=%d,数据输入,解:可按如下方式在键盘上输入,a=3b=78.571.82A,a,(L47),(L46),数据输入,对unsigned整型变量所需的数据,可以用%d或%o、%x格式输入。,例:scanf(“%3d%3d%c”,cl=getchar();printf(%c,%dn,cl,cl);c2=cl+32;printf(%c,%dn,c2,c2);,简单C程序举例,若输入:B则有结果:B,66b,98,例4.11从键盘输入一个大写字母,要求改用小写字母输出。,简单C程序举例,可以将上面的分式分为两项:p=q=,x1=,x2=,例4.12求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac0。解:一元二次方程式的根为,x1=p+q,x2=p-q,据此编写程序如下:,#includemain();floata,b,c,disc,xl,x2,p,q;scanf(a=%f,b=%f,c=%f,简单C程序举例,main()inta,b;floatx,y,z;charcl,c2;,4.7用下面的scanf函数输入数据,使a=10,b=20,cl=A,c2=a,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?scanf(%5d%5d%c%c%f%f%*f,%f,scanf(%5d%5d%c%c%f%f%*f,%f,解:可按如下方式在键盘上输入,1020Aa1.53.751.5,67.8,输出为:a=10,b=20,c1=A,c2=a,x=1.50,y=-3.75,z=67.80,简单C程序举例,4.10编程序,用getchar函数读入两个字符给cl,c2,然后分别用putchar函数和printf函数输出这两个字符。并思考以下问题:(1)变量cl、c2应定义为字符型或整型?抑二者皆可?(2)要求输出cl和c2字符的ASCII码,应如何处理?putchar函数还是printf函数?,#includemain()charc1,c2;printf(请输入两个字符c1,c2:n);c1=getchar();c2=getchar();,(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:charcl,c2;与intcl,c2;是否无条件地等价?,printf(用putchar语句输出的结果为:n);putchar(c1);prtchar(c2);printf(n);printf(用printf语句输出的结果为:n);printf(%c,%cn,c1,c2);,回答思考问题:变量cl、c2可以定义为字符型或整型,二者皆可。,必须调用printf函数,且用%d格式输出。,请输入两个字符c1,c2:ab用putchar语句输出的结果为:ab用printf语句输出的结果为:a,b,运行结果为:,否。只有当整型变量数值在0255的范围内时,二者才可互相代替。,注:连续用两个getchar()函数时,不能用以下方法输入:ab,(ZJ6.c),已学过的运算符的优先级,括号单目运算符(!,+,-,-,scanf(%f,%f,%f,if语句,二、if语句的嵌套:,if后面的语句中又包含了一个或多个if语句称为if语句的嵌套。要想使得内嵌if语句后面的语句被执行必须由两个if后面的表达式为真,嵌套if语句相当于多个表达式相与。if与else的配对关系:else总与它上面的最近的尚未配对的if语句配对。,if语句,为了程序清楚或达到某种目的,可加花括号来规定if与else的配对关系。,例:if()if()语句1;else语句2;,不加花括号,else与第二个if语句配对。加花括号,else与第一个if语句配对。,例5.3有一函数:-1(x0),输入x若x0,y=1输出y,输入x若x0,y=1输出y,编一程序,输入一个x值,输出y值。算法如下:,有以下几个程序,请读者判断哪个是正确的?,程序1:main()intx,y;scanf(%d,程序2:main()intx,y;scanf(%d,正确,正确,程序3:main()intx,y;scanf(%d,程序4:main()intx,y;scanf(%d,错误。else与第二个if语句配对,它们都是第一个if语句的内嵌语句,只要进入第一个if语句,就一定有:y0。,错误。原因同程序3,只要进入第一个if语句,就一定有:y-1。,5.4有3个整数a,b,c,由键盘输入,输出其中最大的数。,main()inta,b,c;printf(请输入3个整数:);scanf(%d,%d,%d,三、条件运算符条件运算符由?和:组成。由条件运算符组成的条件表达式可以替代简单的ifelse语句,使程序更加简单明了。,if语句,条件表达式的形式:表达式1?表达式2:表达式3条件运算符优先级高于赋值运算符,低于关系运算符。所以可以有max=(ab)?a:b;条件运算符是C中唯一的一个三目运算符。,执行顺序为:先求解表达式1的值,若为真(非0),则求表达式2的值,且将表达式2的值作为整个表达式的值;若表达式1的值为0,则求表达式3的值,将表达式3的值作为整个表达式的值。条件运算符的结合方向为“自右至左”。如:ab?a:cd?c:d相当于ab?a:(cd?c:d)表达式1可以与表达式2及表达式3的类型不同,,if语句,但若表达式2与表达式3的类型不同时,整个表达式的值将转换为表达式2与表达式3中较高的类型。例:a=xy?a:1.5;设x=P,y=A。解:P=80,A=64,xy结果为T,则a=a=97,但由于表达式2的值为1.5是float型,类型级别高于字符型a,a=97.0,if语句,(ZJ7.c),例5.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,main()charch;scanf(%c,printf(%c,ch),switch语句,格式:switch(表达式)case常量表达式1:语句组1;case常量表达式2:语句组2;case常量表达式n:语句组n;default:语句组n+1;,功能:用于处理多分支问题。多分支问题也可以用ifelse语句来处理,但那样嵌套的层次多,程序冗长且可读性降低。,说明:执行switch语句时,先计算(表达式)的值,据此决定程序走向:,switch语句,当switch表达
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年日语J.TESTE级考试备考试卷解析
- 2025年事业单位招聘考试综合类专业能力测试试卷(工程类)-交通运输工程预算试题
- 吉林医药学院《工程制图基础》2024-2025学年第一学期期末试卷
- 湖北国土资源职业学院《微生物学与免疫学》2024-2025学年第一学期期末试卷
- 广东行政职业学院《爬虫开发与实践》2024-2025学年第一学期期末试卷
- 青岛航空科技职业学院《国际贸易实务》2024-2025学年第一学期期末试卷
- 2025年初级美容师专业技能考试题库及解析
- 安庆医药高等专科学校《多元统计分析双语》2024-2025学年第一学期期末试卷
- 2025年网络安全工程师面试宝典攻防模拟题及深度解析
- 2025年英语翻译能力测试模拟题库
- 住院病人防止走失课件
- 2024年重庆永川区招聘社区工作者后备人选笔试真题
- 医学技术专业讲解
- 留疆战士考试试题及答案
- 智能渔业养殖系统开发合同
- 中式烹调师高级技师试题库及参考答案
- 第5章-系统模型课件
- LY/T 1828-2009黄连木栽培技术规程
- 安全文明施工措施费清单五篇
- X射线衍射课件(XRD)
- 常见皮肤病的种类及症状图片、简介大全课件
评论
0/150
提交评论