c语言总复习2.docx
- 文档编号:7528876
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:19
- 大小:29.54KB
c语言总复习2.docx
《c语言总复习2.docx》由会员分享,可在线阅读,更多相关《c语言总复习2.docx(19页珍藏版)》请在冰豆网上搜索。
c语言总复习2
C语言总复习
第二部分程序设计
程序运行步骤:
编译F9运行Ctrl+F9查看结果Alt+F5
结构化程序设计的三种基本结构:
顺序结构选择结构循环结构
一、选择结构
条件语句
1、if(表达式)语句;
2、if(表达式)
语句1;
else
语句2;
*条件语句可以嵌套
*if语句内嵌的语句为赋值语句时,可用条件运算符处理,使问题简单:
if(a>b)max=a;
elsemax=b;
max=(a>b)?
a:
b;
3.阶梯式if-else-if结构。
阶梯式结构的一般形式为:
if(表达式1)
语句1;
elseif(表达式2)
语句2;
elseif(表达式3)
语句3;
.
.
.
else
语句n;
这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它
有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else
语句n。
最后这个else常起着"缺省条件"的作用。
5.多分支语句swtich
switch(变量)
{
case常量1:
语句1或空;
case常量2:
语句2或空;
.
case常量n;
语句n或空;
default:
语句n+1或空;
}
执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。
注意:
1.switch中变量可以是数值,也可以是字符。
2.可以省略一些case和default。
3.每个case或default后的语句可以是语句体,但不需要使用"{"和"}"括起来。
下例的switch中变量为整数型。
main()
{
inttest;
for(test=0;test<=10;test++)
{
switch(test) /*变量为整型数的开关语句*/
{
case1:
printf("%d\n",test);
break; /*退出开关语句*/
case2:
printf("%d\n",test);
break;
case3:
printf("%d\n",test);
break;
default:
puts("Error");
break;
}
}
}
下例的switch中变量为字符型。
#include
main()
{
charc;
while(c!
=27) /*循环直到按Esc键结束*/
{
c=getch(); /*从键盘不回显接收一个字符*/
switch(c)
{
case'A':
/*接收的字符为'A'*/
putchar(c);
break; /*退出开关语句*/
case'B':
putchar(c);
break;
default:
/*接收的字符非'A'和'B'*/
puts("Error");
break;
}
}
}
注:
要理清分支,最好用框图
2、循环结构
三种基本的循环语句:
for语句、while语句和do-while语句。
重点:
for循环
✓for循环是开界的。
它的一般形式为:
for(循环变量赋初值;循环条件;循环变量增值)
语句;
for(i=1;i<=10;i++)
语句;
1.for循环中循环体可以为语句体,但要用"{"和"}"将参加循环的语句括起来。
2.for循环中的"初始化"、"条件表达式"和"增量"都是选择项,即可以缺省,但";"不能缺省。
3.for循环可以有多层嵌套。
main()
{inti,j,k;
printf("ijk\n");
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf(%d%d%d\n",i,j,k);}
输出结果为:
ijk
000
001
010
011
100
101
110
111
✓while循环的一般形式为:
while(条件)
语句;
while循环表示当条件为真时,便执行语句。
直到条件为假才结束循环。
并继续执行循环程序外的后续语句。
例:
#include
main()
{
charc;
c='\0';/*初始化c*/
while(c!
='\X0D')/*回车结束循环*/
c=getche();/*带回显的从键盘接收字符*/
}
上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c='\X0D',条件为假,循环便告结束。
与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。
✓do-while循环的一般格式为:
do
语句;
while(条件);
这个循环与while循环的不同在于:
它先执行循环中的语句,然后再判断条
件是否为真,如果为真则继续循环;如果为假,则终止循环。
因此,do-while循
环至少要执行一次循环语句。
✓break、continue和goto语句
break语句通常用在循环语句和开关语句中。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
例
main()
{
inti=0;
charc;
while
(1)/*设置循环*/
{
c='\0';/*变量赋初值*/
while(c!
=13&&c!
=27)/*键盘接收字符直到按回车或Esc键*/
{
c=getch();
printf("%c\n",c);
}
if(c==27)
break;/*判断若按Esc键则退出循环*/
i++;
printf("TheNo.is%d\n",i);
}
printf("Theend");}
注:
在多层循环中,一个break语句只向外跳一层。
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。
例:
main()
{
charc;
while(c!
=0X0D)/*不是回车符则循环*/
{
c=getch();
if(c==0X1B)
continue;/*若按Esc键不输出便进行下次循环*/
printf("%c\n",c);
}
}
✓goto语句是一种无条件转移语句.
格式为:
goto 标号;
其中标号是TurboC中一个有效的标识符,这个标识符加上一个":
"一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。
另外标号必须与goto语句同处于一个函数中, 但可以不在一个循环层中。
通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。
goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理。
三、数组
数组:
数组是一组有序数据的集合,数组中每一个元素的类型相同
一维数组的定义
定义方式:
类型说明符数组名[下标常量表达式]
例、inta[10]
定义一个数组,数组名a,有10个元素,每个元素的类型均为int。
这10个元素分别是:
a[0]、a[1]、a[2]、a[3]、a[4]、....、a[8]、a[9]。
注:
(1)C语言中,数组下标从0开始.
(2)C语言不允许对数组的大小做动态定义,如:
intn;
scanf("%d",&n);
inta[n];
二、数组元素的引用
C语言规定,不能引用整个数组,只能逐个引用元素如;
a[0]=a[5]+a[7]-a[2*3]
三、一维数组的初始化
初始化:
在定义时指定初始值,编译器把初值赋给数组变量。
赋值:
使用赋值语句,在程序运行时把值赋给数组变量,如a[0]=2。
1、一般初始化,例、
inta[10]={0,1,2,3,4,5,6,7,8,9};
intarray[10]={1,2,3,4,5,6,7,8,9,10};
2、部分元素初始化,例、
inta[10]={0,1,2,3,4};
仅前5个元素赋初值,后5个元素赋0
二维数组
一、二维数组的定义
floata[3][4];
a为3×4(3行4列)的数组
floatb[5][10];
b为5×10(5行10列)的数组
二维数组的理解:
二维数组a[3][4]理解为:
有三个元素a[0]、a[1]、a[2],每一个元素是一个包含4个元素的数组。
二、二维数组中元素的引用
用数组名和下标引用元素。
例、
floata[2][3];有6个元素,按如下方式引用各元素:
a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]
注意:
数组floata[2][3]中无元素a[2][3]。
(下标从0始)
三、二维数组的初始化
1、分行赋值(常用)如、
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、全部数据写在一个大括号内,如、
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3、部分元素赋值,如、
inta[3][4]={{1},{5},{9}};
仅对a[0][0]、a[1][0]、a[2][0]赋值,其余元素编译器自动指定初值0;
4、应用
例、main()
{inta[5][3];
inti,j;
for(i=0;i<5;;i++)
for(j=0;j<3;;j++)
a[i][j]=i+j;
for(i=0;i<5;;i++)
for(j=0;j<3;;j++)
printf(“%5d”,a[i][j]);
printf(“\n”);
}
字符数组
字符数组:
存放字符数据的数组,每一个元素存放一个字符。
一、程序中定义字符数组
例、
charc[10];/*定义c为字符数组,包含10个元素*/
c[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';
c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';
注意:
字符型与整型可以通用,但有区别:
charc[10];/*在内存中占10字节*/
intc[10];/*在内存中占20字节*/
二、字符数组的初始化
1、逐个元素初始化
charc[10]={'I','','a','m','','h','a','p','p','y'};
2、初始化数据少于数组长度,多余元素自动为“空”('\0',二进制0)。
三、字符数组的引用
引用一个元素,得到一个字符。
四、字符串
字符串例子:
"Iamaboy"
1、C语言中,字符串作为字符数组处理。
字符数组可以用字符串来初始化,例、
staticcharc[]={"Iamhappy"};或staticcharc[]="Iamhappy";(常用)
2、字符串在存储时,系统自动在其后加上结束标志'\0'
五、字符数组的输入输出
2种方法:
1、用“%c”格式符逐个输入输出。
2、用“%s”格式符将字符串一次输入输出。
例、
staticcharc[6];
scanf("%s",c);
printf("%s",c);
(1)输出时,遇'\0'结束,且输出字符中不包含'\0'。
(2)“%s”格式输出字符串时,printf()函数的输出项是字符数组名,而不是元素名。
charc[6]="China";
printf("%s",c);printf("%c",c[0]);
printf("%s",c[0]);
(3)“%s”格式输出时,即使数组长度大于字符串长度,遇'\0'也结束。
例、
charc[10]={"China"};
printf("%s",c);/*只输出5个字符*/
(4)“%s”格式输出时,若数组中包含一个以上'\0',遇第一个'\0'时结束。
(5)输入时,遇回车键空格TAB键结束,在字符串末尾添'\0'。
因此,定义的字符数组必须有足够的长度,以容纳所输入的字符。
(如,输入5个字符,定义的字符数组至少应有6个元素)。
(6)一个scanf函数输入多个字符串,输入时以“空格”键作为字符串间的分隔。
例
charstr[13];
scanf("%s",str);
输入:
Howareyou?
结果:
仅“How”被输入数组str
如要想str获得全部输入(包含空格及其以后的字符),要用gets函数
(7)C语言中,数组名代表该数组的起始地址,因此,scanf()函数中不需要地址运算符&。
charstr[13];
scanf("%s",str);
scanf("%s",&str);
六、字符串处理函数
在C的函数库中,提供了一些字符串处理函数。
(重点见书P146—150)
函数均是库函数,使用时必须用#include语句包含头文件。
1、定义:
数据类型数组名[][]
intb[3],a[3][3];
注:
数组元素下标取值都从0开始。
数组元素按其下标顺序连续存放,数组名表示该数组的首地址。
四、函数
*基本概念:
C语言程序的基本单位是函数。
C程序中函数的数目实际上是不限的
一个C程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,整个程序从这个主函数开始执行。
函数分类:
系统提供的库函数、用户自定义函数
*掌握:
函数定义、函数返回值、、函数说明、函数调用、实参和形参传递
1、函数定义
函数定义就是确定该函数完成什么功能以及怎么运行,相当于其它语言的一个
子程序。
函数类型函数名(数据类型形式参数;数据类型形式参数...)
{
函数体;
}
说明:
其中函数类型和形式参数的数据类型为TurboC的基本数据类型。
当函数无返回值时,说明是void类型
函数体为TurboC提供的库函数和语句以及其它用户自定义函数调用语句的组合,并包括在一对花括号"{"和"}"中。
需要指出的是一个程序必须有一个主函数,其它用户定义的子函数可以是任意多个,这些函数的位置也没有什么限制,可以在main()函数前,也可以在其后。
如:
intmaxmum(intx,inty,intz)
voidsubfun(int*m,int*n)
2、函数声明
[存储类型][数据类型]函数名();
函数的数据类型必须与函数定义时一致,形参可不同名。
intputlll(intx,inty,intz,intcolor,char*p);/*声明一个整型函数*/
voidstudent(intn,char*str);/*声明明一个不返回值的函数*/
注:
如函数在main()前,可不声明。
3函数的调用
1)函数的简单调用
TurboC调用函数时直接使用函数名和实参的方法,将要赋给被调用函数的参量,按该函数说明的参数形式传递过去,然后进入子函数运行,运行结束后再按子函数规定的数据类型返回一个值给调用函数。
使用TurboC的库函数就是函数简单调用的方法。
举例说明如下:
例1:
#include
intmaxmum(intx,inty,intz); /*说明一个用户自定义函数*/
intmain()
{
inti,j,k;
printf("i,j,k=?
\n");
scanf("%4d%4d%4d",&i,&j,&k);
maxmum(i,j,k);
getch();
return0;
}
maxmum(intx,inty,intz)
{
intmax;
max=x>y?
x:
y;
max=max>z?
max:
z;
printf("Themaxmumvalueofthe3datais%d\n",max);
}
2)函数参数传递
一、调用函数向被调用函数:
(1)
值传递实参形参
(2)地址传递当数组作为形参,向被调用函数传递时,传递数组的,;指针变量作为形参,传递一地址。
共享内存单元。
用下述方法传递数组形参。
例:
#include
voiddisp(int*n);
intmain()
{
intm[10],i;
for(i=0;i<10;i++)
m[i]=i;
disp(m); /*数组为实参,传递首地址给形参指针变量n*/
getch();
}
voiddisp(int*n)
{
intj;
for(j=0;j<10;j++)
printf("%3d",*(n++));
printf("\n");
}
另外,当传递数组的某个元素时,数组元素作为实参,此时按使用简单变量的方法使用数组元素,值传递。
上例按传递数组元素的方法传递时变为:
#include
voiddisp(intn);
intmain()
{
intm[10],i;
for(i=0;i<10;i++){
m[i]=i;
disp(m[i]); /*逐个传递数组元素*/
}
getch();
}
voiddisp(intn)
{
printf("%3d\t",n);
}
这时一次只传递了数组的一个元素。
二、被调用函数向调用函数返回值
用return语句由被调用函数向调用函数返回值,该语句有下列用途:
1.它能立即从所在的函数中退出,返回到调用它的程序中去。
2.返回一个值给调用它的函数。
有两种方法可以终止子函数运行并返回到调用它的函数中:
一是执行到函数的最后一条语句后返回;一是执行到语句return时返回。
#include
intmaxmum(intx,inty,intz); /*说明一个用户自定义函数*/
intmain()
{
inti,j,k,max;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 复习