C语言程序设计总复习_第1页
C语言程序设计总复习_第2页
C语言程序设计总复习_第3页
C语言程序设计总复习_第4页
C语言程序设计总复习_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

C语言内容提要总复习数据类型基本数据类型

整型:2,4字节,int,unsignedint,long,unsignedlong

字符型:1字节,char,unsignedchar

实型:4,8字节,float,double构造数据类型

数组:一组同类型数据的集合

结构:一组不同数据类型的集合指针

变量的地址,每种数据类型都有对应的指针类型。字符型数据保存的是字符

'a','A','0','*'计算机不能存贮字符,只能用数字代替——ASCII码

'a'97'0'48'*'42对内存中数据的理解取决于数据类型

可以理解为字符'a'和'0';

可以理解为整型数据:49600;

可以理解为实型的一部分,甚至是指令代码。字符型数据类型的本质1100000111000000类型转换doublefloatintchar低高'a'+3:字符型+整型 整型'a'+3.0:字符型+实型 实型45/0.3:整型+实型 实型'a'*3.0:字符型+实型 实型自动类型转换:

不同数据类型进行混合计算时,系统按一定规则进行数据类型转换强制类型转换:

在自动类型转换的基础上,按特殊设定转换。(char)('a'+3) 字符型floatfd;fd='a'+3;实型输入/输出格式符整型:%d,%ld字符型:%c字符串型:%s实型:%f,%lf,%e左对齐:负号占位:%m.n例:

printf("%10.6e",x);→1.4e+002

printf("%-11.6f",data);→3.141593条件分支(一)简单条件分支:

if(条件){成立时执行}

else{不成立时执行}多重条件分支:

if(条件1){成立时执行}

elseif(条件2){成立时执行}

elseif(条件3){成立时执行}

else{所有条件均不成立时执行} 条件分支1分支2成立不成立条件分支(二)关系表达式:

>, >=, <, <=, ==, !=

建议:多使用括号,不要背优先级。

例:if(a>b==c)→if((a>b)==c)逻辑表达式:

多个关系表达式之间的连接。

与:&&(当两个表达式均成立时结果为真)

或:||(两个表达式有一个成立时结果就为真)

非:!(当表达式结果不成立时结果为真)

建议:多使用括号,不要背优先级。

例:if(a>b||a>c)→if((a>b)||(a>c))条件分支(三)

switch语句:

switch(表达式)

{ case常量1: 语句1;break;

case常量2: 语句2;break; case常量3: 语句3;break; ………… default:语句n; }注意:

(1).每一个分支只能是常量或常量表达式;

(2).每一个分支之后必须有break;

(3).表达式的结果应该落在case的范围之内。循环控制while型:

while(条件) {

循环体

}条件循环体成立不成立特点:先判断,再执行;可能一次也不执行。循环控制do型:

do {

循环体

} while(条件)条件循环体成立不成立特点:先执行,再判断;至少执行一次。循环控制for型:

for(语句1;条件;语句2) {

循环体

} 语句1条件循环体语句2成立不成立特点:语句1无条件执行一次,语句2是循环体的一部分。for循环是万能循环语句,可以代替前两种类型。循环控制break可以退出任何类型的循环,主要用于多种条件循环。continue可以在特定条件下只执行部分循环体。break和continue主要是为程序书写清晰和简洁而使用,并非必须,本质上都可以通过改变循环结构而取消。数组数组的本质:一组相同类型的变量的顺序集合。数组的各元素必须类型相同;数组的长度定义必须是常量或常量表达式;数组在内存中是线性存贮;数组元素具有简单变量的一切性质;不允许整体操作;数组的下标从0开始;系统不对数组操作进行越界检查。字符数组与字符串字符数组:charuniversity[20]={'B','U','A','A'};字符串:

charuniversity[]={"BUAA"};字符串的操作:可以像普通数组一样使用,也可以使用专为字符串开发的库函数<string.h>。字符数组的使用:与普通数组的使用相同。字符串的本质:以字符'\0'结尾的字符数组。注意:字符串的长度不包括'\0',但必须留足够的空间。函数的定义函数是使程序可以重复使用的一种手段。函数的定义:intfactorial(intx){ intresult,i; result=1; for(i=1;i<=x;i++) { result=result*i; } return(result);}函数名形参表函数类型函数体返回语句形参表必须逐一变量说明;形参表各变量用逗号分隔;函数体可以没有;返回类型默认为int;第一行的结尾不要加分号;形参表函数唯一的可变部分;函数类型实际是返回值的数据类型。函数的使用intfactor(intx,inty);main(){ inta,b,c; ………… c=factor(a,b); …………}intfactor(intx,inty){ …………}函数的说明必须与函数定义完全一样。函数的使用实参和形参必须一一对应。函数的定义局部变量封装。#include<stdio.h>

main()

{

inta,b,c;

……

a=4;

b=5;

c=max(a,b);

……

}

函数的调用过程intmax(intx,inty){ intz; if(x>y)z=x; elsez=y; return(z);}x=4,y=5;c=5实参形参实参与形参一一对应:①个数相等;②类型一致;③顺序相同。参数传递的本质是单向变量拷贝:

①内部变量封装,不影响到函数以外的变量。 ②允许存在与其它函数同名的变量。几种不同的函数有返回值、有参数:

main(){ …… A=f(n); B=f(n-3); C=f(k);

……}无返回值、有参数:

main(){ ……

star(1); star(3);

printf("%d",a);

……}有返回值、无参数:

main(){ …… c=getchar();

…… ……}无返回值、无参数:

main(){ ……

alarm_on();

…… alarm_off();

……}函数的嵌套调用main(){func_a()

func_b()}func_a(){func_c()

}func_b(){func_d()

func_e()}func_c(){

}func_d(){

}func_e(){

}注意:函数可以嵌套调用,但不可以嵌套定义。所有函数都是平行的,即所有函数的地位都是相同的。只有主函数例外。变量的存贮类型全局变量

不在任何一个函数中定义,可以被任何函数使用。局部变量

在函数内部定义,只可以在被定义的函数内部使用。动态变量

随着函数的执行而产生,随着函数的退出而消亡。静态变量

在程序执行之前产生,在程序结束之后消亡。全局变量肯定是静态变量,静态变量不一定是全局变量。动态变量肯定是局部变量,局部变量不一定是动态变量。作用域生存期问题:变量为什么要有存贮类型之分?指针本质:存贮是变量的地址。指针变量有类型,只能保存相应类型变量的地址星号的不同含义:在定义中出现:表明该变量为指针变量,其所保存的内容为变量的地址,不可省略,但它并不是变量的一部分。

int*p1;

float*fp;

在使用中出现:是对指针的操作,其作用是获得指针所指向内存的值。

*p1; a=*p1;a????????????????pa&

取地址操作:

pa=&a;

取内容操作:

b=*pb;b????????????????pb*&和*是一对互逆操作指针的操作问题:可以打印出指针的具体值吗?指针的运算算数运算

指针只允许加减运算,含义为指针指向的偏移。

p2=p1+3; p1++;p2--;关系比较

允许有大于、小于、相等、不相等的比较,含义为指针指向位置的比较。

if(p1>p2)……;

if(p1!=p2)……;指针不允许有其他类型的运算指针定义必须逐一说明;

int*p1,p2;←p2将是一个整型变量指针变量存贮的是地址,不能和普通变量/常量直接操作;

inta,*p; a=66; p=1000;

←不会将地址1000赋给p指针变量未初始化之前指向不确定的内容,不能直接引用;

inta,*p; a=*p; ←a将得到一个不确定的值

*p=66; ←向不确定的空间写数据,后果无法预料,错误也难以发现。指针操作常见的错误swap(int*p1,int*p2);main(){ inta,b,*pa,*pb; a=10; b=20; pa=&a; pb=&b; printf("%d,%d",a,b); swap(pa,pb); printf("%d,%d",a,b);}swap(int*p1,int*p2){ inttemp; temp=*p1;

*p1=*p2;

*p2=temp;}主函数swapabpapbp1p2temp指针变量作为函数参数问题:a,b是局部变量,当程序离开main函数时它们为什么没有消亡?指针变量作为参数的目的:①突破封装,延伸函数的触角,扩大作用域。

用函数计算两个数的和与差plusmin(inta,intb,int*p1,int*p2);main(){ inta,b,plus,minus,*pa,*pb; scanf("%d%d",&a,&b); pa=+ pb=− plusmin(a,b,pa,pb); printf("%d+%d=%d\n",a,b,plus); printf("%d-%d=%d\n",a,b,minus);}plusmin(inta,intb,int*p1,int*p2){

*p1=a+b;

*p2=a-b; return(0);}abplusminuspapbabp1p2mainplusmin用指针从函数带回多个结果指针与数组C语言规定:数组名代表数组第一个元素的地址。

inta[10],*p; p=a;

*p+3=6;

*(p+3)=6; a[3]=6;用指针访问数组时易犯的错误main(){inta[10],i,*p;p=a;for(i=0;i<10;i++){scanf("%d",p);p++;}for(i=0;i<10;i++){printf("%d",*p);p++;}}a[0]a[9]pppppp=a;pa[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]用指针访问数组时易犯的错误main(){inta[10],i,*p;p=a;for(i=0;i<10;i++){scanf("%d",p);p++;}for(i=0;i<10;i++){printf("%d",*a);a++;}}虽然数组名也是指针,并且指向数组的第一个元素,但它是常量,不能改变。C语言规定:数组名本身也是一个指针,但它不可变。利用指针向函数传递大量数据main(){ inta[10],b[5],i; for(i=0;i<10;i++) a[i]=2*i; for(i=0;i<5;i++) b[i]=i*i; print_array(); print_array();}voidprint_array(int*data,intnum){ inti; printf("Thearrayis:"); for(i=0;i<num;i++) { printf("%d,",*data); data++; } printf("\n");}Thearrayis=0,2,4,6,8,10,12,14,16,18Thearrayis=0,1,4,9,16执行结果:例2:利用函数打印数组a,10

b,5指针与字符串指针方式的执行过程:计算字符串长度申请空间申请指针空间指针指向字符串...BUAA\0...?univer注意:用指针方式定义的字符串没有名字,只能通过指针方式访问。char_temp[]="BUAA";char*univer=_temp;相当于char*univer="BUAA";字符串指针作为函数参数main(){char*a="Ilikeprogramming";char*b[100];copy_string(a,b);printf("%s",b);}向函数传递字符串指针与向函数传递数组指针本质上是一样的,唯一的区别在于不需要明确告诉函数字符串的长度。例4.

利用函数实现字符串拷贝copy_string(char*str1,char*str2){ while(;;) { if(*str1=='\0')break;

*str2=*str1; str1++; str2++; }

*str2='\0';}关于字符串的注意事项字符串的本质:带有结束标志的字符数组。

(1).数组有多大就占用多少内存空间;

(2).对于数组一般不能进行整体操作;

charstr[14]; str="Cprogramming"; (3).可以利用专用库函数对其进行操作。字符串指针的本质:存贮字符串地址的指针变量。

(1).只占用一个变量的存贮空间; (2).不能将一个字符串存入该指针。

char*str; str="Cprogramming";字符串名也是指针,但它是常量,不可变。基本要求指针的基本概念与基本使用指针作为函数参数的使用方法用指针从函数中带回多个结果用指针操作数组的方法用指针向函数传递数组用指针操作字符串的基本方法结构体结构体是对数据封装的主要方法函数是对程序封装的主要方法结构体的定义:structbook{ charname[20]; charpublisher[40]; longpub_date; intpages; floatprice;};structstudent{ charname[20]; intage; intgender; floatmath; floatenglish;};结构体的定义只说明了该类型变量的组成情况,并没有真正的申请内存空间。结构变量的内存分配structstudent{ charname[20]; intage; intgender; floatmath; floatenglish;};structstudentst1,st2;nameagegendermathenglishst1nameagegendermathenglishst2结构体的基本应用structstudent{ charname[20]; intage;}main(){ structstudentst1,st2; strcpy(,"LiMing"); st1.age=19; strcpy(,"LiuYifei"); st2.age=21; printf("Name\

温馨提示

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

评论

0/150

提交评论