最基础的C语言教程_第1页
最基础的C语言教程_第2页
最基础的C语言教程_第3页
最基础的C语言教程_第4页
最基础的C语言教程_第5页
免费预览已结束,剩余197页可下载查看

下载本文档

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

文档简介

C语言程序设计,主讲:高照艳,2020/5/18,2,第一章C语言概述,主要内容:C语言的发展C语言的特点简单C程序介绍算法结构化程序设计C程序的执行过程,2020/5/18,3,C语言出现的历史背景(1)C语言的发展源于人们希望用高级语言编写操作系统。ALGOL60(高级语言)60-CPL(剑桥大学推出接近硬件规模大难实现)63-BCPL(剑桥大学简化CPL)67-B语言(贝尔实验室用B写了UNIX操作系统)70-C语言(用C改写了UNIX90%,即第5版)7273-标准C(K,1.3简单C程序介绍,2020/5/18,10,例1.2/*求两数之和*/main()inta,b,sum;/*定义变量*/a=123;b=456;sum=a+b;printf(“Sumis%dn”,sum);Sumis579,2020/5/18,11,例1.3求两数之最大值main()inta,b,c;scanf(”%d,%d”,2020/5/18,12,C程序结构,C程序由函数构成必须有,且只能有一个main(主函数)总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名、函数参数、类型函数体从开始,到结束函数内有语句,2020/5/18,13,C程序结构(续),语句包括说明性语句、可执行语句以;表示语句结束注释可以出现在程序的任何位置用/*和*/括起来,必须成对出现书写格式C语言没有行的概念,书写格式自由。习惯小写字母,缩进格式。,2020/5/18,14,1.4程序的灵魂算法,程序包括两方面内容:1.对数据的描述。数据元素及各元素之间的关系,即数据结构。2.对操作的描述。即操作步骤,也就是算法。程序=数据结构+算法程序=数据结构+算法+程序设计方法+语言工具环境说明:高级语言的数据结构是以数据类型来体现的。,2020/5/18,15,1.4.1算法,什么是算法为解决某一应用问题而采用的解题步骤算法的描述方式用自然语言描述算法用流程图描述算法用N-S结构图描述算法用计算机语言表示算法(即实现算法),例如:输出两个数中的最大数,2020/5/18,16,用自然语言描述算法,第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。,例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解,2020/5/18,17,图1.5用流程图描述算法,用流程图描述算法,起止框,输入/输出框,判断框,处理框,流程线,2020/5/18,18,用N-S结构图描述算法,图1.7用N-S结构图描述的算法,2020/5/18,19,算法的特性,(1)有穷性。,(2)确定性。,(3)有效性。,(4)输入。,(5)输出。,2020/5/18,20,1.4.2结构化程序设计,程序的三种基本结构顺序结构程序:按照书写顺序依次执行语句选择结构程序:按照条件判断选择执行语句循环结构程序:通过条件控制循环执行语句,三种基本结构的共同点:都是只有一个入口和一个出口;结构内的每一个框都有机会被执行;结构内没有死循环。,2020/5/18,21,结构化程序设计的三种基本结构:1)顺序结构传统流程图N-S流程图,A,B,开始,结束,其中:A、B为操作框,可由一条或多条语句实现。,2020/5/18,22,2)选择结构(分支结构)传统流程图N-S流程图入口出口,A,B,P,TF,TF,其中:P为分支判断条件;A、B必有一个且只有一个被执行;A、B之一可是空操作,用表示。,2020/5/18,23,3)循环结构当型循环先判断后循环,有可能一次也不循环。入口FT,P,A,当P为真A,出口,其中:P为循环判断条件;A为要重复执行的操作,称为循环体;,2020/5/18,24,直到型循环先循环后判断,至少循环一次。入口FT,P,A,A直到P为真,出口,其中:P为循环判断条件;A为要重复执行的操作,称为循环体;,2020/5/18,25,算法举例例:计算5!(12345),当型循环直到型循环,2020/5/18,26,结构化程序设计的基本原则:,结构化程序设计的基本原则:采用自顶向下、逐步细化的方法进行设计;采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。,2020/5/18,27,1.5C语言的上机操作步骤,一.上机过程:,编译,正确,正确,正确,有错误,有错误,编辑,运行,2020/5/18,28,C程序的执行过程,1源程序文件的建立和编辑编写源程序,形成.C文件需用编辑工具:tc.exe、记事本2编译编译源程序,形成目标程序.Obj文件需用编译工具:tcc.exe3连接连接OBJ文件和调用的库函数,形成运行程序.exe文件需用连接工具:tlink.exe4运行.exe文件,2020/5/18,29,2.上机过程流程图:,2020/5/18,30,3.编写、运行C程序时常用功能键,2020/5/18,31,三、需要记住的TC中一些常用功能键,F1:帮助。F2:将当前文件存盘。F3:装载原有文件或给新文件命名。F4:程序运行到光标所在行。F5:放大或缩小活动窗口切换。F6:开或关活动窗口切换。F7:单步运行程序,跟踪进入函数内部运行。F8:单步运行程序,不跟踪进入函数内部。,2020/5/18,32,实验报告,实验一实验目的实验内容和步骤1.设计算法,写出程序2.在TurboC下编辑,得到源程序(.c)3.编译,得到目标文件(.obj)4.连接,得到可执行文件(.exe)5.分析结果实验体会,C程序设计数据类型、运算符与表达式,2020/5/18,34,2.1数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值2.7混合运算2.8运算符与表达式,数据类型、运算符与表达式CHAPTER2,2020/5/18,35,数据类型、运算符与表达式的数据类型,C语言提供的数据结构是以数据类型形式出现的数据在内存中存放的情况有数据类型决定数据的操作要依靠运算符实现,而数据和运算符共同组成了表达式。,2020/5/18,36,数据类型、运算符与表达式的数据类型,2020/5/18,37,3.2常量与变量,3.2.1常量和符号常量常量:在运行过程中,其值不能被改变的量称为常量。分类:整型实型字符字符串符号常量,用一个标识符代表的常量。习惯上,符号常量名用大写,变量用小写,以示区别。1,0,123为整型常量4.6,1.23为实型常量a,d为字符常量#definePRICE255A=PRICE*A+6C=PRICE+C/120PRICE是标识符,符号常量,2020/5/18,38,3.2.2变量变量:在程序运行过程中,其值可以改变的量称为变量。标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。合法的变量名如:average,abd,a,s2,student_name,_init不合法的变量名:M.D.John,1a,#33,ab3.C语言要求对变量“先定义,后使用”。,2020/5/18,39,3.3整型数据,3.3.1整型常量由一系列数字组成。也可带有减号,但不使用加号。十进制整数:123,-456,0八进制整数:以0开头的数据,如:-011,0123十六进制整数:以0 x开头的数据,如:0 x123整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。,2020/5/18,40,3.3.2整型变量,1.整数数据在内存中的存放形式数据在内存中是以二进制形式存放的。例如:3(0000000000000011)2要区别:3和3方法是:将符号也数码化即:正的符号用0表示负的符号用1表示数值是以补码表示的。正数的补码和其原码的形式相同。负数的补码:将该数的绝对值的二进制形式,按位取反再加1。3(11111111111111101)2,2020/5/18,41,2.整型变量的分类整型int在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。短整型以shortint表示或以short表示,一般与int占有的内存相同。长整形以longint表示或以long表示,一般占有在内存中字节为int两倍。无符号型只能存放正整数,它的表示是在上述三种类型之前加上unsigned,2020/5/18,42,3.整型变量的定义对变量的定义一般放在函数的开头部分。例2.1main()inta,b,c,d;unsignedu;a=12;b=24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%dn”,c,d);,a+u=22,b+u=14,不同类型的数可以直接运算,2020/5/18,43,4.整型数据的溢出main()inta,b;a=32767;b=a+1;printf(“%d,%d”,a,b);运行结果为32767,-327683.3.3整型常量的类型一个整常量,其值在-215215-1内可认为是int型,并可赋值给int型和longint型变量;一个整常量,其值在231231-1范围内则认为它是longint型,可赋值给一个longint型变量;常量中无unsigned型,但一个非负值的整常量可以赋给unsigned型整变量;,2020/5/18,44,3.4实型数据,3.4.1实型常量1.十进制小数形式(日常记数形式)1.0+12.0-12.00.02.指数形式(科学记数形式)E(e)。例如3.0+5等。3.4.2实型变量1类型:单精度:float,分配4Byte双精度:double,分配8Byte2存储:,2020/5/18,45,实型数据的类型及规定,实型常量不分float和double,根据范围赋值给相应的变量。如:floata;doubleb;a=111111.111;b=111111.111a中实际存储的是111111.1(7位有效)b中实际存储的是111111.111(全部有效),2020/5/18,46,3.5字符型数据,3.5.1字符常量1.定义用一对单引号括起来的单个字符,称为字符常量。例如,A、等。2.转义字符语言还允许使用一种特殊形式的字符常量,就是以反斜杠“”开头的字符序列。,2020/5/18,47,3.5.2字符型变量字符变量的类型关键字为char,一般占用1字节内存单元。1.变量值的存储将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如:charch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1=a;ch2=b;/*给字符变量赋值*/a、b的ASCII码为97、98。2.特性1)字符数据在内存中存储的是字符的ASCII码;2)语言允许字符型数据与整型数据之间通用,可以互相赋值。3)字符数据也可以整数形式输出。,2020/5/18,48,例1字符变量的字符形式输出和整数形式输出。main()charc1,c2;c1=a;c2=b;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%dn”,c1,c2);程序运行结果:c1=a,c2=bc1=97,c2=98,2020/5/18,49,例2大小写字母的转换。main()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%cc2=%cn”,c1,c2);程序运行结果:AB,2020/5/18,50,数据类型、运算符与表达式字符型数据,3.5.3字符串常量用双引号括起来的字符序列。如:“Howdoyoudo”,“CHINA”,“a”,“$123.34”等。字符串可以一次输出。如:printf(“Howdoyoudo”);C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一个字符串。注意:a是字符常量,“a”是字符串常量,二者不同。,2020/5/18,51,综上所述,字符常量A与字符串常量A是两回事:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,2020/5/18,52,3.6变量赋初值,在变量定义的同时可以为变量赋初值。如:inta=3;(相当于inta;a=3;)floatf=3.56;charc=a;inta,b,c=5;表示只给c赋初值。(相当于inta,b,c;c=5;),2020/5/18,53,3.7各类数值型数据间的混合运算不同类型的数据(整型、实型、字符型)可进行混合运算。如:10+a+1.58765.1234*b必须首先将它们转换成同一类型的数值。转换原则是由低向高转换,运算结果为最高级别的类型。,2020/5/18,54,数据类型、运算符与表达式混合运算,2020/5/18,55,例2-5:已知:floata=2.0;intb=6,c=3;求解:a*b/c-1.5+A+abs(-5)=?,12.0/3,4.0-1.5,2.5,+65(int),67.5,5,72.5,2020/5/18,56,3.8算术运算符和算术表达式1.基本的算术运算:、*、%是模运算,即求余运算,要求整数。如:7%4的结果是3。说明:5/3的结果仍是整数,小数部分被忽略。5.3/3或5/3.0的结果为double型。C编译系统将实型常量作为双精度来处理。如果参加、*、/运算的两个数中有一个数为实数,则结果是double型。2.算术表达式:用算术运算符将运算对象按C的语法规则连接起的式子。例如:a*b/c1.5+a优先级(算术运算):()*/%+在同一级别中,采取由左至右的结合方向。如:a-b+c相当于(a-b)+c,2020/5/18,57,3.强制类型转换运算符可将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式)例如:(double)a(int)(x+y)(float)(5%3)在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。,2020/5/18,58,练习,main()inti;floatx;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);,2020/5/18,59,数据类型、运算符与表达式运算符和表达式,4.自增、自减运算符使变量的值加1或减1。如:i,i在使用i之前,先使i的值加(减)1i,i在使用i之后,再使i的值加(减)1例如:i的值为3,则j=+i;j的值为4,i的值为4j=i+;j的值为3,i的值为4又如:printf(“%d”,+i);输出结果为4printf(“%d”,i+);输出结果为3单独使用时,i,i等价,2020/5/18,60,结合性:,自右向左,例:,i=2;j=-i+;,分析:(1)+、-、+、-是同级运算符,结合方向:自右向左。,(2)-i+等价于-(i+),(3)对于括号内的自增运算,要先使用i,再使i增加1。,运算结果:i的值为3,j的值为-2。,2020/5/18,61,练习,a=1,b=2,c=3,d=4下列式子的值分别是多少?a*b/ca*b%c+1+a*b-c-,2020/5/18,62,3.9赋值运算符和赋值表达式1.赋值运算符:“=”。2.复合赋值运算:在赋值符号前加上其它运算符号。+=,-=,*=,/=,%=,=,,赋值运算符仅优先于“,”,且具有右结合性例如:a=b=b*c等价于:a=(b=(b*c)赋值号与数学中的等号含义不同例如:数学中a=b等价于b=aC语言中a=b不等价于b=a,2020/5/18,63,3.赋值运算中的类型转换,=小数部分自动补0=自动舍去实型表达式的小数部分(注意不进行四舍五入)=自动截取表达式值的低字节赋值,舍去高字节=自动给高字节补0或补1,2020/5/18,64,数据类型、运算符与表达式运算符和表达式,4.赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式为:例如:inta=12;求下列运算的结果,aaa*a,aaa*a=12-12*12=-132),a-132,aa(-132)=(-132)+(-132)=-264,a=-264,2020/5/18,65,练习,inti=1,j=2,k=3,m=4;计算下列式子的值i+=j+kj*=k=m+5,2020/5/18,66,数据类型、运算符与表达式运算符和表达式,3.10逗号运算符和逗号表达式逗号运算符又称为“顺序求值运算符”,是所有运算符中级别最低的,它将两个表达式连接起来。一般形式为:表达式1,表达式2求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。例如:a=3*5,a*4;a的值为15,表达式的值为60(a=3*5,a*4),a+5;a的值为15,表达式的值为20又如:x=(a=3,6*3);x的值为18x=a=3,6*ax的值为3,表达式的值为18,第4章最简单的C程序设计顺序程序设计,2020/5/18,68,1C语句概述2赋值语句3数据的输入输出4字符数据输入输出5格式输入输出7程序举例,2020/5/18,69,4.1C语句概述用C语言编写的程序称为C语言源程序,简称C程序。C语言一般由一个或若干个函数组成,而这些函数可以保存在一个或几个源程序中,这些文件都以.C作为文件扩展名。,2020/5/18,70,C语句分类和其他高级语言一样,C语言的语句也是用来向计算机发出操作命令的。一条语句经过编译后生成若干条机器指令。在C语言中只有可执行语句,没有非执行语句。C语句有以下五类:控制语句,完成一定的控制功能;if()else(条件语句)for()(循环语句)while()(循环语句)dowhile()(循环语句)continue(结束本次循环语句)break(中止执行switch或循环语句)Switch(多分支选择语句)goto(转向语句)return(从函数返回语句),2020/5/18,71,函数调用语句,由一次函数调用加一个分号构成一个语句,如:printf(“ThisisaCstatement.”);表达式语句,由一个表达式构成一个语句,如:a=3(是表达式,不是语句)a=3;(是语句)空语句,只有一个分号,什么也不做;复合语句,用把一些语句括起来成为复合语句。相当一条语句,哪里有语句,哪里就可用复合语句。if(ab)max=a;min=b;复合语句最后一个语句中最后的分号不能忽略不写。,2020/5/18,72,4.2赋值语句赋值表达式后面加上分号,构成赋值语句。功能:将数据赋给变量。如:x=3.1;a=d+123+b/d;程序中基本的命令行必须是一个语句,表达式不能单独构成语句。例如:d+123+b/d是一个表达式a=d+123+b/d;是一个赋值语句特点:C语言中的赋值号“=”作为赋值运算符;作为赋值表达式可以被包括在其他表达式之中;if(ab)0)t=a;赋值语句可以连接赋值;a=b=c=2;,2020/5/18,73,4.3数据输入输出的概念1.所谓输入输出是以计算机主机为主体而言的。主机向外部设备“输出”,外部设备向主机“输入”。2.C语言本身不提供输入输出语句,输入和输出操作是由函数实现。C语言通过调用四个系统函数来实现输入输出。printf(),scanf(),getchar(),putchar()3.在使用C语言库函数时,要用到预编译命令“#include”将有关的“头文件包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令:#include或#include”stdio.h”,2020/5/18,74,4.4字符数据的输入输出1.字符输出函数putchar()向终端输出一个字符。如:putchar(c);输出变量c的值,c可以是字符型变量或整型变量。,例3.1#include“stdio.h”main()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);,BOY,2020/5/18,75,也可以输出控制字符,如putchar(n)输出一个换行符。输出其它转义字符putchar(101);输出A;putchar();输出单引号putchar(015);使输出回车,不换行,例3.2#includemain()chara,b,c;a=B;b=O;c=Y;putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);,BOY,2020/5/18,76,2.字符输入函数getchar()从终端(或系统隐含指定的输入设备)输入一个字符。一般形式为:getchar();函数的值就是从输入设备得到的字符,例#include“stdio.h”main()charc;c=getchar();putchar(c);,a,a,2020/5/18,77,例从键盘上输入一个大写字母,分别用大小写字母形式输出,同时输出它们的ascii码。#include“stdio.h”main()charc1,c2;c1=getchar();printf(“%c,%dn”,c1,c1);c2=c1+32;printf(“%c,%dn”,c2,c2);,A,A,65a,97,2020/5/18,78,4.5格式输入与输出函数1.格式输出函数printf()按规定格式向终端输出若干个任意类型的数据。,一般格式:printf(控制格式,输出列表),被输出的数据,可以是常量、变量、表达式,用双引号括起的转换控制字符串,它包括两种信息:,格式说明,由%开始。如:%d,%f,%c,普通字符,要输出的字符,printf(“%d%d”,a,b)格式说明输出列表,printf(“a=%db=%d”,a,b);控制格式输出列表,2020/5/18,79,printf()格式字符,2020/5/18,80,printf()附加格式说明字符,例如:%ld输出十进制长整型数%m.nf右对齐,m位域宽,n位小数或n个字符%-m.nf左对齐,2020/5/18,81,例1.main()intx1=123;longx2=123456;printf(x1=%d,x1=%5d,x1=%-5d,x1=%2dn,x1,x1,x1,x1);printf(x2=%ld,x2=%8ld,x2=%5ldn,x2,x2,x2);,程序运行结果如下:x1=123,x1=123,x1=123,x1=123x2=123456,x2=123456,x2=123456,2020/5/18,82,例2.main()intm=-1;longn=123456789;printf(“m=%d,%o,%x,%un,m,m,m,m);printf(n=%dn,n);printf(n=%ldn,n);,程序输出:1122a=11,b=22m=-1,177777,ffff,65535n=-13035n=123456789,2020/5/18,83,例3.main()floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f);printf(d1+d2=%fn,d1+d2);程序运行结果如下:123.456001,123.456001,123.46,123.46,123.46d1+d2=3333333333333.333010对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分占一位,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03),共计11位。也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。,2020/5/18,84,最简单的C程序设计数据输出,在使用printf()函数时要注意:有些系统要求格式字符必须用小写字母;2.格式控制符中,可包含转义字符;3.格式说明必须以“%”开头;欲输出字符%则应在“格式控制”字符串中用连续两个%表示。5.不同的系统在实现格式输出时,输出结果可能会有一些小的差别。,2020/5/18,85,2.格式输入函数scanf()把从输入设备输入的数值按先后顺序存入在内存的地址中去。一般格式:scanf(格式控制,地址列表),例main()inta,b,c;scanf(“%d%d%d”,345,3,4,5,2020/5/18,86,最简单的C程序设计数据输入,scanf()格式字符,2020/5/18,87,最简单的C程序设计数据输入,scanf()附加格式说明字符,2020/5/18,88,在使用scanf()函数时要注意:Scanf()函数中的“格式控制”后面应当是变量地址;如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符;在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入;在输入数据时,遇到以下情况时该数据认为结束:遇空格,或按回车;遇指定的宽度结束,如“3d”,只取3列;遇非法输入,2020/5/18,89,3,4,6,a=3.00,b=4.00,c=6.00,s=6.50area=5.33,4.6顺序结构程序设计举例,第五章选择结构程序设计,关系运算符和关系表达式逻辑运算符和逻辑表达式If语句三种形式条件运算符Switch语句,2020/5/18,91,5.1关系运算符和关系表达式1.关系运算符关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。例如:a3?当a=5时,比较的结果为真;当a=1时,结果为假。C语言提供6种关系运算符(大于)=(大于或等于)=相等!=不等,2020/5/18,92,2.关系表达式用关系运算符或者等式运算符将两个表达式连接起来,叫关系表达式。合法的关系表达式:ab、a+bb+c、(a=3)(b=5)、(a=3)(b=5)、ab)(b=0的值为真(在计算机中记为1)。例:a=3,b=2,c=1,则:(1)ab的值为1(2)(ab)=c的值为真(即1)(3)b+cb中d的值为ab的值,为。(5)f=abc中f的值为c的值,为。,2020/5/18,93,关系、等式和逻辑运算符,关于优先次序,=为同一级别,=和!=为同一级别。在同一级别中,采取由左至右的结合方向。,算术运算符,关系运算符,赋值运算符,高,低,例ca+bc(a+b)ab!=c(ab)!=ca=bca=(bc),等式运算符,2020/5/18,94,5.2逻辑运算符逻辑运算:产生真假值的运算。逻辑运算符:,2020/5/18,99,选择结构程序设计if语句,例如:输出两个数中较大的一个。if(xy)printf(%d,x);elseprintf(%d,y);,2020/5/18,100,选择结构程序设计if语句,2020/5/18,101,选择结构程序设计if语句,例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。设:消费量为money;折扣为cost;实际花费priceif(money500)cost=0.2;elseif(money300)cost=0.15;elseif(money100)cost=0.1;elseif(money50)cost=0.05;elsecost=0;price=money-(money*cost);,2020/5/18,102,选择结构程序设计if语句,If语句的嵌套嵌套的定义:在if语句中又包含一个或多个if语句。嵌套的一般形式:If()if()语句1else语句2Elseif()语句3else语句4(注意!If与else的配对关系。),2020/5/18,103,例比较两个整数的关系。#includemain()intx,y;printf(EnterintegerXandY:);scanf(%d%d,2020/5/18,104,例输入两个数,按数值大小次序排列输出.main()floata,b,t;scanf(%f,%f,输入为3.6,-3.2输出为-3.20,3.60,2020/5/18,105,例输入三个数,按由小到大次序排列并输出。main()flaota,b,c,t;scanf(%f,%f,%f,输入为:3,7,1输出为:1.00,3.00,7.00,2020/5/18,106,选择结构程序设计程序举例,例写一程序判断某一年是否是闰年.main()intyear,leap;printf(输入年份:);scanf(%d,输入年份:20042004isleapyear,2020/5/18,107,选择结构程序设计if语句,条件运算符max=(ab)?a:b;条件表达式当(ab)为真时,表达式取a的值当(ab)为假时,表达式取b的值条件运算符是三目运算符表达式1?表达式2:表达式3条件运算符的结合方向为从右向左例如:ab?a:cd?c:d相当于ab?a:(cd?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值为4。,2020/5/18,108,选择结构程序设计if语句,输入为:4输出为:x=4,y=1,2020/5/18,109,例输入一个字符,判断大小写,如是大写,则转换成小写,输出。main()charc;scanf(%c,printf(%c,c),选择结构程序设计if语句,2020/5/18,110,5.4switch语句Switch语句是多分支选择语句,也叫开关语句或者选择语句。一般形式:switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;功能:1.计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、n+12.若与所有常量表达式值都不相等,执行语句序列n+1。,如:switch(a)case5:printf(,如:switch(a)case5:printf(,2020/5/18,111,选择结构程序设计switch语句,例根据成绩等级打出成绩范围.main()chargrade;printf(Enteryourgraden);scanf(%c,输入为B输出为7084,2020/5/18,112,选择结构程序设计switch语句,2020/5/18,113,例:给出百分制成绩,要求输出等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。main()intscore,num;chargrade;scanf(%d,输入为76输出为76C,2020/5/18,114,选择结构程序设计switch语句,switch语句的说明条件表达式的类型和常量表达式的类型是整数、字符。当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配,则执行default后面的语句。每一个case的常量表达式的值必须互不相同。case常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。多个case可共用一组执行语句。,2020/5/18,115,1概述2goto语句3while语句4do-while语句5for语句6循环的嵌套7break语句和continue语句8程序举例,循环控制,2020/5/18,116,6.1概述一般需要使用循环的情况是:有重复的动作(循环体)循环次数可以控制(循环条件)例如:1+2+3+.+100在C语言中可以用下列语句实现循环:goto和if结合whiledo-whilefor,2020/5/18,117,6.2goto语句Goto语句的一般形式:goto语句标号;语句标号:语句;功能:无条件转向语句。Goto语句的常用形式:1.与if语句构成循环;2.从循环体中转到循环体外。,例:求1+2+3+100。main()inti,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;gotoloop;printf(“%dn”,sum);,2020/5/18,118,6.3while语句一般形式:While(表达式)语句功能:实现“当型循环,先判断,后执行。表达式为真时(非0值),执行while语句的内嵌语句。说明:,可以是关系表达式、逻辑表达式或其它类型,表达式后不允许有分号结尾;语句可以是简单的,也可以是复合的;循环体中应有使循环趋向于结束的语句。,2020/5/18,119,例求1+2+3+.+100。,main()inti=1,sum=0;while(i=100)sum=sum+i;/累加器i+;printf(%d,sum);,如果有一个以上的语句循环,则必须用构成复合语句。要有修改循环变量的语句。,2020/5/18,120,6.4do-while语句,一般形式:do循环语句while(表达式);功能:实现“当型循环结构。说明:,当while后面的表达式的第一次的值为真时,两种循环得到的结果相同。否则,二者结果不相同。dowhile中的循环体至少执行一次,而while语句中的循环语句可能一次都不执行。,表达式,语句,非0(真),0(假),2020/5/18,121,例求1+2+3+.+100。,main()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(%d,sum);,2020/5/18,122,6.5for语句在C语言中用for语句构成的循环最为灵活。一般形式:for(表达式1;表达式2;表达式3)语句执行过程:例:for(i=1;i=100;i+)sum=sum+i;,从图中可以看出FOR语句等价于下列程序:表达式1;While(表达式2)语句表达式3;,2020/5/18,123,说明:语句的一般形式中的表达式1可以省略,此时应在语句之前给循环变量赋初值(注意!省略表达式1时,其后的分号不能省略);如:for(;i=100;i+)sum=sum+i;如果表达式2省略,即不判断循环条件,循环无终止地进行下去;如:for(i=1;i+)sum=sum+1;表达式3也可以省略,但此时应另外设法保证循环能正常结束;如:for(i=1;i=100;)sum=sum+i;i+可以省略表达式1和表达式3,只有表达式2,即只给循环条件;如:for(;ib由以上说明可以看出,C语言中for语句的功能比其它语言中的for语句功能要强、要灵活,它能替代while语句。,例求n!=123n,main()doubles=1;intk;for(k=1;k=100;k+)s=s*k;printf(s=%f,s);整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。,2020/5/18,126,6.6循环的嵌套嵌套的概念:一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。,while()while(),(2)for(;)for(;),(3)for(;)while(),2020/5/18,127,break语句用来从循环体里退出,中止循环Continue语句用来跳过剩下的语句,回到循环开始,6.7break语句和continue语句,2020/5/18,128,例把100200之间不能被3整除的数输出。,main()intn;for(n=100;n=1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);,2020/5/18,132,例裴波那契数列的第1、2项分别为1、1,从第3个数开始,该数是其前面两项之和。即1,1,2,3,5,8,13,求前40项菲波那契数。分析:f1-第一个数f2-第二个数f1=f1+f2第三个数f2=f2+f1第四个数main()longf1=1,f2=1;inti;for(k=3;k=20;k+)printf(%12ld%12ld,f1,f2);if(k%2=0)printf(n);f1=f1+f2;f2=f2+f1;,2020/5/18,133,循环控制本章总结,三种循环语句:while,do-while和for建立循环通常有以下情况:1.给定次数,for比较适用for(i=1;iafor(i=1;i=4;i+)for(j=1;j=i;j+)printf();for(j=1;j=8-(2*i-1);j+)printf(*);printf(n);,思考:如何输出10行图形?输出图形向右平移20个字符位置,应如何修改程序?,2020/5/18,136,总结,for(;)while()dowhile()continuebreakgoto,2020/5/18,137,例打印图形。,分析:行的控制i:14*的个数与当前行的关系j=2*i-1*前面的空格k与行的关系:开始时,第一行有3个空格每多一行,少一个空格k=4-iwhile(i=4)for(k=1,k=4-i,k+)输出空格;for(j=1,j=2*i-1,k+)输出*;,*,main()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(j=1;j=2*i-1;j+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;jA,非字母字符忽略。,思路:1.建立循环,循环结束以输入回车符为准;while(c=getchar()!=n)2.判断输入是否是字符,否则忽略;if(c=a4.若变换后超出z时,要轮回.if(cZwhile(c=getchar()!=n)if(c=a,abdEgWefhIkA,2020/5/18,139,6.1一维数组的定义和引用6.2二维数组的定义和引用6.3字符数组,第七章数组,2020/5/18,140,在c语言中,除了前面介绍的基本类型之外,还有另外一些数据类型-构造类型。其中数组就属于构造类型中的一种。数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。7.1一维数组的定义和引用一、定义一般形式:类型说明符数组名常量表达式;例如:inta10;,2020/5/18,141,二、一维数组元素的引用数组元素的引用形式:数组名下标每次可引用一个数组元素,不能引用整个数组一个数组元素就如同一个简单变量例main()inti,a10;for(i=0;i=0;i-)printf(%d,ai);,9876543210,2020/5/18,142,数组一维数组的定义和引用,一维数组的初始化初始化方法:从数组的第一个元素开始依次给出初始值表;表中各值之间用逗号分开,并用一对大括号括起来。在定义数组时对数组元素赋予初值inta10=0,1,2,3,4,5,6,7,8,9;只给一部分元素赋初值inta10=0,1,2,3,4;欲使一个数组中全部元素初值为0,可以写成inta10=0,0,0,0,0,0,0,0,0,0,;或inta10=0;在对全部数组元素赋初值时,可以不指定数组长度inta=0,1,2,3,4,5;,2020/5/18,143,数组一维数组的定义和引用,例求Fibonacci数列1,1,2,3,5,8,13,21,.main()intf20=1,1;inti;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);,2020/5/18,144,例用冒泡法对10个数排序。,第1次,a0和a1比较,9854206137,8954206137,8594206137,8549206137,8542906137,8542096137,8542069137,8542061937,8542061397,8

温馨提示

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

评论

0/150

提交评论