版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全国计算机等级考试二级c语言培训目录第1章程序设计基本概念第2章C程序设计的初步知识第3章顺序结构第4章选择结构第5章循环结构第6章字符型数据第7章函数第8章地址和指针第9章数组第10章字符串第11章对函数的进一步讨论第12章C语言中用户标识符的作用域和存储类第13章编译预处理和动态存储分配第14章结构体、共用体和用户定义类型第15章位运算第16章文件第17章上机指导1.1程序和程序设计C语言源程序C语言编译程序二进制机器指令(目标程序).C.OBJ高级语言机器语言C语言连接程序可执行文件.EXE考点算法的基本特征①有穷性、②确定性、③可行性④有零个或多个输入⑤有一个或多个输出结构化程序设计的三种基本结构顺序结构选择结构循环结构考点总结:由以上3种基本结构组成的算法可以完成任何复杂的问题.考点总结:用C程序实现的算法可以没有输入,但必须要有输出.习题1.1在环境中用RUN命令运行一个C程序时,这时所运行的程序的后缀是_________。1.2C语言源程序文件名的后缀是_________;经过编译后,生成文件的后缀是_________;经过连接后,生成文件的后缀是_________。1.3结构化程序由_________、_________、_________三种基本结构组成。.exe.c.obj.exe顺序结构选择结构循环结构第2章C程序设计的初步知识2.1简单C语言程序的构成和格式2.2标识符、常量和变量2.3整型数据2.4实型数据2.5算术表达式2.6赋值表达式2.7自加、自减运算符和逗号运算符2.1简单C语言程序的构成和格式本节将通过一个简单的程序例子,介绍C程序的一些基本构成和格式,使大家对C语言程序有一个初步的了解。例
已知矩形的两条边长(用a表示宽,b表示长),求矩形的面积(area)。#include<stdio.h>main(){doublea,b,area;a=1.2;b=3.6;area=a*b;printf(“a=%f,b=%f,area=%f\n”,a,b,area);}注意:1.C程序由函数组成,一个程序必须有一个且只能有一个主函数(main),C程序总是从主函数开始执行,并且也是从它结束的。2.函数体必须放在一对花括号“{}”内,在函数体中,通常有定义(说明)语句和执行语句,定义语句应出现在执行语句之前,每条语句后面的分号不可少。多条语句可以写在同一行上,并且一条语句也可以写在多行上。3.C程序中的注释必须放在"/*"和"*/"之间,"/"和"*"之间不允许有空格。"/*"和"*/"之间不允许再插入"/*"或"*/"。注释可以出现在程序中任意位置。/*包含头文件*//*主函数,程序的入口*//*声明部分,定义了3实型个变量*//*给变量a赋值*//*给变量b赋值*//*将a*b的结果赋值给变量area*//*分别输出矩形的两条边长和面积*/abarea函数体2.2标识符、常量和变量2.2.1标识符在C语言中,有许多东西都需要命名,如变量名、函数名、数组名等,在命名的时候都必须遵守一定的规则,按此规则命名的符号称为标识符。在C语言中,合法的标识符由字母、数字和下划线组成。遵守以下规则命名:必须以字母(大小写皆可)或下划线开头。随后可跟若干个(包括0个)字母、数字、下划线。标识符的长度各个系统不同,最好不要超过8个字符。如:areaPI_inia_arrays1234P101p(合法)456Pcade-yw.wa&b(不合法)注意C语言区分大小写,如page、Page是两个不同的标识符。2.2标识符、常量和变量2.2.1标识符C语言的标识符可以分为以下三类:a)关键字b)预定义标识符c)用户标识符关键字:
C语言规定了一批标识符,它们在程序中都代表着固定的含义,不能另作它用。例如,用来说明变量类型的标识符int、float、double以及if语句中的if、else等都已有专门的用途,它们不能再用作变量名或函数名。注意,所有的关键字都必须小写。C语言中的关键字请参考附录4。预定义标识符:这些标识符在C语言中也都有特定的含义,如C语言提供的库函数的名字(如include)和预编译处理命令(如define)等。
用户标识符:由用户根据需要定义的标识符称为用户标识符。一般用来给变量、函数、数组或文件等命名。如例中的a,b,area三个变量2.2标识符、常量和变量2.2.2常量在程序运行过程中,其值不能被改变的量,称为常量。
常量整型常量:实型常量(符点型)字符常量:字符串常量:单精度型:双精度型:由上述可见,常量的类型从字面形式上就可以区分开来,我们称此常量为字面常量。12、-1、0‘A’、‘d’”NCRE”、“Beijing”、、、2.2标识符、常量和变量2.2.3符号常量在C语言中,可以用一个符号名来代表一个常量,称为符号常量。但是这个符号名必须在程序中用(#define)进行特别的“指定"。例
计算圆面积和周长,此程序中将如何教大家使用符号常量。#include“stdio.h”main(){doubler,s,l;r=5.0;s=PI*r*r;l=2*PI*r;printf(“s=%f,l=%f\n”,s,l);}/*包含头文件*//*定义符号常量,符号常量名为PI,用PI来代表3.14159*//*主函数,程序的入口*//*声明部分,定义了3实型个变量*//*给变量r赋值*//*计算圆的面积*//*计算圆的周长*//*分别圆的面积和周长*/注意习惯上,符号常量名用大写,变量名用小写,以示区别函数体rsl2.2标识符、常量和变量2.2.4变量1.所谓变量是指在程序运行过程中可以改变的量。如下程序:#include<stdio.h>main(){doublea,b;a=1.5;b=2.5;printf(“%f%f\n”,a,b);a=a+1;b=b+1;printf(“%f%f\n”,a,b);}ab2.在程序中,声明变量就是在计算机内存中申请了某个内存单元。对变量进行赋值,实质上就是把数据存入该变量所代表的存储单元中。语言规定,程序中所有变量都必须先定义后使用。如程序例、例。内存空间ab2.3整型数据2.3.1整型常量在C语言中,按整型常量的表示形式可以有三种形式。整型常量由0~9十个数字组成,如32767、-32768、0等。由0~7八个数字组成,如010、011、016等。注意,最高位必须用0作引导符,与十进制和十六进制区分。如:018,为不合法的八进制常量。由0~9十个数字和a~f(A~F)六个字母组成,如0x10、0Xde、0xf注意,最高位必须用0x(0X)作引导符,与十进制和八进制区分。如:oxff、0X12H,都为不合法的十六进制常量。在C语言中,按整型常量的表示范围可以分为四种。在C语言中,八进制数和十六进制数只能是正整数。注意如:-077、-0X11、等,(不合法)短整型基本整型长整型无符号整型三种进制之间的转换十六进制常量:八进制常量:十进制常量:2.3整型数据2.2.2整型变量整型变量是用来存放整型常量的工具。可以把整型变量抽象为一个盒子。由于整型常量有短整型、基本整型、长整型和无符号整型四种类型,既然整型变量是用来存放整型数据的,那整型变量也要分为四种对应类型的整型变量,以方便存放不同类型的整型常量。在此我们只介绍基本整型变量。也叫整型变量。在C语言中,整型变量我们需要用一个符号来表示它,即整型变量名。例如:intk;
/*定义k为整型变量,k为变量名*/关键字int是用来说明变量k的类型为整型。又如:inti,j,k;
/*定义i、j、k为整型变量*/inti;intj;intk;相同注意在同一行上使用关键字定义多个变量时,变量之间用逗号隔开。所有定义语句后必须以一个“;”号结束,表示它是一条语句。2.3整型数据2.2.2整型变量在前面已经讲过,声明变量就是在计算机内存中申请某个内存单元。在环境中,用关键字int声明变量时,计算机将会为每个变量开辟4字节(32个二进制位)的内存单元。例如,当前的某段内存空间如右图所示。有如下程序段。内存空间地址2000200120022003200420052006200720112010200920082012inti;intj;i=100;j=200;C语言规定,可以在定义变量的同时给变量赋初值,该过程称为变量的初始化。例如:#include<stdio.h>main(){inti=1,j=0,k=2;::}ij100200/*在声明变量的同时,为三个变量赋值*/2.3整型数据2.3.3整型数据的分类不同的计算机系统对整型数所占用的字节数和数值范围有不同规定,下表列出了在中定义的整型数所占用的字节数和数值范围。
类型名称通常使用简写字节数数值范围[signed]intint4-2147483648~2147483647[signed]short[int]short2-32768~32767[signed]long[int]long4-2147483648~2147483647unsigned[int]unsigned40~4294967295unsignedshort[int]unsignedshort20~65535unsignedlong[int]unsignedlong40~4294967295由于整型数据在C语言中分为上述几类,比如123。它是属于哪一类型的?int123L、345l、0L、123456L123U、345u、0U、123456U123LU、345lu、0LU、123456LUlongunsignedunsignedlong2.3整型数据2.3.4整数在内存中的存储形式计算机中,内存储器的最小的存储单位称为“位(bit)”,每一位中只能存放0或1,因此称为二进制位。8个二进制位组成一个“字节”,并给每一个字节分配一个地址。数据在内存中是以二进制形式进行存放的。一、正整数正整数在内存中是以“原码”形式存放的。如果定义了一个short类型变量i:shorti;i=5;/*声明i为短整型变量*//*给i赋以整数5*/十进制数5的二进制形式为101,在中,由于短整型变量在内存中占2个字节,i0000000000000101i符号位:0代表正整数,1代表负整数二、负整数负整数在内存中是以“补码”形式存放的。52.4实型数据2.4.1实型常量在C语言中,实型常量的表示形式有两种。实型常量由数字和小数点组成,如、.123、123.、指数形式:如:x101
0-1注意E(e)前后必须有数字,并且后面的必须为整型数。.3e33.0e33.e3(合法)3ee355e0.3(不合法)小数形式:2.4实型数据2.4.2实型变量分类类型名称字节数数值范围有效数字位单精度型float4-1038~10387位双精度行double8-10308~1030815~16位单精度型变量定义的形式如下:floata,b,c;双精度型变量定义的形式如下:doublex,y,z;实数在内存中是以“指数”形式存放的。也可以在定义实型变量的同时,对变量进行初始化。例如:#include<stdio.h>main(){floata=1.5,b=.5,c=0.0;
doublex=1.5,y=.5,z=0.0;:}/*在声明变量的同时,为三个变量赋值*//*在声明变量的同时,为三个变量赋值*/2.5算术表达式2.5.1基本的算术运算符+(加法运算符,或正值运算符)如:1+2、-(减法运算符,或负值运算符)如:3-4、-54*(乘法运算符)如:、3*4、2*x/(除法运算符)如:5/3、(a+b)/(x+y)单目运算符双目运算符两个整数相除,其值仍然为整数。如:5/3值为1、1/2值为0。两个实数相除,其值仍然为实数。如:值为。除数、被除数只要有一个为实数时,系统将自动进行类型转换,转换为double型。如:、
最后结果的类型为double型。%(求余运算符)注意:%运算符的两侧必须为整型数据。如:7%4的结果为3。-7%4、7%-4、-7%-4的结果为多少?-33-3结果的符号和被除数相同2.5算术表达式2.5.2运算符的优先级、结合性和算术表达式一、优先级()+-*/%+-单目双目同级同级同级高低二、结合性单目运算符的结合性是从右往左的,即表达式从右往左进行计算,称为右结合。其余运算符的结合性是从左往右的。即表达式从左往右进行计算,称为左结合。例如:(5+1)/25+1/25*-25*(-2)三、算术表达式用算术运算符和一对圆括号将运算量(或称操作数)连接起来的、符合C语法的表达式称为算术表达式。算术表达式中,运算对象可以是常量、变量和函数等。例如:2+sqrt(c)*b。5-1032.5算术表达式2.5.3强制类型转换表达式表达式的形式如下:(类型名)(表达式)强制类型转换运算符作用:可以利用强制类型转换运算符将一个表达式转换成想要的类型。例如:(double)(10%3)3注意int3.234(错误)(double)10%3(错误)例:阅读如下程序,关于强制类型转换。#include<stdio.h>main(){doublea;intb;a=3.6;b=(int)a;printf(“a=%f,b=%d\n”,a,b);}a=3.600000,b=3ab32.6赋值表达式2.6.1赋值运算符和赋值表达式赋值运算符:=赋值表达式:由赋值运算符组成的表达式称为赋值表达式,它的形式如下:
变量名=表达式
赋值号的左边必须是一个代表某一存储单元的变量名。赋值运算的功能是先求出右边表达式的值,然后把此值赋给左边的变量。例如,若a和b都被定义成int类型变量
a=10;
/*把常量10赋给变量a*/
b=a;
/*把a中的值赋给变量b,a中的值不变*/注意1.赋值运算符的优先级别只高于逗号运算符,比其它任何运算符的优先级都低,且具有自右向左的结合性。例如:a=2+7/32.赋值运算符的左侧只能是变量不能是常量或表达式。如a+b=c是不合法的赋值表达式。3.赋值号右边的表达式也可以是一个赋值表达式,如a=b=7+1。4.作为一个表达式,它自己也应该有一个值,C语言规定最左边变量中所得到的新值就是赋值表达式的值。2.6赋值表达式2.6.2复合赋值表达式在赋值运算符”=”之前加上其它运算符可以构成复合赋值运算符。+=-=*=/=%=<<=>>=&=^=|=
等价于
n=n+1
等价于
a=a+3
等价于
n=n*(m+3)注意:有括号例2.3已有变量a,初始值为9,计算表达式a+=a-=a+a的值。a表达式如:n+=1a+=3n*=m+3a+=a-=a+a918a+=a-=18a=a-18-9-9a+=-9a=a+-9a=a+(-9)-18-18a+=a-=a+a的值是:-182.6赋值表达式2.6.3赋值运算中的类型转换在赋值运算中,只有在赋值号右侧表达式的类型与左侧变量类型完全一致时,赋值操作才能进行。如:inta;doubleb;a=10;b=3.5;如果赋值运算符两侧的数据类型不一致,在赋值前,系统将自动先把右侧表达式求得的数值,按赋值号左边变量的类型进行转换,也可以用强制类型转换的方式,人为地进行转换后赋给赋值号左边的变量。a10b如:inta;doubleb;a=20.5;b=15;a20b3.在C语言的表达式中(不包括赋值表达式),如果运算符两边的数据类型不相同,将进行类型之间的转换。转换规则如下:doublelongunsignedintfloatchar,short低高如:10+97+1.5-8765.1234*98double2.7自加、自减运算符和逗号运算符2.7.1自加运算符“++”和自减运算符“--”++(自加运算符)--(自减运算符)1.++、--运算符是单目运算符,运算对象只能变量,不能是常量和表达式。2.++和--运算符的结合方向是"自右至左"。i++、++ii--、--ii=i+1i=i-1例如:inti=5;i++;inti=5;++i;inti=5;i--;inti=5;--i;i:表达式:运算规则运算符在前,先计算,后赋值运算符在后,先赋值,后计算例如:inti=3;
-i++;
inti=3;-(i++);i:表达式:思考:程序示例,自增自减运算#include<stdio.h>main(){inti=0,j;j=i++;printf(“%d,%d\n”,i,j);i=0;
j=++i;printf(“%d,%d\n”,i,j);}上机练习656645444-32.7自加、自减运算符和逗号运算符2.7.2逗号运算符和逗号表达式,(逗号运算符)用逗号将表达式连接起来的式子称为逗号表达式。逗号表达式的一般形式为:表达式1,表达式2,…,表达式n表达式之间用逗号进行连接1.逗号运算符的结合性为从左到右,因此逗号表达式将从左到右进行运算。如:i=3,i++,++i,i+5
i表达式33i表达式43i表达式55i表达式510逗号表达式的值为2.在所有运算符中,逗号运算符的优先级别最低。习题一、选择题2.1以下选项中正确的整型常量是A12.B-20C1,000D4562.2以下选项中正确的实型常量是2D.8712.3以下选项中不正确的实型常量是A2.607E-1B0.8103e2C-77.77D456e-22.4以下选项中不合法的用户标识符是Aabc.cBfileCMainDPRINTF2.5以下选项中不合法的用户标识符是
A_123BprintfCA$DDim2.6C语言中运算对象必须是整型的运算符是A%B/C!D**2.7可在C程序中用作用户标识符的一组标识符是AvoidBas_b3CForD2cdefine_123-abcDOWORDIfcaseSIGBDBABCAB2.8若变量已正确定义并赋值,符合C语言语法的表达式是Aa=a+7;Ba=7+b+c,a++Cint(12.3%4)Da=a+7=c+b2.9以下中叙述中正确的是Aa是实型变量,C允许进行赋值a=10,但不可以这样说:实型变量中允许存放整型值B在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式C执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0D已有a=3,b=5,当执行了表达式a=b,b=a之后,使a中的值为5,b中的值为32.10以下中叙述中正确的是A在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示BC程序由主函数组成CC程序由若干个函数组成DC程序中只允许包含一个函数中int类型变量所占字节数是A1B2C3D4习题BACD习题2.12合法的八进制数是2.13不合法的十六进制数是AoxffB0XabcC0x11D0x19二、填空题2.14若k为int型变量且赋值11.请写出运算k++后表达式的值____和变量k的值_____.2.15若x为double型变量,请写出运算x=3.2,++x后表达式的值_____和变量x的值______.2.16函数体由符号___开始,到符号___结束.函数体内的前面是_____________部分,后面是___________部分.2.17C语言中的标识符可分为和预定义标识符三类.2.18在C语言程序中,用关键字____定义基本整型变量,用关键字_____定义单精度实型变量,用关键字_____定义双精度实型变量.2.19把a1,a2定义成双精度实型变量,并赋初值1的定义语句是________________.2.20C程序中定义的变量,代表内存中的一个_________.1112{}定义和说明语句关键字用户标识符intfloatdoubledoublea1=1,a2=1;存储单元AA习题2.21表达式3.5+1/2的计算结果是______.2.22对数学式axb,写出三个等价的C语言表达式_______._______.________.c2.23表达式s=10应当读做___________________________.三.改错题#includestdio.h;main();/*mainfunction*/floatr,s;/*/*risradius*/,/*sisareaofcircular*/*/r=5.0;s=3.14159*r*r;printf("%f\n",s)main/*mainfunction*/{floata,b,c,v;/*a,b,caresides,visvolumeofcube*/v=a*b*c;printf("%f\n",v)}(a*b)/ca*b/ca*(b/c)将10赋给变量s第3章顺序结构3.1赋值语句3.2数据输出3.3数据输入3.4复合语句和空语句3.5程序举例3.1赋值语句在赋值表达式的尾部加上一个“;”号,就构成了赋值语句,也称表达式语句。例如:a=a+b(赋值表达式)a=a+b;(赋值语句)
3.2数据输出3.2.1printf函数的一般调用形式首先,我们先来了解一些其它知识。一个程序,一般情况下都包含数据输入、数据处理、数据输出三个部分。输出:把数据从计算机内部送到计算机的外部设备上的操作称为“输出”。输入:从计算机外部设备将数据送入计算机内部的操作称为“输入”。显示器键盘在C语言中,数据的输入和输出是通过调用输入和输出函数来实现的。在环境下,在调用输入和输出的库函数之前要求在源程序中出现包含头文件命令行:
#include<stdio.h>
或#include“stdio.h”1.printf函数的调用形式如下:printf(格式控制,输出项表)
作用:按照指定的格式将输出项中的值输出到终端。要输出的内容(常量、变量、表达式等)双引号括起来的字符串,按照该指定的格式进行输出3.2数据输出3.2.1printf函数的一般调用形式例如:printf(“a=%d,b=%d”,a,b);函数名格式控制输出项(实参)在printf函数调用的后面加一个分号就构成输出语句。例:对于printf函数的调用形式,请见下面的程序示例。#include<stdio.h>main(){inti=2518;doublea=3.1415;printf(“i=%d,a=%f,a*10=%e\n",i,a,a*10);}格式控制输出项(实参)i=2518,a=3.141500,a*10=3.141500e+001“i=%d,a=%f,a*10=%e\n"原样输出%d%f%e%为引导符d、f、e为格式字符转义字符3.2数据输出3.2.1printf函数的一般调用形式printf也可以没有输出项,函数的调用形式将为:
printf(格式控制)比如:printf(“OK!”);OK!3.2数据输出3.2.2printf函数中常用的格式说明格式字符:
d
以十进制整数进行输出
o
以八进制数进行输出
x
以十六进制数进行输出
f
以小数形式进行输出::使用时,以%作为引导符格式字符必须使用小写如:%d%o%x%f简单的格式字符形式完整的格式字符形式%
+
-
0
n
l/h
格式字符n
指定输出的宽度printf(“%6d\n”,k);n1指定输出的宽度,n2指定输出的小数位数printf(“%12.2f\n”,f);0
输出的数据右对齐,前面补0printf(“%06d\n”,k);-
输出的数据左对齐printf(“%-6d\n”,k);+
输出的数据为正数时,使前面带有“+”符号printf(“%+-6d\n”,k);l
输出整数时,为长整型;输出实数时,为双精度型printf(“%ld\n”,k);h
输出整数时,为短整型printf(“%hd\n”,k);有如下程序段intk;floatf;k=1234;jj1234jjjjjj0012341234jj+1234j123412343.2数据输出3.2.2printf函数中常用的格式说明下面,将简单的介绍一些输出格式形式和输出结果:printf(“%f\n”,f);printf(“%12f\n”,f);printf(“%.6f\n”,f);printf(“%12.0f\n”,f);printf(“%e\n”,f);printf(“%13e\n”,f);printf(“%13.8e\n”,f);printf(“%3.8e\n”,f);printf(“%.8e\n”,f);printf(“%13.9e\n”,f);printf(“%13.2e\n”,f);printf(“%g\n”,f);printf(“%10g\n”,f);printf(“%f%%\n”,12.5);jjjjjjjjj1231.234560e+0021.234560e+0021.23456000e+0021.23456000e+0021.23456000e+0021.234560000e+002jjjj1.23e+00212.500000%以指数形式输出,输出时,先以小数位数为基准,再考虑输出的宽度.以原数的最小宽度进行输出,指定宽度时,按指定宽度进行输出3.2数据输出3.2.3使用printf函数时的注意事项1.在使用输出函数时,输出的数据要清晰,视觉感要好。例如:printf(“%d%d%f\n”,k,k,f);printf(“%d,%d,%f\n”,k,k,f);printf(“k=%d,k=%d,f=%f\n”,k,k,f);2.在格式控制串中,格式说明与输出项从左到右在类型上要一一对应匹配。如不匹配,将导致数据不能正确输出,这时,系统并不报错。最好例如:inta=10;floatb=12.5;printf(“a=%f,b=%d\n”,a,b);a=0.000000,b=1076428800inta=10;floatb=12.5;printf(“a=%d,b=%f\n”,a,b);编译时能通过,则输出时为不正确的数据输出时类型一定要一一对应1234,1234,123.4560003.2数据输出3.2.3使用printf函数时的注意事项若格式说明中的个数少于输出项的个数时,则多余的输出项不予输出;若格式说明中的个数多于输出项的个数时,则将输出一些毫无意义的数字。例如:inta=10,b=20,c=30;printf(“%d,%d\n”,a,b,c);10,20inta=10,b=20,c=30;printf(“%d%d%d%d\n”,a,b,c);10,20,30,23674604.在格式控制串中,除了合法的格式说明外,可以包含任意的合法字符,还可以包括转义字符,这些字符在输出时将"原样照印"。例如:printf(“my\tname\tis\tchenhao\n”);mynameischenhao\t为转义字符(制表符)代表八个空格字符5.如果需要输出百分号%,则应该在格式控制串中用两个连续的百分号%%来表示。例如:printf(“%d%%”,100);100%6.printf函数的返回值通常是本次调用中输出字符的个数。思考:printf(“my\tname\tis\tchenhao\n”);函数的返回值是多少?3.2数据输出3.2.3使用printf函数时的注意事项7.思考:如:intk=8;
printf(“%d,%d\n”,k,++k);9,98.输出时,也可以用参数作为域宽。如:intm=8,i=10;printf(“%*d”,m,i);jjjjjj10intm=8,n=10;floatf=123.456;printf(“%*.*f”,m,n,f);首先先对应匹配,然后再输出,输出的过程,是按输入项从右往左printf(“%8d”,i);printf(“%f”,f);3.3数据输入3.3.1scanf函数的一般调用形式scanf(格式控制,输入项表)1.scanf函数的调用形式如下:作用:把从终端设备(如,键盘)上输入的数据传送给对应的输入项(如变量地址)。双引号括起来的字符串,按照该指定的格式进行输入把从键盘上输入的数据送到该指定的输入项中,输入项中必须为变量的地址例如:intk;floata;doubley;scanf(“%d%f%lf”,&k,&a,&y);函数名输入格式控制变量地址(实参)在scanf函数调用的后面加一个分号就构成输入语句。★变量地址形式:&变量名
3.3数据输入3.3.1scanf函数的一般调用形式例:对于scanf函数的调用形式,请见下面的程序示例。#include<stdio.h>main(){inta;floatb;scanf(“%d%f”,&a,&b);printf(“%d,%f\n",a,b);}scanf(“%d%f”,&a,&b);比如,想把23赋值给赋值给b,输入形式为:程序执行到此,停止执行,等待用户从键盘输入数据,等输入数据后,待用户安回车键<CR>后,继续向后执行。2312.345<CR>ab输出结果为:233.3数据输入3.3.2scanf函数中常用的格式说明scanf函数中的格式说明字符与输出函数中的格式说明字符相同。在使用scanf函数进行输入时,应该注意以下几点:
1.在格式控制中,格式说明的类型与输入项的类型,应该一一对应匹配。如果类型不匹配,系统并不给出出错信息,但不可能得到正确的数据。2.在输入项表中,输入项的个数要与格式符的个数相同,且排列顺序要一一对应。若格式符个数少于输入项,scanf函数按格式符的数目结束输入,多余的输入项没有得到新的数据;若格式符个数多于输入项,scanf函数则按输入项的数目结束输入,多余的格式符不起作用(作废)。例如:inta,b,c;scanf(“%d%d”,&a,&b,&c);printf(“%d%d%d\n”,a,b,c);10,20,-858993460比如说,我们从键盘读入:102030<CR>inta,b,c;scanf(“%d%d%d%d”,&a,&b,&c);printf(“%d%d%d\n”,a,b,c);10,20,30比如说,我们从键盘读入:10203040<CR>3.3数据输入3.3.2scanf函数中常用的格式说明在scanf函数中的格式字符前可以用一个整数指定输入数据所占宽度。当输入函数的格式说明的类型与输入项的类型一一对应匹配时。程序在运行的过程中,当我们输入的数据个数少于输入项时,运行的程序将一直等待输入,直到满足要求时才继续向下执行;当我们输入的数据个数多于输入项时,多于的数据没有作废,依然在缓冲区中等待等待下一个输入操作语句。5.scanf函数在调用结束后将返回一个函数值,其值等于得到输入值的输入项的个数。例如:inta;scanf(“%5d”,&a);该输入函数正确的输入形式为:88输入宽度为5思考:scanf(“%d%d%d%d”,&a,&b,&c);函数的返回值是多少?3.3数据输入3.3.3通过scanf函数从键盘输入数据1.输入数值数据例如:intk;floata;doubley;scanf(“%d%f%lf”,&k,&a,&y);若要给k赋值10,a赋值,y赋值,正确的输入格式如下:1012.31234567.89<CR>1012.31234567.89<CR>10<CR>12.3<CR>1234567.89<CR>输入的数据之间必须用间隔符隔开可以使用的间隔符有:空格、回车符、制表符错误的输入格式:1012.31234567.89<CR>3.3数据输入3.3.3通过scanf函数从键盘输入数据2.指定输入数据所占的宽度例如:intk;floata;doubley;scanf(“%3d%5f%5lf”,&k,&a,&y);若从键盘上从第1列开始输入:123456.789.123<CR>用printf(“k=%da=%fy=%f\n”,k,a,y);输出的结果是:kya1233.3数据输入3.3.3通过scanf函数从键盘输入数据3.跳过某个输入数据例如:intx,y,z;scanf(“%d%*d%d%d”,&x,&y,&z);printf(“%d%d%d\n”,x,y,z);若从键盘上输入:12345678<CR>则输出的结果是:1256783.3数据输入3.3.3通过scanf函数从键盘输入数据4.在格式控制字符串中插入其他字符又如:intx,y,z;scanf(“%d,%d,%d”,&x,&y,&z);这时从键盘上输入时,一定要向下形式进行输入:Pleaseinputx,y,z:123456<CR>在格式控制字符中出现了其他字符的语句如下:intx,y,z;scanf(“Pleaseinputx,y,z:%d%d%d”,&x,&y,&z);则正确的输入形式:12,34,56<CR>12,34,56<CR>12,34,56<CR>错误的输入形式:123456<CR>12,34,56<CR>3.4复合语句和空语句3.4.1复合语句复合语句是用符号"{"和"}"括起来的语句组,也可称为"语句块",在语法上被视为一条语句。复合语句的语句形式如下:{语句1;语句2;…;语句n;}例如:{a++;b*=a;printf("b=%d\",b);}3.4复合语句和空语句3.4.2空语句空语句由一个分号构成,但它是一个C语句,程序执行空语句时不产生任何操作。如:main(){;}3.5程序举例例
以下程序由终端输入两个整数给变量x和y;然后输出x和y;在交换x和y中的值后,再输出x和y。验证两个变量中的数是否正确地进行了交换。程序分析:输入两个整数分别给变量x和y。输出两个变量。交换两个变量中的值。再输出两个变量。自然语言描述开始输入x、y输出x、y交换x和y中的值输出x、y结束一般流程图描述#include<stdio.h>main(){intx,y;printf(“Enterx&y:\n");scanf(“%d%d”,&x,&y);printf(“x=%dy=%d\n",x,y);
printf(“x=%dy=%d\n",x,y);}通过流程图,编写出程序xy123456zz=x;x=y;y=z;交换x和y中的值;z=x;x=y;y=z;intz;Enterx&y:123456<CR>x=123y=456x=456y=1233.5程序举例例
输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,以便验证处理是否正确。程序分析:输入一个double类型的数给变量x。使该数保留两位小数,要进行四舍五入。输出四舍五入后的值。开始输入x对x进行四舍五入输出x结束12346#include<stdio.h>main(){doublex;
printf(“Enterx:\n”);/*输出的时候进行提示*/scanf("%lf",&x);
printf(“(1)x=%f\n”,x);/*输出我们刚刚输入的原始数据*/x=x*100;x=x+0.5;x=(int)x;x=x/100;printf("(2)x=%f\n",x);}Enterx:123.4567<CR>习题一.选择题3.1若a,b,c,d都是int型变量且初值为0,以下选项中不正确的赋值语句是Aa=b=c=100;Bd++;Cc+b;Dd=(c=22)-(b++);3.2下列选项中不是C语句的是A{inti;i++;printf(“%d\n”i);}B;Ca=5,c=10D{;}3.3合法的C语言赋值语句是Aa=b=58Bk=int(a+b);Ca=58,b=58D--i;3.4有以下程序#include<stdio.h>main(){intx=10,y=3;printf("%d\n",y=x/y);}执行后的输出结果是A0B1C3D不确定的值3.5若变量已正确定义为int型,要给a,b,c输入数据,正确的输入语句是Aread(a,b,c);Bscanf(“%d%d%d”,a,b,c);Cscanf(“%D%D%D”,&a,%b,%c);Dscanf(“%d%d%d”,&a,&b,&c);CCDCD习题3.6若变量已正确定义为float类型,要通过输入语句:scanf(“%f%f%f”,&a,&b,&c);给a赋值11.0,b赋值22.0,c赋值33.0,不正确的输入形式是A11B11.0,22.0,33.0C11.0D11222222.033.033333.7若变量a,b,t已正确定义,要将a和b中的数进行交换,以下选项中不正确的语句组是Aa=a+b,b=a-b,a=a-b;Bt=a,a=b,b=t;Ca=t;t=b;b=aDt=b;b=a;a=t;3.8若有正确定义语句
doublex=5.16894;语句printf(“%f\n”,(int)(x*1000+0.5)/(double)1000);的输出结果是A输出格式说明与输出项不匹配,输出无定值3.9若有以下程序段:intc1=1,c2=2,c3;c3=c1/c2;printf(“%d\n”,c3);执行后的输出结果是A0B1/2C0.5D1BCDA习题3.10若有以下程序段inta=0,b=0,c=0;c=(a-=-5),(a=b,b+3);printf(“%d,%d,%d\n”,a,b,c);执行后的输出结果是A3,0,-10B0,0,5C-10,3,-10D3,0,3二.填空题3.11若有以下定义,请写出以下程序段中输出语句执行后的输出结果________.inti=-200,j=2500;printf("(1)%d,%d",i,j);printf("(2)i=%d,j=%d\n",i,j);printf("(3)i=%d\nj=%d\n",i,j);3.12变量i,j,k已定义为int类型并均有初值0,用以下语句进行输入时:scanf("%d",&i);scanf("%d",&j);scanf("%d",&k);从键盘输入:12.3<CR>则变量i,j,k的值分别是______._______._______.3.13复合语句在语法上被认为是_________.空语句的形式是_________.B(1)-200,2500(2)i=-200,j=2500(3)i=-200j=25001200一条语句;习题3.14C语句的最后用________结束.3.15以下程序段要求通过scanf语句给变量赋值,然后输出变量的值.写出运行时给k输入100,给a输入15.81,给x输入时的三种可能的输入形式________.___________.___________.intk;floata;doublex;scanf("%d%f%lf",&k,&a,&x);printf("k=%d,a=%f,x=%f\n",k,a,x);;10015.811.89234<CR>100<CR>15.811.89234<CR>100<CR>15.81<CR>1.89234<CR>习题3.16以下程序多处有错误.若指定必须按下面的形式输入数据,并且必须按下面指定的形式输出数据,请对该程序做相应的修改.main{doublea,b,c,s,v;printf(inputa,b,c:\n);scanf("%d%d%d",a,b,c);s=a*b;v=a*b*c;printf("%d%d%d",a,b,c);printf("s=%f\n",s,"v=%d\n",v);}当程序执行时,屏幕的显示和要求输入形式如下:第4章选择结构4.1关系运算和逻辑运算4.2if语句和用if语句构成的选择结构4.3条件表达式构成的选择结构4.4switch语句以及用switch和break语句构成的选择结构4.5语句标号和goto语句4.1关系运算和逻辑运算4.1.1C语言的逻辑值关系表达式和逻辑表达式的运算结果是一个逻辑值。逻辑值真假非004.1关系运算和逻辑运算4.1.2关系运算符和关系表达式1.关系运算:是对两个量进行“比较运算”。2.关系运算符:<<=>>===!=高低3.结合性:自左向右(左结合)4.和其他运算符进行混合运算时,其运算符之间的优先级为:算术运算符、关系运算符、赋值运算符、逗号运算符低高关系表达式:由关系运算符组成的表达式,称为关系表达式。关系运算符两边的运算对象可以是C语言中任意合法的表达式。例如:a>=b(a=3)>(b=4)a>c==c例如:a=10;b=6;c=15;真假假关系运算的值为“逻辑值”真假101004.1关系运算和逻辑运算4.1.3逻辑运算符和逻辑表达式1.逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)双目单目(在运算对象的左边)3.结合性:自左向右(左结合)4.它们的优先级由高到低为:!(逻辑非)、&&(逻辑与)、||(逻辑或)。5.和其他运算符进行混合运算时,其运算符之间的优先级为:!(逻辑非)、算术运算符、关系运算符、&&(逻辑与)、||(逻辑或)、赋值运算符、逗号运算符高低逻辑表达式:由逻辑运算符组成的表达式,称为逻辑表达式。逻辑运算的运算对象可以是C语言中任意合法的表达式。例如:(a>b)&&(x>y)a!=b||b!=0!a!=b例如:a=10;b=16;x=5;y=8;011其逻辑运算规则见书中表所示。思考:5>3&&2||!8<4-2的结果为?4.1关系运算和逻辑运算4.1.3逻辑运算符和逻辑表达式注意在C语言中,x的值必须要在0和10之间,应如何表示?0<=x<=10错误的表示方式比如:x=20;上面的表达式也满足条件。正确的表示方式为:x>=0&&x<=10或0<=x&&x<=106.C语言中,由&&或||构成的逻辑表达式,在特定的情况下会产生“短路”现象。例如:a++&&b++若:a=0;b=0;若:a=1;b=1;例如:a++||b++若:a=1;b=1;若:a=0;b=0;0110ab10a2b2ab21a1b14.2if语句和用if语句构成的选择结构4.2.1if语句C语言的if语言有两种形式:if(表达式)语句if(表达式)语句1else
语句2单分支if语句不含else子句双分支if语句含else子句关键字关键字(b)图表达式语句1语句2满足不满足(a)图表达式语句满足不满足例如:if(a<b){t=a;a=b;b=t;}例如:if(a!=0)printf(“a!=0\n”);elseprintf(“a==0\n”);4.2if语句和用if语句构成的选择结构4.2.1if语句例4.1输入两个数,分别放入x和y中,若两数不相等,则输出其中的最大数;若两数相等,则输出字符串x==y和x的值。程序分析:输入两个整数分别赋给变量x和y。比较两个数不相等相等x大于y(x>y)x小于y(x<y)x等于y(x==y)输出x输出y输出x==y和x开始输入x、y结束x>yx<yx==y满足不满足满足满足不满足不满足#include<stdio.h>main(){intx,y;printf("Enterx&y:\n");scanf("%d%d",&x,&y);if(x>y)printf("x=%d\n",x);if(x<y)printf("y=%d\n",y);if(x==y)printf("x==y%d\n",x);}printf("x,y:%d%d\n",x,y);输出x输出y输出x==y和x4.2if语句和用if语句构成的选择结构4.2.1if语句例4.2输入三个整数,分别放在变量a、b、c中,然后把输入数据重新按由小到大的顺序放在变量a、b、c中,最后输出a、b、c中的值。程序分析:输入三个整数分别放在变量a、b、c中。把三个整数由小到大进行排序。
a<b<c③
输出a、b、c。开始输入a、b、c结束输出a、b、c排序#include<stdio.h>main(){inta,b,c;
printf("inputa,b,c:");scanf("%d%d%d",&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);/*输出原始数据*/
排序过程;
printf("%d,%d,%d\n",a,b,c);}abc302010a>ba>cb>c交换两个变量中的值交换两个变量中的值交换两个变量中的值302020102030if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}#include<stdio.h>main(){inta,b,c,t;printf("inputa,b,c:");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d\n",a,b,c);}inputa,b,c:302010<CR>a=30,b=20,c=1010,20,304.2if语句和用if语句构成的选择结构4.2.1if语句例4.3输入两个数,分别赋给x和y,输出其中的大数。程序分析:1.输入两个数分别赋给变量x和y。2.输出其中的最大数:两数进行比较判断。如果x>y,则输出x;
否则,输出y。开始输入x、y结束x>y输出x输出y不满足满足#include<stdio.h>main(){intx,y;printf("Enterx&y:");scanf("%d%d",&x,&y);printf("x,y:%d%d\n",x,y);if(x>y) printf("max=x=%d\n",x);else printf("max=y=%d\n",y);printf("**end**\n");}Enterx&y:53<CR>x,y:53max=x=5**end**4.2if语句和用if语句构成的选择结构4.2.1if语句例4.4输入一个数,判别它是否能被3整除。若能被3整除,打印YES;不能被3整除,打印NO。程序分析:1.输入一个数赋给一个变量,比如n。2.判断它是否能被3整除。可以,则输出YES;
否则,输出NO。n%3==0(若能整除,则余数肯定为0)开始输入n结束n%3==0输出YES输出yNO不满足满足#include<stdio.h>main(){intn;printf("inputn:");scanf("%d",&n);if(n%3==0)/*判断n能否被3整除*/ printf("YES\n");else printf("NO\n");}inputn:9<CR>YESinputn:5<CR>NO4.2if语句和用if语句构成的选择结构4.2.1if语句注意if后面圆括号中的表达式,可以是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表达式、赋值表达式等),也可以是任意类型的数据(如:整型、实型、字符型、指针型等)。无论是否有else子句,if子句中如果只有一条语句,则此语句后的分号不能省略。如:if(x!=0)printf(“%f”,x);elseprintf(“%f”,y);此处的分号不能省略此处的分号也不能省略4.2if语句和用if语句构成的选择结构4.2.2嵌套的if语句第一种嵌套形式:if(表达式1)if(表达式2)语句1else语句2else
语句3图1表达式1语句3不满足表达式2语句1语句2满足满足不满足4.2if语句和用if语句构成的选择结构4.2.2嵌套的if语句第二种嵌套形式:if(表达式1){if(表达式2)语句1}else
语句2图2表达式1语句2不满足满足表达式2语句1满足不满足注意在if子句中的一对花括号不可缺少。if(表达式1)if(表达式2)语句1else
语句2
应当注意if与else的配对关系。else总是与它
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电机学课件-清华大学
- 2024年全新装修设计合作协议2篇
- 广西大学附属中学消防讲座课件张琳敏课件
- 房屋担保租赁合同(2篇)
- 2024年互联网租赁平台自行车退租退款及押金返还协议3篇
- 2025年贵州货运从业资格考试模拟考试题库及答案解析
- 2025年福州货运从业资格试题答案解析
- 2025年武汉货运从业资格证考试模拟考试题及答案
- 2025年克拉玛依b2考货运资格证要多久
- 2025年塔城货运资格证培训考试题
- 事业单位面试题-人际关系类
- Linux配置与管理智慧树知到期末考试答案2024年
- 防失智老人走失试理论试题及答案
- 肾活检术后护理查房
- 血糖监测技术新进展培训课件
- 《卫生检疫》期末复习选择题及答案
- 你那年那兔那些事儿
- 生活区公共服务设施布局规划优化
- DB21-T 2780.1-2017辽东落叶松二元立木材积表 第1 部分 日本落叶松
- 地源热泵施工流程课件
- 智能物料搬运机器人设计方案
评论
0/150
提交评论