3.2.2 scanf()函数
a. scanf()函数的一般形式 scanf(格式控制,地址表列); 其中scanf是函数名,“格式控制“的含义同printf( )函数, “地址表列“由若干个变量地址组成,既可以是变量的地址,也可以是字符串的首地址(参见“字符数组“一节)。 例如:
scanf(“%d”,&a); printf(“%d”,a);
运行时输入123,按回车键后则会在屏幕上输出整型变量a的值123 。其中“%d”是格式控制字符串。 &a 是输入项。其中的“&”是“取地址运算符”,&a指a在内存中的地址,如需要有多个输入项时,输入项之间要用逗号隔开。在实际输入时,若一次向计算机输入多个数据,则每两个数据间要以一个或多个空格间隔,也可以用回车键或跳格键【Tab】。 b. 格式说明
scanf()函数中的格式说明也是以%开始,以一个格式字符结束,中间可以加入附加的字符。 说明:
(1)对unsigned型变量的数据,可以用 %d、%o、%x格式输入。
(2)在scanf( )函数中格式字符前可以用一个整数指定输入数据所占宽度,但对于实型数则不能指定其小数位的宽度。 (3)在格式控制串中,格式说明的个数应该与输入项的个数相等,且要类型匹配,如不匹配,系统也不会给出出错信息,但有可能使程序的结果不正确。若格式说明的个数少于输入项的个数,scanf( )函数结束输入,多余的项继续从终端接收新的数据,若格式说明的个数多于输入项个数时,scanf( )函数同样也结束输入。
c. 使用scanf()函数时应注意的问题
(1)scanf()函数中的输入项只能是地址表达式,而不能是变量名或其他内容,也就是说输入项必须是某个存储单元的地址,这一点一定要掌握。 例如: int m,n;
scanf(“%d,%d”,m,n);
是不对的,应将其中的“m,n“改为 “&m,&n”。
(2)如果在“格式控制“字串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。 (3)在用 “%c”格式输入字符时,空格字符和转义字符都作为有效字符输入。 (4)在输入数据时,若实际输入数据少于输入项个数,scanf( )函数会等待输入,直到满足条件或遇到非法字符才结束;若实际输入数据多于输入项个数,多余的数据将留在缓冲区备用,作为下一次输入操作的数据。 在输入数据时,遇到以下情况时认为输入结束。
遇空格、按“回车”或“跳格”(【Tab】)键,上述字符统一可称为“间隔符”。
在程序运行到要求实际输入时,间隔符的数目不限,按指定的宽度结束,如“=”,只取3列。
scanf( )函数中的格式控制串是为输入数据用的,其间的字符不能实现原样输出。若想在输入时出现提示性语言,则需要另外使用printf语句。
第三章 选择结构
考点 1 . if语句和用if语句构成的选择结构
if语句用来对所给定的条件进行判定,判断其表达式的值是否满足某种条件,并根据判定的结果(真或假)决定执行给出的两种操作中的哪一种。
1.1 if语句的几种形式
(1)if(表达式)语句 例如: if(a>b)
printf(“The answer is right!\\n“);
其中,if是C语言的关键字,a>b是条件判断表达式。表达式两侧的括号不可少,并且只能是圆括号,不能用其他括号替代。紧跟着的是一条输出语句,称为if子句,如果在if子句中需要多个语句,则应该使用大括号({})把一组语句括起来构成复合语句,这样在语法上满足“一条语句“的要求。 (2)if(表达式) 语句1 else 语句2 例如:
if(a>b)printf(“The answer is right.\\n“); else printf(“The answer is wrong.\\n“); (3)if(表达式1)语句1 else if(表达式2)语句2 else if(表达式3)语句3 ┆
else if(表达式m)语句m else 语句n
“语句1“是if子句,“语句2…语句m“是else子句。这些子句在语法上要求是一条语句,但需要执行多条语句时,则应该使用花括号({})把这些语句括起来组成复合语句。
else不能独立成为一条语句,它只是if语句的一部分,不允许单独出现在程序中。else必须与if配对,共同组成if…else语句。
1.2 if语句的嵌套
在if语句中又包含一个或多个if语句结构,称为if语句的嵌套,一般形式如下: if( )
if()语句1 else语句2 else
if()语句3 else语句4
应当注意:else总是与它上面的最近的没有与else配对的if配对。
1.3 条件运算符构成的选择结构
有如下语句: if(x min=x;/*求两数中较小的一个*/ else min=y; 可以用min=(x 优先级:条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符。 考点2. switch语句和goto语句 2.1 switch语句 switch语句是C语言提供的多分支选择语句,用来实现多分支选择结构。它的一般形式如下: switch(表达式) { case 常量表达式1 :语句1 case 常量表达式2 :语句2 … case 常量表达式n :语句n default : 语句n+1 } 说明: (1)switch是关键字,switch后面用花括号括起来的部分是switch语句体。 (2)switch后面括号内的“表达式“,可以是C语言中任意合法表达式,但表达式两侧的括号不能省略。 (3)case也是关键字,与其后面的常量表达式合称case语句标号,常量表达式的类型必须与switch后面的表达式的类型相匹配,且各case语句标号的值各不相同,不能重复。 (4)default也是关键字,起标号的作用,代表除了以上所有case标号之外的那些标号,default标号可以出现在语句体中任何标号位置上,当然,也可以没有。 (5)case语句标号后的语句1、语句2等,可以是一条语句,也可以是若干条,在必要时,case语句标号后的语句可以省略不写。 case和常量表达式之间一定要有空格。 2.2 语句标号 语句标号用标识符表示,它的命名规则与变量名相同,即由字母、数字和下画线组成,在标识符后加一个冒号,就成了一个语句标号。在C语言中可以在任何语句前加上语句标号。 2.3 goto语句 goto语句为无条件转向语句,goto语句的一般形式如下: goto 语句标号; goto语句的作用:把程序的执行转向语句标号所在的位置,这个语句标号必须与此goto语句同在一个函数内,滥用goto语句将使程序的流程毫无规律,可读性差,因此初学者应慎用。 第四章 循环结构 在许多问题中,需要做某些重复执行的操作,这时就会用到循环结构。在程序设计中也一样,例如,对1~100之间的自然数进行求和计算,计算某班级所有同学的成绩总分,还有很多,几乎所有的程序都会包含循环控制结构。循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。 1) 用while语句; 2) 用do-while语句; 3) 用for语句; 考点. 1 while循环语句 while语句 while语句一般形式如下: while(表达式) 循环体 说明: while是C语言的关键字。紧跟其后的表达式可以是C语言中任意合法的表达式,该表达式是循环条件,由它来控制循环体是否执行。循环体可以是一条可执行语句,当多项操作需要多次重复做时,可以使用复合语句。 执行过程: (1)计算紧跟while后括号中表达式的值,当表达式的值为非0时,则接着执行while语句中的内嵌语句;当整个表达式值为0时,则跳过该while语句,执行该while结构后的其他语句。 (2)执行循环体内嵌语句。 (3)返回去执行步骤(1),直到条件不满足,即表达式的值为0时,退出循环,while结构结束。 特点:先对表达式进行条件判断,后执行语句。 while语句构成的循环结构不同于由if语句构成的选择结构。当if后面的条件表达式的值为非零时,其if子句只执行一次;而当while后面的条件表达式的值为非零时,其后的循环体中的语句将被重复执行。而且在设计循环时,通常应在循环体内改变与条件表达式中有关变量的值,使条件表达式的值最终变成零,以便能及时退出循环。 例如:用while循环求自然数1到100的和,程序段如下: #include int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf (\} 考点2 . do…while循环语句 do…while语句 do … while 循环结构的一般形式如下: do 循环体语句 while(表达式); 说明: (1)do是C语言的关键字,必须和while联合使用,不能独立出现。 (2)do … while 循环由 do 开始,用while结束。在语法上,在do和while之间只能是一条语句,如需要执行多条语句时,可以用大括号({})括起来,构成复合语句。必须注意的是:while(表达式)后的分号不可丢,它用以表示do … while 语句的结束。 (3)while后面的圆括号中的表达式,可以是C语言中任意合法的表达式,由它控制循环是否执行,且圆括号不可丢。 执行过程:先执行一次指定的循环体语句,执行完后,判别while后面的表达式的值,当表达式的值为非零(真)时,程序流程返回,去重新执行循环体语句。如此反复,直到表达式的值等于零为止,此时循环结束。 特点:先执行循环体一次,然后判断循环条件是否成立。 do…while 构成的循环与while循环十分相似,它们之间的重要区别是: while循环的控制出现在循环体之前,只有当while后面的表达式的值为非零时,才可能执行循环体;在do … while 构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。 例如:用do-while循环求自然数1到100的和,程序段如下: #include int i,sum=0; i=1; do { sum=sum+i; i++; } while(i<=100); printf(\}