C语言复习纲要 2.docx
《C语言复习纲要 2.docx》由会员分享,可在线阅读,更多相关《C语言复习纲要 2.docx(17页珍藏版)》请在冰豆网上搜索。
![C语言复习纲要 2.docx](https://file1.bdocx.com/fileroot1/2023-1/7/d5132ddb-75a7-4c05-8d7a-d2d84d0afd22/d5132ddb-75a7-4c05-8d7a-d2d84d0afd221.gif)
C语言复习纲要2
第一章C语言概述
一、C程序的主要结构特点如下:
(1)所有的c程序都是由一个或多个函数组成的程序模块构成的。
(2)必须有且仅有一个main()主函数。
c程序总是从主函数main()开始
执行,结束于主函数。
(3)c语言程序是由语句组成,使用“;”作为语句的中止符或分隔符。
(4)c语言程序中用{}将函数体括起来。
(5)c语言中注释的格式:
/*注释内容*/。
二、上机步骤:
第二章数据类型、运算符及表达式
一、关键字(会识别):
共32个:
autobreakcasecharconstcontinuedefaultdodouble
elseenumexternfloatforgotoifintlongregister
returnshortsignedstaticsizeofstructswitchtypedef
unionunsignedvoidvolatilewhile
例:
下列是C语言提供的合法的数据类型关键字()。
A)unsignB)defaultC)integerD)Char
二、自定义标识符:
是用户定义的用来标识语句中的成份。
如函数名、变量名、数组名等。
标识符定义的规则:
(1)第一个字符必须是字母或下划线_;
(2)后跟字母、下划线_或数字组成;
(3)标识符中的大小写字母有区别
(4)不能与c编译系统已经预定义的关键字同名。
例:
选出下列标识符中不是合法的标识符的是( )。
A.hot_do B.int
C._pri D.2ab
三、常量:
在程序运行过程中,其值不能被改变的量。
(1)整型常量:
十进制、八进制(以0开头)、十六进制(以0x开头)
(2)字符常量:
用单撇号‘’括起来的一个字符,可以使用转义字符。
(3)实型常量(浮点型常量):
小数形式、指数形式(小数e指数)。
(4)字符串常量:
用双撇号括起来的字符序列。
(5)符号常量定义:
#define标识符名常量
例:
在C语言中,非法的八进制是:
( )
A.016 B.018 C.017 D.02
例:
不是C语言实型常量的是:
( )
A.55.0 B.0.0 C.5.5e-3 D.55e2.5
四、变量:
程序运行期间数据的值不确定。
1、变量的声明和定义:
类型名变量标识符名[,变量…,变量];
2、变量的操作:
(1)存数据:
初始化、赋值语句和键盘输入函数
(2)取数据:
用变量参与表达运算
例:
下面的变量说明中正确的是____________。
A.int:
a,b,c; B.int a;floatb;
C.int a,floatb; D.int 2;
五、数据类型:
常用基本类型的类型符及占用空间
基本型 所占字节 对应格式符
char 1 %c
int 4 %d
float 4 %f、%e
double 8 %lf、%le
六、运算符:
告诉编译程序执行特定算术或逻辑操作的符号:
掌握常用的运算符
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!
表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!
=
不等于
表达式!
=表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?
:
条件运算符
表达式1?
表达式2:
表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
逗号运算符
表达式,表达式,…
左到右
从左向右顺序算
说明:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:
!
>算术运算符>关系运算符>&&>||>赋值运算符
七表达式:
是用括号将常量、运算符、函数连接起来的有意义的式子。
表达式的运算顺序:
从左往右依次取出运算数据和运算符,不同运算符按优先级由高到低顺序进行,同级按运算符的结合性决定运算的先后。
例5、计算下列表达式的值:
(1)(a+b)/2+(int)x%(int)ya=4,b=3.x=8.6,y=3.5
(2)a+b>c&&c-1a=2,b=3,c=4
(3)!
(a
(4)b=a++b=3a=4;b=?
a=?
(5)a=2a*=a+2的值
(6)sizeof(char)的值
第三、四章顺序、选择、循环结构程序设计
一语句:
它由一个词或句法上有关连的一组词构成,表达计算机执行的一个动作或声明定义一个符号的名称。
语句
格式
功能
变量声明语句
[存储类型]数据类型变量名1,…变量名n;
声明程序中自定义的符号
赋值语句
变量名=表达式;
计算表达式的值并赋给变量
表达式语句
表达式;
实现数据的处理
输入输出语句
printf(“格式字符串”,[变量1,…变量n]);
常用格式符:
%d,%c,%f,%s,%lf
%m.n格式符
scanf(“格式字符串”,[地址1,…地址n]);
常用格式符:
%d,%c,%f,%s,%lf
实现往显示器上输出数据
从键盘上输入数据到内存
选择语句
(分支语句)
if(表达式)
语句1;
[else
语句2;]
嵌套if语句的规定是:
else总是与其之前最近的且尚未配对的if配对
根据表达式的值决定语句是否执行。
switch(表达式)
{
case值1:
语句;[break];
.
.
.
case值n:
语句n;[break];
[default:
语句n+1;[break];]
}
循环语句
while(表达式)
{
语句;
[break;]
[continue;]
}
重复执行语句;
do
{
语句;
[break;]
[continue;]
}while(表达式);
for(表达式1;表达式2;表达式3)
{
语句;
[break;]
[continue;]
}
赋值语句等号左边为变量
例:
下面不正确的赋值语句是_____________。
A.a=a+1; B、a+5=b ;
C、a+=b ; D、a=1;
例:
下列程序的输出结果是()。
#include
voidmain()
{
inta=3,b=5;
printf("a=%d,b=%d",a,b);
}
(A)a=3,b=5(B)a=%3,b=%5
(C)a%%d,b=%%d(D)a=%d,b=%d
例:
for语句执行过程:
for(表达式1;表达式2;表达式3){循环体语句;}
真
假
表达式1判断表达式2执行循环体语句;表达式3;
结束循环,执行循环后续语句;
例:
循环语句:
for(i=1;i<4;i++)s=s+i;循环体执行的次数_________;
例:
多重循环(循环的嵌套),循环体中包含循环
inti,j;
for(i=1;i<5;i++)
{
printf(“i=%d”,i);
for(j=0;j<5;j++)
printf(“j=%d”,j);内层循环体外层循环体
printf(“\n”);
}
二、编程
程序结构:
按执行语句的次序:
顺序;选择;循环
编排语句的次序:
声明数据和输入数据;处理数据;输出数据;
例:
C程序设计时,当求解问题中出现条件判断时应该用选择结构,若出现连续重复时应该用循环结构,若出现功能上重复时可以设计函数来实现程序的模块化设计。
第五章数组
一.数组的概念
由相同数据类型的变量按照一定的次序组织起来,就是数组。
构成数组的变量称为数组元素。
用一个数组名和下标来唯一确定数组中的元素。
数组类型属于构造数据类型。
二.一维数组
1、定义
类型标识符数组名[常量表达式];例:
inta[5];
2、初始化
⑴对数组的全部元素赋初始值。
如:
intm[5]={1,21,35,4,58};
⑵对数组的部分元素赋初始值。
如:
intnum[5]={1,24,3};
⑶对数组的全部元素赋初始值时,可以将数组定义为一个不确定长度的数组。
如:
intnum[]={19,2,32,4,51};
3、引用:
数组名[下标]a[2]=3;
三.二维数组
1、定义
数据类型数组名[常量表达式1][常量表达式2];
例:
floata[3][4];
二维数组中元素的排列顺序是按行排列
2、初始化
(1)分行对二级数组初始化。
如:
inta[3][4]={{1,28,3,4},{15,62,7,8},{9,100,111,12}};
(2)按数组排列的顺序对各元素赋初值。
如:
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以对部分元素赋初值。
如:
inta[3][4]={{1},{5},{9}};
(4)如果对全部元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。
如:
inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3、引用:
数组名[行下标][列下标]a[2][3]
四、字符数组:
用来存放和处理字符数据的数组变量。
1、定义
char数组名[常量表达式];例charc[10];
2、初始化
⑴用字符逐个给字符数组中的元素赋值
如:
charc[5]={‘H’,’e’,’l’,’l’,’o’};
⑵用字符串常量给字符数组赋值。
如:
charc[6]=“Hello”;或charc[]=“Hello”
c这个数组总共分配6个字节的存贮空间,在c[5]中存入的是‘\0’。
3、字符串的输入输出
⑴在scanf中利用“%s”实现对字符串的整体输入
如:
charstr[20];scanf(“%s”,str);
⑵在printf中利用“%s”实现对字符串的整体输出
4、常用字符串处理函数
⑴字符串输入函数gets(字符数组名)
⑵字符串输出函数puts(字符数组名)
⑶字符串连接函数strcat(s1,s2)
⑷字符串比较函数strcmp(s1,s2)
⑸字符串复制函数strcpy(s1,s2)
⑹字符串求长度strlen(字符数组名)
例:
以下一维整型数组array的正确说明是()。
(A)inta(5);(B)intn=5,a[n];
(C)intn;(D)#defineSIZE10;
scanf("%d",&n);intarray[SIZE];
intarray[n];
例:
若有定义:
inta[2][3],则对数组a元素的正确引用是()。
(A)a[2][3](B)a[1,3](C)a
(1)(3)(D)a[1][2]
例:
下面是对s的初始化,其中不正确的是()。
(A)charstr[5]={“you”};(B)charstr[5]={‘y’,’o’,’u’};
(C)chars[5]=“”;(D)chars[5]=“abcdef”
例:
定义字符数组charstr[20];,则不能对字符数组正确输入的语句是( )。
(A)scanf("%s",str);
(B)gets(str);
(C)scanf("%c",str);
(D)for(i=0;i<20;i++)scanf("%c",&str[i]);
例:
定义字符数组charstr[10]={“string”};,则不能对字符数组正确输出的语句是( )。
(A)printf("%s\n",str);
(B)puts(str);
(C)printf("%c",str);
(D)for(i=0;i<10;i++)printf("%c",str[i]);
第六章函数
1、函数定义形式:
函数类型函数名(形参表列)
{函数体}
例:
intmax(intx,inty)
{intz;
z=x>y?
x:
y;
returnz;
}
2、函数的参数:
形参和实参,作用是实现数据传送
3、函数返回值与return语句
有参函数的返回值,是通过函数中的return语句来获得的。
return语句的一般格式:
return(返回值表达式);
4.函数类型
在定义函数时,对函数类型的说明,应与return语句中、返回值表达式的类型一致。
5、函数的调用
函数调用的一般形式为:
函数名([实际参数表])
(1)函数表达式。
如:
s=area(3,4,5);
(2)函数语句。
如:
printf(“WelcometoChina!
”);
(3)函数实参。
max(max(a,b),c);
在函数调用时,实参在次序、类型、个数上应用相应形参表中形参保持一致。
6、函数原型的一般形式为:
1.函数类型函数名(参数类型1,参数类型2……);
2.函数类型函数名(参数类型1参数名1,参数类型2参数名2……);
7、函数的嵌套调用
函数嵌套调用时执行的顺序:
main()->a()->b()->a()->main()
8、函数的递归调用
一个函数在它的函数体内,直接或间接地调用它自身。
需掌握典型程序:
1、交换两个变量的值
#include
voidmain()
{inta,b,t;
scanf("%d%d",&a,&b);
t=a;a=b;b=t;
printf("a=%d,b=%d\n",a,b);
}
2、累加(乘)
#include
voidmain()
{inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf(“sum=%d\n”,sum);
}
3、判断素数
#include
#include
voidmain()
{intm,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)printf("%disaprimenumber\n",m);
elseprintf("%disnotaprimenumber\n",m);
}
4、求两个的最大公约数
#include
voidmain()
{intm,n,a;
printf(“请输入两个正整数:
\n”);
scanf(“%d%d”,&m,&n);
a=m%n;
while(a!
=0)
{m=n;n=a;a=m%n;}
printf(“最大公约数为%d\n”,n);
}
5、求10数中的最大值、最小值
#include
voidmain()
{inta,i,max,min;
scanf("%d",&a);
min=max=a;
for(i=1;i<=9;i++)
{
scanf("%d",&a);
if(maxif(min>a)min=a;
}
printf("Max=%d,Min=%d\n",max,min);
}
6、将一组数倒置存放(倒排)
#include
#defineN5
voidmain()
{inti,temp;
inta[N]={1,2,3,4,5};
for(i=0;i{temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
for(i=0;iprintf("%d",a[i]);
}
7、选择法排序
#include
voidmain()
{inta[11],i,j,k,temp;
printf("Input10numbers:
\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
{k=i;
for(j=i+1;j<11;j++)
if(a[j]if(i!
=k)
{temp=a[i];a[i]=a[k];a[k]=temp;}
}
printf("Thesortednumbers:
\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}
8、冒泡法排序
#include
voidmain()
{inta[11],i,j,t;
printf("Input10numbers:
\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(i=1;i<=9;i++)
for(j=1;j<=10-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("Thesortednumbers:
\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}