c语言总复习资料_第1页
c语言总复习资料_第2页
c语言总复习资料_第3页
c语言总复习资料_第4页
c语言总复习资料_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

c语言总复习资料

一c语言的基本组成单位——函数。1.main();2库函数;3.自定义函数。Abc();

二函数的组成:1.函数的首部,函数的第一行语句(包括函数的返回值类型、函数名、函数参数类型及函数参数名)。()不可省略,例如:voidmain()2.函数体,包括函数的声明部分(声明在该程序中所要用到的函数)、定义部分(定义函数可能要用到的变量)、执行部分(用于实现函数的功能)。

三函数必不可少的分号。

四输入输出所使用的函数:scanf、getchar、gets、printf、putchar、puts等。

五注释:不能嵌套。习题94页18题。

六大小写区分:printf与Printf之不一样。

七C语言上机过程:编辑(.c)——>编译(.obj)——>连接(.exe)——>运行得结果。

八C程序执行是从main()函数开始,到main函数结束处结束。

九进制转换:着重掌握十、八、十六进制及相互转换,原补码(位运算中要用到)。

十用户自定义标识符:1.字母、数字、下划线。2第一个字母不能为数字。3.不能与c语言所定义的关键字相同,但可以与预定义标识符同。

十一常量:

1整形常量十进制、八进制(以0开头)、十六进制(以0x开头)后两种无负数。

2实型常量2.78(小数点两边至少有一边要有数字)5.48e-3(e前必有数字,e后必为整数)

3字符型常量a.一般字符’a’;b.转义字符:一般转义字符、八\十六进制转义字符。’\n’,’\\’,’\t’,’\”’,’\64’,’\82’,’\x42’,’\xff’,’a12’.

4字符串常量“a”vs’a’

十二变量1.必须要先定义后使用;2变量三要素变量类型变量名变量值

例1:下面不是c语言整形常量的是A.02B.0C.038D.0xAL

例2:合法的实型常量是A.5E2.0B.E-3C.2E0D1.3E

例3:若有语句chara;并要将字符a赋值给变量a,则下列正确的赋值表达式是

A.a=”a”B.a=’a’C.a=”97”D.a=’97’

例4:以下合法的定义是:

A.float_a=1.1e-1;B.doubleb=1+5e2.5;C.longdo=0xfdaL;D.float2_and=1-e-3;

十三.求余原则:1.两边都要为整数;

2.先取绝对值求余,余数与被除数符号相同。特别要注意’%’与’/’的区别。-10/310/-3

十四.赋值运算符及表达式:运算顺序自右致左,左边必须要是一个变量(能够存放东西)。

a=b=c=10(定义处不能这样);x+y=10;x+1=10;

十五.逗号表达式:a=(b=5,b+10);b=(a=4*9,a*2),a-3;要考虑优先级。

十六.类型转换chara=’a’;intb=32;floatc=32.5;doubles,d=32;s=a+b+c+d;

十七.强制类型转换floatb=3.5;inta;a=(int)b;

例5:设有intx=11;则表达式(x++*1/3)的值是A3B4

例6:设有inta=1,b=1,c=1;a=a+++b+++c;最终a、b、c的值是:a=4;b=2;c=1;

例7:有以下定义和语句组:floatx=1;inty=2;y+=++x*++x;则最终y的值为:11

例8:intx=2;printf(“%d”,((x=4*5,x*5),x+25));45

例9:若变量已正确定义并赋值,以下符合c语言语法的表达式是

A.a:=b+1B.a=b=c+2C.int18.5%3D.a=a+7=c+b

十八输入输出格式ch=getchar();putchar(ch);scanf(“%d%f%c”,&a,&b,&c);printf(“%d,%d”,a,b);

例10:有以下程序,输出的结果是

main(){inta;charc=10;floatf=100.0;doublex;

a=f/=c*=(x=6.5);printf(“%d%d%3.1f%3.1f\n”,a,c,f,x);}1651.56.5(习题集2.13)

十九.逻辑运算及其短路现象(对于逻辑与和逻辑或而言)

二十.关系运算符及表达式a>b>c优先级要清楚(即关>逻辑)

二十一.条件运算符及表达式a>b?a:c>d:c:d等价与a>b?a:(c>d?c:d)设a=1,b=2,c=3,d=4;4

例11:以下程序的输出是A.d=0c=50B.d=0c=2C.d=1c=50D.d=1c=2

main(){inta=3,b=4,c=2,d;d=a<!b&&(c=50)>b;printf(“d=%dc=%d”,d,s);}

二十二.if语句例12:以下程序输出结果是

inti=1,j=1,k=2;if((j++||k++)&&i++)printf(“%d,%d,%d\n”,i,j,k);2,2,2

if-else语句注意:if后只能管一个语句

main(){inta=2,b=-1,c=2;if(a<b)if(b<0)c=0;

elsec++;printf(“%d\n”,c);}

二十三.switch语句以下程序的输出是:main(){intx=1,a=0,b=0;

switch(x){case0:b++;case1:a++;case2:a++;b++;}printf(“a=%d,b=%d\n”,a,b)}a=2,b=1

二十四.whilevsdo-while

main()

{inti=0,n=0;

while(n!=0){i++;++i}printf(“%d”,i);

}

main()

{inti=0,n=0;

do{i++;++i}while(n!=0);printf(“%d”,i);

}

二十五breakvscontinue

注意:break语句只能出现在循环体和switch语句中而continue只出现在循体环中。

main()

{intsum,i;sum=0;for(i=10;i>0;i--){if(i>5)continue;sum=sum+i;}printf("%d\n",sum);}

例13:以下程序的输出是:main(){inta,y;a=5;y=0;a=7y=7

do{a+=2;y+=a;printf(“a=%dy=%d\n”,a,y);if(y>10)break;}while(a==7);}a=9y=16

例14:以下程序的输出是:main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;k--;}

printf(“%d,%d\n”,k,n);}3,3

二十六.一维数组的定义、赋初值、引用。注意:inta[10]={0};中括号例常量表达式,下标从0开始例15:若有定义floaty[5]={1,2,3};则下列描述正确的是:()

A.y并不代表数组元素B.定义此数组时不指定数组的宽度,定义效果一样

C.数组含有三个元素D.a[3]的值是3

例16:以下程序的输出是:main(){intz,y[3]={2,3,4};z=y[y[0]];printf(“%d”,z);}4

例17:以下程序的输出是:main(){intp[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i<7&&p[i]%2){k=k+p[i];i++}printf(“%d\n”,k);}24

例18:以下程序的输出是:

main(){intn[5]={0,0,0},i,k=2;for(i=0;i<k;i++)n[i]=n[i]+1;printf(“%d\n”,n[k])}0

二十七.二维数组的定义、赋初值、引用

例19:main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)

for(j=0;j<=i;j++)s+=a[i][j];printf(“%d\n”,s)}18

例20:以下不能正确定义二维数组的是:

Ainta[2][2]={{1},{2}};Binta[][2]={1,2,3};Cinta[2][2]={{1},2,3};Dinta[2][]={{1,2},{3,4}};

例21:若a是一个m行n列的数组,则a[i][j]是数组的第()个元素

Ai*m+jBi*m+j+1Ci*n+jDi*n+j+1

二十八字符数组的定义、赋初值、引用

1.chararr[10]={‘h’,’e’,’l’,’l’,’o’};2.chararr[]={‘h’,’e’,’l’,’l’,’o’,’\0’};

3.chararr[10]={“hello”};4.chararr[10]=”hello”;

二十九字符串输入输出若charstr[10]=”hello”,arr[10]=”me”;

scanf(“%s”,str);printf(“%s”,str);gets(str);puts(str);

strcpy(arr,str);strcmp(str,arr);strlen(str);strcat(str,arr);

例22:以下程序的输出是:

main(){charst[20]=”hel\0lo\t”;printf(“%d%d\n”,strlen(st),sizeof(st))}3,20

例23:以下程序的输出是:chars[]=”\\141\141abc\t”;printf(“%d\n”,strlen(s));9

三十指针与字符串char*a;a=”hello”;chara[10];a=”hello”;

例24:以下选项中正确的语句组是:()A.chars[8];s={“Beijing”};

B.char*s;s={“Beijing”};C.chars[8];s=”Beijing”;D.char*s;s=”Beijing”;

三十一有参函数的声明、定义、与调用。

floatadd(floatx,floaty);/*函数的声明*/

mai()

{inta=3.5,b=4.0,d;

d=add(a,b);/*函数的调用*/

}

floatadd(floatx,floaty)/*函数的定义*/

{returnx+y;}

三十二函数的嵌套调用与递归调用

doublefun1(doublea){returna*=a;}

doublefun2(doublex,doubley)

{doublea=0,b=0;

a=fun1(x);b=fun1(y);

return(int)(a+b);}

main()

{doublew;w=fun2(1.1,2.0);

printf("%f\n",w);}/*嵌套调用*/

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn2;}

main(){printf(“%d\n”,fib(3));}/*递归调用*/

三十三函数中的值传递与地址传递(不管是传递什么,实质都是传值,只不过一个是传递地址值而已)

func(inta){a=100;}func(inta[]){a[0]=100;}

main(){inta=10;func(a);printf(“%d”,a);}main(){inta[1];a[0]=10;func(a);printf(“%d”,a[0]);}

三十四局部变量与全局变量:局部变量的存储类型分为自动型(auto)、寄存器型(register)、静态类型(static),其中auto型和register型的变量的存储空间是动态的,程序一结束,其值就消失。而static类型的变量,程序结束后其值仍然存在。全局变量是静态的变量。

inta=5;

fun(intb){staticinta=10;a+=b++;printf(“%d”,a);}

main(){intc=20;fun(c);a+=c++;printf(“%d\n”,a);}3025如果在main中再加一个fun(c)呢?305025

三十五宏命令与文件包含

#defineN10

#defineS(x)x*x/*只要把这三个define语句放到一个文件hong.h里面*/

#definef(x)(x*x)/*再在主函数前加一个#include“hong.h”,程序运行结果一样*/

main(){inti1,i2;i1=1000/S(N);i2=1000/f(N);printf(“%d%d”,i1,i2);}100010

三十六指针变量的定义、初始化、运算

main()

{intn=5,*p=&n;printf(“theaddressis:%d\n”,p);

printf(“thedatais:%d\n”,*p);

printf(“&*pis:%d\n”,&*p);

printf(“*&nis:%d\n”,*&n);}

例24:设有定义intn=0,*p=&n;则正确的赋值语句是:A.p=1;B.*p=&n;A选项不行,因p中应存放一个地址值对于B选项,因p已经指向了n这个存储单元,实际上相当于n=5。

三十七指针与一维数组

inta[10],*p;/*a与p是不同的,a是数组名是常量,不能执行a++;a+=1的操作,p则可以*/

p=&a[0];p=a;/*这两个语句等价,都是让p指针指向这个数组*/

执行上述语句后:p[i]等价于a[i];*(p+i)等价于*(a+i)

三十八指针与二维数组:下面给出了引用二维数组第i行第j列元素的不同方式

1.a[i][j];

2.因a[i]表示第i行的首地址,a[i]+j表示第i行第j列的地址,所以*(a[i]+j)表示第i行第j列的值。

3.又因a[i]可以写成*(a+i),所以2中的表达式又可以写成*(*(a+i)+j)。

4.把1中的a[i]变成*(a+i),后面的不变,故又可写成(*(a+i))[j]。

三十九通过行指针引用二维数组

inta[4][4],(*p)[4];p=a;

四十通过指针数组引用二维数组元素

int*p[4],a[4][4];for(i=0;i<4;i++)p[i]=a[i];

以上两个知识点,像以上这样赋值后,要引用第i行第j列元素时,只需要把a改成p即可。

四十一函数指针与指针函数

intf(intx){……}main(){int(*p)();inta,b=2;p=f;a=(*p)(b);a=f(b);a=p(b);……}

函数指针:返回值是指针(地址)的函数。int*func(inta,intb);

例25:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0<=i<=9,下列对数组引用不正确的是:

A.a[p-a]B.*(&a[i])C.p[i]D.a[10]

例26:若定义inta[3][2];能正确表示t数组元素的地址的表达式是A.&a[3][2]B.a[3]C.a[1]D.*a[2]

例28:以下程序输出结果是:A.69825B.63825C.6385D.693825

main(){charch[2][5]={“6937”,”8254”},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=ch[i];

for(i=0;i<2;i++)for(j=0;p[i][j]>’\0’;j+=2)s=10*s+p[i][j]-‘0’;printf(“%d\n”,s);}

四十二结构体的定义、赋初值

structstudent{intnum;charname[10];}*p,stu[2]={{123,”zhang”},{124,”li”}};p=stu;

typedefstructstudent{}STU;在这个语句后就可以用STU来定义结构体变量了。

例:STUa,*p;等价于structstudenta,*p;

四十三结构体变量的引用

printf(“%d”,stu[1].num);printf(“%d”,stu[1].name);printf(“%d”,p[1]->num);

printf(“%d”,p[1]->name);printf(“%d”,stu);则不对

四十四malloc、calloc、free函数及链表的操作链表操作见书p120int*p,*pint;float*q;p=(int*)malloc(sizeof(int));q=(float*)malloc(sizeof(float));pint=(int*)calloc(10,sizeof(int));free(p);习题集12章16题。

例29:下列赋值语句正确的是structworker{intnum;char*name;}*p,a;

A.worker.num=1;B.p.num=1;C.*p.num=1;D.a.num=1;

例30:在16位pc环境下,下列程序运行的结果是:(此题大家有印象即可,不必深究)

structworker{intnum;char*name;}a;main(){printf(“%d”,sizeof(a))}4(若32位则是8)

例31:设有如下定义:structss{charname[10]:intage:charsex:}stu[3],*p=std;下面各输入语句错误的是:()

A.scanf(“%d”,&(*p).age);B.scanf(“%s”,&);C.scanf(“%c”,&std[0].sex);D

温馨提示

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

评论

0/150

提交评论