C语言程序设计(第三章)_第1页
C语言程序设计(第三章)_第2页
C语言程序设计(第三章)_第3页
C语言程序设计(第三章)_第4页
C语言程序设计(第三章)_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

第3章C语言程序结构及相关语句3.1

C语言结构相关知识3.1.1算法描述方法算法一般可以用以下两种方法来进行描述。伪代码:采用近似高级语言但又不受语法约束的语言描述流程图:传统的流程图常用的符号如图所示,由这些框和流程线组成的流程图来表示算法3.1.2结构化程序结构化程序设计方法是程序设计的先进方法,结构化程序设计是一种使用顺序、选择和循环共三种基本控制结构,并且使用这三种基本结构足以表达出各种其他形式的结构的程序设计方法(1)顺序结构在执行时按照先后顺序逐条进行,没有分支,没有循环。如后面介绍的赋值语句、输入、输出语句等都可以构成顺序结构(2)分支结构分支结构也称为选择结构,根据不同的条件去执行不同分支中的语句。如后面章节中介绍的if语句、switch语句等都可以构成分支结构(3)循环结构根据条件,使同一组语句重复执行多次或一次也不执行。循环结构包括当型循环和直到型循环3.2

顺序语句3.2.1C程序的语句C程序的执行部分由语句组成的。程序的功能也由执行语句来实现。C语句可分五类:表达式语句函数调用语句控制语句复合语句空语句1.表达式语句表达式语句由表达式加上分号“;”组成。一般形式为:

表达式;执行表达式语句就是计算表达式的值。例如:c=a+b;是赋值语句。2.函数调用语句

由函数名、实际参数(实参)加上分号“;”组成。一般形式为:函数名(实参表);执行函数语句是调用函数体并将实参值复制给函数定义中的对应形式参数(形参),然后执行被调函数体中的语句,求取函数值。3.控制语句控制语句用于控制程序的流程,它们由特定的语句定义符组成,用以实现程序的各种结构方式。

例如:可以用if语句来实现选择结构程序,用for语句来实现循环。4.复合语句将多个语句用一对括号{}括起来组成的一个语句块称为复合语句。在程序中应把复合语句看成是一条语句(一个整体),而不是多条语句,例如:{ k=i+j; a=b-c; printf("%d,%d",k,a);}这是一条复合语句。复合语句内的各条语句都以分号“;”结尾,在括号“}”外不用加分号。5.空语句只有分号“;”组成的语句称为空语句。空语句什么也不执行。3.2.2数据输出语句数据输出语句用于向标准输出设备(显示器)输出数据在C语言中,所有数据输入/输出都由库函数完成。因此都是函数语句。1.格式化输出函数printf()printf()函数称为格式输出函数printf()函数的功能是按用户指定的格式,将指定的数据显示到显示器屏幕上。(1)printf()函数调用的一般形式printf()的函数原型在头文件“stdio.h”中。printf函数调用的一般形式为:printf(“格式控制字符串”,输出表);其中格式控制字符串用于指定输出格式,可以同时输出指定的字符串。格式控制串由格式字符串和非格式字符串(即要输出的字符串)两种组成格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、长度、小数位数等。如“%d”表示按十进制整型输出。非格式字符串在输出时按原样显示。例3.1printf()函数示例。#include<stdio.h> /*包含库函数printf()所需信息*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta=65,b=66; /*定义变量*/ printf(“%d%d\n”,a,b); /*按整型格式输出a,b*/ printf(“%d,%d\n”,a,b); /*按整型格式输出a,b*/ printf(“%c,%c\n”,a,b); /*按字符格式输出a,b*/ printf("a=%d,b=%d\n",a,b); /*格式化输出a,b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

6566 65,66 A,B a=65,b=66

请按任意键继续...(2)格式字符串格式字符串的一般形式为:[标志][输出最小宽度][.精度][长度]类型其中方括号[]中的项为可选项类型字符意义d,i以十进制形式输出带符号整数(正数不输出符号)o以八进制形式输出无符号整数(不输出前缀0)x以十六进制形式输出无符号整数(不输出前缀0X)u以十进制形式输出无符号整数f以小数形式输出单、双精度实数e以指数形式输出单、双精度实数g以%f和%e中较短的输出宽度输出单、双精度实数c输出单个字符s输出字符串类型:类型字符用以表示输出数据的类型标志:标志字符为-、+、#三种标志字符意义-结果左对齐,右边填空格+输出符号(正号或负号)空格,输出值为正时冠以空格,为负时冠以负号#对c,s,d,u类无影响;对o类,在输出时加前缀0;对x类,在输出时加前缀0x;对e,g,f

类当结果有小数时才给出小数点输出最小宽度:用十进制整数来表示输出的最少位数,如果实际位数多于定义的宽度,则按实际位数输出,如果实际位数少于定义的宽度则补以空格或0精度:精度格式符以“.”开头,后跟十进制整数。具体的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出例3.2printf()函数格式字符串使用示例。#include<stdio.h> /*包含库函数printf()所需信息*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta=168; /*定义整型变量*/ floatb=1243.1698; /*定义单精度实型变量*/ doublec=2421985.50168; /*定义双精度实型变量*/ chard='a'; /*定义字符型变量*/ printf("a=%d,%5d,%o,%x\n",a,a,a,a); /*输出a*/ printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); /*输出b*/ printf("c=%lf,%f,%8.4lf\n",c,c,c); /*输出c*/ printf("d=%c,%8c\n",d,d); /*输出d*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

a=168,168,250,a8 b=1243.169800,1243.169800,1243.1698,1.243170e+003 c=2421985.501680,2421985.501680,2421985.5017 d=a,a

请按任意键继续...“%f”和“%lf”格式的输出相同例3.3printf()函数输出表的求值顺序示例。#include<stdio.h> /*包含库函数printf()所需信息*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inti=6; /*定义变量*/ printf("%d,%d,%d\n",++i,++i,++i); /*输出关于i的表达式之值*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}在VisualC++6.0、Dev-C++和MinGWDeveloperStudio中,程序运行时屏幕输出如下:

9,8,7

请按任意键继续...不同的编译系统输出表的求值顺序不一定相同,可从左到右,也可从右到左。VisualC++6.0、Dev-C++和MinGWDeveloperStudio是按从右到左进行的格式控制个数小于输出列表个数#include<stdio.h>

#include<stdlib.h>

intmain(void)

{ inti=6;

printf("%d,%d\n",++i,++i,++i);

system("PAUSE");

return0;

}程序运行时屏幕输出如下:

9,8

请按任意键继续...2.字符输出函数putchar()putchar()函数用于输出字符,功能是在显示器上显示单个字符。函数原型在头文件“stdio.h”中,一般形式为:putchar(字符变量/字符数据);例如:putchar(‘a’);输出小写字母a。putchar(x);输出字符变量x存放的字符。putchar(‘\n’);换行,对控制字符则执行控制功能,不在屏幕上显示例3.4putchar()函数使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ chara='A',b='o',c='m'; /*定义字符型变量*/ putchar(a);putchar(b);putchar(b);putchar('\t'); /*输出字符,'\t'为制表符*/ putchar(a);putchar(b);putchar('\n'); /*输出字符,'\n'为换行符*/ putchar(b);putchar(c); putchar('\n'); /*输出字符,'\n'为换行符*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

AooAo om

请按任意键继续...如何用printf()函数替代例3.4中的

putchar()函数?#include<stdio.h>

main()

{ chara='A',b='o',c='m';

//putchar(a);putchar(b);putchar(b);putchar('\t');

printf(“%c%c%c\t”,a,b,b);

//putchar(a);putchar(b);putchar('\n');

printf(“%c%c\n”,a,b);

//putchar(b);putchar(c); putchar('\n');

printf(“%c%c%c\n”,b,c);

}3.2.3数据输入语句C语言的数据输入也由函数语句完成本节介绍从标准输入设备键盘上输(读)入数据的函数scanf()和getchar()

1.格式化输入函数scanf()scanf()函数称为格式输入函数,其功能是按用户指定的格式从键盘上把数据输入到指定的变量之中。(1)scanf()函数的一般形式scanf()函数的函数原型在头文件“stdio.h”中。scanf()函数的一般形式为:scanf(“格式控制字符串”,变量地址表);(1)scanf()函数的一般形式其中格式控制字符串的作用与printf()函数相同,但不显示非格式字符串,也就是不能显示提示字符串。地址表中给出各变量的地址。地址由地址运算符“&”后跟变量名组成的。变量的地址是C编译系统分配的,用户不必关心具体的地址是多少。scanf()函数在本质上是给变量赋值,但要求写变量的地址,如&x例3.5scanf()函数使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b; /*定义变量*/ printf("输入a,b:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ printf("a=%d,b=%d\n",a,b); /*输出a,b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入a,b:68 a=6,b=8

请按任意键继续...(2)格式字符串格式字符串的一般形式为:%[*][输入数据宽度][长度]类型其中有[]的项为可选项。类型:表示输入数据的类型类型字符意义d,i输入十进制整数o输入八进制整数x输入十六进制整数u输入无符号十进制整数e,f输入实型数(用小数形式或指数形式)c输入单个字符s输入字符串“*”符:表示该输入项读入后不赋予相应的变量,即跳过该输入值。如scanf("%d%*d%d",&a,&b);当输入为:689时,把6赋予a,8被跳过,9赋予bc.宽度:用十进制整数指定输入的宽度(即字符数)。例如:scanf("%5d",&a);输入:1234567890只把12345赋予变量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);输入:1234567890将把1234赋予a,而把5678赋予bc.长度:长度格式符为l和h,l用于表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据使用scanf()函数应注意以下几点:scanf()函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。用户不能企图用此语句输入小数为2位的实数。scanf()函数中要求给出变量地址,如给出变量名则会出错。如scanf("%d",i);是非法的,应改为scnaf("%d",&i);才是合法的。在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:scanf("%c%c",&m,&n);输入为:de则把'd'赋予m,''赋予n。只有当输入为:de时,才能把'd'赋于m,'e'赋予b。如果在格式控制中加入空格作为间隔,如scanf("%c%c",&m,&n);则输入时各数据之间可加空格例3.6scanf()函数使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ chara,b; /*定义变量*/ printf("输入字符a,b:"); /*输入提示*/ scanf("%c%c",&a,&b); /*输入a,b*/ printf("%c%c\n",a,b); /*输出a,b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}输入“MN”时,a的值为'M',b的值为''。程序运行时屏幕输出参考如下: 输入字符a,b:MN M

请按任意键继续... 输入改为MN时,a的值为'M',b的值为'N'。程序运行时屏幕输出参考如下: 输入字符a,b:MN MN

请按任意键继续...例3.7scanf()函数使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ chara,b; /*定义变量*/ printf("输入字符a,b:"); /*输入提示*/ scanf("%c%c",&a,&b); /*输入a,b*/ printf("%c%c\n",a,b); /*输出a,b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入字符a,b:MN MN

请按任意键继续...如果格式控制串中有非格式字符,则输入时也要输入该非格式字符例如:scanf("%d,%d",&a,&b);其中用非格式符“,”作间隔符,故输入时应为:5,6scanf()使用注意事项:对于全部是非字符的数据输入,可用空格键、回车键和Tab键作为每两个输入数之间的间隔。对于全部是字符的数据输入,要严格按照输入控制格式输入。对于数字和字符交替输入的,数字后不用跟间隔,或字符后不用加间隔直接输入下一个数据。scanf()函数的课堂练习1:#include<stdio.h>main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}要完成给a赋值1、给b赋值2、给c赋值3,则应该如何输入?scanf()函数的课堂练习2:#include<stdio.h>main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}要完成给a赋值1、给b赋值2、给c赋值3,则应该如何输入?scanf()函数的课堂练习3:#include<stdio.h>main(){inta1,a2;charc1,c2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("a1=%d,a2=%d,c1=%c,c2=%c\n",a1,a2,c1,c2);}要完成给a1赋值10、给a2赋值20、给c1赋值X、给c2赋值Y,则应该如何输入?2.键盘输入函数getchar()getchar()函数的功能是从键盘上输入一个字符。函数原型在头文件“stdio.h”中,一般形式为:getchar();getchar()函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。注意:键盘输入时,系统先把输入字符串放到输入缓冲区内,执行一次getchar()就依次从缓冲区内取一个字符,取出一个字符后,缓冲区内可能有残留的其他字符或回车符号。例3.8getchar()函数使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ charc; /*定义变量*/ c=getchar(); /*输入c*/ printf("%c\n",c); /*输出c*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下:

A A

请按任意键继续...如果用户输入“AB”,则将字符‘A’赋值给c,字符'B'将被丢失。程序运行时屏幕输出参考如下:

AB A

请按任意键继续...3.3

分支结构程序3.3.1

关系运算符和表达式1.关系运算符比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符: <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=(不等于)1.关系运算符关系运算符都是双目运算符,都是左结合。关系运算符的优先级低于算术运算符,高于赋值运算符在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同2.关系表达式关系表达式一般形式为:表达式关系运算符表达式例如:a-b>c*d,x>3*2,'a'+6<c;都是合法的关系表达式。关系表达式的值是“真”和“假”,“真”用“1”和“假”用“0”表示例3.9关系表达式使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inti=1,j=6,k=8; /*定义整型变量*/ floatx=3e+5,y=0.86; /*定义实型变量*/

printf("%d\n",-i+2*j>=k+1);/*输出关系表达式的值*/ printf("%d\n",x-1.98<=x+y);/*输出关系表达式的值*/ printf("%d\n",k==j==i+6);/*输出关系表达式的值*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

1 1 0

请按任意键继续...对于k==j==i+6,根据运算符的左结合性,先计算k==j,该式不成立,其值为0,再计算0==i+6,也不成立,故表达式值为03.3.2

逻辑运算符和表达式1.逻辑运算符在C语言中,有三种逻辑运算符:&&(与) ||(或) !(非)与运算符&&和或运算符||都是双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:“!(非)”高于“&&(与)”,“&&(与)”高于“||(或)”逻辑运算符中的“&&(与)”和“||(或)”低于关系运算符并且高于赋值运算符,“!(非)”高于算术运算符根据运算符的优先顺序可得:x>y&&u>v等价于(x>y)&&(u>v)!a==b||c<d

等价于

((!a)==b)||(c<d)a+b>c&&d+e<f

等价于

((a+b)>c)&&((d+e)<f)!(非)算术运算符关系运算符&&(与)和||(或)赋值运算符高低2.逻辑运算的值逻辑运算的值也为“真”和“假”两种,用“1”表示“真”和用“0”表示“假”。求值规则如下:&&(与):参与运算的两个量都为真时,结果才为真,否则为假。例如,6>0&&8>1,由于6>0为真,8>1也为真,所以&&(与)的结果也为真。||(或):参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:6>0||8<1,由于6>0为真,所以||(或)的结果也为真。!(非):参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(6>0)的结果为假。2.逻辑运算的值逻辑运算时,以“1”表示“真”,“0”表示“假”。但在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于6和8均为非“0”因此6&&8的值为“真”,即为1。3.逻辑表达式逻辑表达式的一般形式为:表达式

逻辑运算符表达式逻辑表达式的结果是式中各种逻辑运算的最后的值,以“1”表示“真”和“0”表示“假”。例3.10逻辑表达式使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ charc='k'; /*定义字符型变量*/ inti=1,j=6,k=8; /*定义整型变量*/ floatx=3e+5,y=0.86; /*定义实型变量*/ printf("%d\n",!x*!y); /*输出逻辑表达式的值*/ printf("%d\n",i<j&&x<y);/*输出逻辑表达式的值*/ printf("%d\n",i==6&&c&&(j=8)); /*输出逻辑表达式的值*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

0 0 0

请按任意键继续...逻辑运算符的使用注意:1.逻辑与(&&)的使用注意:

如果&&左边表达式的值已经为“假”(0)了,右边就不计算了。2.逻辑或(||)的使用注意:如果||左边表达式的值已经为“真”(1)了,右边就不用算了。逻辑表达式的课堂练习1:#include<stdio.h>main(){inta=1,b=2,c=3,i,j;i=(a==1&&b++==2);j=(b!=2||c--!=3);printf("a=%d,b=%d,c=%d,i=%d,j=%d\n",a,b,c,i,j);}以上程序运行结果是什么?逻辑表达式的课堂练习1:#include<stdio.h>main(){inta=1,b=2,c=3,i,j;i=(a!=1&&b++==2);j=(b==2||c--!=3);printf("a=%d,b=%d,c=%d,i=%d,j=%d\n",a,b,c,i,j);}以上程序运行结果是什么?#include<stdio.h>main(){intw='A',x=14,y=15;w=((x||y)&&(w<'a'));printf("w=%d\n",w);}以上程序运行结果是什么?#include<stdio.h>main(){intw='A',x=14,y=15;w=((x||++y)&&(w<'a'));printf("w=%d,y=%d\n",w,y);}以上程序运行结果是什么?3.3.3if语句用if语句构成分支结构根据给定的条件进行判断,以决定执行某分支程序段。1.if语句第一种形式第一种形式为基本形式(单分支结构),使用方式如下:if(表达式)语句;语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。表达式的类型不限于关系表达式或逻辑表达式,它也可以是任意的数值类型(包括整型、实型、字符型等)如果是复合语句,一定要用{}括起来。例3.11输入两个整数,输出其中的大数。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b,max; /*定义变量*/ printf("输入两个数:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ max=a; /*假设a最大*/ if(max<b)max=b; /*如b更大,则最大值为b*/ printf("最大值:%d\n",max);/*输出a,b的最大值*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下: 输入两个数:16

最大值:6

请按任意键继续...2.if语句第二种形式第二种形式为if-else形式(双分支结构),使用方式如下:if(表达式)

语句1;else

语句2;其语义是:如果表达式的值为真,则执行语句1,否则执行语句2

例3.12使用if语句第二种形式改写例3.11。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b; /*定义变量*/ printf("输入两个数:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ if(a<b)printf("最大值:%d\n",b); /*如果a<b,则最大值为b*/ elseprintf("最大值:%d\n",a); /*否则,则最大值为a*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下: 输入两个数:16

最大值:6

请按任意键继续...例3.13写程序,判断某一年是否为闰年。根据历法,闰年的条件为:年份能被4整除但不能被100整除或年份能被400整除。具体程序实现如下:#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ intyear; /*年份*/ printf("输入年份:"); /*输入提示*/ scanf("%d",&year); /*输入year*/ if(year%4==0&&year%100!=0 /*如年份能被4整除但不能被100整除*/ ||year%400==0)printf("%d是闰年\n",year);/*或被400整除,则为闰年*/ elseprintf("%d不是闰年\n",year); /*否则为平年*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入年份:2008 2008是闰年 请按任意键继续...3.if语句第三种形式(多分支结构)第三种形式为if-else-if形式,前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式如下:if(表达式1) 语句1;elseif(表达式2) 语句2;elseif(表达式3) 语句3;…elseif(表达式m) 语句m;else语句m+1;语句语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句m+1。然后继续执行后续程序。例3.14if语句第三种形式使用示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ charc; /*定义字符型变量*/ printf("输入一个字符:"); /*输入提示信息*/ c=getchar(); /*输入字符*/ if(c<32)printf("是一个制控制字符\n"); elseif(c>='0'&&c<='9')printf("是一个数字\n"); elseif(c>='A'&&c<='Z')printf("是一个大写英文字母\n"); elseif(c>='a'&&c<='z')printf("是一个小写英文字母\n"); elseprintf("是一个其它字符\n"); system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入一个字符:&

是一个其它字符 请按任意键继续...4.使用if语句注意事项使用if语句应注意以下问题:在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。在if语句的三种形式中,所有的语句应为单个语句,如果要在满足条件时执行一组(多个)语句,则必须把这一组语句用{}

括起来组成一个复合语句5.if语句的嵌套当if语句中的执行语句又为if语句时,则构成了if语句嵌套的情形,C语言规定,else总是与它前面最近的未配对的if相配对。在嵌套内的if语句可能是if-else型的,这时应注意if和else的配对问题。例如:if(表达式1)if(表达式2) 语句1;else 语句2;else

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

语句1; else

语句2;else语句3;例3.15采用if语句的嵌套实现比较两个数的大小关系。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b; /*定义整型变量*/ printf("输入a,b:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ if(a!=b) /*a不相等b*/ if(a>b)printf("%d>%d\n",a,b); /*a大于b*/ elseprintf("%d<%d\n",a,b); /*a小于b*/ elseprintf("%d=%d\n",a,b); /*a等于b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入a,b:23 2<3

请按任意键继续...例3.16采用if-else-if语句的嵌套实现比较两个数的大小关系。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b; /*定义整型变量*/ printf("输入a,b:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ if(a<b)printf("%d<%d\n",a,b); /*a小于b*/ elseif(a>b)printf("%d>%d\n",a,b); /*a大于b*/ elseprintf("%d=%d\n",a,b); /*a等于b*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入a,b:32 3>2

请按任意键继续...if语句的例子:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2) if(b!=2||c--!=3) printf(“a=%d,b=%d,c=%d\n",a,b,c); elseprintf(“a=%d,b=%d,c=%d\n",a,b,c);elseprintf(“a=%d,b=%d,c=%d\n",a,b,c);}以上程序的运行结果?if语句的例子:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1)if(b!=2)if(c==3)d=1; elsed=2;elseif(c!=3)d=3; elsed=4;elsed=5;printf("d=%d\n",d);}以上程序的运行结果?3.2.4条件运算符和条件表达式条件运算符为“?”和“:”,它是一个三目运算符,条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3求值规则:如果表达式1的值为真,则以表达式2

的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值对于如下条件语句:if(a>b)min=b; /*b为最小值*/elsemin=a; /*a为最小值*/可用条件表达式写为min=(a>b)?b:a;例3.17采用条件表达式求两个数的最小值。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,b; /*定义整型变量*/ printf("输入a,b:"); /*输入提示*/ scanf("%d%d",&a,&b); /*输入a,b*/ printf("最小值=%d\n",a>b?b:a); /*输出a,b的最小值*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入a,b:23

最小值=2

请按任意键继续...3.3.5switch语句C语言还有一种用于多分支选择的switch语句,一般形式为:switch(表达式){case常量表达式1:

语句组1;case常量表达式2:

语句组2;…case常量表达式n:

语句组n;default:

语句组n+1;}语义:计算表达式的值。逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句例3.18switch语句使用示例。intmain(void) /*主函数main()*/{ intn; /*定义整型变量*/ printf("输入n:"); /*输入提示*/ scanf("%d",&n); /*输入n*/ switch(n) { case1:printf("星期一\n"); case2:printf("星期二\n"); case3:printf("星期三\n");

case4:printf("星期四\n"); case5:printf("星期五\n"); case6:printf("星期六\n"); case7:printf("星期天\n"); default:printf("错误\n"); } system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入n:5

星期五 星期六 星期天 错误 请按任意键继续...当输入5之后,却执行了“case5:”以及以后的所有语句,输出了“星期五”及以后的所有单词为避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,使用格式为:break;可修改例题的程序,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{intn; /*定义整型变量*/printf("输入n:"); /*输入提示*/scanf("%d",&n); /*输入n*/switch(n){ case1:printf("星期一\n");break; case2:printf("星期二\n");break; case3:printf("星期三\n");break; case4:printf("星期四\n");break; case5:printf("星期五\n");break; case6:printf("星期六\n");break; case7:printf("星期天\n");break; default:printf("错误\n");break;

} system("PAUSE"); return0; }

程序运行时输出参考如下: 输入n:5

星期五 请按任意键继续...虽然本例中“default:”后的break语句可省略,最好养成习惯在每个语句组后都加上break语句。switch语句的说明(1)switch语句体中可以没有break语句和default语句。(2)switch语句的圆括号中的表达式的值必须是整形或者字符型,不能为实型。case后面的表达式是常量,不能含有变量。(3)执行switch语句时,首先计算switch后圆括号内表达式的值,然后将这个值与语句体中的case后的常量比较,如果与某个常量相等,则执行该case后的语句块,如果没有相等的,则执行default后的语句块。(4)执行过程中如果遇到break语句,则跳出switch语句。case只作为一个入口,如果执行完某一个case或者default语句块后没有遇到break,则继续顺序往下执行,直到遇到break语句或者switch语句体末尾为止。(5)每个switch语句中default最多只能有一个,通常出现在switch的最后部分,但也可以出现在case之间或所有case之前。(6)在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用{}扩起来。switch语句的例子:#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:

switch(y) {case0:a++;break; case1:b++;break;

}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b=%d\n",a,b);}以上程序的运行结果?switch语句的例子:#include<stdio.h>main(){inta=15,b=21,m=0;switch(a%3){ case0:m++;break; case1:m++; switch(b%2)

{ default:m++;

case0:m++;break; }}printf("m=%d\n",m);}以上程序的运行结果?3.4

循环结构程序循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体3.4.1while语句while语句的一般形式为:while(表达式)

循环体语句;其中表达式是循环条件,可为任意合法的表达式。while语句的执行过程:计算表达式的值,当值为真(非0)时,执行循环体语句,直到表达式的值为假(0)时为止。例3.22统计从键盘输入一行字符中包含的小写字母的个数。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ intn=0; /*定义变量*/ charc; /*定义字符型变量*/ printf("输入一行字符:\n"); /*输入提示*/ c=getchar(); /*输入一个字符*/ while(c!='\n') { /*非换行符,循环*/ if(c>='a'&&c<='z')n++;/*对小写字母记数*/ c=getchar(); /*输入一个字符*/ } printf("含%d个小写字母\n",n); /*输出小写字母个数*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入一行字符: Thisisastring.

含12个小写字母 请按任意键继续...使用while语句应注意以下几点:循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。应注意循环条件的选择以避免死循环。例3.23死循环示例。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inta,n=0; /*定义变量*/ while(a=6)printf("%d",n++); /*循环输出n++*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}3.4.2dowhile语句dowhile语句的一般形式为:do{循环体语句;}while(表达式);表达式是循环条件dowhile语句执行过程:先执行一次循环体语句,再判别表达式的值,若为真(非0)则继续循环dowhile语句和while语句的区别:

dowhile语句至少要执行一次循环体。while语句当条件一开始就不满足时,则循环体一次也不执行

例3.24使用dowhile语句求1+2+…+100。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inti=1,s=0; /*定义变量*/ do { s=s+i; /*累加求和*/ i++; /*i自加1*/ }while(i<=100); printf("1+2+...+100=%d\n",s); /*输出累加和*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

1+2+...+100=5050

请按任意键继续...在一般情况下,while语句和dowhile语句都可以相互改写。对于dowhile语句应注意以下几点:在dowhile语句的表达式后面则必须加分号。在do和while之间的循环体由多个语句组成时,必须用{}括起来组成一个复合语句。程序举例:#include<stdio.h>main(){intm,n;scanf("%d%d",&m,&n);while(m!=n) { while(m>n)m=m-n; while(m<n)n=n-m; }printf("m=%d\n",m);}程序运行后,当输入1463<回车>,输出结果是?程序举例:#include<stdio.h>main(){inti=5;do{if(i%3==1) if(i%5==2) {printf("*%d",i);break;} i++;}while(i!=0);printf("\n");}程序运行结果是?3.4.3for语句for语句是C语言中广泛使用的一种循环语句。其一般形式为:for(表达式1;表达式2;表达式3){ 循环体语句;}表达式1:通常用来给循环变量赋初值,一般是赋值表达式。表达式2:通常是循环条件,一般为关系表达式或逻辑表达式表达式3:通常可用来修改循环变量的值,一般是赋值语句for语句的执行过程如下:(1)首先计算表达式1的值。(2)再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。(3)然后再计算表达式3的值,转回第2步重复执行。例3.25使用for语句求1+2+…+100。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inti,s=0; /*定义变量*/ for(i=1;i<=100;i++) s=s+i; /*累加求和*/ printf("1+2+...+100=%d\n",s); /*输出累加和*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出如下:

1+2+...+100=5050

请按任意键继续...在使用for语句中要注意以下几点for语句中的各表达式都可省略,但分号间隔符不能少。如:for(;表达式;表达式)省去了表达式1for(表达式;;表达式)省去了表达式2for(;;)省去了全部表达式在循环变量已赋初值时,可省去表达式1,如省去表达式2或表达式3则可能造成无限循环,这时应在循环体内设法结束循环。循环体可以是空语句。例3.26统计从键盘输入一行字符的个数。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ intn=0; /*定义变量*/ printf("输入一行字符:\n"); /*输入提示*/ for(;getchar()!='\n';n++); /*省略表达式1,无循环体的for语句*/ printf("共含%d个字符\n",n); /*输出字符个数*/ system("PAUSE"); /*输出系统提示信息*/ return0; /*返回值0,返回操作系统*/}程序运行时屏幕输出参考如下: 输入一行字符: thisisastring.

共含17个字符 请按任意键继续...循环嵌套在实际编写程序的过程中,经常需要把一个或者多个完整的循环结构放在某一个循环体中构成多层的循环,即嵌套循环。在内嵌的循环结构中还可以继续嵌套循环。每一层循环结构在逻辑上都是必须是完整的。通常把内层的循环称为“内循环”,外面的循环称为“外循环”。#include<stdio.h>main(){inti,j,sum;for(i=3;i>=1;i--){sum=0;for(j=1;j<=i;j++)sum+=i*j;}printf("%d\n",sum);}以上程序运行结果?3.4.4转移语句程序中如果需要改变程序的正常流向,可以使用本小节介绍的转移语句。在C语言中提供了4种转移语句:goto,break,continue和return。其中的return语句只能出现在被调函数中,用于返回主调函数1.goto语句goto语句也称为无条件转移语句在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难本书不讨论goto语句的具体使用方法2.break语句break语句只能用在switch语句或循环语句中,作用是跳出switch语句或跳出本层循环,转去执行后面的程序。break语句的一般形式为:break;例3.27使用break语句求1+2+…+100。#include<stdio.h> /*标准输入/出头文件*/#include<stdlib.h> /*包含库函数system()所需信息*/intmain(void) /*主函数main()*/{ inti=1,s=0;

温馨提示

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

评论

0/150

提交评论