收藏 分享(赏)

秋季等级考试培训ppt课件.ppt

上传人:微传9988 文档编号:3466562 上传时间:2018-11-01 格式:PPT 页数:53 大小:425.50KB
下载 相关 举报
秋季等级考试培训ppt课件.ppt_第1页
第1页 / 共53页
秋季等级考试培训ppt课件.ppt_第2页
第2页 / 共53页
秋季等级考试培训ppt课件.ppt_第3页
第3页 / 共53页
秋季等级考试培训ppt课件.ppt_第4页
第4页 / 共53页
秋季等级考试培训ppt课件.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、1,C语言等级考试笔试讲座,2,本次讲座内容,运算、基本语法、分支语句、指针中未学习的章节,3,例 main( ) int i=10;int *p;*p=i;printf(“%d”,*p);,危险!,例 main( ) int i=10,k;int *p;p=,指针变量必须先赋值,再使用,4,例 int a=1,2,3,4,5,6,7,8,9,10,*p=a,i;数组元素地址的正确表示: (A)&(a+1) (B)a+ (C)&p (D)&pi,数组名是地址常量 p+,p- () a+,a- () a+1, *(a+2) (),5,例 void main() int a =5,8,7,6,2,

2、7,3;int y,*p=,输出:5 6,例 注意指针变量的运算,6,y=(*-p)+; 运算符执行顺序: - p指向 a0 * 取a0的值 = y值为5 + a0值为5+1,6,int *p; p为指向整型量的指针变量 int *pn; p为指针数组,由n个指向整型量的指针元素组成。 int *p() p为返回指针值的函数,该指针指向整型量 int (*p)() p为指向函数的指针,该函数返回整型量 int *p p为一个指向另一指针的指针变量,该指针指向一个整型量。,7,char *name=“Illagal day“, “Monday“, “Tuesday“, “Wednesday“,

3、“Thursday“, “Friday“, “Saturday“, “Sunday“; 完成这个初始化赋值之后,name0即指向字符串“Illegal day“,name1:Monday“。,8,main( ) static char *string = “ Sichuan“,“university“,“Chengdu“, “ China Italy“;char *ps=string, string+1,string+2,string+3; char *pps=ps;printf(“%sn“,*ps); printf(“%sn“,*+pps);printf(“%sn“,*(pps+2); ,9

4、,运行结果为: Sichuan university China,10,指向函数的指针变量,指向函数的指针的定义格式如下: 类型说明符 *(指针变量名)( ); 如: char ( *p)( ); p是一个指向函数的指针变量,不固定指向哪一个函数,只是专门用来存放函数的入口地址,在程序中把哪个函数的地址赋给它,它便指向哪一个函数。,11,指向函数的指针变量,#include main( ) int,a,b,c; int sub( ),(*pi)( ); printf(“Input two integers:n”) scanf(“%d%d”, ,int sub(x,y) int x,y; ret

5、urn(x-y); 运行情况如下: Input two intergers: 23 33 a-b=-10,12,double (*ptr)()用于声明指向函数的指针 double *ptr()用于声明一个返回指针的函数。 int *ptr()用于声明一个返回指针的函数,13,int aa(char *s) char *t=s; while(*t+); t-; return(t-s); ,计算s的长度,14,指针数组作main函数的参数,如一个DOS的copy命令: copy fe A:mc 命令名 命令行参数1 命令行参数2,15,编写一段程序,它文件名为 8_16.c,要求运行显示输入的命令

6、行参数。 main(argc,argv) int argc; char *argv ; while(argc1)+argv;printf(“%sn“,*argv);-argc; getchar(); ,16,运行时输入: 8_16 we are students 输出: we are students,17,实型常量(实数或浮点数) 表示形式: 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5,18,练习,1、以下合法的实

7、型常数是: A. 5E2.0 B. E-3 C. 2E0 D. 1.3E 2.选出哪组为合法的用户标识符: A. void define WORD B. A3_b3 _123 IF C. for -abc case D. 2a D0 sizeof,(e或E之前必须有数字; 指数必须为整数) C,B: case, sizeof, for是关键字, 2a非法,IF大写,19,练习,以下正确的常量是: a. 0xFF b. 1.2e0.5 c 0L d. 324562& e. 216D,A,C,20,说明: 用“%c”格式符时,空格和转义字符作为有效字符输入,如 scanf(“%c%c%c”,若输入

8、abc 则ac1, c2, b c3,输入数据时,遇以下情况认为该数据结束: 遇空格、TAB、或回车 遇宽度结束 遇非法输入,如 scanf(“%d%c%f”,若输入1234a123o.26 则 1234 a, a b, 123 c,21,关系运算注意:,例 若a=0; b=0.5; x=0.3;则 a=x=b的值为,0,例 5278在C中是允许的,值为,0,例 a0 结果为A100 结果为,1,0,22,关系运算注意:,例 注意区分“=”与“=”int a=0,b=1;if(a=b) printf(“a equal to b”);elseprintf(“a not equal to b”);

9、,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,23,优先级:,结合方向:,短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/结果m=0,n=1,24,Exercise,若变量c为char类型,能正确判断出c为小写字母的表达式是 A) a= a)|(c=c) D) (c= a)&(c= z),d,25,练习,能正确表示a和b同时为正或同时为负的逻辑表达式是( ) A)(a=0b=0)&

10、(a=0&b=0)&(a0)&(a+b0,D,26,练习,设有如下定义:int x=l,y=-1;,则语句:printf(“%dn“,(x-&+y);的输出结果是( ) A)1 B)0 C)-1 D)2当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( ) A)c=b=a; B)(a=c)(b=c); C)(a=c)&(b=c); D)a=c=b;,-在后,取1,+在 前,取0,结果为B,变量c不为0,B只执行a=c, 结果为C,27,练习,有以下程序( ) #include “stdio.h” main() int a,b,c=246; a=c/100%9; b=(-1) 输出

11、结果是 A) 2,1 B) 3,2 C) 4,3 D) 2,-1,246/100=2,2%9=2 b=1, 结果为A,28,练习,设a=1,b=2,c=3,d=4,则表达式:ab?a:cd?a:d的结果为( ) A) 4 B) 3 C) 2 D) 1,右结合,cd成立,取a的值:1,ab成立, 取a的值:1, 结果为D,29,#include “stdio.h” main() char ch;printf(“Input a character: “);scanf(“%c“, ,从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。,30,例1:在下列各组运算符中,优

12、先级别最高的是: A. ? : B. + C. & D.+= A. *= B. = C. (类型) d. , A. | | B. % C. ! D. = A. = B. != C. * D. ( ),B,C,C,D,31,以下程序的输出结果为: main( ) int i,j,k,a=3,b=2;i=(-a=b+)? - -a :+b ;j=a+; k=b;printf(“i=%d,j=%d,k=%dn”,i,j,k); ,-a,-前置,a的值为2;b+,+后置,取b的值2;所以- -a=b+为“真”,取表达式- -a,因此i 的值为1,a 的值为1,b 的值为3,+后置,j 的值为1,k的值

13、为3,32,练习,有以下程序 main() int i=1,j=1,k=2;if(j+k+)执行后输出结果是a) 1,1,2 b) 2,2 ,1 c) 2,2,2 d) 2,2,3,C, k+ 未执行,33,练习,有如下程序 main0 int a=2,b= -1,c=2; if (ab)if (b0) c=0; else c+; printf(“%dn“,c); 该程序的输出结果是 a) 0 b) 1 c) 2 d) 3,C 分析: 不执行C=0 和C+,注意 else和最近的 if配对,34,练习,以下程序的输出结果是( ) A) -1 1 B) 0 1 C) 1 0 D) 0 0 mai

14、n( ) int a= -1,b=1,k; if (+a0)& ! (b- =0) printf(“%d %dn“,a,b); else printf(“%d %dn“,b,a);,C 分析: +前置,a为0, +a 0不成立,b-不执行,直接执行else,运行后a=0,b=1,35,练习,以下程序运行后的输出结果是 。 main() int a=1,b=3,c=5;if (c=a+b) printf(“yesn“);else printf(“non“);,答案为:yes 注意c=a+b, c值为4非0 不是c=a+b,36,Exercise,假定所有变量均已正确说明,下列程序段运行后x的值是

15、( ) a=b=c=0;x=35; if(!a) x-; else if(b);if (c) x=3; else x=4; a)34 b)4 c)35 d)3,!a=1,执行x-,x=34,c=0,执行else x=4,答案为B,37,switch语句 形式:switch (表达式) case 常量表达式1:语句1;case 常量表达式2:语句2;;case 常量表达式n:语句n;default :语句n+1;,表达式后没有“;” ,否则会出现错误,38,使用注意: switch后面的表达式和case后的常量表达式可以为任何数据, ansi c允许任何类型,但标准c只允许整型,字符,枚举数据

16、每个case后的常量表达式的值应互不相同 switch语句中可以不含default分支,default分支并不限定在最后,几个case分支没有顺序区别,但必须做适当处理,否则会影响执行结果 为了执行某个case分支后跳出switch结构,应在每个case分支后加上break语句,流程图如图所示:,39,若a、 b、c1、c2、x、y、均是整型变量,正确的switch语句是 a) switch(a+b); b) switch(a*a+b*b) case 1:y=a+b; break; case 3: case 0:y=a-b; break; case 1:y=a+b;break; case 3:

17、y=b-a,break; c) switch a d) switch(a-b) case c1 :y=a-b; break; default: y=a*b;break; case c2: x=a*d; break; case 3: case 4: x=a+b; break; default: x=a+b; case 10: case 11: y=a- b;break; ,D,CORRECT,; error,c1,c2是变量, a没有括号,相同的LABEL 3,40,有如下程序 main0 int x=1,a=0,b=0; switch(x) case 0: b+; case 1: a+; ca

18、se 2: a+;b+; printf(“a=%d,b=%dn“,a,b); 该程序的输出结果是 A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2,A, 从case 1 开始 执行2次 a+,一次 b+,41,练习,int n=c; switch(n+) default: printf(“error“);break; case a: case b:printf(“good“);break; case c: printf(“pass“); case d: printf(“warn“); ,答案:passwarn n+用于判断时, 值为c, 执行最后两条 ca

19、se语句,42,练习,若有以下定义: int a,b,x; 则正确的switch 语句是( ) A)switch (x) b)switch (x) case 1.0: printf(“*n”); case 1,2: printf(“*n“); case 2.0: printf(“*n“); case3: printf(“*n“); c)switch (a+b) d)switch (a+b); case 1: printf(“n“); case 1: printf(.“*n“); case 1+2: printf(“*n“); case 2: printf(“*n“);,多余的分号,类型不一致

20、X为整型,且 标准c不用浮点数,正确,case后可以为常量表达式,非法逗号, case3,43,有以下程序 main() int a=15,b=21,m=0; switch(a%3) case 0: m+;break; case 1: m+; switch(b%2) default: m+; case 0: m+;break; printf(“%dn“,m); 程序运行后的输出结果是_。 A) 1 B) 2 C) 3 D) 4,A 分析:15%3=0 执行m+后跳出, m值为1,44,#include “stdio.h“ #define M 5 main() int aM=1,2,3,4,5;

21、 int i,j,t; i=0; j=M-1; while(ij) t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; i+; j-; for(i=0;iM;i+) printf(“%d“,*(a+i); ,5 4 3 2 1,45,指针变量作为函数参数地址传递 特点:共享内存,“双向”传递,swap(int x,int y) int temp;temp=x;x=y;y=temp; main() int a,b;scanf(“%d,%d“, ,例 将数从大到小输出,5,9,5,5,9,COPY,46,指针变量作为函数参数地址传递 特点:共享内存,“双向”传递,swap(int

22、 x,int y) int temp;temp=x;x=y;y=temp; main() int a,b;scanf(“%d,%d“, ,例 将数从大到小输出,值传递,5,9,运行结果:5, 9,47,swap(int *p1, int *p2) int p;p=*p1;*p1=*p2;*p2=p; main() int a,b;int *pointer_1,*pointer_2;scanf(“%d,%d“, ,5,9,2000,2002,5,9,COPY,5,例 将数从大到小输出,48,swap(int *p1, int *p2) int p;p=*p1;*p1=*p2;*p2=p; mai

23、n() int a,b;int *pointer_1,*pointer_2;scanf(“%d,%d“, ,5,9,2000,2002,5,9,例 将数从大到小输出,运行结果:9,5,地址传递,49,swap(int *p1, int *p2) int *p;*p=*p1;*p1=*p2;*p2=*p; main() int a,b;int *pointer_1,*pointer_2;scanf(“%d,%d“, ,运行结果:9,9,编译警告! 结果不对!,int x; int *p=,例 将数从大到小输出,5,9,2000,2002,9,9,COPY,假设2000,指针变量在使用前 必须赋值

24、!,50,swap(int x,int y) int t;t=x; x=y; y=t; main() int a,b;int *pointer_1,*pointer_2;scanf(“%d,%d“, ,运行结果:5,9,例 将数从大到小输出,值传递,5,9,2000,2002,COPY,5,5,9,51,运行结果:5,9,例 将数从大到小输出,swap(int *p1, int *p2) int *p;p=p1;p1=p2;p2=p; main() int a,b;int *pointer_1,*pointer_2;scanf(“%d,%d“, ,5,9,2000,2002,COPY,2000,地址传递,2000,2002,52,指针与数组 指向数组元素的指针变量,例 int array10;int *p;p=,数组名是表示数组首地址的地址常量,53,数组元素表示方法, 变址运算符 ai *(a+i),ai pi *(p+i) *(a+i),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 教育范文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报