好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

练习题8及参考答案.docx

7页
  • 卖家[上传人]:天****步
  • 文档编号:291952509
  • 上传时间:2022-05-13
  • 文档格式:DOCX
  • 文档大小:18.33KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 本文格式为Word版,下载可任意编辑练习题8及参考答案 练习题8及参考答案 1. 单项选择题 (1)有以下定义和赋值语句中,正确的是 A. static char str[8]=\C. char *p=\ 【答】选项在定义字符指针变量的同时初始化为指向字符串常量的第一个字符此题答案为C (2)已知变量a已定义为int型变量,以下定义并初始化指针变量p的语句中正确的是 A. int *p=a; B. int *p=*a; C. int p= D. int *p= 【答】D (3)以下表达正确的是 A. 数组名实际上是此数组的首地址,所以数组名相当于一个指针变量 B. 若定义数组 a[2][3],那么a+1和*(a+1)完全相等 C. 若定义数组 a[2][3],那么++a和a[1]完全等价 D. 某函数的形参为一个数组,那么调用此函数时只能将数组名作为对应的实参 【答】选项A是错误的,数组名确实是数组的首地址,但它的值是一个常量,不成变更;选项B是正确的,在二维数组中,若a为数组名,那么a+i和*(a+i)同样表示此数组第i行的首地址,所以完全相等,参见《C程序设计教程》的表8.1;选项C是错误的,数组名是数组的首地址,是一个常量,不能执行++运算;选项D是错误的,某函数的形参为一个数组,调用此函数时可将数组名作为对应的实参,也可以将相应的指针变量作为对应的实参。

      此题答案为B (4)有这样的定义float *p[4];那么下面的表达中正确的是 A. 此定义不正确,形如char *p[4];的定义才是正确的 B. 此定义正确,p是指向一维实型数组的指针变量,而不是指向单个实型变量的指针变量 C. 此定义不正确,C语言中不允许类似的定义 D. 此定义正确,定义了一个指针数组 【答】其中正确答案为D该语句中,“[]”的优先级最高,所以p是一个数组,其次是float *,进一步表示p数组中每个元素为指向float型数的指针 (5)若有以下定义语句: static int a[2][3]={1,3,5,7,9,11}; int m,n; 且0≤m≤1,0≤n≤2,那么 是对数组元素的正确引用 A. a[m]+n B. *(a+5) C. *(*(a+m)+3) D. *(*(a+m)+n) 【答】*(*(a+m)+n)等价于a[m][n]此题答案为D (6)有如下函数: fun(int *p1,int *p2) { int *p; *p=*p1; *p1=*p2; *p2=*p; } 其功能为 。

      A. 正确,但无法变更*p1和*p2的值 B. 能够告成交换*p1和*p2的值 C. 能够告成交换*p1和*p2的地址 D. 能够告成交换p1和p2的值 【答】该函数交换了*p1和*p2的值,若以fun(语句调用该函数,那么交换了a和b的值此题答案为B (7)下面各语句行中,能正确举行字符串赋值操作的是 A. char st[4][5]={\C. char *s;s=\ 【答】首先可以摈弃选项A,因其形式不对也可以摈弃选项B,由于字符数组的长度不够,没有考虑字符串终止符选项D也是错误的,其错误的理由是:在这两条语句中,只确定了指针变量p本身在内存中的地址,但p所指的值没有确定所以,只有选项C是正确的,C语言中规定可以给字符指针单独赋值此题答案为C (8)执行以下程序段后,m的值为 static int a[2][3]={1,2,3,4,5,6}; int m,*ptr= m=(*ptr)*(*ptr+2)*(*ptr+4); A. 15 B. 48 C. 24 D. 无定值 【答】*ptr=1,*ptr+2=3,*ptr+4=5,m=1*3*5=15。

      此题答案为A (9)设有定义: static a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*prt)[3]=a,*p=a[0]; 那么以下能够正确表示数组元素a[1][2]的表达式是 A. *((*prt+1)[2]) B. (2)*(*(p+5)) C. (*prt+1)+2 D. *(*(a+1)+2) 【答】a是一个二维数组int (*prt)[3]=a定义中,由于有括号,“*”优先级高,即prt是一个指针,后面有“[3]”,表示prt是一个包含三个元素的数组的指针int *p=a[0]的初始化中,表示p是一个整数指针变量,指向a数组的第一行的第一个元素即a[0][0] 用prt表示a[1][2]的各种方式如下: *(prt[1]+2) *(*(prt+1)+2) (*(prt+1))[2] prt[1][2] 再看以上各种表达式: 选项A、C鲜明是错误的;选项B中,p+5指向a[0][5],执行两次“*”断定是错误的;选项D是正确的,由于a是常量,是数组的首地址,*(a+1)指向其次行, *(*(a+1)+2)表示其次行的第三个元素,即a[1][2]。

      此题答案为D (10)若有定义char s[3][4];以下对数组元素s[i][j]的各种引用形式中正确的是 A.*(s+i)[j] B.*( int (*p)[4]=a; printf(\} 那么以下说法中正确的是 A. 输出结果为:0 B. 输出结果为:6 C. 输出结果为:0,6 D. 将输出数据元素的地址而不是数据元素的值 【答】程序中先给静态数组a的前两行元素赋了初值,第三行元素取默认值0在语句int (*p)[4]=a;中,定义了一个二维数组指针,并将a的首地址赋给它在表达式*(p+1)[1]中,[]的优先级最高,*(p+1)[1]等价于*(*(p+1+1))=*(*(p+2)),即为a数组第三行的第一个元素所以输出为0因此,只有A是正确的 (12)以下程序的运行结果是 #include main() { static int a[]={5,3,7,2,1,5,4,10}; int s=0,k; for (k=0;k main() { int a[]={1,2,3,4,5,6}; int x,y,*p; p= x=*(p+2); y=*(p+4); printf(\} A. 1,3,5 B. 2,4,6 C. 1,1,1 D. 3,3,3 【答】A (14)以下程序的运行结果是 。

      #include main() { int a[]={1,2,3,4,5,6}; int *p=a; printf(\ printf(\ printf(\ printf(\ p+=3; printf(\} A. 1,2,3,3,2,1 B. 1,2,3,3,5,4 C. 1,3,5,3,3,3 D. 1,3,5,5,3,1 【答】B (15)以下程序的运行结果是 #include main() { char str[2][5]={\ int i,j,s=0; for (i=0;i'0' j+=2) s=10*s+a[i][j]-'0'; printf(\} A. 7496 B. 70936 C. 74936 D. 704936 【答】A (16)以下程序的运行结果是 。

      #include main() { static char c[]=\ char *p=c; while (*p) printf(\ printf(\} A. china B. CHINA C. ch D. 【答】B (17)以下程序的运行结果是 #include main() { char *pp[2][3]={\ printf(\ printf(\ printf(\ 陷入死循环 printf(\ printf(\} A. mawz,defgh B. mawz,mnopqr C. adim,defgh D. adim,mnopqr 【答】B (18)以下程序的运行结果是 #include int fun(int x,int y) { return(y-x); } main() { int a=5,b=6,c=2; int (*g)(int,int); g=fun; c=(*g)(a,b); printf(\} A. 1 B. 2 C. 3 D. 以上都不对 【答】A 2. 填空题 (1)有以下定义: char s[3]=\char *p; 在执行了语句p=s;之后,*(p+2)的值是 。

      【答】字符数组s长度为2,但在内存中占有3个字节,第3个字节是字符串终止符'\\0',所以*(p+2)的值是'\\0' (2)以下程序的运行结果是 #include main() { int a[4]={0,1,2,3},*p; p= printf(\} 【答】p指向a[2],对于表达式*--p,先计算--p,返回a[1]的指针,再计算*运行,返回a[1]此题答案为:1 (3)以下程序的运行结果是 #include main() { 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.