第44练 第8章 指针与二维数组《C语言程序设计》(电子工业出版社)一课一练

| 2份
| 6页
| 38人阅读
| 0人下载

内容正文:

编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第44练,内容涵盖第8章指针的8.3.2 指针与二维数组。 《C语言程序设计》(电子工业出版社)一课一练 第44练 第8章 指针 8.3.2 指针与二维数组 1、 单项选择题(本题共4小题) 1、已知int b[2][2];,下列表达式中与b[1][1]等价的是( ) A. *(b[1]+1) B. *(b+1+1) C. b+1+1 D. *b[1+1] 【答案】A 【解析】根据二维数组的指针访问规则,b[i]+j是第 i 行第 j 列元素的地址,*(b[i]+j)等价于b[i][j],因此*(b[1]+1)就是b[1][1];选项 B 是对第 2 行首地址取值,无意义;选项 C 是第 2 行首地址,不是元素值;选项 D 中b[2]超出数组范围,错误。 2、要定义一个指向int型 2 列二维数组的指针变量p,正确的定义语句是( ) A. int *p[2]; B. int (*p)[2]; C. int p[2][2]; D. int *p; 【答案】B 【解析】指向二维数组的指针变量定义必须加括号(*p),表示p是指针,[2]表示指向的一维数组长度(即二维数组列数);选项 A 是指针数组,每个元素是int型指针;选项 C 是普通二维数组;选项 D 是普通 int 型指针,均不符合要求。 3、对于二维数组int b[2][2],表达式b[0]的含义是( ) A. 第 0 行第 0 列元素的值 B. 第 0 行的首地址 C. 第 0 行第 0 列元素的地址 D. 整个二维数组的首地址 【答案】C 【解析】根据知识点,b[i]等价于*(b+i),也等价于&b[i][0],即第 i 行第 0 列元素的地址;选项 A 需要用*b[0]获取;选项 B 是b+0的含义;选项 D 是b的含义。 4、已知二维数组int b[2][2]的首地址是 3000(int型占 2 字节),表达式b+1的地址值是( ) A. 3001 B. 3002 C. 3004 D. 3006 【答案】C 【解析】b+i表示第 i 行的首地址,一行有 2 个int型元素,共占2*2=4字节,因此b+1的地址为3000+4=3004;指针偏移量由行的总字节数决定,不是单个元素的字节数。 2、 判断题(本题共3题) 1、定义指向二维数组的指针变量时,(*p)中的括号可以省略,写成int *p[2];也能实现相同功能。( ) 【答案】× 【解析】省略括号后int *p[2];定义的是指针数组,每个元素是int型指针,和指向二维数组的行指针意义完全不同,括号是区分两者的关键,不能省略。 2、对于二维数组int b[2][2],表达式b和b[0]的地址值相同,但代表的含义不同。( ) 【答案】√ 【解析】b是行指针,指向整个第 0 行;b[0]是列指针,指向b[0][0],两者的地址值都是数组的首地址,但类型和指向的对象不同,含义有区别。 3、表达式*(b+i)和b[i]都是表示第 i 行第 0 列元素的值。( ) 【答案】× 【解析】*(b+i)等价于b[i],表示的是第 i 行第 0 列元素的地址,要获取元素值需要在前面加*,即*b[i]或**(b+i)才是b[i][0]的值。 3、 填空题(本题共2题) 1、定义一个指向float型、列数为 3 的二维数组的指针变量p,正确的定义语句是____。 【答案】float (*p)[3]; 【解析】该定义符合二维数组指针变量的规范格式,括号确保p是指针类型,[3]表示指针指向的一维数组长度(即二维数组的列数)。这个格式能让p正确指向列数为 3 的float型二维数组的行首地址。 2、对于二维数组int b[3][4],表达式b+2等价于____,表示的是二维数组第 2 行的首地址。 【答案】&b[2] 【解析】根据二维数组的地址规则,b+i和&b[i]是等价的,两者都表示第 i 行的首地址。它们的类型都是行指针,指向的是整个一维数组(一行元素)。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> int main() { int b[2][2] = {{0,1},{6,8}}; int (*p)[2] = b; printf("%d, %d", *(*p+1), *(*(p+1)+1)); return 0; } 【答案】 程序运行结果: 1, 8 【解析】 p是指向 2 列二维数组的行指针,初始指向数组第 0 行;*p+1是第 0 行第 1 列元素的地址,*(*p+1)取值为 1。p+1指向数组第 1 行,*(p+1)+1是第 1 行第 1 列元素的地址,*(*(p+1)+1)取值为 8,因此最终输出对应结果。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:考虑到中职学生普遍基础知识相对薄弱的情况,我们依据支架式教学理念,精心编制了《C语言程序设计》(电子工业出版社)一课一练。专辑里的每一份练习,都与课堂所授知识点紧密相关,题目围绕课堂所学知识点呈现。目的在于激发学生的学习兴趣,培养他们的学习自觉性,帮助学生扎实掌握课程的基本概念与基本方法,为他们后续的进一步提升奠定坚实基础。 本卷是《C语言程序设计》(电子工业出版社)一课一练的第8章的第44练,内容涵盖第8章指针的8.3.2 指针与二维数组。 《C语言程序设计》(电子工业出版社)一课一练 第44练 第8章 指针 8.3.2 指针与二维数组 1、 单项选择题(本题共4小题) 1、已知int b[2][2];,下列表达式中与b[1][1]等价的是( ) A. *(b[1]+1) B. *(b+1+1) C. b+1+1 D. *b[1+1] 2、要定义一个指向int型 2 列二维数组的指针变量p,正确的定义语句是( ) A. int *p[2]; B. int (*p)[2]; C. int p[2][2]; D. int *p; 3、对于二维数组int b[2][2],表达式b[0]的含义是( ) A. 第 0 行第 0 列元素的值 B. 第 0 行的首地址 C. 第 0 行第 0 列元素的地址 D. 整个二维数组的首地址 4、已知二维数组int b[2][2]的首地址是 3000(int型占 2 字节),表达式b+1的地址值是( ) A. 3001 B. 3002 C. 3004 D. 3006 2、 判断题(本题共3题) 1、定义指向二维数组的指针变量时,(*p)中的括号可以省略,写成int *p[2];也能实现相同功能。( ) 2、对于二维数组int b[2][2],表达式b和b[0]的地址值相同,但代表的含义不同。( ) 3、表达式*(b+i)和b[i]都是表示第 i 行第 0 列元素的值。( ) 3、 填空题(本题共2题) 1、定义一个指向float型、列数为 3 的二维数组的指针变量p,正确的定义语句是____。 2、对于二维数组int b[3][4],表达式b+2等价于____,表示的是二维数组第 2 行的首地址。 4、 读程序写结果题(本题共1题) 1、阅读下面的 C 语言程序,写出程序运行后的输出结果。 【程序代码】 #include <stdio.h> int main() { int b[2][2] = {{0,1},{6,8}}; int (*p)[2] = b; printf("%d, %d", *(*p+1), *(*(p+1)+1)); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第44练 第8章 指针与二维数组《C语言程序设计》(电子工业出版社)一课一练-第1页
1

由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。