一、思考题
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.选择题
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中。请填空。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。