计算机二级C语言3Word文档下载推荐.docx

上传人:b****1 文档编号:4012226 上传时间:2023-05-02 格式:DOCX 页数:31 大小:133.98KB
下载 相关 举报
计算机二级C语言3Word文档下载推荐.docx_第1页
第1页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第2页
第2页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第3页
第3页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第4页
第4页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第5页
第5页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第6页
第6页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第7页
第7页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第8页
第8页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第9页
第9页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第10页
第10页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第11页
第11页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第12页
第12页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第13页
第13页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第14页
第14页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第15页
第15页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第16页
第16页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第17页
第17页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第18页
第18页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第19页
第19页 / 共31页
计算机二级C语言3Word文档下载推荐.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机二级C语言3Word文档下载推荐.docx

《计算机二级C语言3Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言3Word文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。

计算机二级C语言3Word文档下载推荐.docx

for(k=0;

5;

k++)printf(“%d”,a[k]);

}/*答案:

35745*/

3函数的存储类别

定义任何一个子函数,也需要对这个子函数进行两项说明:

一是函数的返回值类型;

二是函数的存储类别。

用extern(开放型)和static(封闭型)来说明函数存储类别。

默认的函数存储类别是extern

做书后习题

 

第十三章编译预处理和动态函数

1宏替换

宏替换分两种情况:

1不带参数的宏替换

#defineN10/*注意后面没有分号*/

说明:

即把程序中的N替换成10,而不是N的值等于10,N不是变量,它是常量。

在程序正式运行之前进行替换。

分析下面程序:

#defineN3+5

printf(“%d”,2*N);

11

2带参数的宏替换

#defineF(x)3*x+5

printf(“%d”,2*F(3+6));

29

2动态函数---malloc()、calloc()、free()

int*p1,*p2;

p1=(int*)malloc(5);

/*老师画图解释含义*/

p2=(int*)calloc(2,5);

/*老师画图解释含义*/

free(p1);

free(p2);

第十四章结构体、共用体、类型定义、链表

1结构体变量的概念

大家回忆一下数组变量的含义,它是把相同类型的变量集合在一起,然后起个名字,这个名字就是数组变量。

那么能否把类型不同的变量集合在一起呢?

回答是肯定的,把类型不同的变量集合在一起,然后起个名字,这个名字就称为结构体变量。

2如何定义结构体变量?

首先定义类型,看如下:

然后才可以定义基于这种类型的结构体变量,假设现在要定义两个结构体变量a,b可以有如下定义方法,

⑴structstudent{charname[10];

intage;

floats1;

}a,b;

⑵structstudenta,b;

⑶structstudent{charname[10];

}a;

structstudentb;

分析:

假设没有类型名,如何定义结构体变量?

回答:

只能用⑴的方法定义

⑷假设用typedef来进行说明,看如下:

则可定义结构体变量a,b如下:

STa,b;

现在大家比较一下以上四种定义结构体变量的方法,哪个简单?

另外关于typedef举个例子:

typeintT;

那么定义int型变量可以写成:

Ta,b;

Typedefchar*M;

那么定义字符型指针型变量可以写成:

Ma,b;

(不能写成M*a,*b;

3给结构体变量初始化

比如用⑷定义方法来进行初始化:

STa={“li”,19,78},b={“zhang”,20,88};

用其它三种定义,怎么给变量初始化?

用图形来表示一下变量a,b的示意图:

大家分析一下:

变量a和b各占多少字节?

(都占18个字节)

另外还要注意变量a和b在位置上是不连续的。

3给结构体变量赋值

假设不用上述初始化的方法,也使a,b得到上面的值,我们可以用赋值的方法满足它。

什么情况下可以写成a.name=”li”;

(结构体类型中的charname[10]改为char*name;

时可以)

另外:

想把b的值赋给a,用哪两种方法实现?

(一是写成a=b;

二是写成strcpy(a.name,b.name);

a.age=b.age;

a.s1=b.s1)

4用指针来指向结构体变量

STp;

/*定义一个指向结构体的指针*/

p=&

a;

则上面的赋值语句可以写成:

strcpy(p->

name,”li”);

/*或strcpy((*p).name,”li”);

*/

p->

age=19;

/*或(*p).age=19;

s1=78;

/*或(*p).s1=78;

总结一下:

表示结构体里的分量有三种方法:

如把变量a里的分量age改为20;

可写成如下:

a.age=20;

age=20;

(*p).age=20;

5结构体数组,看如下定义:

structstudents[3]={{“li”,19,78},{“zhang”,20,80},

{“wang”,21,90}};

structstudentp=s;

/*或写成p=&

s[0]*/

注意:

变量s[0]、s[1]、s[2]在位置上是连续的。

如果执行p++;

后,指针p指向谁?

(指向s[1])

具备了上述的知识,我们可以做几个例题:

下面程序的输出结果是什么?

#defineN3

structstudent{charname[10];

};

intfun(structstudent*p)

{floatmax=p->

s1;

intk=0,i;

for(i=1;

i<

N;

i++,p++)

if(p->

s1>

max){max=p->

k=i;

returnk;

}

{structstudents[N]={{“li”,19,78},{“zhang”,20,80},

intk;

k=fun(s);

printf(“%s,%d,%.2f\n”,s[k].name,s[k].age,s[k].s1);

wang,21,90.00(即:

求成绩最高的)

例2:

structst

{intx;

int*y;

}*p;

intdt[4]={10,20,30,40};

structstaa[4]={50,&

dt[0],60,&

dt[0]};

{p=aa;

printf(“%d\n”,++p->

x);

printf(“%d\n”,(++p)->

printf(“%d\n”,++(*p->

y));

51

60

11

例3:

floatscore[3];

floatav;

voidfun(structstudent*p,structstudenta)

{floatavmin;

inti,k;

for(i=0;

i++)

p[i].av=(p[i].score[0]+p[i].score[1]+p[i].score[2])/3;

avmin=p[0].av;

k=0;

i++)

if(p[i].av<

avmin){avmin=p[i].av;

p[k]=a;

{structstudents[N]={{“li”,19,{55,60,50},0},

{“zhang”,20,{80,81,82},0},

{“wang”,21,{90,91,92},0}};

structstudenta={“lina”,25,{65,66,67},66};

inti,j;

fun(s,a);

for(i=0;

{printf(“\n%s,%d,”,s[i].name,s[i].age);

for(j=0;

j<

j++)

printf(“%.2f,”,s[i].score[j]);

printf(“%.2f”,s[i].av);

例4:

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:

把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数是60、69,则应当把分数在60~69之间的学生数据进行输出,包含60分和69分的学生数据。

主函数中将把60放在low中,把69放在heigh中。

部分源程序已给出。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include<

stdio.h>

#defineN16

typedefstruct

charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b,intl,inth)

由学生自己来写

STRECs[N]={{"

GA005"

85},{"

GA003"

76},

{"

GA002"

69},{"

GA004"

GA001"

96},

GA007"

72},{"

GA008"

64},{"

GA006"

87},

GA015"

GA013"

94},{"

GA012"

64},

GA014"

91},{"

GA011"

90},{"

GA017"

GA018"

GA016"

72}};

STRECh[N],tt;

inti,j,n,low,heigh,t;

printf("

Enter2integernumberlow&

heigh:

"

);

scanf("

%d%d"

&

low,&

heigh);

if(heigh<

low)

{t=heigh;

heigh=low;

low=t;

n=fun(s,h,low,heigh);

Thestudent'

sdatabetween%d--%d:

\n"

low,heigh);

n;

%s%4d\n"

h[i].num,h[i].s);

}

参考答案:

inti,n=0;

if(a[i].s>

=l&

&

a[i].s<

=h)b[n++]=a[i];

returnn;

输出结果:

例5:

编程题

把分数最低的学生数据放在b所指的数组中。

注意,分数最低的学生可能不止一个,函数返回分数最低的学生的人数。

{charnum[10];

intfun(STREC*a,STREC*b)

GA05"

GA03"

GA02"

GA04"

85},

GA01"

GA07"

72},

GA08"

GA06"

91},

STRECh[N];

inti,n;

FILE*out;

n=fun(s,h);

The%dlowestscore:

n);

i++)

out=fopen("

out24.dat"

"

w"

fprintf(out,"

%d\n"

%4d\n"

h[i].s);

fclose(out);

inti,mins,n=0;

mins=a[0].s;

for(i=1;

if(a[i].s<

mins)mins=a[i].s;

if(a[i].s==mins)b[n++]=a[i];

6动态链表

⑴链表的概念

把在位置上不连续的多个结构体变量建立联系。

⑵链表的建立

Ⅰ静态链表的建立(知道结点的个数)

typedefstructss{intdata;

structss*next;

}ST;

STa,b,c,*h,*p;

h=p=&

next=&

b;

p=p->

next;

c;

next=0;

经过上面的几个语句,已经把a,b,c三个变量连接起来了,这里要注意:

每个变量都称为一个结点,最后一个结点的指针变量*next的值一定是0(或NULL、‘\0’)

示意图如下:

假设要输出上图中的每个结点的data:

ST*p;

p=h;

while(p!

=0)/*如果把p!

=0写成p->

next!

=0输出会是什么?

{printf(“%d,”,p->

data);

p=p->

Ⅱ动态链表的建立(不知道结点的个数)

动态链表分为不带头结点的和带头结点。

例:

从键盘输入若干个正整数(每个数就是每个结点里的data),直到输入-1为止,把这若干个结点连接起来。

不带头结点的程序如下:

#include"

stdio.h"

stdlib.h"

{ST*h,*p,*q;

/*下面程序是建立动态链表(不带头结点)*/

h=p=q=(ST*)malloc(sizeof(ST));

while

(1)

{scanf(“%d”,&

if(x==-1){p->

break;

p=q;

data=x;

q=(ST*)malloc(sizeof(ST));

next=q;

/*下面程序是输出各结点中的data*/

/*和带头结点的不一样*/

=0)

{printf(“%d,”,p->

带头结点的程序如下:

/*下面程序是建立动态链表(带头结点)*/

h->

data=0;

q->

p=h->

/*和不带头结点的不同*/

填空题

给定程序中,函数fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。

即若原链表结点数据域从头至尾的数据为:

16、3、1、7、5,排序后链表结点数据域从头至尾的数据为:

1、3、5、7、16。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

不得增行或删行,也不得更改程序的结构!

stdlib.h>

#defineN6

typedefstructnode

{intdata;

structnode*next;

}NODE;

voidfun(NODE*h)

NODE*p,*q;

intt;

/**********found**********/

p=1;

/*p=h*/

while(p)

{

q=2;

/*q=p->

next*/

while(q)

data3q->

data)/*>

t=p->

data;

p->

data=q->

q->

data=t;

q=q->

NODE*creatlist(inta[])

NODE*h,*p,*q;

inti;

h=(NODE*)malloc(sizeof(NODE));

h->

next=NULL;

for(i=0;

i<

i++)

q=(NODE*)malloc(sizeof(NODE));

data=a[i];

if(h->

next==NULL)h->

next=p=q;

else{p->

returnh;

voidoutlist(NODE*h)

NODE*p;

p=h->

if(p==NULL)

ThelistisNULL!

else

\nHead"

do

{

->

%d"

p->

}while(p!

=NULL);

End\n"

NODE*head;

inta[N]={0,16,3,1,7,5};

head=creatlist(a);

\nTheoriginallist:

outlist(head);

fun(head);

\nThelistaftersorting:

讲解一下P207的14.10和14.11

7删除链表中的某一个结点

老师画图讲解一下,并结合本章后面的习题

8在链表中插入一个结点

9共用体变量

弄懂下面的例子就可以了:

{union{shorti[2];

longk;

charc[4];

}r,*s=&

r;

s->

i[0]=0x39;

s->

i[1]=0x38;

printf(“%x\n”,s->

c[0]);

问:

⑴公用体变量r占多少字节?

既:

sizeof(r)=?

(4)

⑵输出结果是什么?

(39)

⑶如果把%x改为%c,输出结果是什么?

(9)

⑷如果把%x改为%d,输出结果是什么?

(57)

⑸如果把s->

i[0]=0x39;

和s->

分别改为

i[0]=39;

i[1]=38;

输出结果是什么?

(27)

⑹如果把s->

i[0]=339;

i[1]=338;

(53)

第十五章位运算

本章主要掌握有关位运算的几种符号:

基本运算符:

~(按位取反)、<

<

(左移)、>

>

(右移)、&

(按位与)^(异或)、|(按位或)

扩展运算符:

<

=>

=&

=^=|=

假设a=7,b=9

a<

=2;

问a=?

(28,左移2位相当于a=a*22)

b>

问b=?

(2,右移2位相当于b=b/22)

a&

=b;

(1,对应的两位均为1才得1,否则得0)

a|=b;

(15,对应的两位只要有一位是1就得

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2