




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言等级考试笔试讲座 1 本次讲座内容 运算、基本语法、分支语句、指针中未学习 的章节 2 例 main( ) int i=10; int *p; *p=i; printf(“%d”,*p); 危险! 例 main( ) int i=10,k; int *p; p= *p=i; printf(“%d”,*p); 指针变量必须先赋值,再使用 . 2000 2004 2006 2005 整型变量i 10 指针变量p 2001 2002 2003 随机 3 例 int a=1,2,3,4,5,6,7,8,9,10,*p=a,i; 数组元素地址的正确表示: (A) int y,*p= y=(*-p)+; printf(“%d ”,y); printf(“%d”,a0); 输出:5 6 p p 5 8 7 6 2 7 3 0 1 2 3 4 5 6 a 例 注意指针变量的运算 6 y=(*-p)+; 运算符执行顺序: - p指向 a0 * 取a0的值 = y值为5 + a0值为5+1 5 int *p; p为指向整型量的指针变量 int *pn; p为指针数组,由n个指向整 型量的指针元素组成。 int *p() p为返回指针值的函数,该 指针指向整型量 int (*p)() p为指向函数的指针,该函 数返回整型量 int *p p为一个指向另一指针的指 针变量,该指针指向一个整型量。 6 char *name=“Illagal day“, “Monday“, “Tuesday“, “Wednesday“, “Thursday“, “Friday“, “Saturday“, “Sunday“; 完成这个初始化赋值之后,name0即指向 字符串“Illegal day“,name1:Monday“。 7 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); 8 运行结果为: Sichuan university China sichuan0 university0 chendu0 china0 ps0 ps1 ps3 ps2 psstr 图 pps string 9 指向函数的指针变量 指向函数的指针的定义格式如下: 类型说明符 *(指针变量名)( ); 如: char ( *p)( ); p是一个指向函数的指针变量,不固定指 向哪一个函数,只是专门用来存放函数的 入口地址,在程序中把哪个函数的地址赋 给它,它便指向哪一个函数。 10 指向函数的指针变量 #include main( ) int,a,b,c; int sub( ),(*pi)( ); printf(“Input two integers:n”) scanf(“%d%d”, pi=sub; c=(*pi)(a,b); printf(“a-b=%dn”,c); int sub(x,y) int x,y; return(x-y); 运行情况如下: Input two intergers: 23 33 a-b=-10 11 double (*ptr)()用于声明指向函数的指针 double *ptr()用于声明一个返回指针的函 数。 int *ptr()用于声明一个返回指针的函数 12 int aa(char *s) char *t=s; while(*t+); t-; return(t-s); 计算s的长度 13 指针数组作main函数的参数 如一个DOS的copy命令: copy fe A:mc 命令名 命令行参数1 命令行参数2 14 编写一段程序,它文件名为 8_16.c,要求运行显示输入的命令行参数。 main(argc,argv) int argc; char *argv ; while(argc1) +argv; printf(“%sn“,*argv); -argc; getchar(); 15 运行时输入: 8_16 we are students 输出: we are students argv0 argv2 argv1 argv3 8_16 are we students 16 b=0.5; x=0.3; 则 a278在C中是允许的, 值为 0 例 a0 结果为 A100 结果为 1 0 21 关系运算注意: 例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”); 例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0) 例 ab=2;c=3;d=4;m=1;n=1; (m=ab) a=c/100%9; b=(-1) printf(“%d,%dn“,a,b); 输出结果是 A) 2,1 B) 3,2 C) 4,3 D) 2, -1 246/100=2,2%9=2 b=1, 结果为A 27 练习 设a=1,b=2,c=3,d=4,则表达式 :a=A i=(-a=b+)? - -a :+b ; j=a+; k=b; printf(“i=%d,j=%d,k=%dn”,i,j,k); -a,-a,-前置前置,a,a的值为的值为2 2;b+,+b+,+后置后置, ,取取 b b的值的值2 2;所以所以- -a=b+- -a=b+为为“ “真真” ”,取表取表 达式达式- -a- -a,因此因此i i 的值为的值为1 1,a a 的值为的值为1 1 ,b b 的值为的值为3 3 +后置,后置,j j 的的 值为值为1 1 k k的值为的值为3 3 31 练习 有以下程序 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+ 未执行 32 练习 有如下程序 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配对 33 练习 以下程序的输出结果是( ) A) -1 1 B) 0 1 C) 1 0 D) 0 0 main( ) int a= -1,b=1,k; if (+a0) if (c=a+b) printf(“yesn“); else printf(“non“); 答案为:yes 注意c=a+b, c值为4非0 不是c=a+b 35 Exercise 假定所有变量均已正确说明,下列程序段运 行后x的值是( ) 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 36 switchswitch语句语句 形式:形式: switch switch (表达式表达式) case case 常量表达式常量表达式1 1:语句:语句1 1 ; case case 常量表达式常量表达式2 2:语句:语句2 2 ; ; case case 常量表达式常量表达式n n:语句语句n n ; default default :语句语句 n+1n+1; ; 表达式后没有表达式后没有 “;” ;” ,否则会,否则会 出现错误出现错误 37 使用注意:使用注意: switchswitch后面的表达式和后面的表达式和casecase后的常量表达式可以为任何数后的常量表达式可以为任何数 据据, , ansiansi c c允许任何类型允许任何类型, ,但标准但标准c c只允许整型,字符,枚只允许整型,字符,枚 举数据举数据 每个每个casecase后的常量表达式的值应互不相同后的常量表达式的值应互不相同 switchswitch语句中可以不含语句中可以不含defaultdefault分支,分支,defaultdefault分支并不限分支并不限 定在最后,几个定在最后,几个casecase分支没有顺序区别,但必须做适当处分支没有顺序区别,但必须做适当处 理,否则会影响执行结果理,否则会影响执行结果 为了执行某个为了执行某个casecase分支后跳出分支后跳出switchswitch结构,应在每个结构,应在每个casecase 分支后加上分支后加上breakbreak语句,流程图如图所示:语句,流程图如图所示: 38 若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: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 39 有如下程序 main0 int x=1,a=0,b=0; switch(x) case 0: b+; case 1: a+; case 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+ 40 练习 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, 执行最后两条 case语句 41 练习 若有以下定义: 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“); 多余的分号 类型不一致 X为整型,且 标准c不用浮点数 正确, case后可 以为常量 表达式 非法逗号, case3 42 有以下程序 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 43 #include “stdio.h“ #define M 5 main() int aM=1,2,3,4,5; 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 44 指针变量作为函数参数地址传递 特点:共享内存,“双向”传递 swap(int x,int y) int temp; temp=x; x=y; y=temp; main() int a,b; scanf(“%d,%d“, if(ab) swap(a,b); printf(“n%d,%dn“,a,b); 例 将数从大到小输出 . 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 变量temp 变量y 变量x (swap) 5 5 9 5 9 COPY 45 指针变量作为函数参数地址传递 特点:共享内存,“双向”传递 swap(int x,int y) int temp; temp=x; x=y; y=temp; main() int a,b; scanf(“%d,%d“, if(ab) swap(a,b); printf(“n%d,%dn“,a,b); 例 将数从大到小输出 值传递 . 2000 2008 200A 2002 2004 2006 5 变量a 变量b (main) 9 运行结果:5, 9 46 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“, pointer_1= pointer_2= if(ab)swap(pointer_1,pointer_2); printf(“n%d,%dn“,a,b); . 2000 2008 200A 2002 2004 2006 200C 200E 2010 . 5 9 整型变量a 整型变量b (main) 指针pointer_1 指针pointer_2 2000 2002 (swap) 指针p1 指针p2 整型p 5 9 2000 2002 COPY 5 例 将数从大到小输出 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“, pointer_1= pointer_2= if(ab)swap(pointer_1,pointer_2); printf(“n%d,%dn“,a,b); . 2000 2008 200A 2002 2004 2006 200C 200E 2010 . 5 9 整型变量a 整型变量b (main) 指针pointer_1 指针pointer_2 2000 2002 5 9 例 将数从大到小输出 运行结果:9,5 地址传递 48 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“, pointer_1= pointer_2= if(ab) swap(pointer_1,pointer_2); printf(“n%d,%dn“,a,b); 运行结果:9,9 编译警告! 结果不对! int x; int *p=x; 例 将数从大到小输出 . 2000 2008 200A 2002 2004 2006 200C 200E 2010 . 5 9 整型变量a 整型变量b (main) 指针pointer_1 指针pointer_2 2000 2002 9 9 2000 2002 COPY (swap) 指针p1 指针p2 指针p * 假设2000 指针变量在使用前 必须赋值! 49 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“, pointer_1= pointer_2= if(ab) swap(*pointer_1,*pointer_2); printf(“n%d,%dn“,a,b); 运行结果:5,9 例 将数从大到小输出 值传递 . 2000 2008 200A 2002 2004 2006 200C 200E 2010 . 5 9 整型a 整型b (main) pointer_1 poi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鞋底行业企业年终总结
- 皮带缝勾缝施工方案
- 昆明艺术职业学院《临床医学概论A2》2023-2024学年第一学期期末试卷
- 榆林能源科技职业学院《EVC企业价值创造》2023-2024学年第二学期期末试卷
- 廊坊卫生职业学院《中国画史论导读》2023-2024学年第二学期期末试卷
- 南华大学《Andoid应用开发A》2023-2024学年第二学期期末试卷
- 烟台城市科技职业学院《中医临床思维训练》2023-2024学年第二学期期末试卷
- 长春人文学院《集散系统概论》2023-2024学年第二学期期末试卷
- 新疆科技职业技术学院《医药伦理学》2023-2024学年第一学期期末试卷
- 南昌工学院《数据组织与管理》2023-2024学年第二学期期末试卷
- 二下快乐读书吧《一起长大的玩》导读课课件
- 关于高中班级管理论文
- 21秋国家开放大学《公共部门人力资源管理》单元自测题参考答案
- 广东省五年一贯制语文考试题目
- 英语考研高频词汇
- 某别墅中央吸尘系统设计施工规范说明
- 中世纪2全面战争城市名
- 地铁施工轨行区作业管理办法
- 2023年郑州信息科技职业学院单招考试职业适应性测试模拟试题及答案解析
- GB/T 42062-2022医疗器械风险管理对医疗器械的应用
- 地铁施工综合应急预案
评论
0/150
提交评论