1、c复习资料复习资料Ch2 数据类型、运算符与表达式1. C程序的结构:C程序是由一个或多个源文件组成,源文件是C程序的编译单位;源文件由函数组成的;一个程序有且仅有一个名字为main( )的函数;函数的定义不可嵌套,即,在一个函数内部不可定义另外一个函数;程序总是从main函数第一条可执行语句开始执行,在main函数结束;2.标识符合法的标识符的组成;如x1、a、max_int、_num等合法的,2x、x#等不合法,不能用关键字,如for、int等,最好不用函数名如 printf等。关键字:查看附录B;如printf、define不是关键字;C语言区分大小写,故For、If等不是关键字3.常量
2、的表示形式整型常量:十进制、八进制、十六进制。如 028、0x2ah不合法;若整数是2个字节,则整数范围-32768-32767之间,32768(错) -037 0xaf均正确实型常量:3.0 2.3e3 2e-4正确,2e3.0错 字符常量:注意转义字符,如n、72、x23等均表示一个字符,如“t”nameaddressn”长度为15;38错误字符串常量:变量定义及赋值:变量赋值时的类型应相同或兼容,如int a=3.5、float b=4、char c=97正确,但char ch=”abc”错误4.运算符及表达式运算符的功能、特点:如%要求两侧操作数均为整数;若 / 两侧操作数都是整数表示
3、整除;运算符的优先级:复合运算符:如int a=3; 执行a+=a-=a*a; 后,a的值是-12;如:n=10,i=4,则赋值运算n%=i+1,n的值是逻辑运算符:掌握& 和 | 的运算特点;如 i=2,j=3,k=4, if(i+) | (j+) & k+) printf(“%d,%d,%d”,i,j,k);结果是?设a=3, b=4, c=5,表达式(1)a & b、 (2)a=b 、a | b+c & b-c、(3)!(ab) & !c | 1)、(4)abba结果?如:c=0; 考虑,表达式c=b=a、(a=c)|(b=c)、(a=c)&(b=c)、a=c=b能正确将c的值赋给变量a
4、,b吗?为什么?关系运算符:注意= =与=的区别,如a=1,b=2 则if(a=3) b=0; 则b的值变化了吗?为什么?条件运算符:运算的特点如:i=1,j=2;执行语句n=ij?i+:j+; 则i和j的值是5自增自减:掌握前置与后置的运算特点;如:x=3,则表达式x+的结果是3,x的值变成4;而+x的结果是4,x的值也是4;-x+结果是-3,x的值变成4如:x=7,则(x+%3)结果是?6表达式类型的转换: 若char a; int b; float c; double d;则表达式 a*b+d-c 的值类型?7逗号运算符:逗号表达式的值是最后一个表达式的值。如:(a2*3,a+2,a*6
5、)的值是?Ch3 简单的C程序设计掌握格式化输入输出如:scanf(“%d,%d”,a,b);错! float f=3.14,printf(“%d”,f);错!float f; scanf(“%5.2f”,&f);错!如:scanf(a=%d,b=%d,&a,&b);对应的输入应该是? 如:要求实数的输出结果保留2位小数位数,怎样写printf( )?Ch4 程序的控制结构1.条件表达式:C语言中,在进行逻辑判断时,以非0表示逻辑真;逻辑真用1表示,逻辑假用0表示;if(a)等价于if(a!=0);2循环结构(重点):循环的条件、循环的次数等如:a7=11,13,14,15,16,17,18,
6、i=0,k=0; while(i7&pi%2) k=k+pi;i+; printf(%dn,k); 输出结果是? 如:int x = -1;do x = x * x;while(!x); 是死循环吗?不是的话执行多少次循环?如:for(i=5;i=0;) printf(%dn,i-);执行几次循环?Ch5 函数1.函数的调用:掌握单向值传递的思想;简单变量作为实参时,它和对应形参之间数据的传递方式为单向值传递 ;若用数组名作为函数调用时的实参,则实际上传递给形参的是数组的首地址如:void swap(int x, int y) int t; if(xy) t=x; x=y; y=t; main
7、() int a=1,b=2; swap(a,b); printf(%d,%d,%dn,a,b,c); 结果是?3.变量的作用范围作用域:变量的类型(按作用范围分全局变量、局部变量;按生存期分:动态变量、静态变量);auto、static声明的变量的类型;全局变量的作用域不一定比局部变量的作用域范围大(考虑为什么?);静态变量(static声明)的生存期贯穿于整个程序的运行期间;函数的形参都属于局部变量;未在定义语句中赋初值的auto变量初值是随机值而全局变量和static声明的变量未初始化时系统自动将其初始化为0;不同的函数中可以使用相同的变量名;形式参数是局部变量;在语句块内定义的变量称为
8、局部变量;4.预处理:在有宏替换的地方,一定要注意原样替换!如:# define N 2# define M N+1# define NUM (M+1)*M/2则for ( i=0;i)的用法如:struct student char name10; int age; char sex;stu3,*p=stu;则以下语句正确的是?错误的是(为什么错?)A. scanf(%d,&(*p).age); B. scanf(%s,&std.name);C. scanf(%c,&std0.sex) D. scanf(%c,&(p-sex);如:struct student int num; int ag
9、e;stu3=001,20,002,19, 003,21,*p=stu;表达式(p+)-num p+ (*p).num p=&stu.age是否合法,如果合法,表达式值是什么?如果不合法为什么?2.typedef的用法:注意typedef不是定义一种新的类型,仅是给某个类型起个“外号、别名”Ch10 文件操作1.文件打开及关闭:已知 FILE *fp,以只读方式打开 d:vc60data.txt 的语句 是fp=fopen(d:vc60data.txt ,r);要求以只写方式打开呢?1.文件位置指针的定位:掌握rewind、fseek、ftell的用法;如:考虑怎样才能将文件位置指针定位到文件
10、开头?rewind(fp)或fseek(fp,0,0)阅读程序以下程序的输出结果是?1. void main() int a =1,2,3,4,5,6,7, *p=a ; p+=2 ; printf(%dn, p3);2. void main() char ch7=123ab45;int i,s =0;for(i=0;chi=0&chi=9;i+=2)s=10*s+chi-0;printf(%dn,s);3. int func(int a,int b) static int m=0;static int i=2; i+=m+1; m=i+a+b; return(m); void main()
11、int k=1,m=2,p; p=func(k,m); printf(%d,p); p=func(k,m); printf(%dn,p);4. void main() int a34=1,2,3,4,5,6,7,8,9,10,11,12; int (*p)4=a,i,j,k=0; for(i=0;i3;i+) for(j=0;j2;j+) k=k+*(*(p+i)+j); printf(%dn,k);5. main() char *s=12134211;int v1=0,v2=0,v3=0,v4=0,k;for(k=0;sk;k+)switch(sk) default: v4+;case 1:
12、 v1+;case 3: v3+;case 2: v2+;printf(%d,%d,%d,%dn,v1,v2,v3,v4); 程序题1从键盘输入圆的半径r,计算并输出圆的面积s。(要求:半径r定义为float型;圆周率定义为符号常量;面积s保留2位小数)2.从键盘输入三角形的三边长a,b,c,计算并输出三角形的面积area,其公式为(要求:面积area定义为float型,输出结果保留2位小数)。3编程序求10!4.编程计算1!+2!+10!的值5.计算两个正整数的最大公约数,求最大公约数的过程用子函数实现。6利用泰勒级数,计算e的近似值。要求最后一项的绝对值小于10-5为止。7以选择法(再编写
13、以冒泡法)排序写一个排序函数,函数名为sort,实现对含有n个整数的数组按由大到小的顺序排序。原始数据在主函数中通过键盘输入,排序结果在主函数中输出。请写出sort函数。8.在一个已经排好序(由小到大)的数组中查找待插入数据x应插入的位置,使其插入后,数组元素仍然保持由小到大的顺序。9.有一个字符数组str,数组中存放一个字符串,编程将字符数组中ASCII值为偶数的字符从数组中删除掉,删除后形成的新字符串仍然存放在原来的字符数组str中。课本:课后习题:习题2、习题3、习题4(后面编程重点4.6 4.12 4.15.4.18)、习题5(后面编程重点5.4 5.7)、习题6(后面编程重点6.5 6.12)、习题7(后面编程重点7.6 7.8)、习题8(后面编程不作重点)说明:本资料仅作为期末考试复习重点,不是考试内容!有不明白的问题同学之间相互讨论。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1