好文档 - 专业文书写作范文服务资料分享网站

2013年全国计算机等级考试二级C语言复习资料 - 图文

天下 分享 时间: 加入收藏 我要投稿 点赞

聪智学校

{

int a[N]={1,2,3,4,5,6,7,8},i; fun(a,2); for(i=0;i

【解析】调用fun(a)函数,实参字符数组名a传递给形参字符指针s,使s指向字符串“good”;在函数fun中对字符串进行遍历,如果指针s指向字符ASCII码值是偶数则输出该字符。在字符串“good”中,只有“d”的ASCII码值为偶数

13指针与函数

?

C) 3 2 3 4

D) 1 2 3 4

函数指针变量是指向函数的指针变量。

定义的一般形式为: 类型说明符 (*指针变量名)(); 例如: int (*pf)(); 调用函数的一般形式:(*指针变量名)(实参表) 例如:z=(*p)(x,y);

?注: (*指针变量名)中的“()”不能少

}程序运行后的输出结果是( C ) A) 1 3 1 3

B)2 2 3 4

【解析】数组名代表数组首地址,即a[0]的地址。函数调用:fun(a,2) 参数传递后,形参指针x获得数组首地址,即指向a[0],形参变量i=2;*x即为a[0],*(x+2)即a[2],*x=*(x+2)相当于a[0]=a[2],a[0]变为3,a[2]不变。返回到主程序:循环4次,输出a数组前4个元素: 3 2 3 4 例3:(10-09-25)有以下程序 #include void fun(char *s) { while (*s) } main() {

char a[]={“good”}; fun(a);printf(“\\n”);

{if (*s%2==0) printf(“%c”,*s); s++;}

例1:(09-09-33)设有以下函数:

void fun(int n,char *s){…} 则下面对函数指针的定义和赋值均正确的是( A ) A)void (*pf)(); pf=fun; B)void *pf(); pf=fun; C)void *pf(); *pf=fun; D)void (*pf)(int,char);pf=&fun;

【解析】本题考点为指向函数的指针的用法。函数名代表函数的入口地址,可以赋值给指向函数的指针。指向函数的指针应该定义为void (*pf)().如定义为void *pf(),则表示函数pf返回值为一个基类型为 void的指针。 ? ?

函数指针变量不能进行算术运算。

指针型函数是指返回指针值的函数。定义的一般形式为:

类型说明符 *函数名(形参表){…} 例如:int *ap(int x,int y){} r &n 例1:(10-09-11)有以下程序 #include int *f(int *p,int *q) main()

第 46 页 共 61 页

}注意:字母a的ASCII码值为97,程序运行后的输出结果是( A )

A) d

B)go

C)god

D)good

m=1 n=2 p q

聪智学校

{ int m=1,n=2,*r=&m; r=f(r,&n) ; printf(”%d\\n”,*r) ; }

int *f(int *p,int *q) {

return (*p>*q) ?p :q ;}

{ }

if(*c>=?a?&&*c<=?z?) *c=*c-(?a?-?A?);

c++;

程序运行后的输出结果是______2_____

}

main()

{ char s[81];

gets(s); fun(s); puts(s):

}当执行程序时从键盘上输入Hello Beijing<回车>,则程序的输出结果是( C )

【解析】本题中f是个指针型函数,返回值为指针值。如示意图。主程序中,指针A)hello beijing B)Hello Beijing C)HELLO BEIJING D)hELLO Beijing r指向m,函数调用f(r,&n)时,实参传递给形参,形参指针p指向m,指针q指向【解析】gets(s)将输入的Hello Beijing赋给了字符数组s,调用fun(s),将字符数组

s的首地址传给了c,c指向的即为字符数组的首地址,通过指针变量c取得字符数

n,*p的值为m的值1,*q的值为n的值2,所以函数返回值为q,返回给主程序

组中的字符判断是不是小写字母,如果是变成大写字母。*c=*c-(?a?-?A?)完成小写

中的指针r,即指针r指向了n,最后输出*r的值为n的值2. 换大写的功能。故选C。另外注意gets(s)和scanf(“%s”,s);的区别:scanf以空格作例2:(11-03-29)有以下程序 为字符串输入结束的标志,而gets(s)不需要 void fun(char *c)

{ while(*c)

第五课 结构体、链表与共用体

第 47 页 共 61 页

聪智学校

第 48 页 共 61 页

聪智学校

本课重要知识点:

1.知识点:用typedef定义类型

? 功能:为已有数据类型取别名

?

类型定义形式: typedef 旧类型名 新类型名;(例如:typedef double D ; ) 注意:

(1) 定义的新名只是原名的一个别名,并不是建立一个新的数据类型;

(2) 用新名和原名定义的对象具有相同的性质和效果。

例1:(2010-09-39)若有以下语句 typedef struct S {int g; char h;}T;

以下叙述中正确的是 ( B ) A)可用S定义结构体变量 B)可用T定义结构体变量

C)S是struct类型的变量 D)T是struct S类型的变量

【解析】此题中用typedef 说明的新类型名T,与中间部分的结构体类型具有相同的性质和效果 3. 知识点:结构体变量的定义

具体形式 实例 说明 第 49 页 形 struct 结构体名 struct student 特点:先定义类式 { { char num[20]; 型,后定义变量 1 类型标识符 成员名; char name[20]; 注意:定义变量类型标识符 成员名; char sex; 时,必须以 ……………. float score[4]; struct student }; }; 开头,缺一不可 struct 结构体名 变量名表列; struct student stu1,stu2; 形 struct 结构体名 struct student 特点:定义类型式 { { char num[20]; 的同时定义变2 类型标识符 成员名; char name[20]; 量 类型标识符 成员名; char sex; 注意:之后再定 ……………. float score[4]; 义同类型变量}变量名表列; } stu1,stu2; 时,也必须必须以struct student 开头 形struct struct 特点:定义类型式{ { char num[20]; 的同时定义变3 类型标识符 成员名; char name[20]; 量 类型标识符 成员名; char sex; 注意:此形式省 ……………. float score[4]; 略了结构体名,}变量名表列; } stu1,stu2; 预示着后续程序中将不再定义该类型变量 共 61 页

聪智学校

形式4 typedef struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. } STU; STU 变量名表列; typedef struct student { char num[20]; char name[20]; char sex; float score[4]; } STU; STU stu1,stu2; 特点:先定义类型,后定义变量 注意:用STU或struct student定义变量具有同等效果,用STU形式简洁方便 struct student *p,stu1; p=&stu1;

成员类型 普通变量 成员 例如:引用成员变量num 操作方式 直接赋值:stu1.num=201101; 间接赋值:p->num=201101 输入:scanf(“%d”,& stu1.num); 输出:printf(“%d”,stu1.num); 数组 例如:引用成员数组元素score[0] 赋值:stu1.score[0]=75; 间接赋值:p-> score[0]=75; 输入:scanf(“%f”,& stu1. score[0]); 输出:printf(“%f”,stu1. score[0]); 字符串 例如:字符数组成员作为字符串name 赋值:strcpy(stu1.name,”zhangsan”); %s作为格式控printf的输入和输出项均为地址 说明 例1:(:2009-09-36)下面结构体的定义语句中,错误的是 ( B )

A)struct ord {int x;int y;int z;}; struct ord a; B)struct ord {int x;int y;int z;} struct ord a; C)struct ord {int x;int y;int z;} n; D)struct {int x;int y;int z;} a;

【解析】遵循先定义类型,再定义该类型变量的原则,类型定义末尾的分号“;”必不可少

间接赋值:strcpy(p->.name,”zhangsan”); 制时,scanf和输入:scanf(“%s”, stu1.name); 输出:printf(“%s”,stu1.name); 2.知识点: 结构体变量各成员的引用

结构体嵌例如:引用内? 引用结构体变量的成员的方法是:结构体变量名.成员名 (例如:stu1.sex) 套 嵌结构体变间接赋值:p-> birth.year=1989; ? 结构体指针变量引用成员的方法是: 量birth的成输入:scanf(“%d”,& stu1. birth.year) 形式1:(*指针变量名).成员名 (例如:(*p).num)

员year 输出:printf(“%d”,stu1. birth.year) 形式2: 指针变量名->成员名 (例如:p->num)

例1:(2009-9-12)设有定义 ? 运算符级别,注意:()和->和 . 同级别,均大于*

struct person 设有:

{ int ID;char name[12];} p; struct student

请将scanf(\语句补充完整,使其能够为结构体变量p的成员ID正确{ char num;

读入数据。 char name[20];

struct date {int year,mon,day} birth; float score[4]; };

赋值:stu1.birth.year=1989; 【解析】此题答案是 &p.ID ,即在成员ID前缀 p. 表示其从属于变量p,操作方式与普通变量和数组没什么不同,只需要在引用时前面标明属于哪个结构体变量。

第 50 页 共 61 页

9a6vy17nnd0wekt4q39j
领取福利

微信扫码领取福利

微信扫码分享