配色: 字号:
C语言64总复习
2013-12-30 | 阅:  转:  |  分享 
  
C语言总复习(64学时)以考试难度为限一、C语言的数据表示1.1常量和变量1.2表达式1.3数据类型简单类型
、结构类型、指针类型1.4输入、输出1.1常量和变量1.常量常量是在程序执行中,值不发生改变的数据。其值预先决定
,之后不变。有不同的数据类型。1.1常量和变量2.变量用各种操作来改变值数据。从“名”和“值”两个角度认识变量(2)
变量的值变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。数据内容用语言的操作语句来改变。
赋值语句;键盘输入语句;charchx;intm;/变量的定义/chx=‘A’
;m=123;/赋值语句/scanf(“%d”,&m);/
键盘输入语句/在程序运行时,将数据存入制定内存空间。1.2C语言的表达式1、算术表达式2、关系表达式3、
逻辑表达式4、赋值表达式5、逗号表达式6、条件表达式7、其他表达式1、算术表达式用算术运算符来表示对数据的算术运算求值
过程。算术运算符:+-/%2/3结果是0,2%3结果是23、逻辑表达式用逻辑表达式来表示对数据的
逻辑关系判断,运算结果是逻辑值“真”1或者“假”0。C逻辑运算符包括:!&&
||参加逻辑运算的数据必须是逻辑量,可以是逻辑类型的变量、常量,关系表达式或逻辑表达式。C语言中,没有专门
的逻辑量,1是真值,0是假值。也认为非零的值为真值。如:inta=3,b=4,c=-5;(1)!((a<
b)&&!c||1)(2)if(a)printf(“\nyes”);逻辑运算规律①在&&(与)表
达式中,若&&的左端为假,则不再计算另一端,该表达式值肯定为0(假)。②在||(或)表达式中,若||的左端为真,则不再计算
另一端,表达式的值必定为1(真)。判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。4、赋值表达式=,+=
,-=,=,/=,++(单目),--(单目)级别仅高于逗号表达式,右结合5、条件表达式e1?e2:e3若e1为真
,表达式的值为e2,否则为e3.(--a==b++)?--a:b++6、逗号表达式表达式的值等于最后一
个表达式的值,运算等级最低!a=5,b=2,c=3a=7+b+c,a++a=(7+b+c,a++)理解
记忆运算符表1.3数据类型数据类型:在高级语言的数据表示机制中,数据类型(datatyPe)是个核心概念。1
.3数据类型(2)实型实型(float)数据的值集是实数集的一个有限子集.-3.4e38,-3.4e
-39,3.4E-38,3.4E381.3数据类型2.结构类型“结构”一般可以称为数据元素,在不同的结构
类型中,数据元素会有特定的名称。结构类型的数据由更加基本的成分组成。这些成分称为“数据项”,结构的子成员。2.结构类型
(1)数组A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]10
20304050607080一个数组(array)是由相同类型的若
干数组元素构成的有限序列。C语言的数定义:intB[8],A[8];charC[10];例
日期类型的定义(1)指针:变量名的在内存中的存储地址。(2)指针变量inti=12,p;P=&i;
把存放变量i的地址的变量p称作指针变量。指针变量的存放内容是数据的地址。1.4输入、输出输出:printf(“
…….”,…….)%d,%6d,%ld%c,%s%f,%10.2f,%lf,%20
.8lf1.4输入、输出输入:scanf(“…….”,…….)%d,%ld对应int
long%c,%s对应charcharstr[]%f,%lf对应fla
otdouble二、C语言的程序结构与相关语句(1)表达式语句(2)流程控制语句(3)复合语句表达式语句1.
表达式语句的组成:由一个表达式后接一个分号组成的。i=i+1(是表达式,没有构成语句)i=i
+1;(是语句)x+y;(是合法语句,但没有实际意义)⒉表达式语句的分类:①赋值语句:
i=1;c=getchar();②函数调用语句:printf(n\Hello,worl
d!");③空语句。其形式为:;④逗号表达式语句:++a,--b;复
合语句⒈一组语句括在一对花括号之中,称复合语句。{c=getchar();putchar(c);
}注意,一个复合语句的后花括号之后不应再写分号。⒉在语法上是一个整体,相当于一个语句。凡是能够使用简单语句的
地方,都可以使用复合语句。一个复合语句中又可以包含另一个或多个复合语句。二、C语言的程序结构与相关语句程序的三种基本结构
:顺序结构选择结构if()…else…switch()…case循环结构for(){…..;}
while(){……;}do{……;}while()选择结构单分支结构if(a==b)printf(
“yes”);双分支结构if(a==b)printf(“yes”);elseprintf(“no”)
;多分支结构switch_case多分支选择语句switch(表达式){case常量表达式1:
语句序列1;[break;] case常量表达式2:语句序列2;[break;] ……… case常量表
达式n:语句序列n;[break;] [default:语句序列n+1;]} main(){inta=1
,b=1;switch(a){case1:switch(b){cas
e0:printf(“$”);break;case1:printf(“#”);break;
case2:printf(“”);}case2:printf(“^”);
case3:printf(“@”);break;case4:printf(“&”);}}for,while
,do-while三种结构循环变量初始化,继续循环条件,改变循环变量是不可缺少的三个环节。for常用于循环次数已知的问题中。括
号中的两个“;”不可省。while与do-while常用于循环次数未知的问题中。注意在for和while语句之后一般没有分号
有分号表示循环体就是分号之前的内容(空循环体)while(i<100); i++;for(i=0;i<1
00;i++); printf("%d",i);if,swtich,while,for后面的语句只能是一句,因此,多句时别
忘了{}。在while(e)和for(;e;)中的e是循环继续的条件,不能写其它条件!如果缺省,就是死循环!b
reak,coutinuebreak只能用于switch和循环语句中,作用提前终止本层次switch和循环。coutinue是
跳过循环体内尚未执行的语句,接着执行下次循环。常用的循环算法求素数、水仙花数、最小公倍数、最大公约数、分解多位数的数字,累加,
累乘,分解质因数等。各种有规律的图案。判断素数main(){inti,x,flag=0;scanf(“%d”
,&x);for(i=2;iag)printf(“%disaprime”,x);elseprintf(“%dis’ta
prime”,x);}求阶乘x!longfacto(intx){longy;for(y=1;x
>0;--x)y=x;return(y);}数组的定义类型标识符数组名[常量表达式]
数组的初始化分别用三种方法(数组元素下标法、数组名地址法、指针变量法)访问数组元素。#includev
oidmain(){inta[5]={1,3,5,7,9},i,p;for(i=0;i<5;i++
)printf("%d",a[i]);/下标法/printf("\n");for(i=0;i
<5;i++)printf("%d",(a+i));/地址法/printf("\n");for
(p=a;p实现倒序main(){inti,j,s=0,a[3][3];for(i=0;i<3;i++)f
or(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;
i++)for(j=0;j<3;j++)if(i==j||i+j==2)s+=a
[i][j];printf("s=%d\n",s);}累加(积)#defineM10main(){in
ti,a[M],s=0;for(i=0;i(i=0;iM30main(){inti,k,k_i,a[M];for(i=0;id”,&a[i]);k=a[0];k_i=0;for(i=1;i=a[i];k_i=i;}printf(“max=%d,maxi=%d”,k,k_i);}字符数组chars
tr[50];inti;for(i=0;str[i]!=‘\0’,i++)构造新的字符数组(删除,插入,复制,连接,倒序)
。1.用和不用字符串函数实现上述功能。2.用指针实现。3.必须注意最后一项一定是:
str[i]=‘\0’;或p=‘\0’;二维字符数组字符串函数要用#include字符串拷
贝函数strcpy字符串连接函数strcat字符串比较函数strcmp测字符串长度函数strlen函数strlen的值为‘
\0’之前的全部字符个数.它与数组长度不是一个概念.字符串函数的应用字符串赋值字符串比较一函数定义的形式:非voi
d型intfun(intx,inty);main(){inta,b;scanf(“%d,%d”,&a,
&b);printf(“%d”,fun(a,b));}intfun(intx,inty){intz;
z=x+y;returnz;}填main()charfun(intx,inty){intz;
z=x+y;returnz;}递归调用的概念在C语言中,一个函数直接或间接地调用自身,便构成
了函数的递归调用。前者为直接递归调用,后者称间接递归调用。数组名作函数实参voidfun(inta[],intn)
;main(){intarr[10],i;for(i=0;i<10;i++)scanf(“%d”,&ar
r[i]);fun(arr,10);for(i=0;i<10;i++)printf(“%d”,arr[i])
;}五指针(1)指针:某变量的地址值称为该变量的指针。(2)指针变量:
指针变量是存放普通变量地址的变量。指针变量指向这个普通变量。指针变量的定义<存储类型>数据类型指针变量名1<=初
值1><,…>;doublepd,d1,d2;/pd为指向double型变量的指针/charpc,c1,
c2;/pc为指向char型变量的指针/floatpf,f1,f2;/pf为指向floa
t型变量的指针/①定义指针变量必须在变量名前加指针说明符“”。指针变量名本身不含“”号。②定义指针变量后,系统为这个指针
变量也分配一个存储单元,这个存贮单元一般都占有固定的字节(如16位计算机是2个字节)。该存贮单元用于存放普通变量的地址。指针变量
的初始化charstr=“abcdef”;charstr=“abcdef”,pf=str;floatf1=
3.14,pf=&f1;指针变量的引用floata,b,P;a=1.23;P=&a;b=P;
printf(“\n%.2f,%.2f",b,P);结果为:1.23,1.23p[5]与(p)[5]char
p[5]是一个有5个元素的数组,数组元素的数据类型是指向int型的指针型char(p)[5]是指向一个有5个元素的一维数
组。结构体structdate是一个类型,可以用它定义变量structdatebirthday;结构变量占用内存情况
结构体变量的初始化按照成员的顺序和类型对成员初始化指向结构体的指针指向结构体的指针定义、使用与其他基本类型指针类似可以
使用指向运算符(->)引用指针所指向的结构体的成员指向运算符->结构体指针->成员名具有最高的优先级,自左向右结合若st
ructstudentstu,p=stu; 则stu.num、(p).num、p->num等效考试单选填空25(
1‘×25)读程序写结果25(5‘×5)改错20(2‘×10)程序填空20(2‘×10)写程序10
pff1地址100010003.14str10001000abcdef\0pfs
tr10001000abcdef\0pba地址1010地址10141.2310101.
23pChina\0Zhuhai\0Shanghai\0Guangzhou\0Haikou\010001007
100E10181023p[5]1000p[0]p[1]p[2]p[3]p[4](p)[5]1000a
bcd\01000birthday是一个结构体类型的变量structdate{intyear;/
年/intmonth;/月/intday;/日/};
2字节2字节2字节birthday(structdate)6个字节yearmonthday结构变量
的各个成员分量在内存中占用连续存储区域,所占内存大小为结构中每个成员的占用内存的长度之和。 结构变量today占用内存的情况如图
所示。structdatebirthday={1984,10,20};结构体变量的引用一般形式:结构体变量名.
成员名成员运算符.具有最高的优先级,自左向右结合printf(“%4d.%02d.%02d”,birthday.year,
birthday.month,birthday.day)根据“表达式”的值从上至下去寻找与表达式的值相匹配的“case常
量表达式”,执行一个分支后,再执行下一个分支,直到break结束,然后执行switch结构后面的程序。找不到匹配的入口标号
时,执行“语句序列n+1”,然后结束。顺序向下执行程序。a=1case1:swtch(1)b=1printf#,b
reak跳出switch(b)结构进入switch(a)结构case2:printf^case2:printf@
break跳出switch(a)结构#^@在if(e),while(e)和for(;e;)中e的值是逻
辑值(0或非0)e一般是关系表达式,逻辑表达式或变量。if(x=1)if(x==1)main(){inti=1;
do{i--;}while(i++);printf(“%d”,i--);}A)-1B)0C
)1D)陷入死循环i=1i--,i=0while(i)终止循环i++,i=1输出i=1i--,i=0whil
e(m) { k=m%10;/求最低位的数字/
m=m/10;/除去最低位的数字/ }分解多位数的数字main(){l
ongy;for(y=1;x>0;--x)y=x;printf(“%ld”,y);}
main(){intm,n;longcmn,facto();scanf("%d%d",&m,
&n);cmn=facto(m)/(facto(n)facto(m-n));printf("%ld\n
",cmn);}求C(m,n)=m!/(n!(m-n)!)错误的定义是:或intn;
intn=10;scanf("%d",&n);inta[n];
inta[n];定义inta[5]时,a[0],a[1]…..=?
随机数!只有inta[5]={3}后,后面几项自动赋0三数组合法:inta[]=
{1,2,3,4,5};inti[][3]={1,2,3,4,5,6};inta[5]={1
,2,3};chara[4]=“boy”chara[3]={‘b’,’o’,’y’}不合法:
inta[5]={,2,,4,5};inti[2][]={1,2,3,4,5,6};inta[5]={
};chara[4]={boy}数值数组#defineM10inta[M];for(i=0;i)字符数组#defineM10chara[M];for(i=0;a[i]!=‘\0’;i++)数值数组倒序#
defineM10main(){inti,j,a[M];for(i=0;i”,a[i]);for(i=0,j=M;inti,j;chara[50];gets(a);for(i=0,j=strlen(a);i换a[i],a[j]数值数组voidinv(intx[],intn);#defineM10main(){i
nti,j,a[M];for(i=0;ii=0;i(){inti,j;chara[50];gets(a);inv(a);puts(a);}多一个参数,表示元素个数
可以整体输入,输出必须单个输入,输出数值数组voidinv(intx[],intm){inti,j,k;
j=m;for(i=0;ij]=k;}}字符数组voidinv(intx[]){inti,j,k;j=strlen(x);
for(i=0;i}主对角线i==j副对角线i+j==2#defineM10main(){inti,a[M],s=1;
for(i=0;is=a[i];printf(“s=%d”,s);}最小值if(k的排列顺序是“按行优先存放”二维数组a[m][n]可以视为由n个一维数组a[m]组成的。二维字符数组中m由其中最长的字符串决定
。charstu[5][6]={“Tom",“Anne",“Mary",“Peter"};其中stu[0]=“Tom“
stu[1]=“Anne"chars[6]={‘H’,’o’,’w’,’\0’,’o’,’k’}strlen
(s)=3s1=s2strcpy(s1,s2)s1==s2strcmp(s1,s2)==0s1>s2strcmp(
s1,s2)>0s1定义语句序列;可执行语句序列;}intfun(intx,inty){intz;
z=x+y;returnz;}函数首部函数体四函数作为框架记住void型voidfun(int
x,inty);main(){inta,b;scanf(“%d,%d”,&a,&b);fun(a,b)
;printf(“%d,%d”,a,b);}voidfun(intx,inty){intz;z
=x;x=y;y=z;printf(“%d,%d”,x,y);}main(){}inta,b;
函数实参charc;函数返回值scanf(“%d,%d”,a,
b);实参赋值c=fun(a,b);调用函数printf(“%c”,c);输出
结果注意变量数据类型的对应int%dlong%ldfloat%f
double%lfchar%c或%s计算n!的函数rfact()longfac(intn){
longp;if(n==0||n==1)p=1;elsep=nfac(
n-1);/自己调自己/returnp;}voidmain(){printf(“%l
d”,fac(5));}记住递归调用的框架main(){inti,a=2;for(i=1;i<=5;i
++)f(i);printf(“%d\n”,a);}f(j)intj;{s
taticinta=100;autok=1;++k;printf(“%d+%d+%d=%
d\n”,a,k,j,a+k+j);a+=10;}函数调用函数定义函数内定义,值不保留。运行结果:10
0+2+1=103110+2+2=114120+2+3=125130+2+4=136140+2+5=1472两个函数变
量同名,互不影响。静态变量1112ab地址1010101210101012pq地址1002
20042006指针变量整型变
量(1)常数(有的称直接常量、页面常量)例如的:整数:+5、-3、017(八进制)、0x1f(16进制)
实数(浮点数):3.14、-1.2E-3、1E10单个字符:‘A’,占一个字节’\\’,转义字符‘\’
‘\’非法’\77’(八进制ASCII码63,‘?’),’\78’非法’\x3f’(十六进制AS
CII码63,‘?’)‘\x3g’非法字符串:“A”后面有\0,占两个字节E3,2E3.0不合
法不是整型量占一个字节(2)符号常量给常量起标识符名字。C语言的符号常量(用宏定义):#defi
nePI3.14159265好处:提高程序易读性;方便修改常量的值;注意:1.一般用大写字母。2,#define
M3不是C语句,后面没有“;”。3.可以做M+1,不能做M++.(3)地址常量当数组在定义时,其变量名为其首地
址,是地址常量。inta[10];可以做a+1,不能做a++.(1)变量名每个变量,要在使用前定义变量的
名字,遵循标识符命名规则。只能用字母、数字和下划线组成。不能以数字开头。不能用保留字(int,printf,main…..)
。变量定义就是申请数据的存储空间,登记数据的各种存储特性。例如:intm;2个字节-215~215
-1(-32768~32767)longn;4个字节-231~231-1charch;
1个字节0~255floatx;4个字节±3.4×(10
-38~1038)doubley;8个字节±1.7×(10-308~10308)可以用
sizeof获得字长sizeof(char)=1sizeof(int)=2sizeof(double)=8②①变量初
始化:定义变量时同时确定变量初值。例如:charchy=‘a’;intweight=2;
③C语言的表达式:使用规定的运算符,将常量、变量、函数(调用)连结的一个有意义的式子。注意不同类型运算问题
:doublelongunsignedintfloatcharshort高低2、关系表达式关系运算符:
>>=<<=(优先级较高)!===
(优先级较低)关系表达式的结果:1(真),非0(假)如:x>0,sin(x)<=0.5,
(a+b)==(cd)注意语法合理与数学逻辑错误问题:分析:10<=a<=15a=9是假10<
=a<=1510<=a假00<=15真所以要写成10<=a&&a<=15a,c均按非0(即真)处理
inta=5,b=1k=a<=3&&b-->0k?b?假,后面不算了k=0,b=1(x%4==0&&x%100!
=0)水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身(k100+m10+n==kkk+mmm+n
nn)三角形的基本条件((a+b)>c)&&((c+b)>a)&&((c+a)>b))inta=3,c=2,b
a=b=c;n=m+2相当于n=n(m+2)k=i++;先k=i,再i=i+1
k=++i;先i=i+1,再k=ic赋值给b,b=2b赋值给a,a=25-1==4Ta=4--
aa=3表达式的值为3a=5,b=44-1==5Fb=6b++b=7表达式的值为
6a=4,b=5条件表达式的值的类型为e2,e3二者中类型较高者。如果y=5;y<3?-1.0:2其值为2.0
a=12a=57、强制类型转换表达式(单目)intm;sqrt((float)m);并没有改变
m的类型和数值(高)(低)!++,--,等算数运算符关系运算符逻辑运算符&&||条件运算符赋值运
算符逗号运算符右结合单目运算符赋值运算符简单类型构造类型指针类型整型实型字符型数组结构体共用体数值
型枚举型空类型(1)整型(输入、输出格式“%d”)类型名字节数数值范围int2
-32768~32767short2-32768~32767long4
-2147483648~2147483647还有无符号整型(输入、输出格式“%u”)Unsigned[int]
20~65535Unsignedshort20~65535Unsig
nedlong40~42949672951.简单类型1.简单类型类型名字节数
输入、输出格式有效数字位float4%f
7doubule8%lf
16longdoubule16%lf
19不要以为是长整型E38非法(3)字符型(输入、输出格式“%c”)ASCII码,一个字符占1字节;
charca;ca=‘#’;注意转义字符’\’的使用。(4)字符串(输入、输出格式“%s”)
所谓“字符串”是指若干有效字符的序列。C语言字符串可以包括字母、数字、专用字符、转义字符等。字符串常量:使用双引号
"China""BASIC""a+b=c""Li-Li""39.4""
%d\n""解放军“字符型的一维数组(相当于字符串变量)charst[8],str[10];strcpy(s
t,"12345");strcpy(str,st);不能st=“12345”;str=st;(2)结构体C语言中实现:structDate{intmonth;/月/intday;/日/intyear;/年/};structDatemyd={12,16,1978};系统分配给它的内存是各成员所需内存量的总和。本例是6.3.指针类型(3)指针引用变量指针变量可以指向各种不同的数据类型,因此指针变量也要有不同的指针类型。如:intm,p;floatx,q;inta[],rm=12;p=&m;x=3.14;q=&x;r=a;注意:是否用&n=3;printf(“\n%d,%d,%d”,n,++n,n++);计算从右到左,输出从左到右。%s是输出以指定首地址到第一个\0或空格之间的字符串。chara[]=“abcdefg”,p=a;printf(“%s”,++p);bcd5,5,3常见错误inta,b;chard,e[20];scanf("%d,%f\n”,&a,&b);scanf("%d,%f”,a,b);scanf("%7.2f",&a);scanf("%s",&e);scanf("%c",d);C语言语句⒈指令语句⒉非指令语句⑴数据定义语句floatx;intm;⑵编译预处理①宏定义#definePI3.14159②文件包含处理#include完成一定的控制功能。9种控制语句:判断语句条件判断语句if()…else…多分支选择语句switch()…case循环语句循环次数控制语句for()先判断后执行循环控制语句while()先执行后判断循环控制语句do…while()转移控制语句直接转移语句goto终止语句break(用在循环结构、swicth)跳转语句continue(仅用在循环结构)返回语句return流程控制语句
献花(0)
+1
(本文系袤野天者首藏)