该【C语言知识点复习 】是由【taoapp】上传分享,文档一共【20】页,该文档可以免费在线阅读,需要了解更多关于【C语言知识点复习 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
第1章
C语言程序的结构
,main函数和其他函数。p5-p6
例题:判断:C语言程序是由过程和函数组成的。(错)
,类型定义,变量定义,组成程序的各个函数,程序中的注释。
:.c
第2章数据
1基本数据类型:整型数据,浮点型数据,指针型数据
2常量:字面常量,符号常量
3变量:标识符,变量的定义,变量的初始化,变量的引用
4输出与输入:基本输出,基本输入
输入输出函数的调用,正确输入数据并正确理解和设计输出格式。
整数的表示范围、溢出情况:
在整常量后加字母l或L,认为它是longint型常量
整常量后面加一个字母u或U,认为是unsignedint型
16位整数的表数范围为:-32768--+32767
若有声明"shortintx;"且sizeof(x)的值为2,则当x值为时"x+1>x"为假。
字符型与整型
chari=2;
chari=’2’;
inti=2;
inti=’2’;
浮点数的表示
指数形式:e或E之前必须有数字;指数必须为整数。
例题1:
下列选项中,不能作为合法常量的是()。
A)))+4D)
例题2:
下列选项中可作为C语言合法常量的是()。
A)-80B)-080C)-)-
字符常量:用单引号括起来的单个普通字符或转义字符
转义字符:反斜线后面跟一个字符或一个代码值表示
main()
{
printf("\101\x42C\n");
printf("Isay:\"Howareyou?\"\n");
printf("\CProgram\\n");
printf("Turbo\'C\'");:.
}
常见字符的ASCII码
‘A’650x41
‘a’970x61
‘0’480x30
chara=’b’-'A'+'0';
a=’A’+32;
合法的用户标识符
下列不能定义的用户标识符是()。
A)MainB)_0C)_intD)sizeof
printf的使用
字符串结尾应以’\0’结束,才能整体输出
scanf的使用
scanf的输入分隔符的指定
一般以空格、TAB或回车键作为分隔符
其它字符做分隔符:格式串中两个格式符间字符
scanf读入字符注意点:空格和转义字符作为有效字符输入
例题1:
欲使得a1的值为12,a2的值为34,c1的值为字符a,
c2的值为字符b,scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
输入形式应为:12a34b
例题2:
有下列程序:
main()
{intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
}
若想从键盘上输入数据,使变量m的值为123,n的值为456,p的值为789,则正确
的输入是:
m=123n=456p=789
例题3:
chara,b,c,d;
scanf(“%c%c”,&a,&b);
c=getchar();d=getchar();
printf(“%c%c%c%c\n”,a,b,c,d);
输入:ab
cd
输出为:
ab
c
例题4:
#include<>:.
main()
{inti=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);//p28-31四张表格
printf("%d%d%d\n",i,j,k);
}
输入:102030
输出为:10300
以整数格式为字符变量输入
main()
{charb;
scanf("%d",&b);
b=b*2;
printf("%c\n",b);
}
输入:33
输出为:B
用scanf读入字符串
字符串名或数组名本身就是地址,不需加&
有定义语句:intb;charc[10];,则正确的输入语句是()。
A)scanf("%d%s",&b,&c);B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c);D)scanf("%d%s",b,&c);
不能将一行带有空格的字符串读入
若准备将字符串“Thisisastring.”记录下来,
错误的输入语句为:
(A)scanf(“%20s”,s);
(B)for(k=0;k<17;k++)
s[k]=getchar();
(C)while((c=getchar())!=‘\n’)
s[k++]=c;
(D)gets(s);
第3章运算与表达式
1算术运算
基本算术运算符、优先级与结合性、数据类型转换、自增、自减运算
2关系运算
3逻辑运算
4位运算
按位逻辑运算移位运算
位运算符的含义和使用。
简单的位运算。
5指针运算
取地址运算、操作指针变量、移动指针、比较指针
6其它运算
sizeof运算、逗号运算、条件运算:.
7赋值运算
赋值运算符和赋值表达式、复合赋值运算
熟练运用各种运算符、掌握运算优先级和结合性。P237附录B
不同类型数据间的转换与运算。
表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
基本运算、优先级
例题1:
下列程序的输出结果是()。
main()
{intm=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
A)12353514B)12353513C)12343514D)12343513
例题2:
下列程序的输出结果是()。
main()
{inta,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d\n",a,b);}
A)6,1B)2,1C)6,0D)2,0
例题3:
main()
{chars[]="159",*p;
p=s;
printf("%c",*p++);//先输出*p,再p++,即先去表达式值输出,再p++
printf("%c",*p++);
}
15
例题4:
inta=0,b=1;
if(a=b)
printf(“aequaltob”);
else
printf(“anotequaltob”);
注意区分“=”与“==”
%操作的使用
%操作只能针对整数(字符):.
#include<>
main()
{
char*s="ABC";
do
{
printf("%d",*s%10);
s++;
}while(*s);
}
运行结果:567
经常用于求解某个整数的尾数,将整数进行分离等。
位运算举例
main()
{intc=35;printf("%d\n",c&c);}
运行结果:35
main()
{charx=040;printf("%d",x=x<<1);}
注意:040为八进制
运行结果:64
main()
{chara=3,b=6,c;
c=a^b<<2;
printf("%d",c);}
运行结果:27左移<<优先级高于按位异或^
第4章程序控制结构
顺序程序设计
基本语句
、函数调用语句、表达式语句,空语句,复合语句。
选择结构程序设计
。
(a>b)?a:b
。
。
x≤y≤z的c语言表达式:(x<=y&&y<=z)
C语言中没有逻辑类型
逻辑运算和关系运算的结果为1或0;2&&0
a=10;b=20;c=(a%b<1)||(a/b>1);
5>2>7>8的值
(a==1)||(a!=1)的值:.
0参与逻辑运算表示假;
非0参与运算表示真;
intb=5;
if(!b)(等价于if(b==0)
b--;
if(){多条语句}
main()
{inta=3,b=4,c=5,t=99;
if(b<a&&a<c)
t=a;
a=c;c=t;
if(a<c&&b<c)t=b,b=a,a=t;
printf("%d%d%d\n",a,b,c);}
else总是与最近的if配对
if(a==1)
if(b!=2)
if(c==3)d=1;
elsed=2;
elseif()
switch中的每个case,如不遇到break,则继续执行下一个case语句,直至遇到break
switch后面的表达式的含义
inta=3,b=5;
switch(a==1)
{case1:a=b;break;
case0:a++;
}
switch(a)
{case1:a=b;break;
case0:a++;
}
短路特性:逻辑表达式求解时,有时并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符
下列程序的输出结果是()。
main()
{inti=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))printf("%d%d%d\n",i,j,k);
}
A)123B)234C)223D)233
条件表达式的计算结合方向:自右向左
如a<b?a:c<d?c:da<b?a:(c<d?c:d)
若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a<b?a:c<d?c:d的
值是()。
A)1B)2C)3D)4:.
循环控制
。
-while循环结构。
。
。
循环用列表法分析,以确保不发生低级错误
例题1:
main()
{charc1,c2;
for(c1='0',c2='9';c1<c2;c1++,c2--)
printf("%c%c",c1,c2);
printf("\n");
}
输出:0918273645
例题2:
main()
{inta=1,b;
for(b=1;b<=10;b++)
{if(a>=8)break;
if(a%2==1)
{a+=5;continue;}
a=3;
}
printf("%d\n",b);
}
输出:4
例题3:
main()
{inti,j,m=1;
for(i=1;i<3;i++)
{for(j=3;j>0;j--)
{if((i*j)>3)
break;
m=i*j;
}
}
printf("m=%d\n",m);
}
运行结果:m=1:.
第5章数组
数组的定义和引用
、初始化和数组元素的引用。
。
数组的长度必须是一个常数!
intN=90;
inta[N];错误
下列叙述中错误的是()。
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越
界”的出错信息
D)可以通过赋初值的方式确定数组元素的个数
数组元素的引用
例题1
main()
{intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7)
if(p[i]%2)j+=p[i];
printf("%d\n",j);
}
A)42B)45C)56D)60
++优先级高于<
例题2
有下列程序:
main()
{intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{for(j=0;j<i;j++)
printf("%4c",'');
for(j=i;j<4;j++)
printf("%4d",num[i][j]);
printf("\n");
}
}
输出:
右上半三角。
1234
678
1112
16
例题3
下列程序的输出结果是()。:.
main()
{inta[3][3],*p,i;p=&a[0][0];
for(i=0;i<9;i++)p[i]=i;
for(i=0;i<3;i++)printf("%d",a[1][i]);}
A)012B)123C)234D)345
例题4
inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;
for(i=0;i<5;i++)
s=s+a[b[i]];
printf("%d\n",s);
11
数组/字符数组/字符串的初始化
例题1:
能正确初始化的是:
A)char*s;s="Olympic";//把"Olympic"的地址赋给s
B)chars[7];s="Olympic";//s是数组名,是数组地址,不是变量
C)char*s;s={"Olympic"};
D)chars[7];s={"Olympic"};
例题2:
下列能正确定义一维数组的选项是()。
A)inta[5]={0,1,2,3,4,5};B)chara[]={0,1,2,3,4,5};
C)chara={'A','B','C'};D)inta[5]="0123";
串长度/数组长度/串在内存中所占的字节数
chars1[10]="abcd!",*s2="\n123\";//将串的首地址赋给s2,见p56
printf("%d%d%d%d%d\n",strlen(s1),strlen(s2),sizeof(s1),sizeof(s2),sizeof("\n123\"));
551046
下列程序的输出结果是()。
main()
{chara[7]="a0\0a0\0";inti,j;
i=sizeof(a);
j=strlen(a);
printf("%d%d\n",i,j);
}
A)22B)76C)72D)62
已有定义:chara[]="xyz",b[]={'x','y','z'};,下列叙述中正确的是()。
A)数组a和b的长度相同B)a数组长度小于b数组长度
C)a数组长度大于b数组长度D)上述说法都不对
指针相关内容
,运算符*与&。
、二维数组和字符串的地址以及指向变量、数组、字符串、函数、
结构体的指针变量的定义。通过指针引用以上各类型数据。
。
。:.
,指向指针的指针。
指针与数组
main()
{
inta[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p<a+10;p++)
printf("%d,",*p);
}
指针与字符串
main()
{
char*s="12347";
s+=2;
printf("%ld\n",s);
}
下列语句或语句组中,能正确进行字符串赋值的是()。
A)char*sp;sp="right!";B)chars[10];s="right!";
C)chars[10];*s="right";D)char*sp="right!";
char*sp;sp="right!";
有下列函数:
fun(char*a,char*b)//12341231
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{a++;b++;}
return(*a-*b);
}
该函数的功能是()。
A)计算a和b所指字符串的长度之差
B)将b所指字符串复制到a所指字符串中
C)将b所指字符串连接到a所指字符串后面
D)比较a和b所指字符串的大小
二维数组与指向数组的指针变量
main()//本题较难选做
{inta[3][2]={0},(*ptr)[2],i,j;
//注意,ptr是一个指针,并非数组,只不过指向的内容是一
//个长度为2的int数组
for(i=0;i<2;i++)
{ptr=a+i;
scanf("%d",ptr);
}
for(i=0;i<3;i++):.
{for(j=0;j<2;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
输入11
输出
10
10
00
#include<>
intfun(int(*s)[3],intn,intk)//本题较难选做
{
intm,i;
m=s[0][k];
for(i=1;i<n;i++)
if(s[i][k]>m)
m=s[i][k];
returnm;
}
main()
{
inta[3][3]={{1,2,3},{11,12,13},{2l,22,23}};
printf("%d\n",fun(a,2,0));
}
11
当两个指针p,s指向数组元素时,p在s之后,p-s指的是两个指针相差的元素个数.
如s指向a[1],p指向a[3],p-s为2。
main()
{inta[8],*p,*s;
for(p=a;p-a<8;p++)scanf("%d",p);
for(p=a,s=a;p-a<8;p++)if(*p>*s)s=p;
printf(“index=%d\n”,s-a);
}
通过指针访问数组元素
设有定义doublea[10]={2,2,3,4},*s=a;,以下能够代表数组元素a[3]的是。
A)(*s)[3]//语法错误,*s为一个数
B)*(s+3)
C)*s[3]//s[3]即为a[3]
D)*s+3//数组首元素的值加3
intx[8],*p=x;
则对x数组元素的正确引用是。:.
A)*&x[8]//越界
B)*(x+3)
C)*(p+8)/越界
D)p+3
指针数组
main()
{
char*a[]={“ef","gh","ijk"};
inti;
for(i=0;i<3;i++)
printf("%c",*a[i]);
}
egi
第6章其它数据类型
。
。
struct结构体变量及分量的赋值方法
例1:
设有定义:
structcomplex
{intreal,unreal;}data1={1,8},data2;
data2=data1;
data2=(2,6);错
=;
例2:
有以下定义和语句
structworkers
{intnum;
charname[20];
charc;
struct
{intday;intmonth;intyear;}s;
};
structworkersw,*pw;
pw=&w;
能给w中year成员赋1980的语句是
*=1980;错
=1980;错
pw->year=1980;错:.
=1980;
例3:
#include<>
structst
{intx,y;}data[2]={1,10,2,20};
main()
{structst*p=data;
printf("%d,",p->y);printf("%d\n",(++p)->x);
}
10,2
union的定义和使用
例1
uniondt
{inta;charb;doublec;}data;
下列叙述中错误的是()。
A)data的每个成员起始地址都相同
B)变量data所占内存字节数与成员c所占字节数相等
C)程序段:=5;printf("%f\n",);
D)data可以作为函数的实参
typedef的使用
例1:
设有如下说明:
typedefstructST
{longa;intb;charc[2];}NEW;
则下列叙述中正确的是()。
A)以上的说明形式非法B)ST是一个结构体类型
C)NEW是一个结构体类型名D)NEW是一个结构体变量
例2:
下列对结构体类型变量td的定义中,错误的是()。
A)typedefstructaaB)structaa
{intn;{intn;
floatm;floatm;
}AA;}td;
AAtd;structaatd;
C)structD)struct
{intn;{intn;
floatm;floatm;
}aa;}td;
structaatd;:.
第7章函数
。
。
。
,参数值传递。
,嵌套调用,递归调用。
。
(自动,静态,寄存器,外部),变量的作用域和生存期。
void函数不返回值
#defineP3
voidF(intx)
{
return(P*x*x);
}
main()
{printf("%d\n",F(3+5));}
编译出错
C语言函数可以嵌套调用
例如:fun(fun(x)),fun(3*a,fun(b,c))
下列程序的输出结果是()。
intf1(intx,inty){returnx>y?x:y;}
intf2(intx,inty){returnx>y?y:x;}
main()
{inta=4,b=3,c=5,d=2,e,f,g;
e=f2(f1(a,b),f1(c,d));
f=f1(f2(a,b),f2(c,d));
g=a+b+c+d-e-f;
printf("%d,%d,%d\n",e,f,g);
}
A)4,3,7B)3,4,7C)5,2,7D)2,5,7
函数参数单向传递
(1)普通变量,值传递
(2)指针作参数,但未对指针所指的内容作修改
函数参数的传递和返回
例题1:函数参数传递时的类型转换
#include<>
intf(intx,inty)
{returnx+y;}
voidmain()
{
doublea=,b=;
printf("%d",f(a,b));
}:.
9
例题2:
#include<>
voidfun(int*a,int*b)
{
int*c;
c=a;a=b;b=c;
}
main()
{
intx=2,y=8,*p=&x,*q=&y;
fun(p,q);
printf("%d%d",*p,*q);
fun(&x,&y);
printf("%d%d\n",*p,*q);
}
2828
例题3:
point(char*p){p+=3;}
main()
{charb[4]={'a','b','c','d'},*p=b;
point(p);printf("%c\n",*p);
}
a
函数参数双向传递
(1)地址传送,包括数组,指针传递
(2)结构体分量作为参数时,值传递
下列程序的输出结果是()。
voidf(int*x,int*y)
{intt;
t=*x,*x=*y;*y=t;
}
main()
{inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{f(p,q);p++;q--;}
for(i=0;i<8;i++)printf("%d,",a[i]);
}
A)8,2,3,4,5,6,7,1B)5,6,7,8,1,2,3,4
C)1,2,3,4,5,6,7,8D)8,7,6,5,4,3,2,1:.
函数与数组
#include<>
voidfun(inta[],intn)
{inti,t;
for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{inta[10]={0,1,2,3,4,5,6,7,8,9},i;
fun(a,7);
for(i=3;i<9;i++)printf("%d",a[i]);
printf("\n");
321078
下列程序的输出结果是()。
#defineN20
fun(inta[],intn,intm)
{inti,j;
for(i=m;i>n;i--)a[i+1]=a[i];
}
main()
{inti,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,8);
for(i=0;i<5;i++)printf("%d",a[i]);
}A)10234B)12344C)12334D)12234
static变量的特殊性
为保证一个变量在未赋初值的情况下初值为0,应选择的存储类别是static
#include<>
intfun()
{
staticintx=2;
x=x*3;
returnx;
}
main()
{
inti,s=1;
for(i=1;i<=2;i++)
s=fun();
printf("%d\n",s);
}
18
指向函数的指针
程序中若有下列说明和定义语句:
charfun(char*);
main()
{char*s="one",a[5]={0},(*f1)()=fun,ch;
…:
C语言知识点复习 来自淘豆网m.daumloan.com转载请标明出处.