南邮《高级语言程序设计》期末总复习模块四数据类型

发布 2021-04-19 22:34:28 阅读 7832

模块四:数据类型。

c语言源程序中所处理的任何数据(常量或变量)都是属于某一种数据类型的,数据类型将决定该类型的值在内存中占用空间的大小、数据值的表现形式及数据范围、可进行的运算及操作、变量值的组成情况等。

c中数据类型分为:基本类型、构造类型、指针类型、空类型四大类,其中基本类型包括整型、实型、字符型、枚举型;构造类型有:数组类型、结构体类型、共同体类型,指针类型的特殊性在于其变量中存放的是内存地址信息而不是内存中的值。

这一模块的重点是数组、结构体、指针类型。

1)数组类型:

基本知识:一维及二维数组变量的定义及初始化、如何正确访问元素、一维字符数组操作字符串、会正确输入输出数组的元素、正确输出字符串,掌握函数中的一些常用函数的使用,如:两个字符串的比较(例如:

判断串s1是否大于s2,不能用s1>s2,而应该用strcmp(s1,s2)>0)、字符串的赋值、字符串的连接等。

算法:首先要理解一维数组名作实参和形式能数传地址的实质;

掌握在一维数组中:输入数组所有元素、输出数组所有元素、寻找最大数、最小数、求元素的平均值、查找某一个值是否是数组中的元素、数组元素逆置、某种常见排序算法等。

数组元素实际个数随着输入动态统计的方法:应当设定一个输入结束标志,在输入该标志之前的元素都依次作为数组的有效元素,该标志不计入内,用如下**输入以-1为结尾标志的数组并输出所有的有效元素:

#include <>

void main()

int a[100],num=0,i=0;do

scanf("%d",&a[i++]

while (a[i-1]!=1);

num=i-1;

for (i=0;iprintf("%5d",a[i]);

printf("%d",num);

练习:1、有数组定义int a[m][n],则在a[i][j]之前的元素的个数为___

2、 以下一维数组的定义正确的是___

a、 int n=3, a[n]; b、#define n=3 int a[n];

c、 const int n=3; int a[n]; d、#define n 3 int a[n*3];

3、以下一维数组定义及初始化正确的是___

a、int ab、int a=

c、int a[3]= d、int a[3]=

4、以下选择中,能正确定义二维数组的是___

a、int x[ ]2b、int x[ ]2] =

c、int x[2][ d、int a[2][3]=

5、若定义int a[10]=;则m[m[1]+2*m[4]]的值是___m+m[8]的值为___

6、下列字符数组定义与初始化不正确的是___

a、char s[ ]abc”; b、char s=

c、char s[3]=;d、char s[3]=”abc”;

7、下列关于数组的描述中不正确的是___

a、可以对字符型数组进行整体输入、输出。

b、可以对整型数组进行整体输入、输出。

c、利用字符型数组可以实现字符串操作。

d、不能通过赋值运算符“=”对字符型数组进行整体赋值。

8、下列程序的输出结果是?

#include <>

int f (int *a, int num, int x);

void main( )

int a[10]=;

int pos;

pos=f (a,10,7);

printf("%d",pos+1);

int f (int *a, int num, int x

int i;

for (i=0; iif (x ==a[i]) return i;

return -1

教材p239的6.3程序填空题,需要认真理解。其中的(3)如果改为统计某一个字母出现的次数,可以作怎样的简化?

2)指针类型:定义形式为:数据类型 *指针变量名,例:int*p;注意p与*p的区别。指针变量若未赋值,不能对*p操作,若对指针赋值为空值,也不能对*p操作。

例如:1、 int *f = null; scanf("%d",f)或 *f=10.5;都不正确。

2、 int t = a', f; f = t或*f=t均正确;f=t,*f=&t都不正确。

3、 int *f; f = null;正确。

练习: 1、已知: char *s = student"; 则printf("%s", c+3)输出为___

2、若有说明:int a, b=9, *p=&a;,则能完成a=b赋值功能的语句是___

a、a=*p; b、*p=*&b; c、a=&b; d、*p =&b;

指针与数组的关系:对指针操作一维数组要熟练掌握,理解数组名是地址常量的概念,指针指向数组的时候执行p++、p- -的意义,以及数组元素的下标法访问及指针运算符访问方法:例:

int a[4]= p=a; +p;p[2]或*(p+2)都是表示元素a[3],但是p+1或a+2都是表示地址概念的,都等于&a[2]

各种指针的含义:

int *p; /一级指针,可等于普通int变量地址、一维数组名、二维数组中的列地址。

int (*p)[3];/一个行指针,指向具有3个整型元素的一维数组,与二维数组一起使用,用于获得行指针值,例int a[2][3];p=a;

int *p[3];/含3个整型指针元素的一维指针数组p

int (*p) (函数指针,指向返回值为int型的函数入口。

int *p(形式参数表); 返回值为int指针的函数p

int **p; /二级指针p,用来获得一级指针的地址,必须两次间接寻址才能访问int值,例如:int a,int *r=&a,**p=&r;则下列三句等效: (1)a=1; (2)*r=1;(3)**p=1;

这里,有几种访问是不正确的:(1) r=1; (2)p=&a; (3)p=r; (4)*p=1;

二维数组中元素的表示:

例:int a[3][4];

元素a[i][j]的正确表示:a[i][j]、*a[i]+j)、*a+i)+j)、*a+i*4+j),但是*(a+i*4+j)不正确,这里需要正确理解行指针与列指针的表示及它们执行算术运算每次移动的字节数。

用字符指针操作字符串:比用字符数组操作字符串具有更大的灵活性,注意二者的区别。

例:char *s=“abc”; char *s; s=”abc”;都是正确的。

char p[4]=“abc”;正确,但是char p[4]; p=”abc”;却错误。

s=p;是正确的赋值,但是s=*p,*s=”ab”都是错误的。

练习:下面的函数**是否都能正确实现字符串的拷贝(将p1串拷贝到p2串中?)

**段一:void mystrcpy( char *p2, char *p1 )

while ( p2=*p1) !0' )此处换成n’呢?

**段二:void mystrcpy( char *p2, char *p1 )

while (*p1 !=0' )

p2=*p1

p1++;p2++;

3)结构体类型:会正确定义结构体类型,掌握三种变量定义的方式及变量的初始化方式,理解结构体变量内存占用的情况(各成分依次存放,故结构体变量所占空间至少为所有成员需要的空间之和),会正确访问结构体变量的成员(用点运算符或是箭头运算符),结合结构体数组及指针会正确访问结构体的元素。

练习:1、定义struct pointpos[ ]pt=pos;则表达式(++pt)->y的值为pt->x) 的值为pt->x 的值为___pt).y的值为___

2、以下对结构体变量stu中成员的非法引用是___

struct point

int x;

int y;

pos, *p=&pos;

a、 b、(*p).y c、p->x d、

作为函数参数,通常定义结构体的指针作为形式参数,将实参结构体变量的地址传入,这样省时效率高,而且可在被调函数中修改对应实参结构体成员的值。

练习:下列程序的运行结果是?

#include <>

typedef struct student

char name[10];

double score;

stu;void f (stu *s)

(*s).score*=20;

printf("%s %.1f", s->name, (s).score);

void main()

stu stu=

f (stu+1);

printf("%s %.1f", stu->name, (stu).score);

利用结构体和指针的递归定义可以实现单链表。

例:struct node{

int data;

struct node *next;

*head;

在单链表中,最重要的是头指针的信息,头指针用于指向单链表的第一个结点处,顺着链依次寻找其它的结点,单链表不可随机访问其中的结点,最后一个结点的指针域置为空。

理解单链表的遍历、插入一个结点、删除一个结点等方法。

南邮《高级语言程序设计》期末总复习模块四 数据类型

模块四 数据类型。c语言源程序中所处理的任何数据 常量或变量 都是属于某一种数据类型的,数据类型将决定该类型的值在内存中占用空间的大小 数据值的表现形式及数据范围 可进行的运算及操作 变量值的组成情况等。c中数据类型分为 基本类型 构造类型 指针类型 空类型四大类,其中基本类型包括整型 实型 字符型...

南邮高级语言程序设计期末总复习模块四 数据类型

模块四 数据类型。c语言源程序中所处理的任何数据 常量或变量 都是属于某一种数据类型的,数据类型将决定该类型的值在内存中占用空间的大小 数据值的表现形式及数据范围 可进行的运算及操作 变量值的组成情况等。c中数据类型分为 基本类型 构造类型 指针类型 空类型四大类,其中基本类型包括整型 实型 字符型...

南邮高级语言程序设计期末总复习模块四 数据类型

模块四 数据类型。c语言源程序中所处理的任何数据 常量或变量 都是属于某一种数据类型的,数据类型将决定该类型的值在内存中占用空间的大小 数据值的表现形式及数据范围 可进行的运算及操作 变量值的组成情况等。c中数据类型分为 基本类型 构造类型 指针类型 空类型四大类,其中基本类型包括整型 实型 字符型...