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

C语言程序设计教程清华大学出版社陈明主编第5章答案

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

第5章习题解答

、选择题

i以下叙述中错误的是 ___________ 。

A) 对于double类型数组,不可以直接用数组名对数组进行整体输入或输出

B) 数组名代表的是数组所占存储区的首地址,其值不可改变

C) 在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越

界”的出错信息

D )可以通过赋初值的方式确定数组元素的个数

解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。所以选项

A的说法是正确的。数组名代表数组所占内存区的首地址,

是一个固定指针,其值不可改变,

由赋初值的初值个

因此选项B也是正确的。在C语言一维数组定义时可以不指定数组长度, 数决定数组的长度。因此选项

D也是正确的。C语言程序在执行时,不检查数组元素的下标

C不正确。

是否越界,如果出现越界,可能会引起系统死机,因此选项

答案:C

2?有以下程序:

/* 文件路径名:ex5_1_2\\main.c */ #include int main(void) {

char s[] = \s += 2;

printf(\0;

}

/*定义字符数组*/ /* s自加2 */ /* 输出 s[0] */

/*返回值0,返回操作系统*/ /*标准输入/出头文件*/ /* 主函数 main() */

执行后的结果是

_______________________ 。

B)输出字符c的ASCII码 D)程序出错

)输出字符码 s是不可改变的,故该程序编译时会出错。 解析:数组s[]的的首地址值答案:D

3?有以下程序:

/* 文件路径名:ex5_1_3\\main.c */ #include int main(void) {

/* 标准输入/出头文件 */ /* 主函数 main() */

可编辑范本

int a[10] = {1,2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], *q = p + 2; /* 定义数组及变量 */

可编辑范本

printf(\return 0; }

/* 输出 *p + *q 之值 */ /*返回值0,返回操作系统*/

程序运行后的输出结果是 _________ 。

A) 16

B) 10

C) 8

D) 6

解析:数组a各元素a[0]-a[9的值依次为1~10,语句“ *p=&a[3] ”把指针变量p初始化为

&a[3],即*p的值为4,指针变量q初始化为“ *q=p+2 ”,所以*q的值为6,从而*p+*q=l0。 答案:B

4.有以下程序:

/* 文件路径名:ex5_1_4\\main.c */ #include void Sort(int a[], int n) {

int i, j, t;

for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++)

if (a[i] < a[j])

{ t = a[i]; a[i] = a[j];

a[j] = t; } }

/* 主函数 main() */ int main(void) {

int a[10] = {1,2, 3, 4, 5, 6, 7, 8, 9, 10}, i; /* 定义数组及变量 */

Sort(a + 2, 5);

for (i = 0; i < 10; i++) printf(\printf(\return 0;

/* 输出 a[i] */

/*换行*/

/*返回值0,返回操作系统*/ /*定义变量*/

/*标准输入/出头文件*/ /*将a中元素从大到小进行排序

*/

程序运行后的输出结果是 _________ 。

A)

1,2,3,4,5,6,7,8,9,10

B) 1,2,7,6,3,4,5,8,9, 10, D) 1,2,9,8,7,6,5,4,3, 10,

a中的元素按照从大到小的顺序排列。但主函数调用

C) 1,2,7,6,5,4,3,8,9,10

解析:函数Sort()的功能是将数组 结果应该是

答案:C

Sort()时,实参是a+2和5,即是将数组a中a[2]-a[6]共5个元素进行从大到小的排序。所以得 至曲勺输出

1,2,7,6,5,4,3,8,9,10

5?以下数组定义中错误的是 ___________ 。 A) int x[][3] = {0};

B) int x[2][3] = {{1,2}, {3, 4}, {5, 6}};

C) int x[][3] = {1,2, 3}, {4, 5, 6}}; D ) int x[2][3] = {1,2, 3, 4, 5, 6};

解析:二维数组赋初值时,第一个维数,即行数可以省略,但是列数不能省略。因此选 项A, C正确。选项D是按数据在二维数组中的顺序初始化。在选项 B中,行维数的初始化 格式跟定义的维数不一致,为错误选项。

可编辑范本

答案:B

6.有以下程序:

/* 文件路径名:ex5_1_6\\main.c */ #include int main(void) {

int i, t[][3] = {9, 8, 7, 6, 5, 4, 3, 2, 1}; /* for (i = 0; i < 3; i++)

printf(\printf(\return 0; }

/*输岀元素值*/

/*换行*/

/*返回值0,返回操作系统*/ /*标准输入/出头文件*/ /* 主函数 main() */

定义变量及数组 */

程序的执行后的输出结果是 __________ 。

A) 753

B) 357

C) 369

D) 751

解析:定义二维数组时第一维的长度可以不指定, 该程序中t[][3]通过赋初值等价于t[3][3],

并且其数组按行进行赋值,通过

答案:B

7.若有语句\char *line[5];”,以下叙述中正确的是 ____________ 。 A)

for循环输出的分别是t[2][0]、t[1][1]和t[0][2]。

定义line是一个数组,每个数组

char的指针变量

元素是一个基类型为

B)

定义line是一个指针变量,该

5的字符型数组

变量可以指向一个长度为

C) D)

定义line是一个指针数组,语句中的*号称为取址运算符 定义line是一个指向字符型函数的指针

char *”,所以line为指针数组,它的每个元素

解析:在语句\char *line[5];”中,遵照运算符的优先级,[]的优先级高于*号,因此line 先与[]结合,构成一个数组,数组的基类型为\

都是基类型为char的指针。所以选项 A叙述正确。

答案:A

8?有以下程序:

可编辑范本

/* 文件路径名:ex5_1_8\\main.c */ #include int main(void) {

int a[3][3], *p, i; p = & a[0][0];

for (i = 0; i < 9; i++)

p[i] = i;

for (i = 0; i < 3; i++) printf(\printf(\return 0;

}

可编辑范本

/*标准输入/出头文件*/ /* 主函数 main() */

/*定义数组及变量*/ /* p指向数组a的首元素*/ /*为p[i]赋值*/ /* 输出 a[1][i] */

/*换行*/

/*返回值0,返回操作系统*/

程序运行后的输出结果是 _________ 。

A) 0 1 2 B) 1 2 3 C) 2 3 4 D) 3 4 5

for(i=0;i<9;i++)

解析:p指向二维数组a的首元素,而二维数组是按行存放的。因此\

a[1][i](i=0,1,2)的结果是 3, 4, 5。

p[i]=i; ”的结果是等价于 a[3][3]={0,1,2,3,4,5,6,7,&,也就是 a[3][3]={{10,1,2},{3,4,5} , {16.7,8}}。 因此

答案:D

9. ________________________________________________________________________________ 若有定义语句

“ int a[2][3], *p[3];”,则以下语句中正确的是 _____________________________ 。

A) p[0]=a;

B) p[0]=a;

C) p[0]=&a[1][2];

D) p[1]=&a

int的指针,只

解析:因为*p[3]定义成指针数组,指针数组中的任何元素都是基类型为 有选项B是正确的。

答案:B

10.

变量

A) float *p=1024; C)

float p=&x;

B)

设已有定义“ float x;”,则以下对指针

p进行定义且赋初值的语句中正确的

int *p=(float)x;

D ) float *p=&x;

解析:指针的值是变量的地址而不能是数值常量, 类型的值赋给指针而不是地址,所以选项 选项C不正确。

答案:D

所以选项A错;选项B同样是将float

B也错。定义指针变量前面必须有星号(*),所以

11.若有定义“ short int a[]={10,20,30}, *p=&a; ”,当执行“ p++; ”后,下列说法错误的

A) p向高地址移了一个字节 C) p向高地址移了两个字节

B) p向高地址移了一个存储单元 D) p与a+l等价

解析:“ *p=&a ”将数组a[]的首地址赋给指针 p,通过对指针变量加上一个整数可以移动 指针,移动的单位为存储单元,

答案:A

12.

short int型变量在存储器中占两个字节。

有以下程序:

/* 文件路径名:e5_1_12\\main.c */ #include int main(void) {

int a = 1, b = 3, c = 5; int *p1 = & a, *p2 = & b, *p = &c;

*p = *p1 * (*p2); printf(\return 0;

/*标准输入/输岀头文件*/ /* 主函数 main() */ /*定义变量*/ /*为指针变量赋值 /*输岀c */

/*返回值0,返回操作系统*/

*/

/*修改p2指向的变量的值*/

可编辑范本

执行后的输出结果是 _________ 。

A) 1

B) 2

C) 3

D) 4

可编辑范本

解析:指针pl指向变量a,指针p2指向变量b,指针p指向变量c, “ *p = *p1 * (*p2); ” 等价于“ c=a*b ”,故正确选项为 C。

答案:C

13.

己定义以下函数:

int f(int *p) { return *p; }

f()函数返回值是

B )一个整数

D )形参p的地址值

*p间接引用了 p指向的整数值。因此返回一个整数。

_______________________

A)不确定的值

答案:B

B) a数组长度小于b数组长度 D )上述说法都不对

14.己有定义“ char a[] = \”,以下叙述中正确的是

A)数组a和b的长度相同 C) a数组长度大于b数组长度

解析:对于定义“ char a[] = \”,由于字符串\串长为3,连同隐 含的结束符'\\0 ',占4个字节,所以a数组的长度为4。而b数组由单个字符赋初值,个数是 3,因此b数组长度为3。

答案:C

15.

有以下程序:

/* 文件路径名:ex5_1_15\\main.c */ #include int main(void) {

char ch[] = \pc = ch;

printf(\return 0; }

/*标准输入/输岀头文件*/ /* 主函数 main() */ /*定义字符数组与字符指针 /* 输出 *(pc+5) */ /*返回值0,返回操作系统*/

*/

/* pc指向字符数组ch的首字符*/

程序运行后的输出结果是 ________ 。

A) z

B) 0

C)元素ch[5]地址

D)字符y的地址

解析:字符指针pc指向字符串数组ch的的首字符,*(pc+5)就是pc⑸的值。 答案:A

16.

有以下程序:

/* 文件路径名:ex5_1_16\\main.c */ #include int main(void) {

char s[] = \

/*标准输入/输岀头文件*/ /* 主函数 main() */

/*定义数组与指针*/

可编辑范本

p = s; /* p指向s的首字符*/

printf(\/* 输出 *p++ */ printf(\/* 输出 *p++ */ *p++); return 0; }

/*返回值0,返回操作系统*/

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

A)15

B)16

C) 12

D)59

解析:数组s中存放字符串\指向s的首字符。因此语句\”输出 的是字符

'1',输出后p加1指向下一个字符'5',下一个“peintf(.1%c\”输出的是字符’5'。

答案:A

17. _____________________________________________________________________________ 若要求从键盘读入含

有空格字符的字符串,应使用函数 ______________________________________ 。

A) puts()

B) gets()

C) getchar() D) scanf()

解析:函数puts()是从屏幕输出一个字符。getchar(从键盘读入一个字符。scanf(是格式 化输入函数,空格字符被用于多个数据输入的分隔符,含有空格的字符串会被截断。 于字符串的输入,并且以回车键为结束符。

答案:B

*18.对于长度为n的查找表进行顺序查找,在最坏情况下所需要的比较次数为 ______________ A) log2n

B) n/2

C) n

D) n+l

gets(用

解析:如果查找表中的第一个元素就是要查找元素,则只需做一次比较就查找成功;如 果被查找的元素是查找表中的最后一个元素,或者被查找的元素根本就不在查找表中,则需 要与查找表中所有的元素进行比较,可知对长度为 需要比较n次。

答案:C

*19.冒泡排序在最坏情况下的比较次数是 ____________ 。 A) n(n+l )/2

B) nlogzn

C) n(n-1)/2

D) n/2

n的线性表进行顺序查找,在最坏情况下

解析:如果查找表的长度为n ,则在最坏情况下,冒泡排序需要经过n-1趟从前往后扫描, 每趟扫描需要的比较次数依次是

答案:C 二、填空题

1.设有定义语句“ int a[][3] = {{0}, {1}, {2}};

n-1, n-2,…,1,需要总比较次数为

n(n-1)/ 2。

”,则数组元素a[1][2]的值为 _________ 。

解析:二维数组中当某行一对花括号内的初值个数小于该行中元素的个数时,系统将自 动给该行后面的元素补初值

答案:0

2?以下程序中,Lin eMax ()函数的功能是求3行4列二维数组每行元素中的最大值,请 填空。

0,由此可见数组a[1][2]=0。

/* 文件路径名:ex5_2_2\\main.c */ #include

/*标准输入/输出头文件 */

可编辑范本

void LineMax(int m, int n, int a[][4], int *bar) {

int i, j, x;

for (i = 0; i < m; i++) {

x = a【i]【0]; for (j = 0; j < n; j++)

if (x < a[i][j]) x = a[i][j]; ____________ = x;

} }

int main(void)

/* 主函数 main() */

/*如果x小于第i行的j号元素a[i][j] */ /*则将a[i][j]赋给x */ /* x为第i行的最大值*/ /*第i行的首元素*/ /*定义变量*/

int a[3][4] = {{12, 41,36, 28}, {19, 33, 15, 27}, {3, 27, 19, 1}}, b[3], i; LineMax(3, 4, a, b); for (i = 0; i < 3; i++) printf(\printf(\return 0;

/*输岀每行的最大值*/ /*换行*/

/*返回值0,返回操作系统*/

/* ?调用LineMax()函数求每行的最大值 */

解析:函数LineMax()的功能是求出二维数组每行元素中的最大值。 应该将x赋值给bar[i]。因此此处填空应该是:bar[i]。

答案:bar[i]

3.

对于3行4列的二维

x后,

数组将有3个最大值存放到数组 bar[]中。x存放的是每行的最大值,求出每行的最大值

己知 “ int a = 3; ”,a 的地址为 1001, &a= _____________________ 。

解析:变量的地址可以通过运算符&来得到, 而a的存储单元地址是1001,所以&a=1001。 答案:1001

4.

以下程序的功能是:利用指针指向三个整型变量,并通过指针运算找出三个数中的 最大值,

输出到屏幕,请填空。

/* 文件路径名:ex5_2_4\\main.c */ #include int main(void) {

int x, y, z, max, *px = &x, *py = &y, *pz scanf(\&z);

/*标准输入/输岀头文件*/ /* 主函数 main() */

&z, *pmax = &max; /* 定义变量 */

/* 输入 x,y,z */ /*如果*py更大*/ /* 则将*py赋给*pmax */ /*如果*pz更大*/ /* 则将*pz赋给*pmax */ /*输岀最大值*/

/*返回值0,返回操作系统*/

if (*pmax < *py)

*pmax = *py;

if (*pmax < *pz)

?pmax = *pz; printf(\

}

可编辑范本

解析:程序中定义了 4个指针变量,px指向x, py指向y, pz指向乙让 pmax指向X。

答案:*pmax = *px 或 *pmax = x 或 max = *px 或 max = x

5?以下程序的输出结果是 ____________ 。

pmax指向max, if 语句将pmax指

向的存储单元的值与*py与*pz两个数值比较,可知*px代表x的值,可知初始 时假设x中的值最大,就

/* 文件路径名:ex5_2_5\\main.c */ #include #include int main(void) {

printf(\return 0; }

/*标准输入/输岀头文件*/ /*字符串头文件 */ /* 主函数 main() */ /*输岀字符串的长度 */ /*返回值0,返回操作系统*/

解析:转义符'\\n'、’\\1'和'\\\\'都会别只算一个字符,所以 答案:9

6?以下程序的输出结果是 ________________ 。

\

的字符数为9。

/* 文件路径名:e5_2_6\\main.c */ #include #include int main(void) {

char a[] = {'\\1', '\\2', '\\3', '\\4', '\\0'}; printf(\strlen(a)); return 0; }

/*标准输入/输岀头文件*/ /*字符串头文件 */ /* 主函数 main() */ /*定义字符数组*/

/*输岀字符串所占空间大小与长度 */ /*返回值0,返回操作系统*/

解析:strlen()求字符串的实际长度, 不包括'\\0' , sizeof(是求数组a所占的字节,包括'\\0'。 答案:5,4

*7 .对长度为10的查找表表进行冒泡排序,最坏情况下需要比较的次数为 _______________ 。

解析:如果查找表的长度为10 ,则在最坏情况下,冒泡排序需要经过n-1趟从前往后扫描, 每趟扫描需要的比较次数依次是

答案:45 三、编程题

1.求一个4

9, 8,…,1,需要总比较次数为 36。

X 4整型矩阵对角线元素之和。 参考程序:

/* 文件路径名:ex5_3_1\\main.c */ #include #include

/*包含库函数printf()所需要的信息*/ /*包含库函数system(所需要的信息*/

可编辑范本

int main(void) int Sum(int a[4][4])

{

/* 返回二维数组 a对角线元素之和 */ /* 定义变量 */

int s = 0, i;

for (i = 0; i < 4; i++)

{ /* 求对角线元素之和 */ s = s

+ a[i][i];

s = s + a[i][3 - i];

}

/* 累加主对角线 */ /* 累加副对角线 */ /* 返回对角线元素之和 */

return s;

}{

int a[4][4] = {

{ 1, 2, 3, 4}, { 5, 6, 7, 8},

{ 9,10,11,12}, {13,14,15,16} }; printf(\对角线元素之和为 %d\\n\

/* 调用库函数 system( ),输出

/* 主函数 main() */

系统提示信息

system(\return 0;

}

/* 定义二维数组 */

/*输出二维数组a对角线元素之和*/

*/

/* 返回值 0, 返回操作系统 */

2.将一个数组中的值按逆序重新存放,例如,原来的顺序为 6,

8,5,2,9。要求重排

为 9, 2, 5,8,6。

参考程序:

/* 文件路径名 :ex5_3_2\\main.c */ #include #include

息 */

/*包含库函数system(所需要的信息*/ /*将数组a中的值按逆序重新存放

*/

void Reverse(int a[], int n)

{

int i, j, tem;

for (i = 0, j = n - 1; i < j; i++, j--)

{

/* 交换 a[i]与 a[j] */ tem = a[i]; a[i] = a[j]; a[j] = tem;

}

}

/* 定义变量 */

/*循环赋值交换a[i]与 a[j] */

/* 主函数 main() */ /* 定义数组及变量 */

int main(void)

{

int a[] = {6, 8, 5, 2, 9}, n = 5, i; printf(\原数组 :\

for (i = 0; i < n; i++) printf(\

\

/* 包含库函数 printf() 所需要的信

/* 依次输出各元素之值 */

可编辑范本

printf(\/* 换行 */ Reverse(a, n); /* 将数组 a 中的值按逆序重新存放 */ printf(\逆序后 :\ for (i = 0; i < n; /* 依次输出各元素之值 */ i++) /* 换行 */ printf(\

printf(\

system(\/* 调用库函数 system( ),输出系统提示信息 */

return 0; /* 返回值 0, 返回操作系统 */

}

3.从键盘上输入三行文字,每行文字最多有 80 个字符,要求分别统计其中的英文大写

字母、小写字母、数字、空格和其它字符的个数。

参考程序:

/* 文件路径名 :ex5_3_3\\main.c */

#include #include #include

/* 包含库函数 printf() 所需要的信息 */ /*包含库函数system(所需要的信息*/ /*

包含字符串库函数的信息 */

/* 主函数 main() */

int main(void)

{

char str[81]; /* 存储一行字符 */

unsigned int i, j, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0; /* 定义变量 */

for (i = 0; i < 3; i++) { /* 输入并处理三行字符 */

gets(str);

for (j = 0; j < strlen(str); j++) { /* 统计字符 */

if (str[j] >= 'A' && str[j] <= 'Z')

{ /* 大字字母 */

n1++;

}

/* 输入一行字符 str */

/* 对大写字母进行记数

*/

else if (str[j] >= 'a' && str[j] <= 'z') { /* 小字字母 */ n2++;

}

/* 对小写字母进行记数

else if (str[j] >= '0' && str[j] <= '9') {

}

*/

/* 数字 */ n3++;

/* 对数字进行记数 */

else if (str[j] == ' ') { /* 空格 */

n4++;

}

/* 对空格进行记数 */

else

{ /* 其它字符 */

n5++;

}

/* 对其它字符进行记数

*/

可编辑范本

}

printf(\含 %u 个大写字母 \\n\printf(\含 %u 个小写字母 \\n\printf(\含 %u 个数字 \\n\

printf(\含 %u 个空格 \\n\

/* 输出大写字母个数 */ /* 输出小写字母个数 */ /* 输出数字个数 */ /* 输出空格个数 */ /* 输出其它字符个数 */

含 %u 个其它字符 \\n\

system(\return 0;

}

/* 调用库函数 system( ),输出系统提示信息 */ /* 返回值 0, 返回操作系统 */

4?编写一个程序,将字符数组s2中全部字符复制到字符数组 si中,要求不使用strcpy()

函数,在复制时, '\\0' 也要复制过, '\\0' 后面的字符不再复制。

参考程序:

/* 文件路径名 :ex5_3_4\\main.c */ #include #include

void StringCopy(char s1[], char s2[])/* 将字符

/* 包含库函数 printf() 所需要的信息 */ /*包含库函数system(所需要的信息*/

s2中全部字符复制到字符数组 si中,'\\0'也要复制过*/ /* 定义变量 */ /* 逐个复制字符 */

数组

{

int i = 0;

while ((s1[i] = s2[i]) != '\\0') i++; }

int main(void)

{

char s1[80], s2[] = \StringCopy(s1, s2); puts(s1);

system(\

}

/* 主函数 main() */ /* 定义字符数组 */

/*将s2复制到si */ /* 输出 si */

/* 调用库函数 system( ),输出系统提示信息 /* 返回值 0, 返回操作系统 */

*/

5?编写一个程序将两个字符串连接起来,要求不用 strcat(函数。

参考程序:

/* 文件路径名 :ex5_3_5\\main.c */ #include #include

char *StrCat(char si[], char s2[])

{

/* 包含库函数 printf() 所需要的信息 */ /*包含库函数system(所需要的信息*/

/*将s2中的字符串连接到si中字符串的后面*/ /* 定义变量 */ /* 使 si[i] == '\\0' */

/*将s2字符串连接到si中字符串的后面*/

int i = 0, j = 0;

while (si[i] != '\\0') i++; while ((si[i + j] = s2[j]) != '\\0') j++;

可编辑范本

return s1;

}

/* 返回字符 s1 的首地址 */

int main(void)

{

/* 主函数 main() */ /* 定义字符数组 */ /* 将 s2 连接到 s1 */ /* 输出 s1 */

char s1[80] = \StrCat(s1, s2); puts(s1); system(\return 0;

}

/* 调用库函数 system( ),输出系统提示信息 */ /* 返回值 0, 返回操作系统 */

6.编写一个程序求字符串的长度,要求不使用

参考程序:

strle n()函数。

/* 文件路径名 :ex5_3_6\\main.c */ #include

#include

unsigned int StrLen(char s[])

{

/* 包含库函数 printf() 所需要的信息 */ /*包含库函数system(所需要的信息*/ /* 返回将 s 中的字符串的长度 */ /* 定义变量 */

/*使s[i] == '\\0' , i的值即为s的长度*/ /* 返回 i */

int i = 0;

while (s[i] != '\\0') i++; return i;

}

int main(void)

{

char s[] = \printf(\的长度是 %u\\n\StrLen(s));

system(\

}

/* 主函数 main() */ /* 定义字符数组 */ /* 输出结果 */

/* 调用库函数 system( ),输出系统提示信息 /* 返回值 0, 返回操作系统 */

*/

7.编写一个函数, 对含 n 个元素的整型数组 a 求最大值与最小值, 并通过形参传回调用 函

数,并要求编写测程序。

参考程序:

/* 文件路径名 :ex5_3_7\\main.c */ #include #include

/* 包含库函数 printf() 所需要的信息 */ /*包含库函数system(所需要的信息 */

void MaxMin(int a[], int n, int *pMax, int *pMin)/* 求数组a求最大值与最小值,并通过形参传回调用函数 */

{

int i; /* 定义变量 */

可编辑范本

*pMax = *pMin = a[0]; /* 初始化 *pMax, *pMin */

for (i = 1; i < n; i++) { /* 逐个比较 a[i] */

if (a[i] > *pMax) *pMax = /* a[i]更大,a[i]为当前的最大值

a[i]; if (a[i] < *pMin) */

*pMin = a[i];

/* a[i]更小,a[i]为当前的最小值*/

}

int main(void)

/* 主函数 main() */

{

int a[] = {1, 7, 0, 5, 80, -20}, n = 6, max, min; /* 定义数组及变量 */ MaxMin(a, n, &max, &min); /* 求 a 的最大值及最小值 */ printf(\最大值为 %d, 最小值为 %d\\n\输出结果 */

system(\/* 调用库函数 system( ),输出系统提示信息 */ return 0;

/* 返回值 0, 返回操作系统 */

}

8.编写一个函数,求二维整型数组所有元素之和,并要求编写测试程序。 参考程序:

/* 文件路径名 :ex5_3_8\\main.c */ /* 包含库函数 printf() 所需要的信息 */ #include /*包含库函数system(所需要的信息*/ #include

/* 定义常量 */

#define M 3 /* 定义常量 */

#define N 4

/* 求二维数组各元素之平方和 */

int SquareSum(int a[M][N])

{

int i, j, s = 0; /* 定义变量 */ for (i = 0; i < M; i++)

/* 行 */ for (j = 0; j < N; j++)

/* 列 */

s = s + a[i][j] * a[i][j];

/* 累加求平方和 */

return s;

/* 二维数组各元素之平方和 */

}

int main(void)

/* 主函数 main() */ {

int a[M][N] = {{1, 2, 3, 4}, {5, 6, 7, 平方和为 , 11, 12}};

/* 定义数组 */

8}, {9, 1 printf(\:%d\\n\/*输出二级数组a各元素之平方和*/

SquareSum(a));

system(\/* 调用库函数 system( ),输出系统提示信息return 0;

}

/* 返回值 0, 返回操作系统 */

可编辑范本

*/

[此文档可自行编辑修改,

如有侵权请告知删除, 感谢您的支持, 我们会努力把内容做得更好 ]

可编辑范本

C语言程序设计教程清华大学出版社陈明主编第5章答案

第5章习题解答、选择题i以下叙述中错误的是___________。A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”
推荐度:
点击下载文档文档为doc格式
0fsd1599wk4oweh0q68m0sr9z0p08p00nxb
领取福利

微信扫码领取福利

微信扫码分享