C语言程序设计(第3版)课件全套 电子 第1-6章 C程序基础- 磁盘数据存储_第1页
C语言程序设计(第3版)课件全套 电子 第1-6章 C程序基础- 磁盘数据存储_第2页
C语言程序设计(第3版)课件全套 电子 第1-6章 C程序基础- 磁盘数据存储_第3页
C语言程序设计(第3版)课件全套 电子 第1-6章 C程序基础- 磁盘数据存储_第4页
C语言程序设计(第3版)课件全套 电子 第1-6章 C程序基础- 磁盘数据存储_第5页
已阅读5页,还剩287页未读 继续免费阅读

下载本文档

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

文档简介

第一章C程序基础1.1C语言程序的基本结构1.2C语言基本语法成分1.3C语言数据类型1.4表达式和语句1.5C程序运行过程1.6编写简单的C程序1.7数据的输入与输出1.8C语言宏定义1.9算法1.10C语言的产生、发展及特点☆☆☆☆☆☆⅔⅔☆自学C程序的基本结构

C程序的运行过程

C语言基本语法成分

C语言基本数据类型数据的输入与输出算法第1部分C程序的基本结构例1编写程序,输出一句话:ThisisaCprogram!#include<stdio.h>voidmain(){

printf("ThisisaCprogram!\n");}编译预处理命令函数编译预处理命令:以#开头,单独占一行,放在程序最前面。#include即文件包含命令,用于把后面指定文件的内容包含进来例2输入两个整数,计算并输出其和。#include<stdio.h>intmain()

/*主函数*/{

inta,b,sum;

/*定义三个整型变量*/

scanf("%d%d",&a,&b);//

输入值给a,b

sum=a+b;

printf("sumis%d\n",sum);return(0);}说明:⑴“/*…*/”表示注释部分,以“/*”开始,以“*/”结束;注释只是对程序的说明,仅起帮助阅读程序的作用,不影响程序的运行,可以放在程序的任意位置。⑵定义变量后,系统就为其分配相应大小的存储单元,用于存放其值。C语言要求变量必须先定义,后使用。absumEG102.C#include<stdio.h>intmain(){inta,b,sum;

scanf("%d%d",&a,&b);sum=a+b;printf("sumis%d\n",sum);return(0);}⑶

scanf用于将输入的数按指定的格式送到后面指定的内存单元(赋值给变量)。“%d”表示输入/输出一个整数,“&”的含义是得到后面变量的地址。⑷“=”为赋值运算符,把右边表达式的值赋值给左边的变量。⑸输出时“%d”表示输出一个整数值,该值由“,”后边对应的变量或表达式提供。使用scanf函数可以输入任意两个整数相加,即程序执行前不确定a、b的值,程序运行中指定。EG102.C#include<stdio.h>intmain(){inta,b,sum;

scanf("%d%d",&a,&b);sum=a+b;printf("sumis%d\n",sum);return(0);}程序的四个部分(编写程序的四个步骤):EG102.C1、定义变量:定义在本函数中用到的变量(类型、名字);2、输入变量的值:确定要处理的对象的值,也可以赋值;3、计算:处理计算对象,完成各种运算;4、输出:输出计算结果。例3输入3个实数,计算并输出其平均值。#include<stdio.h>intmain(){

floata,b,c,aver;

scanf("%f%f%f",&a,&b,&c);//输入三个实数

aver=(a+b+c)/3;//

为变量aver赋值

printf("averis%f\n",aver);

return(0);}说明:⑴float用于声明实型变量(精度要求不高时使用,高精度时用double类型)。⑵

“%f”表示输入、输出一个float型实数(double用%lf),输出时默认6位小数。“%.2f”表示控制输出2位小数。345↙averis4.000000EG103.C例4输入两个整数,输出较大的数。#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;return(z);}intmain(){inta,b,c;scanf("%d%d",&a,&b);

c=max(a,b);printf("max=%d\n",c);return(0);}1234↙max=34EG104.C、EG105.C程序的基本结构#include<…>#include<…>#define…

/*预处理命令*/intmain(){

声明部分

/*定义本函数中用到的变量*/

执行部分

/*完成本函数功能的若干语句*/return(0);}其他函数{

声明部分执行部分}6.函数体的结构为:①变量定义:定义在本函数中用到的变量②输入数据:将要处理的数据存放到内存中(赋值或输入给某些变量)③计算/处理:对输入的数据进行计算或处理④输出结果:输出计算后得到的最终结果(题目要求的结果)7.一行可以写多条语句,一条语句也可以写在多行上。C程序框架1.C程序是由函数组成的(函数式语言)。2.每个程序有且只有一个main函数。C程序总是以main函数作为入口开始执行,结束于main的最后一条语句。3.用户可根据需要自定义函数。4.以#开始的预处理命令写在程序最前面,每个命令占一行。5.函数由函数首行信息(函数首部)和函数体构成。第2部分C程序运行过程C程序上机步骤一、编辑:将源程序输入计算机内存中→修改源程序→将改正后的源程序保存为磁盘文件。——以ASCII码形式输入和存储----扩展名为.C或.CPP(源程序)二、编译:先进行语法检查,并将无语法错误的源程序翻译成二进制形式的目标代码----扩展名为.OBJ(目标程序)三、链接:将各模块的二进制目标代码与系统标准模块连接,得到一个可执行文件----扩展名为.EXE(可执行程序)四、执行:执行经过编译和连接的可执行目标文件。VC++6.0上机步骤1、启动VC++6.0⑴、启动:开始菜单→程序→VisualC++6.0⑵、工作窗口:

编辑窗口、工作空间窗口、输出窗口2、在编辑状态下输入或修改源文件⑴、编辑新文件

编辑新文件:文件→新建…→文件→“C++SourceFile”

保存文件:文件→保存或Ctrl+S⑵、编辑已存在的文件

打开文件:文件→打开或Ctrl+O或直接双击文件

另存文件:文件→另存为…编译时的提示信息将显示在输出窗口,双击错误信息则转到相应出错处,修改完毕再重新编译,直到无任何错误后编译成功,显示“0error(s),0warning(s)”。注意:编译成功只能说明程序无语法错误,不一定代表算法正确或运行结果正确。3、编译源程序

组建→编译

或Ctrl+F7编译时若弹出如下提示框,选择“是”。4、运行源程序

组建→执行或Ctrl+F5标识符标识符是用来标识变量名、符号常量名、函数名、数组名等对象的字符序列。①以字母或下划线开头,由字母、数字或下划线组成。

合法的标识符:aisumS1r3aver_totaldaya_b不合法标识符:S1r3S表

S'3D6a-b(注意不同于数学中的变量)②不能与C语言的关键字重名,如int、float、if③注意标识符的有效长度,不能超过32个字符④区分大小写字母:sum和Sum不同⑤尽量做到“见名知义”;如sum、area⑥应尽量避免单个使用容易认错的字符。如:数字1与字母l和字母I,数字0与字母o和O,数字2与字母Z和z第3部分C基本语法成分比较下面两个程序的不同,有何特点?#include<stdio.h>intmain(){inta,b,sum;

a=2;b=3;sum=a+b;printf("sumis%d\n",sum);return(0);}#include<stdio.h>intmain(){inta,b,sum;

scanf("%d%d",&a,&b);sum=a+b;printf("sumis%d\n",sum);return(0);}结论:如果数据需要在程序运行时确定(程序运行前不能确定),应该用scanf函数输入;如果数据已知(如常量或题目中已告知),可直接赋值。例1.5已知a=5,b=10,交换并输出a、b的值。编写程序的四个步骤:定义变量输入(确定变量的值)计算/处理输出#include<stdio.h>intmain(){return(0);}inta,b,temp;a=5;b=10;temp=a;a=b;b=temp;printf("a=%d,b=%d\n",a,b);思考:交换a、b能否不借助于第3个变量?EG106.Ca=a+b;b=a-b;a=a-b;inta=5,b=10,temp;//初始化变量赋初值/初始化C语言允许在定义变量的同时给变量赋初值,即变量的初始化。

inta=5,b=10,temp;×inta,b,temp;a=5;b=10;

floatf=3.56;

inta,b,c=3;

inta=3,b=3,c=3;

inta=b=c=3;inta,b,c;a=b=c=3;√例1.6计算圆柱体的表面积。分析:圆柱体表面积S=侧面积S1+2×底面积S2S1=dh,S2=πr2,d=2πr因此,需要知道底面半径r和圆柱体高h,怎么办?#include<stdio.h>intmain(){return(0);}floatr,h,s;scanf("%f%f",&r,&h);d=2*3.14*r;s1=d*h;s2=3.14*r*r;s=s1+2*s2;printf("Totalareais%.2f\n",s);,d,s1,s2;原则:只出现一次的中间变量可以省略!#include<stdio.h>#definePI3.14intmain(){return(0);}floatr,h,s;scanf("%f%f",&r,&h);s=2*PI*r*h+2*PI*r*r;printf("area=%.2f\n",s);用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。其值不能被改变,也不能再被赋值。定义形式:

#define符号常量名常量表达式或字符串如:#definePRICE303.1415926EG108.C关于scanf、printf的说明:整型(int)实型(float)实型(double)用途存放整数存放低精度实数存放高精度实数输入格式%d%f(%.2f×)%lf输出格式%d%f%.2f%lf或%f关于格式控制符:整型数据的输入输出都使用%d;实型数据(float)的输入只能使用%f,不能是%.2f的格式。scanf("%d%d",&a,&b);scanf("%f",&r);scanf("%.2f",&r);×关于其它字符:scanf函数中只包括%d、%f等格式控制符,不要有其它字符。printf函数中为了说明输出数据的含义,往往包含其它字符。scanf("r=%d",&r);//不推荐scanf("%f\n",&r);//不推荐printf("sum=%d\n",sum);printf("a=%d,b=%d\n",a,b);运算符和表达式用于描述运算形式的符号称为运算符。如+、-、=、>参与运算的对象(即数据)称为操作数。

表达式是将操作数用运算符连接起来的、符合C语法规则的式子。它描述了对哪些数据、以什么顺序施以何种操作。其中运算量可以是常量、变量或函数调用。如:

3+2-5、x+3/2、max=a+b、t=sin(x)+cos(x)表达式的取值及类型

C语言中的所有表达式都具有确定的值。当不同类型的数据进行运算时,注意结果的值及类型。如:2.0+3C语言运算符分为以下几类:⑴

算术运算符:+

-

*

/

%

++

--⑵关系运算符:<

<=

>

>=

==

!=⑶逻辑运算符:!

&&

||⑷位运算符:<<

>>

~

|

^

&⑸

赋值运算符:=及扩展赋值运算符⑹条件运算符:?:⑺逗号运算符:,⑻指针和地址运算符:*

&⑼求字节运算符:sizeof

⑽分量运算符:.

->

⑾下标运算符:[]

⑿强制类型转换运算符:(类型)

其他:如函数调用运算符()需要注意的问题:⑴、参加操作的数据类型:⑵、要求运算量的个数:一元(单目)、二元(双目)或三元(三目)运算符⑶、优先级操作数两侧的运算符优先级别不同时,则先执行“优先级”高的运算。如:3+5*6⑷、结合性操作数两侧的运算符优先级别相同时,则按结合方向处理(左结合性、右结合性)。如:3*5/6⑸、结果的取值及类型C语言中的所有表达式都具有确定的值。当不同类型的数据进行运算时,注意结果的值及类型。2+3.01.算术运算符和算术表达式基本算术运算符:+-*/%其中:①、+、-、*、/的运算对象可以是整型或实型数据;但如果其中一个运算量为实型,则运算结果为double型。②、/:两个整数相除表示整除,舍去小数部分,结果为整数。③、%:要求两侧的操作数必须为整数。2+3.0=5.02+3.0=5.02-1.0=1.01*3.0=3.05/2=25/2.0=2.51/3=01.0/3=0.3333335%2=121%8=5运算符的优先级和结合性当一个表达式中出现多个运算符时,按各运算符的优先级和结合性确定各运算符的计算顺序。①、*、/、%的优先级相同,+、-的优先级相同;但前三种高于后两种。②、+-*/%均为左结合性。

3+2-5

x-2*3

2*5%7/3自增、自减运算符

++、--:使变量的值增1或减1(均为一元运算符)形式:

⑴、前缀:++i、--i⑵、后缀:i++、i--i++或++i:可看成i=i+1,都能使i的值增1;当++和--在表达式里出现时情形比较复杂,此处不讨论。优先级:++-- */%+-(单目运算符、右结合性)(双目运算符、左结合性)(双目运算符、左结合性)2.赋值运算符和赋值表达式一、赋值运算符(=)

=:双目运算符、优先级14、结合性为自右至左二、赋值表达式1、简单赋值表达式:变量名=表达式如:sum=a+b、temp=a、i=i+12、多重赋值表达式:

变量名1=变量名2=……=变量名n=表达式

a=b=c=3+x三、复合(自反)赋值运算符

+=、-=、*=、/=、%=;<<=、>>=、&=、^=、|=(位运算)a+=5;a=a+5;y*=x-2;y=y*(x-2);x%=y/3;x=x%(y/3);3.逗号运算符和逗号表达式一、逗号运算符(,)

,:双目运算符、优先级15(最低)、结合性为自左至右二、逗号表达式形式:表达式1,表达式2,……,表达式n运算:从左至右依次计算表达式1、表达式2、……、表达式n;结果:表达式n的值(和类型)即为整个逗号表达式的值(和类型)i=1,j=2,k=i+j逗号表达式,值为3i++,j+4,k-2逗号表达式,值为1运算符优先级:()++-- */%+-…=+=等,1、编写程序,输入三角形的三条边,计算并输出三角形的面积。(假设输入的三条边能构成一个三角形)求三角形的面积公式为:提示:求平方根函数sqrt(表达式)函数原型:doublesqrt(doublex)

----教材p.233相关预处理命令:#include<math.h>floata,b,c,s,area;scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);#include<stdio.h>intmain(){return(0);}变量定义输入运算输出#include<stdio.h>#include<math.h>intmain(){

return(0);}floata,b,c,s,area;scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);#include<stdio.h>intmain(){return(0);}变量定义输入运算输出注意:变量的类型,本题应该是float或double,实数尽量使用double。scanf、printf函数的格式:

scanf("%f%f%f",&a,&b,&c);//双引号间不要加其它任何符号

scanf("%lf%lf%lf",&a,&b,&c);//double型输入时应使用%lf3.数学函数的使用方法;同时需加上#include<math.h>

doublepow(doublex,doubley);程序最前面写上:#include<sdtio.h>#include<math.h>求得的值的类型参数的类型s=pow(a+b,2.1);area=pow(s*(s-a)*(s-b)*(s-b),0.5);area=sqrt(s*(s-a)*(s-b)*(s-c));4.计算的顺序:先计算s,再计算area。--后面用到的值必须先计算s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);5.是否三角形的判断:任意两边之和大于第三条边a+b>cb+c>aa+c>b&&&&&&a>0&&b>0&&c>0if()s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);{}复合语句或任意两边之差小于第三边(与上面的条件不能混用):b-c<a&&c-a<b&&a-b<c第4部分C语言数据类型#include<stdio.h>intmain(){

inta=5,b=10,temp;temp=a;a=b;b=temp;printf("a=%d,b=%d\n",a,b);return(0);}#include<stdio.h>#definePI3.1415926intmain(){

floatr,h,s;scanf("%f%f",&r,&h);s=2*PI*r*h+2*PI*r*r;printf("areais%.2f\n",s);return(0);}比较下面两个程序中变量的类型:结论:存放整数则变量定义为int型,输入输出使用%d;存放实数一般定义为float型,输入输出使用%f。例编写程序,输入一个华氏温度,输出对应的摄氏温度。转换公式为:例编写程序,计算20!,并输出结果。1!=12!=23!=64!=245!=1206!=7207!≈50008!≈4万9!≈36万10!≈360万11!≈4千万12!≈5亿13!≈65亿……C语言数据类型:字符型(char)实型(浮点型)单精度型(float)双精度型(double)整型短整型(shortint)整型(int)长整型(longint)枚举类型(enum)数组类型结构体类型(struct)共用体类型(union)文件类型(FILE)基本类型构造类型指针类型空类型(void)C数据类型常量与变量C语言中的常量区分为不同的类型:180-34.6-1.230.0'a''x'整型常量实型常量字符型常量字面常量

符号常量:用一个标识符代表一个常量,即标识符形式的常量。其值不能被改变,也不能再被赋值。定义形式:#define符号常量名常量表达式或字符串如:#definePI3.14PI=3.1415926;×//符号常量不能被赋值变量:在程序运行过程中其值可以被改变的量inta,b,sum;floatx,y;3sum变量名变量值存储单元每个变量在使用之前必须先进行定义(声明),C要求变量必须先定义后使用。进行变量声明后,计算机系统会为声明的变量分配相应大小的存储空间,用以存放数据。整型数据一、整型常量①十进制形式,如112、0、-3;②八进制形式,以数字0开头,如0123;③十六进制形式,以0x开头,如0x123intx,y,z;x=10;y=010;z=0x10;printf("x=%d,y=%d,z=%d\n",x,y,z);x=10,y=8,z=16EG109.C二、整型变量根据数值的范围可以分为三种:①基本型:int;4个字节(-2,147,483,648~2,147,483,647,即-231~(231-1))②短整型:shortint或short;2个字节(-32768~32767)③长整型:longint或long;4个字节,同intunsigned:无符号数signed:有符号数;默认为有符号类型inta,b;unsignedinti,j,fact;实型数据实数又称为浮点数,实型常量有两种表示形式:①、十进制数形式:如0.123、.123、123.0、123.、0.

②、指数形式:字母e(E)之前必须有数字,且e后面的指数必须为整数如:1.23e2、12300E-2、.123e3、123.e0√而:2.1e3.5、E2

×规范化的指数形式:在小数部分中,小数点左边有且只有一位非零的数字,指数占3位。如1.23E+002实型变量C实型变量分为单精度(float)和双精度型(double)。类型字节数有效数字绝对值范围float46~70,1.2×10-38~3.4×1038double815~160,2.3×10-308~1.7×10308longdouble10190,3.4×10-4932~1.1×104932字符型数据

C的字符常量是用单引号('')括起来的一个字符。如'a'、'8'、'x'、'D'、'?'、'$'等。

转义字符:以“\”开头的字符序列。字符含义\n换行,光标移到下一行行首\t水平制表\b退格\r回车,光标移到本行开头\\反斜扛字符“\”\'单引号字符“'”\"双引号字符“"”\ddd1到3位八进制数所代表的字符\xhh1到2位十六进制数所代表的字符'\101'、'\x41':A'\1'、'\x1':☺'\32'、'\x1A':→大小写字母的ASCII值相差32:大写字母转换为小写:

ch=ch+32;小写字母转换为大写:

ch=ch-32;输入一个大写字母,转换为对应的小写字母:#include<stdio.h>intmain(){charch;scanf("%c",&ch);ch=ch+32;printf("%c\n",ch);return(0);}字符ASCII码字符ASCII码A65a97B66b98C67c99D68d100E69e101F70f102G71g103…………Z90z122EG111.C字符常量本身具有数值,就是它们的ASCII码值,如:'A'的值是65,'a'的值是97,'0'的值是48,因此字符型数据和整型数据在0-127范围内通用。说明:字符可以整数形式输出;也可与整数进行相互运算。#include<stdio.h>intmain(){charch;

intx;ch='A';

x=ch+32;printf("%c,%d\n",ch,ch);printf("%c,%d\n",x,x);return(0);}A,65a,97如需要存放ASCII码为128~255之间的字符,需要将字符变量定义为unsignedchar(默认为signedchar:-128~127)EG112.C字符串常量

字符串常量由一对双引号("")括起来的字符序列。如"Howareyou!"、"China"、"a"、"$123.45"、""等。可以输出一个字符串,如:printf("Hello!");。系统在存储字符串时自动在字符串末尾加一个结束标志'\0',据此判断字符串是否结束。"China"China\0'a'"a"aa\0

注意:写字符串时不必加'\0',它是系统自动加上的。字符串的存储:数组(将在第4章介绍)

charstr[50];//可用于存放最多49个字符的字符串第5部分数据的输入输出C语言对数据的输入输出实行函数化。

C语言没有提供输入输出语句,其输入输出功能均由函数来实现。如printf、scanf等称为标准输入输出函数。使用标准输入输出函数时;需要在程序开始使用预编译命令:

#include

<stdio.h>或:#include

"stdio.h"printf函数

格式:printf(格式控制,

输出表列)功能:在终端的当前光标处输出若干个任意类型的数据1.格式控制:用""括起来的字符串,包括两部分:普通字符(包括转义字符):需要原样输出的字符格式说明:由%和格式字符组成,其作用是将输出数据按指定的格式输出printf("ThisisaCprogram!\n");printf("a=%d,b=%d\n",a,b);printf函数使用的格式控制符:格式字符说明d,i以带符号的十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单、双精度数,默认6位小数e,E以指数形式输出单、双精度数,小数位数为6位g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0inta=123,b=-1;floatx=12.34;charch=65;printf("a=%d,b=%d",a,b);输出结果:a=123,b=-1printf("x=%f",x);输出结果:x=12.340000printf("x=%e",x);输出结果:x=1.234000e+001printf("x=%g",x);输出结果:x=12.34printf("%f%%",1.0/3);输出结果:0.333333%printf("ch=%c",ch);输出结果:ch=Aprintf("str=%s","IloveChina!");输出结果:str=IloveChina!EG113.C在格式控制符中,%和后面跟随的单个字符之间又可以插入以下几种修饰符。字符说明字母l用于输出double型数据m(正整数)数据最小宽度(小于实际位数时无效).n(正整数)对实数,表示输出几位小数;对字符串,表示截取的字符个数-输出的数字或字符在域内向左靠EG114.C例:inti=79;%di79%5di79%-5di79%1di79doublex=33.1234567;%fx33.123455%.2fx33.12%6.2fx33.12%4.2fx33.12%ex3.312346e+001%.3ex3.312e+0012.输出表列:由0到多个具体参数组成,其中的参数可以是常量、变量或表达式。printf("%d\n",25);printf("x=%d\n",x);printf("x*y=%d\n",x*y);printf("max=%d\n",max(a,b));EG115.C注意:①输出整数和实数时,数0用以指定数字前的空位是否补0;无0则补空格。floata=1.23;printf("%08.1f\n",a);000001.2

格式控制符的个数与后面的参数个数应相等,且前后位置要一一对应。printf("a=%d,b=%d\n",a,b);

③格式字符与其对应的输出项的类型要保持一致,例如,不应用%f输出整数。scanf函数

格式:scanf("格式控制",地址表列)功能:从键盘读入字符序列,并按指定的格式转换成相应的数据,存储到地址表列所指定的内存单元中

“地址表列”由若干个地址组成,可以是变量的地址或字符串的首地址。#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);return(0);}注:输入整数、实数或字符串时,如果格式控制部分只有格式控制符,不含其它字符,则数据之间以一个空格或多个空格、或Tab键或回车键分隔。EG116.Cscanf函数的格式控制符:格式字符说明d,i用来输入十进制整数c用来输入单个字符s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志'\0'作为最后一个字符。f(e,E,g,G)用来输入单精度实数(float),可以用小数形式或指数形式输入lf,le等用来输入双精度实数(double),可以用小数形式或指数形式输入inta;scanf("%d",&a);charch;scanf("%c",&ch);charstr[50];scanf("%s",str);floatx;scanf("%f",&x);doubley;scanf("%lf",&y);在%和格式字符之间可插入附加的格式说明符:字符说明l用于输入double型数据(用%lf或%le)--特别注意m(正整数)域宽,指定输入数据所占宽度(列数)*赋值抑制符,表示本输入项读入后不赋给任何变量格式:%*m格式字符说明:⑴与printf函数不同,scanf函数的格式控制部分一般不包含其它字符;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);⑵

格式控制中若带域宽,系统自动按域宽截取所需数据;scanf("%3d%3d",&a,&b);12345678↙a=123,b=456scanf("%3c%3c",&ch1,&ch2);abcdefg↙ch1=a,ch2=dchars1[20],s2[20];scanf("%s%3s",s1,s2);ComputerComputer↙s1=Computer,s2=Com⑶赋值抑制符*,表示按格式说明读入数据后不送给任何变量scanf("%2d%*3d%2d",&a,&b);12345678↙a=12,b=67EG117.C、EG118.C、EG119.C;EG120.C⑷输入实数时不能规定精度;scanf("%7.2f",&a);×scanf("%5f",&a);12.345678↙a=12.340000使用scanf函数应注意的问题:⑴地址表列必须提供变量或字符串在内存中的地址,不能写成变量名的形式;inta,b;scanf("%d%d",&a,&b);charstr[20];scanf("%s",str);⑵如果在“格式控制”字符串中除格式控制符外还有其它字符,则在输入时应输入相同的字符;scanf("%d,%d",&a,&b)12,34↙scanf("%d%d",&a,&b)1234↙scanf("%d:%d:%d",&a,&b,&c)12:34:56↙scanf("a=%d,b=%d,c=%d",&a,&b,&c);a=12,b=34,c=56↙⑶在用“%c”输入字符时,空格字符和转义字符也都作为有效字符输入;scanf("%c%c%c",&c1,&c2,&c3);ABC↙c1=A,c2=

,c3=B⑷在输入数据时,遇以下情况之一认为一个数据输入结束:①遇到空格或按Tab键或回车键;②满足域宽,如%4d,输入4位即结束;③遇到非法字符。scanf("%d%c%f",&a,&b,&c);12P12o.35↙a=12,b=P,c=12.00000scanf("%d%d",&x,&y);12,34↙x=12,y无正确数据数据类型及printf、scanf的总结数据整数实数字符字符串变量类型intfloat(一般情况)double(高精度、大数)char数组charstr[20];输入格式%d%f%lf%c%s输出格式%f%E(%e)定义数据类型的原则:只要是存放整数都定义为int;实数:一般情况下定义为float即可,如果需要精度高或数值大则定义为double。关于输入、输出的格式控制符:int型数据的输入输出都使用%d。float型数据的输入使用%f,double型数据输入必须使用%lf。scanf函数中不要加其它符号;printf函数中往往要加,作为输出数据的说明信息。第6部分算法广义的说,为解决一个问题而采取的方法和步骤称为算法。对同一个问题可能有不同的解决方法和步骤,即不同的算法。在保证算法正确的基础上,还要考虑算法的质量,即选择较优的算法。比如,交换两个整数,处理过程如下:方法一:inta=10,b=5,temp;temp=a;a=b;b=temp;方法二:inta=10,b=5;a=a+b;b=a-b;a=a-b;方法三:inta=10,b=5;b=a+b;a=b-a;b=b-a;算法的特性1.有穷性一个算法包含有限的操作步骤2.确定性算法中的每一个步骤是确定的,含义是唯一的3.有零个或多个输入4.有一个或多个输出5.有效性算法中每一个步骤应能有效地执行,并得到确定的结果算法的表示一、自然语言表示法例,求两数之和:①输入a、b两数;②求和sum=a+b;③输出两数之和sum。注意:每一个操作步骤必须是计算机所能实现的。特点:通俗易懂,但文字冗长、易出现歧义,因此较少使用。张三对李四说他的儿子考上了清华大学。二、传统的程序流程图用ANSIC规定的图形符号形象直观的描述算法。名称符号含义箭头流向或路径矩形处理功能圆形连接点平行四边形输入或输出菱形判断圆弧矩形流程的起点或终点尖头框循环双边矩形框调用子程序例输入三个数a、b、c,输出其中的最大者。开始输入a,b,ca>b?a>c?T输出cF结束输出aTb>c?F输出bTF输出c(算法二,常用算法)输入三个数a、b、c,输出其中的最大者。开始输入a,b,cb>max?结束假设a就是最大数max=amax=bc>max?max=c输出maxFT#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);

max=a;

if(b>max)max=b;if(c>max)max=c;printf("max=%d\n",max);return0;}FT三种基本控制结构:

1、顺序结构:按语句书写的先后次序(从上到下、从左到右)执行;

2、选择(分支)结构:根据指定条件的判断结果从若干组语句中选择一组执行;

3、循环结构:根据判断给定条件是否满足,决定是否重复执行程序中的某一段程序。三、N-S流程图

提供了描述三种基本逻辑结构的图形工具;与传统的程序流程图对比如下:⑴、顺序结构A模块B模块(a)传统流程图A模块B模块(b)N-S图⑵、选择(分支)结构(a)传统流程图表示A模块B模块判断条件成立吗?成立不成立(b)N-S图表示判断条件成立吗?成立

不成立A模块B模块⑶、循环结构:①.当型循环结构(while)不满足满足循环体循环条件满足吗?(a)流程图表示(b)N-S图表示循环体

循环条件满足吗?②.直到型循环结构(do-while)不满足满足循环体循环条件满足吗?(a)流程图表示(b)N-S图表示循环体

循环条件满足吗?例描述求ax2+bx+c=0的根的算法。开始输入a、b、cd=b2-4ac输出x1、x2输出两个虚根x1、x2结束d≥0?TTFFd>0?例7输入10个数,找出最大的数,并输出。开始max←输入一个数i←1输入xYNmax←xi←i+1i<10?输出max结束x>max?#include<stdio.h>intmain(){intmax,x,i;scanf("%d",&max);i=1;do{scanf("%d",&x);if(x>max)max=x;i=i+1;}while(i<10);printf("max=%d\n",max);return0;}常用数学函数sqrt(x)pow(x,y)fabs(x)abs(x)exp(x)log(x)log10(x)fmod(x,y)floor(x)ceil(x)sin(x)cos(x)x的平方根(x>=0),即x的y次方,即xydouble型数x的绝对值,即|x|整数x的绝对值x/y整除的余数求不超过x的最大整数,即向下取整求不小于x的最小整数,即向上取整x的正弦(x的弧度)x的余弦(x为弧度)#include<math.h>数学函数应用举例#include<stdio.h>#include<math.h>intmain(){doublex,y1,y2,y3,y4;scanf("%lf",&x);y1=sqrt(2*x-1);y2=pow(2*x-1,y1);y3=log10(2*x+3);y4=fmod(5.2,2.5);printf("y1=%lf,y2=%lf,y3=%lf,y4=%lf\n",y1,y2,y3,y4);printf("%lf\n",floor(5.2));printf("%lf\n",ceil(5.2));

printf("%lf\n",sin(30*3.1415926/180));return0;}函数原型:doublesqrt(doublex);doublepow(doublex,doubley);doublefmod(doublex,doubley);编程计算以下数学公式:本章小结C程序的基本结构:一个程序由一个main函数及其它自定义函数构成

C程序的运行过程:四个上机步骤及VC++6.0的使用

C语言基本语法成分:标识符、运算符与表达式(算术、赋值、逗号)

C语言数据类型:整型(int)、实型(float、double)、字符型(char)

数据的输入与输出:标准输入输出函数scanf、printf

算法:概念、特性、流程图表示与N-S图表示、三种基本控制结构(顺序、选择、循环)

常用数学函数:sqrt、pow、fabs…第二章程序基本结构2.1分支结构2.2关系运算和逻辑运算2.3循环结构2.4break语句和continue语句2.5goto语句2.6指针程序设计☆☆☆☆☆自学例1输入三个数a、b、c,输出其中的最大者。算法一:开始输入a,b,ca>b?a>c?T输出cF结束输出aTb>c?F输出bTF输出c算法一:程序实现#include<stdio.h>intmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);if(a>b){ //复合语句

if(a>c)printf("max=%d\n",a);

elseprintf("max=%d\n",c);}else{

if(b>c)printf("max=%d\n",b);

elseprintf("max=%d\n",c);}return0;}双分支结构:形式:if(表达式)

语句1else

语句2表达式语句2真(非0)假(0)语句1(算法二,常用算法)#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);

max=a;

if(b>max)max=b;if(c>max)max=c;printf("max=%d\n",max);return0;}开始输入a,b,cb>max?结束假设a就是最大数max=amax=bc>max?max=c输出maxFTFT单分支结构:形式:if(表达式)

语句表达式真(非0)假(0)语句#include<stdio.h>intmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);

max=a;

if(b>max)max=b;if(c>max)max=c;printf("max=%d\n",max);return0;}表达式?语句FT例输入x的值,根据下面的函数计算y值。#include<stdio.h>intmain(){return0;}doublex,y;scanf("%lf",&x);if(x>=0)y=1;elsey=-1;printf("y=%lf\n",y);EG202.C例输入三个数x1、x2、x3,按从小到大的顺序输出。分析:使x1、x2、x3中依次存放最小值,次小值和最大值;再依次输出即可。若x1>x2:交换x1和x2若x1>x3:交换x1和x3若x2>x3:交换x2和x3#include<stdio.h>intmain(){}floatx1,x2,x3,temp;scanf("%f%f%f",&x1,&x2,&x3);if(x1>x2)temp=x1;x1=x2;x2=temp;{}复合语句if(x1>x3){temp=x1;x1=x3;x3=temp;}if(x2>x3){temp=x2;x2=x3;x3=temp;}printf("%g,%g,%g\n",x1,x2,x3);说明:①复合语句是一个整体,相当于一个语句;②在复合语句的花括号后不能再加分号;③一个复合语句中可以包含其它的复合语句。EG204.C2.1.3多分支结构例求一元二次方程ax2+bx+c=0的根。a、b、c由键盘输入。分析:需要做下列判断:

a=0:不是一元二次方程;不能计算,结束程序

b2-4ac=0:有两个相等的根;计算并输出,结束程序

b2-4ac>0:有两个不等的根;计算并输出,结束程序

b2-4ac<0:有两个共轭复数根;计算并输出,结束程序问题:如何判断一个实数是否等于0?判断其绝对值是否小于某个数,如1×10-10。需要用到的数学函数:sqrt(x):计算x的平方根fabs(x):计算x的绝对值多分支if语句的形式:if(表达式1)

语句1elseif(表达式2)

语句2elseif(表达式3)

语句3……elseif(表达式n)

语句nelse

语句n+1VC++6.0的默认对其格式注意:表达式的括号后面没有分号;if后面必须带表达式;只有最后一个else后面没有if和表达式。例求一元二次方程ax2+bx+c=0的根。a、b、c由键盘输入。#include<stdio.h>#include<math.h>intmain(){return0;}doublea,b,c;doubledisc,x1,x2,rpart,ipart;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(fabs(a)<=1E-6)/*判断a是否为0*/printf("notaquadratic.\n");elseif(fabs(disc)<=1E-6)/*判断disc是否为0*/printf("twoequalroot:%.2f\n",-b/(2*a));elseif(disc>1E-6)/*disc大于0*/{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("twodistinctrealroot:\n%.2f,%.2f\n",x1,x2);}else/*disc小于0*/{rpart=-b/(2*a);ipart=sqrt(-disc)/(2*a);printf("twocomplexroot:%.2f+%.2fi,%.2f-%.2fi\n",rpart,ipart,rpart,ipart);}EG205.C例输入x的值,根据下面的公式计算y值。#include<stdio.h>intmain(){return0;}doublex,y;scanf("%lf",&x);if(x<1)y=x;elseif(x<10)y=2*x-1;elsey=3*x+5;printf("%.2f\n",y);EG206.C//1≤x<10

×//1<=x<10

×//x>=1&&x<10√//elseif(x>=10)√if语句的简单总结:类型形式适合情况双分支if(表达式)

语句1;else

语句2;满足条件做一些操作;否则执行另一些操作;即二选一单分支if(表达式)

语句;满足条件则执行操作;否则什么也不做多分支if(表达式1)

语句1elseif(表达式2)

语句2……else

语句n+1多个条件中必满足一个,满足则执行其下的操作,其它操作都不做2.1.4if语句的嵌套在if语句的原“语句”中又包含一个或多个if语句1.if(表达式1)语句1elseif(表达式2)语句2

else语句32.

if(表达式1)if(表达式2)语句1

else

语句2二义性?C语言规定:else总是与它前面最近的且未曾配对的if配对。if(表达式1){if(表达式2)语句1else语句2}if(表达式1){if(表达式2)语句1}else

语句2关于if语句的说明:1、表达式一般为关系表达式或逻辑表达式。但在C语言中它也可以是任意的数值表达式。if(3)n=1;if('a')printf("%d",'a');if(n=0)x=1;elsex=-1;2、else只能与if配对使用。仅else本身不能单独作为一个语句使用。if(x>5);y=x;elsey=2*x-1;if(x>5)

;

/*空语句*/y=x;elsey=2*x-1;/*不再与if配对,而单独出现了,因此出现语法错误*/3、每个语句序列可以是一个语句也可以是若干个语句,但要用花括号括起来构成复合语句。if(a>b){temp=a;a=b;b=temp;}if(a+b>c&&b+c>a&&c+a>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%.2f\n",area);}elseprintf("Itisnotatriangle!\n");2.2关系运算和逻辑运算2.1.5条件运算符1、条件运算符:?:(唯一的三目运算符)优先级高于赋值类运算符,右结合性2、条件表达式的一般形式:表达式1?表达式2:表达式3运算过程:首先求表达式1的值,若为真(非0),则求表达式2的值,且整个表达式的值为表达式2的值;若表达式1为假(0),则求表达式3的值,且整个表达式的值为表达式3的值。表达式1整个条件表达式取表达式3的值真(非0)假(0)整个条件表达式取表达式2的值例:x=a>b?a:b;x=((a>b)?a:b);if(a>b)x=a;elsex=b;说明:1、条件表达式不能完全取代if语句,只有在if语句中内嵌语句为赋值语句、且两个分支都给同一个变量赋值时才能代替if语句。if(a>b)printf("%d\n",a);elseprintf("%d\n",b);if(a>b)x=a;elsey=b;2、条件表达式中,表达式1、表达式2和表达式3的类型可以不同。若表达式2和表达式3类型不同,则整个条件表达式的值应为二者中较高的类型。2>1?1:1.5值为1.0

0?10:'a'值为972.1.6开关语句switch例:学生成绩管理中,要将输入的百分制转换为五级制,规则如下:score≥90:输出A80≤score≤89:输出B70≤score≤79:输出C60≤score≤69:输出Dscore<60:输出Eif(score>=90)printf("A\n");elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");elseif:多条件并列测试,从中选一执行switch:单条件测试,从中选一或多执行1、格式:switch(表达式)

{

case

常量表达式1:语句1

case

常量表达式2:语句2

┆┆┆

case

常量表达式n:语句n

default:语句n+1

}2、功能:先计算表达式的值,然后测试该值是否与某常量表达式的值相同①、若有相同者,流程转向其后的语句执行②、若无,再看有没有default部分:若有default,则执行其后面的语句;若无default,则switch语句什么也不做,流程转向其后继语句。中间加空格隔开score≥90:输出A80≤score≤89:输出B70≤score≤79:输出C60≤score≤69:输出Dscore<60:输出E#include<stdio.h>intmain(){intscore,temp;scanf("%d",&score);

temp=score/10;switch(temp){case10:case9:printf("A\n");break;case8:printf("B\n");break;case7:printf("C\n");break;case6:printf("D\n");break;default:printf("E\n");}return0;}EG207.C注意:什么地方要加break,什么地方不加break!#include<stdio.h>intmain(){return0;}intscore;charch;scanf("%d",&score);printf("Grade:%c\n",ch);switch(score/10){case10:case9:ch='A';break;case8:ch='B';break;case7:ch='C';break;case6:ch='D';break;default:ch='E';}先赋值,再输出EG207.C说明:1、switch后面括号内的表达式可以是整型,也可以是字符型2、case后常量表达式只起语句标号的作用;各个case后常量表达式的值必须互不相同,否则矛盾。3、各个case和default的出现次序不影响执行结果。4、case后的语句为复合语句时可省略花括号。5、可在每个case分支的最后加上一个break,使流程跳出switch语句,而不再执行其它分支。6、多个case可以共用一组执行语句。case10:case9:printf("A\n");break;但不能写成:case10,9:printf("A\n");b

温馨提示

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

评论

0/150

提交评论