首页 理论教育 C语言程序设计实践教程-思考指针变量操作二维数组-求平均成绩

C语言程序设计实践教程-思考指针变量操作二维数组-求平均成绩

时间:2023-11-01 理论教育 版权反馈
【摘要】:思考用指针变量操作二维数组的方法修改此程序,计算每一位学生的平均成绩及每门课程的平均成绩。A.7B.3C.10D.11以下程序段给数组元素输入数据则下划线处应填入的是()。A.1B.2C.3D.4以下程序段的输出结果是()。A.24B.22C.44D.46有如下定义则能正确引用c数组元素的是()。

C语言程序设计实践教程-思考指针变量操作二维数组-求平均成绩

一、思考题

1.假设有定义:

请写出与i==j等价的表达式。

2.假设有程序段:

请写出*p1、*p2、*p3的值。

3.假设有定义:

请写出*(++p)的值。

4.假设有定义:请写出*p+1的值。5.已知有如下语句:

6.写出语句int *p1, *p2[3], (*p3)(), (*p4) [3]; 中的p1、p2、p3、p4的含义。

7.简述int *fun(); 与int (*fun)(); 的区别。

8.使用二维数组存储3名学生2门课程的成绩。下面的程序功能是,求出每一位学生的平均成绩及每门课程的平均成绩。

思考用指针变量操作二维数组的方法修改此程序,计算每一位学生的平均成绩及每门课程的平均成绩。

提示与分析:

① 采用指针变量(一级指针)时,要使该指针指向二维数组第一行的首地址

② 仿照已知的程序来编写就可以了。

二、练习题

1.选择题

(1)下面语句中,正确的字符赋值操作是_____。

A.char s[5]={"hello"}; B.char s[5]={'h','e','l','l','o'};

C.char *s="hello"; D.char *s; scanf("%s",s);

(2)有如下程序段,叙述正确的是 _____。

char s[]="binhai"; char *p=s;

A.s指向一个字符串常量,不能修改其中的字符;

B.sizeof(s)和sizeof(p)相等;

C.s和p完全相同;

D.*p = = s[0]成立;

(3)定义char s[10];则下面表达式中不表示s[1]的地址的是_____。

A.s++ B.s+1

C.&s[1] D.&s[0]+1

(4)有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则数值不为9的表达式是____。

A.*p+8 B.*(p+8)

C.&a[9]-p D.p+8

(5)有以下程序

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

A.16 B.10

C.8 D.6

(6)有以下程序

main()

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

A.10 B.11

C.14 D.15

(7)有以下程序

下列叙述中正确的是____。

A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3

B.由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3

C.由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3

D.由于p和q数组中都没有字符串结束符,故长度都不能确定

(8)有以下程序

执行后输出结果是____。

A.10 B.9

C.7 D.8

(9)以下程序的输出结果为____。

A.ABCDEFGHIJKL B.ABCD

C.ABCDEFGHIJKLMNOP D.AEIM

2.填空题

(1)以下程序段的运行结果为__①__ 。

(2)以下函数sstrcat()的功能是实现字符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符串为efgh,函数调用后s所指字符串为abcdefgh。请填空。

(3)以下程序判断一个字符串是否为回文,回文即顺读和倒读一样的字符串,如level。请填空。

(4)函数f1,f2,f3,f4分别用于计算两整型数x和y的和、差、积、商。函数execute( )是完成这些计算的通用函数。请填空。

(5)请解释函数liw_strncpy( )的功能: __①__。

3.程序改错题

(1)下列给定程序中,函数inverse()的作用是:反转由s指向的字符串。请改正程序中的错误,使它能得到正确结果。

(2)下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。请改正程序中的错误,使它能得到正确结果。

4.编程题

(1)利用指针编写程序,求字符串的长度(不用strlen函数)。

(2)编写函数,求包含n个元素的整数数组的最大值、最小值及平均值。已知函数原型声明如下:

void getMaxMinAvg_1(int a[], int n, int *max, int *min, int *avg);

(3)编写函数,接受整数数组输入,动态分配内存,复制该数组,返回该内存首地址。

(4)编写函数,以指针为参数,从N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。

(5)编写函数接受一已排序的整数数组和一整数值,将该值插入到正确的位置。请思考:如何利用此函数设计一个选择排序函数。

(6)编写函数,接受一个字符串和一个字符,如果此字符出现在字符串中,就将串中的该字符删除,要求删除该字符后,后续的字符向前移,以填充该空位。

三、测试题

1.选择题

(1)有如下程序段

int a[ ]={1,2,3,4,5,6,7,8,9,10}, *p=a, i;

其中0≤i≤9,则对a数组元素的引用不正确的是( )。

A.a[p-a] B.*(&a[i])

C.p[i] D.*(*(a+i))

(2)有如下程序段

int a=10, *p=&a, b=1;

*p += b;

执行后,a的值为( )。

A.11 B.12

C.10 D.编译出错

(3)以下程序的输出结果是( )。

A.7 B.3

C.10 D.11

(4)以下程序段给数组元素输入数据

则下划线处应填入的是( )。

A.a+(i++) B.a+i(www.xing528.com)

C.&a[i+1] D.&a[++i]

(5)以下程序段的输出结果是( )。

A.1 B.2

C.3 D.4

(6)以下程序段的输出结果是( )。

A.99 B.字符‘c’

C.字符‘c’的地址 D.0

(7)以下程序段的输出结果是( )。

A.Morning B.Afternoon

C.Evening D.Night

(8)以下程序段的输出结果是( )。

A.2 4 B.2 2

C.4 4 D.4 6

(9)有如下定义

则能正确引用c数组元素的是( )。

A.1+p B.*(p+3)

C.*(p+1)+3 D.*(*p+2)

(10)有如下定义:

则不能正确表示a数组元素的是( )。

A.*(*(ptr+3)+2) B.(*(p+1))[1]

C.p[0][0] D.ptr[2][2]

(11)已知函数fun的调用语句:

则正确的函数声明为( )。

A.void fun(int m, int a[ ]); B.void fun(int n, int a[15]);

C.void fun(int, int *); D.void fun(int, int);

(12)若有下面的程序段:

则下列叙述正确的是( )。

A.s和p完全相同

B.数组s中的内容和指针变量p中的内容相等

C.s数组长度和p所指向的字符串长度相等

D.*p与s[0]相等

(13)有以下函数定义:

函数的返回值是( )。

A.无确切的值 B.形参p自身的地址

C.形参中存放的地址值 D.一个临时存储单元地址

(14)若要从键盘读入含有空格的字符串,应使用的函数是( )。

A.getc( ) B.gets( )

C.getchar( ) D.scanf( )

(15)若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是( )。

A.a, point, *&a

B.&*a, &a, *point

C.*&point, *point, &a

D.&a, &*point, point

(16)有以下函数:

A.计算str1和str2所指字符串的长度差

B.将str2所指字符串复制到str1所指的字符串中

C.比较字符串str1和字符串str2的大小

D.将str2所指字符串连接到str1所指的字符串后

(17)不合法的main函数参数的表示形式是( )。

A.main(int a, char *c[ ]) B.main(int argc, char **argv)

C.main(int argc, char *argv) D.main(int argc, char *argv[ ])

(18)以下函数的功能是( )。

A.求字符串的长度

B.比较两个字符串的大小

C.将字符串str1复制到字符串str2中

D.将字符串str1连接到字符串str2后

(19)以下选项中正确的语句是( )。

A.char s[]; s="book"; B.char *s; s={"book"};

C.char s[10]; s="book"; D.char *s; s="book";

(20)以下定义

int (*ptr)( );

叙述正确的是( )。

A.ptr是指向一维数组的指针变量

B.ptr是指向int类型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int类型的数据

D.ptr是一个函数名,该函数返回值类型为int

(21)有如下程序

该程序的输出结果是( )。

A.1 B.-1

C.0 D.NULL无定义

(22)若有以下定义和语句:

则以下选项中错误的是( )。

A.*q = 0 B.w = p

C.*p = a D.*p = *w

(23)有如下程序

程序运行时的输出结果为( )。

A.a,B,a,B B.A,b,A,b

C.B,a,B,a D.b,B,A,b

(24)设有定义:char p[]={'1','2','3'},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是( )。

A.sizeof(p) B.sizeof(char)C.sizeof(*q) D.sizeof(p[0])

(25)有如下程序

程序运行时的输出结果为( )。

A.2 B.3

C.4 D.5

2.阅读程序写出运行结果

(1)下列程序的运行结果为( )。

(2)下列程序的运行结果为( )。

(3)下列程序的运行结果为( )。

(4)下列程序的运行结果为( )。

(5)下列程序的运行结果为( )。

3.以下程序的功能是将已知字符串s2拷贝到s1中。请填空。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈