版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章概述第1节语言概述计算机程序设计的语言主要有:机器语言汇编语言高级语言一、C语言的产生与发展C语言的前身是BCPL(BasicCombinedProgrammingLanguage)语言,诞生于1967年,由英国剑桥大学的MartinRichard推出。1970年美国贝尔实验室的KenThompson将BCPL语言进一步简化,设计出很接近于硬件的B语言。1972年在美国贝尔实验室,D.M.Ritchie又在B语言的基础上设计了C语言。C语言与UNIX操作系统互相促进,随着UNIX的广泛使用,C语言也迅速得到推广。1978年BrianW.Kernighan和DennisM.Ritchie(合称K&R)合著了一本影响深远的著作《TheCProgrammingLanguage》,以后C语言先后移植到大、中、小、微型机上,虽独立于UNIX,但也出现很多C语言版本。1983年由美国国家标准化协会(ANSI)在此基础上制定了ANSIC标准。二、C语言的特点(1)语言简洁紧凑。C语言共有32个关键字,9种控制语句,程序书写形式自由,如语句i=i+1;可以写成i++;源程序短。(2)数据类型丰富。C语言的数据类型包括整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型,自定义数据类型等。指针是C语言的一大特点。(3)运算能力强。C语言多达40余种运算符,除了具有一般高级语言所拥有的四则运算及逻辑功能外,还具有二进制的位(bit)运算,可以实现各种复杂的运算。(4)可移植性好。C语言程序不依赖于计算机硬件系统,只需要安装C语言编译系统,基本上不做修改就能运行于各种型号的计算机和各种操作系统。(5)结构化特征。C语言具有顺序、选择和循环三种逻辑结构,采用自顶向下、逐步细化的结构化程序设计特点,容易理解,便于维护。不足之处是语法限制不严格,程序的安全性较低,运算符功能强但优先级太多,难记忆、难理解等。第1章概述第2节简单C语言程序介绍C语言程序由一个或多个函数组成。每个函数都由函数首部和函数体两部分组成【例1.1】在屏幕显示:“WelcometoBeijing.”#include<stdio.h>main(){printf(“WelcometoBeijing.”);}程序运行结果:WelcometoBeijing.【例1.2】求两个整数之和且将运行结果显示在屏幕上。#include<stdio.h>main(){intx,y,sum;x=3;y=12;sum=x+y;/*求x和y的和,并将结果放入变量sum中*/printf(“sum=%d\n”,sum);}程序运行结果:sum=15【例1.3】自定义函数,求两个整数中的较大者且将结果输出。#include<stdio.h>main(){inta,b,c;scanf(“%d%d”,&a,&b);//输入变量a和b的值c=max(a,b);//调用max函数,变量a和b是实际参数printf(“max=%d\n”,c);}intmax(intx,inty)//定义max函数,变量x和y是形式参数{intz;if(x>y)z=x;elsez=y;return(z);}//将z的值返回到函数的调用处程序运行结果:34↙max=4第2章数据类型、运算符
及表达式第1节C语言的数据类型一、C语言提供了丰富的数据类型:√√√第2章数据类型、运算符
及表达式第2节常量与变量一、常量常量根据数据类型的不同也分为不同的类型。3、0、-14是整型常量,3.5、-9.82是实型常量,´a´、´*´是字符型常量,"CHINA"、"3*5?7"是字符串常量。1、整型常量C语言中整型常量可以用十进制、八进制、十六进制来表示。(1)十进制整数:逢十进一,数字范围在0-9之间,例如:112,0,-67等。(2)八进制整数:逢八进一,数字范围在0-7之间,为了与别的进制数区分,在数前加一个0(注意:是数字0不是字母o),例如:032,-056等。(3)十六进制整数:逢十六进一,范围在0-9,A-F(一位数字不够用了,用字母。字母A代表10,字母B代表11,以此类推),为了与别的进制数区分,在数前加一个0x(数字0和字母x),例如0x1A3,-0x67等。【例2.1】#include<stdio.h>main(){inta=112,b=0112,c=0x112;printf(“%d,%d,%d\n”,a,b,c);a=b=c=418;printf(“%d,%o,%x\n”,a,b,c);}程序运行结果:112,74,274418,642,1a22、实型常量(实数)实型常量只能是十进制数形式表示,通常有两种表示方法:(1)十进制数形式:由数字(0-9)和小数点组成。
例如3.14,-0.36,145.23等。(2)指数形式:类似于科学计数法,比如要表示45×102,需要写成45e2或45E2,C语言要求这种指数形式的字母e或E之前必须有数字且e或E后面的指数必须是整数。3、字符型常量C语言的字符型常量是由单引号(单撇)括起来的一个字符。例如:´*´、´?´、´a´、´A´、´3´等。注意:´a´和´A´视为不同的字符常量。C语言还允许一种以“\”开头的特殊形式字符常量。转义字符含义及功能\n换行,将当前位置移到下一行开头\t水平制表,跳到下一个Tab位置\b退格,将当前位置移到本行开头\r回车,将当前位置移到本行开头\f换页,将当前位置移到下页开头\\输出反斜杠\\´输出单撇'\"输出双撇"\ddd输出1-3位八进制数所代表的字符\xhh输出1-2位十六进制数所代表的字符4、字符串常量C语言的字符串常量是由一对双引号(双撇)括起来的字符序列。字符串常量在内存中存储时,除了字符本身占的字节数外,还在尾部自动增加一个转义字符´\0´作为字符串结束标识。字符串"A"与´A´是有区别的,"A"是字符串常量占2个字节,´A´是字符常量占用1个字节。5、宏一般形式为:#define标识符常量表达式【例2.2】已知圆半径值是5.2,求圆面积。#include<stdio.h>#definePI3.14main(){floatr,s;r=5.2;s=PI*r*r;printf(“s=%f\n”,s);}二、变量
变量是指在程序运行过程中其值可以改变的量。常见的有整型变量、实型变量和字符型变量等。(1)变量名、变量值要区分。(2)不同类型的变量占不同字节数的存储单元。理论上int型变量占2个字节的宽度,long型变量占4个字节,float型占4个字节,double型占8个字节,而char型占1个字节。不同的编译系统中可能有变化,例如VC++6.0中int型作4个字节处理。(3)在C语言中,变量一定要“先定义,后使用”。例如:intx=5;x
5(4)标识符是用来表示各种程序对象的,如变量名、函数名、文件名等。C语言规定标识符只能是字母、数字、下划线且第一个字符必须是字母或下划线(_)。(5)关键字不能用作标识符,也不能起作变量名。C语言中的关键字共有32个:auto breakcase char constcontinuedefaultdodoubleelse enumexternfloat forgotoifint long registerreturnshortsignedstaticwhilesizeofstructswitchtypedefunionunsignedvoidvolatile1、整型变量分为3种类型:(1)基本整型,用int表示,占2个字节的存储空间。(2)短整型,用shortint或short表示,占2个字节的存储空间。(3)长整型,用longint或long表示,占4个字节的存储空间。【例2.3】#include<stdio.h>main(){inta,b,c;a=32;b=a+14;c=a-b;printf("%d,%d,%d\n",a,b,c);}程序运行结果:32,46,-142、实型变量实型变量分为3种类型:(1)单精度型,用float表示,占4个字节的存储空间。(2)双精度型,用double表示,占8个字节的存储空间。(3)长双精度型,用longdouble表示,占16个字节的存储空间。(用得少)【例2.4】#include<stdio.h>main(){floatx1,x2;x1=23.0;x2=3;printf("%f,%f\n",x1*x2,x1/x2);}程序运行结果:69.000000,7.666667【例2.5】#include<stdio.h>main(){floatx;x=2345.123456;printf("%f\n",x);}程序运行结果:2345.1235353、字符型变量字符型变量用char来定义,一个字符型变量只能存放一个字符常量。例如:charc1=′A′;charc2=′a′;等价于:charc1=′A′,c2=′a′;【例2.6】#include<stdio.h>main(){charc1,c2;c1='A';c2='a';printf("%c,%c\n",c1,c2);c1=c1+32;c2=c2-32;printf("%c,%c\n",c1,c2);printf("%d,%d\n",c1,c2);}程序运行结果:A,aa,A97,65第2章数据类型、运算符
及表达式第3节运算符与表达式C语言中提供了很丰富的运算符,可归类成以下几类:(1)算术运算符:(+、-、*、/、%、++、--)(2)关系运算符:(>、<、>=、<=、==、!=)(3)逻辑运算符:(&&、||、!)(4)赋值运算符:(=)(5)条件运算符:(?:)(6)逗号运算符:(,)(7)求字节数运算符:(sizeof)(8)指针运算符:(*和&)(9)位运算符:(<<、>>、~、|、^、&)(10)其它:强制类型转换运算符、分量运算符、下标运算符、函数调用运算符等。*一、算术运算符与表达式+(加法运算符)如:5+6=11-(减法运算符)如:10-4=6*(乘法运算符)如:2*(-3)=-6/(除法运算符)如:8/2=4%(模除运算符)如:8%2=0想一想:如果是(-8)%3,8%(-3),(-8)%(-3)的结果又是多少?++(自增运算符)有两种形式:++i和i++--(自减运算符)有两种形式:--i和i--【例2.7】#include<stdio.h>main(){inti=3,j=4,m,n;m=++i;n=j--;printf("i=%d\nj=%d\nm=%d\nn=%d\n",i,j,m,n);}程序运行结果:i=4j=3m=4n=4利用算术运算符可以写出一些数学表达式:写成标准的C语言表达式是:(a-b)/(a+b)a-b
a+b2x2+4y写成标准的C语言表达式是:2*x*x+4*y或者利用数学函数pow,写成:2*pow(x,2)+4*y二、关系运算符与表达式>(大于运算符)如:5〉3结果为1<(小于运算符)如:5<3结果为0>=(大于或等于运算符)如:3>=3结果为1<=(小于或等于运算符)如:3<=3结果为0==(等于运算符)如:3==2结果为0!=(不等于运算符)如:3!=2结果为1【例2.8】#include<stdio.h>main(){inta,b,c,d,e;a=2;b=-3;c=10;d=(a+2)<b;e=b>=(7-c);printf("%d,%d\n",d,e);}程序运行结果:0,1三、逻辑运算符与表达式&&(逻辑与运算符)||(逻辑或运算符)!(逻辑非运算符)逻辑运算的真值表【例2.9】#include<stdio.h>main(){intx=12,y=-8,z=5;printf("%d\n",x>=y&&z-5);printf("%d\n",x*2-16||y);printf("%d\n",!z/2&&(y+2));}程序运行结果:010注意:&&(逻辑与)与||(逻辑或)又称为短路运算符。&&的左边值是0,则右边被短路,不做,逻辑与的值是0;||的左边值是1,则右边也被短路,不做,逻辑或的值是1。【例2.10】#include<stdio.h>main(){inti,j,k,p;i=j=k=-1;p=++i&&j--&&k++;printf("%d\n",p);printf("%d,%d,%d\n",i,j,k);i=j=k=3;p=i++&&j--||--k;printf("%d\n",p);printf("%d,%d,%d\n",i,j,k);}程序运行结果:00,-1,-114,2,3四、
赋值运算符与表达式
1、赋值运算符“=”
作用是将赋值号右边的值或表达式的值赋值给左边的变量。例如:x=5;
x=y+2;
x=(z=4);相当于x=z=4;2、复合运算符(复合的赋值运算符)在C语言中,在赋值运算符之前加上算术运算符或位运算符构成复合的赋值运算符。共有10种,分别是:+=、-=、*=、/=、%=<<=、>>=、&=、^=、|=例如:(1)x+=5;相当于x=x+5;(2)z-=x+2;相当于z=z-(x+2);【例2.11】#include<stdio.h>main(){inta=8,b,c;a+=a-=a*a;printf("a=%d\n",a);c=(a=4)/(b=3);printf("c=%d\n",c);}程序运行结果:a=-112c=1五、逗号运算符与表达式1、一般形式:表达式1,表达式2,......表达式n例如:2*5,10/22、逗号运算符是所有运算符中级别最低的。例如:a=b=2,2+7相当于(a=b=2),2+73、逗号表达式可以嵌套例如:(x=2-3,x*5),x+3=5=9=2六、条件运算符与表达式条件运算符是一个三目运算符,也是C语言中唯一的三目,有三个操作对象。1、一般形式:表达式1?表达式2:表达式32、功能:如果判断表达式1的值是真或假,为真执行表达式2,为假则执行表达式3。例如:max=(a>b)?a:b;3、几点说明:(1)条件运算符“?”与“:”不可分。(2)条件运算符的优先级低于关系运算符和算术运算符却高于赋值运算符。max=(a>b)?a:b;等同于max=a>b?a:b;(3)条件运算符也可以嵌套,其结合方向是“自右向左”。a>b?a:c>d?c:d等同于a>b?a:(c>d?c:d)【例2.12】#include<stdio.h>main(){inta=10,b=20,c=30,d=40;printf("%d",a>b?a:c>d?c:d);}程序运行结果:40(4)“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。【例2.13】#include<stdio.h>main(){intx=10,y=20;printf("%d",x==y?(x=100):(y=200));}程序运行结果:200【例2.14】#include<stdio.h>main(){intx=10;x%2==0?printf(“偶数!”):printf(“奇数!”);}程序运行结果:偶数!七、求字节数运算符与表达式(1)一般形式:sizeof(类型名或变量名)(2)功能:给出指定类型在内存中所占的字节数。【例2.15】在VC++6.0中调试。#include<stdio.h>main(){intx;longy;floatz;doublek;charc;printf("int占%d个字节\n",sizeof(x));printf("long占%d个字节\n",sizeof(y));printf("float占%d个字节\n",sizeof(z));printf("double占%d个字节\n",sizeof(k));printf("char占%d个字节\n",sizeof(c));}程序运行结果:int占4个字节long占4个字节float占4个字节double占8个字节char占1个字节第2章数据类型、运算符
及表达式第4节不同类型数据间的混合运算整型和浮点型可以混合运算,字符型与整型又通用,所以整型、实型、字符型间可以混合运算,但需要转换,方法有自动类型转换和强制类型转换两种。1、自动类型转换(1)赋值运算中的类型转换例如:intx;x=3.14;x的值是3。当实数赋给整型变量时,自动丢弃小数部分。(2)混合运算中的类型转换例如:2*´A´+1.5不同类型的数据进行混合运算时,C编译系统自动转换,其转换规则:注意:箭头方向只表示数据类型级别的高低,由低向高转换。2*´A´+1.52*´A´+1.5假定1.5是float型,那最后结果就是float型,如果1.5是double型,那么最后结果就是double型。
2、强制类型转换(1)一般形式:(类型名)(表达式)例如:(float)x//将x强制转换成float型
(int)(x+y)//将x+y的值强制转换成int型注意:表达式要用括号括起来。(int)x+y//只将x强制转换成int型,然后与y值相加(2)强制转换会得到一个所需的中间变量,原来的数据类型并未发生变化。【例2.18】#include<stdio.h>main(){floatm;intn;m=-34.28;n=(int)m;printf("%d\n",n);printf("%f\n",m);}程序运行结果:-34-34.2800003、运算符的优先级与结合性作为C语言的基础,首先要能正确算出表达式的值。附录3列出的是全部运算符的优先级和结合性规则。同一行具有相同优先级,上一行运算符的优先级高于下一行。同一行的运算符同时出,按结合性规则计算。4、当表达式中既有自动类型转换又有强制类型转换时,又该如何分析呢?【例2.19】#include<stdio.h>main(){intx=1;floaty=4.2,z=-9.78,k;charc='d';k=(float)x*2+((z>y)&&--x)-(int)(z-12.3)%(c-97);printf("%f\n",k);printf("%d\n",x);}程序运行结果:3.0000001第3章基本语句与顺序
结构程序设计
3.1C语句概述3.1C语句概述C语言的语句用来向计算机系统发出操作命令。C语句都是用来完成一定操作任务的。C语句可以分为以下五类:(1)控制语句。控制语句用于控制程序流程,主要有:与选择结构的相关的if,switch,break语句,与循环相关的while,for,continue,break语句,与函数有关的return语句等。(2)函数调用语句。由函数调用加一个分号构成一条语句。如“printf("Cprogram\n");”就是函数调用语句,由函数名、实际参数以及分号构成,上例中,printf是函数名,Cprogramy\n是实际参数。函数名既可以是C语言提供的库函数名,也可以是用户定义的函数名。(3)表达式语句。在任何一个表达式后面加上一个分号就构成一条表达式语句,它是C语言程序中最常用的语句。例如:
y=a+6;//赋值表达式语句
x+y;//算术表达式语句(4)空语句。只有一个分号的语句就是空语句,它什么也不做。写法如下:;空语句经常出现在选择结构和循环结构中。(5)复合语句。复合语句是用符号“{”和“}”把数据声明部分和若干语句组合在一起而构成的,其中数据声明部分根据情况可有可无,例如:
{inta,b;a=a+b;b=a-b;a=a-b;}3.2数据输入与输出
3.2.1数据输入与输出的概念
3.2.2字符数据的输入输出函数所谓输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(如显示器)输出数据称为输出,从输入设备(如键盘)向计算机输入数据称为输入。C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备为输入输出对象的。其中有:putchar、getchar、printf、scanf、puts、gets这些函数构成。在本章中主要介绍前4种基本输入输出函数。3.2.1数据输入与输出的概念在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包含到用户源文件中。在使用标准输入输出库函数时,要用到“stdio.h”文件中提供的信息。文件后缀“h”是head的缩写,#include命令都是放在程序的开头,因此这类文件被称为“头文件”。在调用标准输入输出库函数时,文件开头应该有以下预编译命令:#include“stdio.h”或#include<stdio.h>3.2.2字符数据的输入输出函数最简单的输入输出函数是:getchar()和putchar()。两者的功能分别是从键盘读一个字符和向显示屏显示一个字符。1、getchar()函数先将输入字符放到缓冲区里,等待回车键,当敲入回车键后才能获取所输入的字符并把结果回显到显示器上。语法格式:getchar();2、putchar函数的作用是向终端输出一个字符。语法格式:putchar(c);它的作用是输出变量c的内容,c可以是字符变量也可以是整型变量。#include“stdio.h”main(){charc;c=getchar();putchar(c);}程序运行结果:x↙x通过键盘输入字符x,并输入回车键,显示字符x。【例3.1】单个字符输入、输出举例(1)getchar()函数只能接收一个字符,且后面的空括号不能少(无实参)。同样,putchar(c)一次只能输出一个字符。putchar(c),c是字符变量或字符常量,也可以是转义字符,当为常量时,单撇号不能少。例如:putchar(‘A’);putchar(‘\110’);(2)getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋值而直接作为表达式的一部分。上例中“c=getchar();putchar(c);”可以合并成一条语句“putchar(getchar());”。当然,也可以用后面所讲的printf()函数输出。例如:c=getchar();putchar(c);运行时如输入\101,则输入字符A,因为转义字符八进制101相当于十进制数65,ASCII字符就是A。3.3格式输入与输出3.3.1printf函数
3.3.2scanf函数3.3.1printf函数printf()函数是一个标准库函数,它在头文件“stdio.h”中定义。它的作用是向终端(显示屏)输出若干个任意类型的数据语法格式:printf(格式控制[,输出表列]);例如:printf("%d,%c\n",i,c);说明:
1、“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两部分。①格式说明。格式说明由“%”和格式字符组成,如%d,%c等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。②普通字符。普通字符即为原样输出的字符。例如上面“”内除了格式说明之外的逗号、空格、字符串和换行符。说明:2、“输出表列”是需要输出的一些数据,可以是表达式,也可以是变量。①用“[]”括起来表示内容可以省略,当省略该项时,该“格式控制”中只能有②及普通字符。如printf("thisisCprogram");"thisisCprogram"直接在显示器上输出。注意双撇号不输出。②输出项有多项时,之间必须用逗号作为分隔符。要求格式字符和各输出项在数量和类型上应该一一对应。输出项可以是变量,常量或表达式。例如:printf(“%d,%d”,a,b);“%d”称为格式说明,“,”称为普通字符,照原样输出。如果a、b的值为6、7则输出为6,7。总而言之,变量按照格式控制的形式输出,普通字符照原样输出。下面具体的介绍常用的格式字符:对于整形数据前面已介绍过有三种形式即:十进制,八进制,十六进制。(1)d格式符。用来输出十进制整数。有以下几种用法①%d。按十进制整形数据的实际长度输出。②%md,%-md
m为指定的输出数据的宽度。如果数据的位数小于m,则左端补空格以满足宽度,若大于m,则按实际位数输出。当为-m时,右端补空格以满足宽度。例如:intx=1236;printf("%6d,%-6d,%3d",x);则输出结果为□□1236,1236□□,1236注意:前两个1236的前面两空格和后面两空格是因为宽度不足6位,左补和右补,第三个1236前后均无空格,宽度不足原数据长度时,数据照原样输出。③%ld:输出长整形数据。例如:longa=123456;printf("%ld",a);此时必需要用%ld输出,如果用%d就会出错,因为前面章节已讲过c语言中int是2个字节,数据的范围为-32768至32767,(vc中int是4个字节),而123456超出了整形的范围,所以变量应定义成long,否则就会出错。当然ld前也可以加宽度m,输出指定的宽度。(2)o格式符:以八进制整数形式输出。由于整型数据是以二进制补码的形式存放的,因此输出的数值不带符号,即无负数。例如:inta=-2;printf("%d,%o",a,b);-2在内存中的存放形式如下(这里int以16来处理,如果vc++6.0,则应以32位来理解,但原理一样的):输出结果为-2,177776不会输出带负号的八进制整数。对长整形也可以用“lo”格式输出。同样前面也可以用m来指定宽度。1111111111111110(3)x格式符:以十六进制形式输出整数,也不会输出负数。例如:inta=-2;printf("%d,%x",a,b);输出结果为-2,fffe对长整形也可以用“lx”格式输出,前面也可以用m来指定宽度。当x大写时,输出的十六进制字母为大写。(4)u格式符:用来输出unsigned型数据,即无符号数,以十进制整数形式输出。一个有符号整(int型)也可以用%u格式输出;反之,一个无符号型(unsigned)数据也可以用%d格式输出。无符号型数据也可用%o,%x格式输出。【例3.2】整形数据的几种输出形式。main(){unsigneda=65535;intb=-2;printf("a=%d,%o,%x,%u\n",a,a,a,a);printf("b=%d,%o,%x,%u\n",a,a,a,a);}运行结果为:a=-1,177777,ffff,65535b=-1,177776,fffe,65534注意:记住整型、无符号数据的表示范围,如果超出它们的范围就会得到不一样的值,以满足它们的范围。对于字符型数据主要有如下两种形式:(1)c格式符:用来输出一个字符。例如:charx=´a´;printf("%c",x);输出字符’a’。因为字符占一个字节,在内存中是以二进制ASCII码形式存放的。所以一个整数,只要它的值在0~255范围内,也可以用“%c”按字符形式输出;反之,一个字符数据也可以用整数形式输出。【例3.3】字符、整型数据的输出main(){intx=65;charc=´A´;printf("%c,%c\n",c,x);printf("%d,%d\n",c,x);}运行结果为:A,A65,65当然也可以用m来指定输出宽度。(2)s格式符:用来输出一个字符串。有几种用法:①%s输出字符串,不包括双撇号,例如:printf(“%s”,“ABCD”);输出字符串“ABCD”(不包括双撇号。②%ms,%-ms输出的字符串占m列,如字符串本身长度大于m,则照原样输出,如串长小于m,则左补空格,以满足宽度m。-m右补空格。③%m.ns,%-m.ns输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格,以满足宽度m。-m时n个字符输出在m列的左侧,右补空格。当n小于等于m时,字符照原样输出。当m等于n时,m可省略。【例3.4】字符串的输出。
main(){printf("%s,%3s,%.2s\n","CHINA","CHINA","CHINA");printf("%8.2s,%5.6s,%-8.2s\n","CHINA","CHINA","CHINA");}运行结果为:CHINA,CHINA,CH□□□□□□CH,CHINA,CH□□□□□□对于实型数据前面已讲有两种形式,小数形式,指数形式,下面分别对其进行介绍:(1)f格式符:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法。①%f不指定字段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。应当注意,在输出的数字中并非全部数字都是有效数字。单精度实数的有效位数一般为7位。【例3.5】输出实数时的有效位数。main(){floatx,y;X=111111.111;y=222222.222;printf("%f",x+y);}程序运行结果为:333333.328175显然,只有前7位数字是有效数字。双精度也可用%f格式输出,它的有效位数一般为16位,给出小数6位,但无论是单精度还是双精度,小数点后面系统会自动保留6位。②%m.nf,%-m.nf指定输出的数据其占m列,其中有n位小数。如果数值长度小于m,则左端补空格。%-m.nf与%m.nf基本相同,只是右端补空格。【例3.6】输出实数时指定小数位数。main(){floatx=123.457;printf("%f,%10.2f,%.2f,%-10.2f,%10f",x,x,x,x,x);}输出结果如下:123.457000,□□□□123.46,123.46,123.46□□□□,123.457000(2)e格式符:以指数形式输出实数。可用以下形式。①%e,不指定输出数据所占的宽度和数字部分的小数位数,有的C编译系统自动指定给出数字部分的小数位数为6位,指数部分占5位(如e+003),其中“e”占1位,指数符号占1位,指数占3位。数值按规范化指数形式输出(即小数眯前必须有且只有1位非零数字)。例如:printf("%e",123.457);运行结果:1.234570e+002所输出的实数共占13列宽度。(注:不同系统的规定略有不同)②%m.ne,%-m.n,m、n和“-”字符的含义与前面相同。此处n指输出的小数部分(又称尾数)的小数位数。若x=123.457,执行printf("%e,%10.2e,%.2e,%10.2e,%10e",x,x,x,x,x);运行结果:1.234570e+002,□1.23e+002,1.23e+002,1.23e+002□,1.234570e+002说明:最后一个输出项按%10e输出,即只指定了m=10,未指定n,自动使n=6,整个数据长13列,超过给定的10列,则按实际长度输出。(3)g格式符:用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。例如,若x=123.457,执行printf("%f,%e,%g",x,x,x);运行结果:123.457000,1.234570e+002,123.457用%f格式输出占10列,用%e输出占13列,用%g格式时,自动从上面两种格式中选择短者,且不输出无意义的0,因此输出123.457,%g格式用得较少。以上介绍了9种格式符,归纳如表3-1所示。格式字符说明
举例输出结果
d以带符号的十进制输出整数(正数不输出符号)
printf(“%d”,a);
65
o以八进制无符号形式输出整数(不输出前导符0)
printf(“%o”,a);101x,X以十六进制无符号形式输出整数(不输出前导符0x),当x为小写时则输出a-f,当X大写时,输出A-F
printf(“%x”,a);41u以无符号十进制形式输出整数printf(“%u”,a);4294967231c以字符形式输出,只输出一个字符
printf(“%c”,a);As输出字符串
printf(“%s”,a);abf以小数形式输出单、双精度数,默认输出6位小数printf(“%f”,a);31.423560e,E以指数形式输出实数,用e/E时指数以“e”或E表示printf(“%e”,a);3.142356e+001g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,指数以大写表示printf(“%g”,a);31.4236设inta=65;floatx=31.42356;在格式说明中,在%和上述格式字符间可以插入以下几种附加符号(又称修饰符),如表3-2所示。表3-2printf的附加格式说明字符字符
说明
l,L
用于长整型整数,可加在格式符d,o,x,u前面m(代表一个正整数)
数据最小宽度n(代表一个正整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数-输出的数字或字符在域内向左靠3.3.2scanf函数1.语法格式语法格式:scanf(格式控制,地址表列);说明:“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。在用printf函数输出时,务必注意数据类型应与上述格式说明匹配,否则将会出现错误。对使用printf函数还要说明以下几点。(1)除了X,E,G外,其他格式字符必须用小写字母,如%d,%s不能写成%D,%S。(2)可以在printf函数中的“格式控制”字符串内包含第3章节的“转义字符”,如“\n”、“\t”、“\ddd”、“\xhh”等。(3)上面介绍的d,o,x,u,c,s,f,e,g等字符,如用“%”后面就作为格式符号。一个格式说明以“%”开头,以上述9个格式字符之一为结束,中间可以插入附加格式字符。(4)如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,执行printf("%f%%",1.0/3);运行结果:0.333333%(5)如果想输出多个相同的字符串,则可以用printf(“%*s”,10,“xx”);等介于printf(“%10s”,”xx”);当然10也可以换成变量,这条语句在用于文本作图时可以省略一个for循环,很有作用。【例3.7】用scanf函数输入数据。main(){inta,b,c;floatx,y;scanf("%d%d%d",&a,&b,&c);scanf("%f,%f",&x,&y);}程序运行结果:789↙3.2,5.6↙&a,&b,&c中的“&”是“地址运算符”,&a指a在内存中的地址。“%d%d%d”表示要按十进制形式输入3个数据。输入数据时,在两个数据之间以一个或多个空格间隔,也可以用Enter键,Tab键均可。而其它符号输入不合法,如7,8,9则不合法。scanf()函数所用到的格式说明符与printf()几乎完全相同,只是%f、%e、%g、%G在scanf()中只用于float型,而用于double型时要求使用“l”修饰符表3-3列出了scanf用到的格式字符。表3-4列出scanf可以用的附加说明字符(修饰符)。表3-3scanf的格式字符格式字符
说明
d用来输入有符号的十进制整数u用来输入无符号的十进制整数o用来输入无符号的十六进制整数c用来输入单个字符s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始(空白不等价于空格,前者的ASCII码值为0而后者的ASCII码值为32),以第一个空白字符结束。字符串以串结束标志’\0’(0)作为其最后一个字符。f用来输入实数,可以用小数形式或指数形式输入E,e,g,G与f作用相同,e与f,g可以互相替换(大小写作用相同)表3-4scanf的附加格式说明字符字符
说明
l
用于输入长整型数据(可用%ld,%lo,%lx,%lu)以及double型数据(用%lf,%le)域宽
指定输入数据所占宽度(列数),域宽应为正整数*表示本输入项在读入后不赋给相应的变量2.说明(1)对unsigned型变量所需的数据,可以用%u、%d或%o、%x格式输入。(2)可以指定输入数据所占的列数,系统自动按它截取所需数据。例如:scanf("%3d%3d",&a,&b);输入12345↙系统自动将123赋给变量a,45赋给变量b,即当输入数据的宽度超过指定宽度时系统会截取指定的宽度,而当输入数据的宽度小于指定宽度时系统只能取输入数据的宽度,此方法也可用于字符型或字符串型。但字符型只能接受一个字此方法也可用于字符型或字符串型,但字符型只能接受一个字符,如:chara,b[30];scanf("%3c,%3s",&a,b);ABC,ABC↙则字符变量a的的值为A,字符串变量b的值为ABC。因为字符变量只能接受一个字符,而字符串数组b可以接受多个字符(%3s表示最多可接受3个字符,输入少于3个时,按实际长度,多于3个时只接受3个)。(3)如果在%后有一个“*”附加说明符,表示跳过它指定的列数。例如:scanf("%2d%*3d%2d",&a,&b);输入1234567↙则a的值为12,b的值为67系统会将12赋给整型变量a,%*3d表示读入3位整数但不赋给任何变量。然后再将2位整数67赋给整型变量b。即“345”被跳过,因此,当不需要其中某些数据时,可能此法“跳过”它们。(4)输入数据时不能规定精度,例如:scanf("%6.2f",&x);是不合法的,不能企图用这样的scanf函数输入以下数据而使a的值为123.46。3.使用scanf函数时应注意的问题(1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。例如,下面写法则是错误的。scanf(“%d,%d”,a,b);变量a,b前面应加&,这是容易错误的地方,读者应注意,C语言中唯一不需要加&的地方是字符串数组名前面。(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在畋数据时在对应位置应输入与这些字符相同的字符。例如:scanf("%c%c%c",&a,&b,&c);ABC↙说明:字符´A´赋给变量a,空格字符赋给变量b,字符´B´赋给变量c,%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此,’‘作为下一个字符赋给变量b,如果想使变量a、b、c的值为ABC,正确的输入方法是:ABC即:对于字符型数据除了格式符外其它的字符照原样输入。如“格式控制”中无其它字符,字符间不能输入其他字符作为间隔。(4)当使用多个scanf()函数连续给多个字符型变量赋值时,注意输入的方法。例如:scanf("%c",&a);scanf("%c",&b);若要使变量a的值为´A´,变量b的值为´B´,则正确的输入方法是:AB↙而不是A↙B↙,否则变量b的值就会是↙。(5)在输入数据时,遇以下情况时认为该数据结束。①遇空格,或按“回车”或“跳格”(Tab)键;②按指定的宽度结束,如“%3d”,只取3列;③遇非法输入。例如:scanf(“%d%c%f”,&a,&b,&c);12a123o.21↙第一个数据对应%d格式,在输入12之后遇字符´a´,因此认为数值123后已没有数字了,第一个数据到此结束,把12赋给变量a,字符´a´送给变量b,由于%c只要输入一个字符,因此输入字符a之后不需要加空格,后面的数值应赋给变量c。如果由于疏忽把本来应为1230.21错打成123o.21,由于123后面出现字符´o´,就认为该数值数据到此结束,将123赋给变量c,所以a的值12,b的值为a,c的值为123。(6)八进制、十六制输入时无需输入0、0x例如:scanf("%d%o%x",&a,&b,&c);printf(“%d%d%d”,a,b,c);123123123↙运行结果:123832913.4顺序结构程序设计应用举例任何一种程序设计语言都是由最基本的三种结构组成,顺序、选择、循环结构。顺序结构是程序设计中最简单、最常用的基本结构,它是学习选择与循环结构的基础,同时也是学生的思维从C语句转换为C程序的起点、熟练掌握顺序结构程序的设计方法是学好后续章节的基础。所谓顺序结构就是语句的书写顺序,即从上到下逐个语句执行,顺序结构程序中的语句主要由赋值语句、输入语句、输出语句和空语句等构成。【例3.8】从键盘输入一个大写字母,改用小写字母输出。分析:前面已讲过相同的大写字母与小写字母之间相差32,如字符’A’的ASCII码值为65,而字符´a´的ASCII码值为97,由这点即可写出如下的程序:main(){charc1,c2;c1=getchar();printf("%c,%d\n",c1,c1);c2=c1+32;printf("%c,%d\n",c2,c2);}程序运行结果:A↙A,65A,97【例3.9】编写程序,从键盘上输入任意一个大于0的实数,要求保留两位小数输出此数。main(){floatx,y;scanf("%f",&x);y=(int)(x*100+0.5)/100.0;printf("%f,%f\n",x,y);}【例3.9】编写程序,从键盘上输入任意一个大于0的实数,要求保留两位小数输出此数。
main(){floatx,y;scanf("%f",&x);y=(int)(x*100+0.5)/100.0;printf("%f,%f\n",x,y);}程序运行结果:123.4567↙123.456700,123.460000可以发现y的值已保留了两位小数,输出结果是123.460000的原因是%f默认输出6位小数,如只想输出后两位,可以用%.2f。【例3.10】编写程序,从键盘输入一个四位正整数,将该数逆序后输出。如输入1234,输出4321。分析:求一个数n的个位数即最后一位数可用表达式n%10得到;同理如求一个数的最后两位数可用表达式n%100,然后再整除10得到,即n%100/10得到十位数,n%1000/100得到百位数,n/1000得到千位数。当然,读者也可以写出其它的算法。main(){intn;printf("请输入一个四位正整数:");scanf("%4d",&n);printf("%d%d%d%d\n",n%10,n%100/10,n%1000/100,n/1000);}本章小结本章首先介绍了C语言中语句的概念。一条语句是由分号结束的一段字符。C语句可分为控制语句、函数调用语句、表达式语句、空语句和复合语句等几类。控制语句有九种,实现分支、循环、转向等功能,它们在程序中广泛使用。而表达式语句是指在表达式后面加上一个分号所构成的语句。本章详细介绍了常用的输入输出函数scanf()和printf(),及字符输入输出函数getchar()和putchar()。第4章选择结构程序设计4.1关系运算与逻辑运算的应用4.1关系运算与逻辑运算的应用如:判断某年(year)是否为闰年。根据数学基础,判断闰年的条件应符合下面二者之一:(1)能被4整除,但不能被100整除。(2)能被4整除,又能被400整除。(注意:能被100整除,不能被400整除的年份不是闰年,如2100)。
则判断条件用标准的C语言的表达式来写出来就是:(year%4==0&&year%100!=0)||(year%400==0)如2016如20004.1关系运算与逻辑运算的应用
又如:根据输入的三角形的三条边,判断是否能组成三角形,是否为等腰三角形。根据题目中的信息,可以得出,该题包含两层含义:(1)首先判断输入的三条边能否构成三角形,即任意两边之和大于第三边。(2)再判断该三角形是否是等腰三角形,即只要任意有两条边的值相等。假设三条边分别为:a,b,c。则判断条件用标准的C语言的表达式来写出来就是:(a+b>c&&a+c>b&&b+c>a)&&(a==b||b==c||a==c)4.1关系运算与逻辑运算的应用
在设计这个实例的条件,要注意,必须先判断是保证是三角形的基础上,再判断是否是等腰三角形。也就是说,(a+b>c&&a+c>b&&b+c>a)只能放在&&的左边,先参加计算。对有些条件来说,如在判断是否为闰年中(year%4==0&&year%100!=0)与(year%400==0)可以互换位置。4.1关系运算与逻辑运算的应用在设计条件表达式时,还应该注意以下两个问题:(1)测试一个数是否在某一特定范围内,只要关系运算符把它们组合起来(就像数学中常用的方法那样)是不够的。条件的两个部分必须明确地用&&连起来。(2)当&&和||运算符与涉及!和!=运算符的关系测试一起使用时,必须非常小心。自然语言在逻辑上有一些模糊,而程序设计要求非常精确。第4章选择结构程序设计4.2if语句4.2if语句4.2.1单分支结构if语句
4.2.2双分支结构if…else…语句4.2.3多分支结构if…elseif…语句4.2.4if语句的嵌套4.2.1单分支结构if语句
单分支结构if语句,即if语句中条件成立就执行相应的语句,否则不执行。单分支结构if语句的特点:该语句只有条件成立才执行,否则就什么也不做。
4.2.1单分支结构if语句1、单分支结构if语句执行流程如图4-2-1所示2、单分支结构if语句的一般格式为:if(表达式)语句3、单分支结构if语句的语法含义是:若表达式的值为非0(真),则执行语句;否则不执行该语句而直接执行下一条语句。表达式语句真(非0)假(0)4.2.1单分支结构if语句【例4.1】输入两个整数,要求比较其大小并将较大者输出。#include<stdio.h>voidmain(){inta,b,max;//定义整型变量scanf("%d,%d",&a,&b);//接受用户键盘输入变量a,b的值max=a;//赋值运算if(max<b) //单分支条件语句max=b;printf("max=%d\n",max);//输出运算结果}4.2.1单分支结构if语句程序说明:(1)如果表达式(max<b)的值为真,则执行if语句的语句块,即“max=b;”语句,然后执行控制语句的后续语句;(2)如果表达式的值为假,则不执行if语句控制的语句块,而直接跳转执行控制语句的后续语句。4.2.2双分支结构if…else…语句双分支结构if…else…语句,即if语句中条件成立,执行紧跟if条件之后的语句,否则执行紧跟else之后的语句。
双分支结构if…else…语句的特点:
无论条件是否成立,都会执行一条语句。4.2.2双分支结构if…else…语句1、双分支结构的if语句,执行流程如图4-2-2所示2、双分支结构的if语句的一般格式为:if(表达式)语句1else语句23、双分支结构的if语句的语法含义是:如果表达式的值为非0(真),则执行语句1,否则执行语句2。4.2.2双分支结构if…else…语句【例4.2】输入一个数,求该数的绝对值。#include<stdio.h>voidmain(){intx;scanf("%d",&x);if(x>=0)printf("|x|=%d\n",x);elseprintf("|x|=%d\n",-x);}程序运行结果:-5↙|x|=54.2.2双分支结构if…else…语句程序说明:(1)如果表达式的值为非0,即x>=0成立,则执行if所控制的语“printf("|x|=%d\n",x);”,否则,执行else语句所控制的语句“printf("|x|=%d\n",-x);”。4.2.3多分支结构if…elseif…else语句多分支结构if…elseif…else语句,即首先判断第一个表达式1,如果其值为真,则执行表达式1之后的语句,然后结束if语句;如果表达式1的值为假,则判断表达式2,如果其值为真,则执行表达式2之后的语句,然后结束if语句;如果表达式2的值为假,再继续往下判断其他表达式的值;如果所有表达式的值都为假,则执行else之后的语句。多分支结构if…elseif…else语句的特点:有多个条件选择,从上至下逐个对条件进行判断,一旦发现某个表达式的值为非0就执行紧跟该表达式后面的语句,该语句执行完后跳过整个if结构,执行后续语句。4.2.3多分支结构if…elseif…else语句1、多分支结构if语句执行流程如图4-2-3所示表达式1表达式2表达式n语句1语句2语句n语句n+1000非0非0非0非04.2.3多分支结构if…elseif…else语句2、多分支结构if语句的一般格式为:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式n)语句n[else语句n+1]4.2.3多分支结构if…elseif…else语句这种结构执行流程是从上至下逐个对条件进行判断,一旦发现某个表达式的值为非0就执行紧跟该表达式后面的语句,该语句执行完后跳过整个if结构,执行后续语句;若没有表达值为非0,则执行“语句n+1”。最后这个else常起着“缺省条件”的作用,当然也可以根据实际情况省略“else语句n+1”。但是建议使用时尽量加上else子句,以保证整个条件判断的严密性,不至于漏掉某种情况。3、多分支结构if语句的语法含义是:4.2.3多分支结构if…elseif…else语句【注意】无论是if…else结构还是if…elseif结构,尽量将它们分写在多行之上,但它们仍然使一条语句,而不是多条语句。4.2.3多分支结构if…elseif…else语句【例4.3】输入一个学生的成绩(分数),输出该成绩对应的等级。#include<stdio.h>voidmain(){intx;scanf("%d",&x);if(x>=90)printf("优秀");elseif(x>=80)printf("良好");elseif(x>=70)printf("中");elseif(x>=60)printf("及格");elseprintf("不及格");}程序运行结果:
91↙优秀4.2.3多分支结构if…elseif…else语句(1)在此例的if语句中,各表达式先后次序都不能颠倒,不能写成如下形式:if(x<60)printf("不及格");elseif(x>=60)printf("及格");elseif(x>=70)printf("中");elseif(x>=80)printf("良好");elseprintf("优秀");这样,程序运行将得不到正确的运行结果。(2)如果写成:if(x<60)printf("不及格");elseif(x>=60&&x<70)printf("及格");elseif(x>=70&&x<80)printf("中");elseif(x>=80&&x<90)printf("良好");elseprintf("优秀");则先后次序就可以任意。程序说明:4.2.3多分支结构if…elseif…else语句4、使用if应该注意以下几方面:(1)三种形式的if语句中在if关键字后面都有“表达式”,该表达式通常是逻辑表达式或关系表达式。(2)在if语句中,条件表达式必须用括号括起来,在语句之后必须加分号。在每一个else语句之前必须加分号,整个语句结束处也必须有分号。(3)在if语句的三种形式中,所有的语句应为单条语句,如果在条件成立时需要执行多条语句,则必须把多条语句用“{}”括起来形成一个复合语句,因为复合语句在逻辑上视为一条语句。但要注意的是在“}”之后不能再加分号。4.2.3多分支结构if…elseif…else语句(4)else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用,即有else肯定有与之匹配的if,有if不一定有else。(5)多分支结构if…elseif…语句中,else与if之间需留有空格,为了便于阅读,书写时每个else应对齐。4.2.4if语句的嵌套4.2.4if语句的嵌套
多分支结构实现的是复杂条件的判断,即在一定的条件下,又需要满足其它的条件才能确定相应的动作。这需要在判断结构中再嵌入另一个判断结构,称为选择结构的嵌套。4.2.4if语句的嵌套1、嵌套的if语句一般格式为:if(表达式1)
else
if(表达式2)
语句1;else
语句2;if(表达式3)
语句3;else
语句4;内部的(嵌套)if内部的(嵌套)if2、匹配规则:else总是与它上面的,最近的,统一复合语句中的,未配对的if语句配对。4.2.4if语句的嵌套3x+8(x≤-3)y=5-x(-3<x<0)x2+5(x≥0)【例4.4】根据下列分段函数,输入x的值,计算输出y的值。方法一:#include<stdio.h>voidmain(){intx,y;printf("请输入x的值:");scanf("%d",&x);if(x<=-3)y=3*x+8;elseif(x<0)y=5-x;elsey=x*x+5;printf("x=%d,y=%d\n",x,y);}4.2.4if语句的嵌套方法二:
#include<stdio.h>voidmain(){intx,y;printf("请输入x的值:");scanf("%d",&x);if(x>-3)if(x<0)y=5-x;elsey=x*x+5;elsey=3*x+8;printf("x=%d,y=%d\n",x,y);}方法三:#include<stdio.h>voidmain(){intx,y;printf("请输入x的值:");scanf("%d",&x);if(x>=0)y=x*x+5elseif(x>-3)y=5-x;elsey=3*x+8;printf("x=%d,y=%d\n",x,y);}4.2.4if语句的嵌套程序说明:(1)程序通过执行scanf("%d",&x);语句,得到x的值,方法一是先判断如果x<=-3,则将3*x+8赋给y,否则继续判断,如果x<0,则将5-x赋给y,否则将x*x+5赋给y。(2)方法二是先判断x>-3,如果条件成立,直接执行嵌套的if……
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 警惕交通安全警钟长鸣校园小学主题班会课件
- 2026年领导力安全考试模拟试题及答案
- 2026年公需科目营商环境优化政策考核题库及答案
- 宠物行业销售策略优化商洽函6篇范文
- 2026年法考基层群众自治组织法规试题及完整答案
- 2026年传染病学实习学生出科考试题库及答案
- 2026年《民用航空服务质量监督管理办法》专项试题及答案解析
- 珍惜生命安全远离交通危险小学主题班会课件
- 2.2声音的特性 教案 人教版(2024) 八年级上册
- 房地产销售经理业绩目标绩效评定表
- 牛保才事迹课件
- 【全科医学概论5版】第04章 以家庭为单位的健康照顾
- 超星尔雅学习通《中华民族共同体概论(云南大学)》章节测试附答案
- 印刷行业佣金合同范本
- 2025年湖南省事业单位招聘考试教师招聘体育学科专业知识试卷
- 第一次月考试卷(Unit1-2)(含答案含听力原文无听力音频)-2025-2026学年人教版PEP(三起)英语五年级上册
- (正式版)DB23∕T 1318-2020 《黑龙江省建设施工现场安全生产标准化实施标准》
- 腹壁切口疝诊疗指南(2024版)解读课件
- 晚期肿瘤病人护理
- 汽车维修厂安全生产教育培训内容
- 咳嗽与咳痰讲课件
评论
0/150
提交评论