首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 复习资料 > 软件设计师 > 正文

软考软件设计师课后练习题:第五章习题及解答

来源:考试吧Exam8.com) 2006-12-11 8:03:46 考试吧:中国教育培训第一门户 模拟考场

      8.设有定义“char a[10]={"abcd"},*p=a;",则*(p+4)的值是(  )
    ①"abCd"              ②’d’
    ③’\0’              ④不能确定
 【  解】若有char a[10]="abcd",*p=a,则指针变量p指向a[0]。在表达式*(p+4)中,p+4指向a[4],*(p+4)就是a[4]。由于用字符"abcd" 给字符数组a赋初值,a[4]的值是字符串结束标记符’\0’。所以解答是③。

       9.设有代码"int(*ptr)[10];”,其中的ptr是(  )
    ①10个指向整型变量的指针
    ②指向10个整型变量的函数指针
    ③一个指向具有10个元素的一维数组的指针
    ④具有10个指针元素的一维数组
     【解】代码“int(*ptr)[10];”的分析过程是,因圆括号,括号内的ptr先与字符*结合,字符*修饰标识符ptr是一种指针;接着与后面的一对方括号结合,表示是这样的一种指针,是指向一维数组的;再有方括号中的10,说明这种数组有10个元素。至此,ptr是指向含10个元素的
一维数组的指针。最后,是最前面的int,表示数组元素是int类型的。所以,ptr是一个指向具有10个int型元素的一维数组的指针。所以解答是③。另外,要是①,10个指向整型变量的指针,就是一个指针数组,上述代码应写成“int *ptr[10];”,即ptr是一个有10个指向整型变量的数组。要是②,返回值是指向10个整型变量的函数的指针,上述代码应写成“int(*(*ptr)())[10];”,即ptr是指针,指向一种函数,函数的返回值又是一种指针,指向10个元素的数组,数组的元素是整型的。下面的代码是这样的函数指针和函数的例子:
        # include 
    int a[][10]={{1,2,3,4,5,6,7,8,9,0} ,{0,1,2,3,4,5,6,7,8,9} };
     int(*(*ptr)(int))[10];
     int(*f( int n))[10] 
     {return a+n;
      } 
    void main()
    { int(*p)[10],*q;
      ptr=f;/*让ptr指向函数f*/
      P=(*ptr)(0); 
   q=*p;
      printf("%d\n", *p);
     P=(*ptr)(l);
     q=*p;
     printf("%d\n", *q);
     }
    在上述代码中,函数有一个int型的形参。要是④,其意义与①相同,上述代码应写成“int* ptr[10];”,即 ptr是一个有10个元素的数组,数组元素是指向整型变量的指针。

        10.若有以下定义,则数值为4的表达式是(  )
     int w[3][4]={{0,1},{2,4},{5,8}},(* p)[4]= W;
                   ①*w[1]+l          ②p++,*(p+1)           ③w[2][2]                ④p[1][1]
      【解】二维数组定义有多种赋初值的办法,问题给出的代码是按行给数组的部分元素赋初值。它们分别是w[0][0]=0.w[0][1]=1、w[1][1]=2.w[1][1]=4,w[2][0]=5,w[2][1]=8。根据约定,未指定初值的元素自动置全0值。指针变量p是一个指向具有四个int型元素的一维数组的指针,定义时的初值使它指向数组W的第一行。①的代码,*w[1]+1中的W[l]是指向 w[l][0]的指针,*w[1] 就是w[1][0],其值是2,*w[1]+l的值是3。②的代码是逗号表达式,“p++,*(p+1)”先使p指向数组w的第二行,*(p+l)中的p+l是指向数组w的第三行,*(p+1)是指针值,指向数组w的第三行的第一个元素,即&w[2][0]. ③的代码w[2][2]引用数组W第三行的第三列元素,其值是0。④的代码p[1][l]引用数组W第二行的第二列元素w[1][1],其值是 4。所以解答是@。

         11.若有下面的程序片段,则对数组元素的错误弓D用是(  )
        int a[12]={0},*p[3],* *pp,i;
        for( i=0;i<3;i++) p[i]=&a[i+4];
        pp= P;
    ①pp[0][1]            ②a[10]
    ③ p[3][l]           ④*(*(p+2)+2) 
        【解】上述代码定义变量a是有12个整型元素的数组,它的初值全是0。p是有三个元素的指针数组,每个指针能指向整型变量。哪是指针的指针,它能指向一个指向整型变量的指针, i是一个整型变量。执行代码for(i=0;i<3;i++) P[i]=&a[i+4] 使指针数组 p的元素 p[0]指向 a[4] ,p[l]指向a[5] ,p[2]指向 a[6]。代码pp=p使指针变量pp指向p[0]。①代码pp[0][l] 用指针表达可等价地写成*(*pp+l)。其中*pp就是 p[0],p[0]的值是&a[4],*pp+1的值是&a[4]+1=&a[5],*(*pp+1)就是a[5]。②代码a[l0] 当然是引用数组a的元素。③代码p[3][1]数组p只有三个元素,没有p[3],所以是错误的。④代码*(*(p+2)+2)中的(p+2)是 &p[2],*(p+2)是 p[2],其值是&a[6],*(p+2)+2的值是&a[8],*(*(p+2)+2)引用的是a[8]。所以解答是@。

        12.若有如下定义和语句,则输出结果是(  )
        int * *pp, *p,a=10,b=20;
       PP=&p; P=&a; P=&b; printf("%d%d\n",*p,* *PP);
    ①10, 20                 ② 10, 10                
    ③ 20, 10                 ④ 20, 20
      【解】上述代码定义变量pp是指针的指针,它能指向一个指向整型变量的指针。定义变量p是指针,它能指向一个整型变量。a是一个整型变量,它有初值10。b也是一个整型变量,它有初值20。代码 pp=&p 使pp指向p,p=&a使p指向a,p=&b又使p指向b,不再指向a。所以。p是引用b,其值为20。* *pp是通过pp间接引用p,再通过p间接引用b,所以也是20。所以解答是④。

    13.若有以下定义和语句,则对w数组元素的非法引用是(  )
    int w[2][3],(* pw)[3]; pw= w;
    ① *(w[0]+2)              ②*pw[2]          
    ③pw[0][0]             ④*(pw[l]+2) 
        【解】上述代码定义2行3列的二维数组w,定义能指向有3个整型元素一维数组的指针pw,并让pw指向数组w的第一行。①代码*(w[0]+2)中的w[0]是&w[0][0],w[0]+2是&w[0][2],所以*(w[0]+2)就是w[0][2]。②代码*pw[2]中的pw[2]是&w[2][0],该数组w只有2行,没有w[2][0],所以代码*pw[2]是对数组W元素的非法引用。③代码pw[0][0]就是w[0][0]。④代码*(pw[l]+2)中的pw[1]就是*(pw+l),即&w[l][0],pw[l]+2就是&w[l][2],所以*(pw[1]+2)就是w[1][2]。所以解答是②。 
  
    5.2    填充题 
  
    1.“* ”称为___________运算符,“&”称为_________运算符。
      【解】单目运算符“*”称为取内容运算符,单目运算符“&”称为取地址运算符。

         2.若两个指针变量指向同一个数组的不同元素,可以进行减法运算和___________运算。
      【解】若两个指针变量指向同一个数组的不同元素,可以进行减法运算求它们所指元素相差多少元素。进行关系运算,判定它们所指元素的前后,或是否指向同一个元素等。

           3.设 int a[10] ,*p=a;则对a[3]的引用可以是p[______________] 和*(p_________)。
     【解】若指针p指向数组a的首元素,则引用a[3]用指针p可以写成p[3]和*(p+3)。

           4.若d是已定义的双精度变量,再定义一个指向d的指针变量p的代码是___________。
     【解】若d是一个双精度变量,定义能指向它的指针变量p可以用以下代码double *p=&d。

            5.&后跟变量名,表示该变量的_________;*后跟指针变量名,表示该指针变量_______。&后跟的是指针变量名,表示该指针变量的_____________。
      【解】单目运算符&是取地址运算符,&后跟变量名,就表示该变量的地址。单目运算符*是取内容运算符,*后跟指针变量名,表示该指针变量所指变量的内容。若&后跟的是指针变量名,就表示该指针变量的地址。若知道指针变量的地址,欲通过指针变量的地址引用指针变量所指变量的内容,需要连续两次取内容运算。

          6.设有char *a="ABCD",则printf("%s",a)的输出是_______;而printf("%c",*a)的输出是______。
    【解】若给字符指针变量a赋一个字符串常量"ABCD",实际上是给a赋指向字符串常量首字符’A’的指针。程序通过它访问字符串中的各字符。如用代码printf("%s",a) 输出这个字符串常量"ABCD"的字符列ABCD,用代码printf("%c",*a)输出a所指的字符 A。

           7.设有以下定义和语句,则*(*(p+2)+l)的值为__________。
      int a[3][2]={10,20,30,40,50,60},(*p)[2];
      p= a;
    【解】上述代码定义3行2列的二维数组a ,定义指向两个元素的一维数组指针p,并让p指向二维数组a的首行。则代码*(*(p+2)+l)中的p+2指向二维数组a的第2行a[2],*(p+2)指向a[2][o],*(p+2)+l指向a[2][l],*(*(p+2)+l)是引用a[2][l],其值是60。

        8.以下程序的功能是从键盘上输入若干个字符(以回车符作为结束)组成一个字符串存入一个字符数组,然后输出该字符数组中的字符串。请填空。
       # include 
       # include 
       main()
      { char str[81],*sptr;
        int i;
        for(i=0;i<80;i++)
      { str[i]=getchar();if(str[i]==’\n’) break;}
        str[i]=____________;
        sptr=str;
        while(* sptr) putchar(* sptr______________);
      }
        【解】从键盘输入字符行,通过循环逐一输入字符,当发现输入字符是换行符时,结束循环。为了使输入的字符列变成字符串,必须在输入字符列之后,原存储换行符的元素改为存储字符串的结束标记符,需用代码 str[i]=’\0’ ,所以在第一框填入代码’\0’。当要将存于字符数组str中的字符串通过循环逐一输出字符串的字符时,可以用字符指针sptr,让sptr遍历整个字符串,每次循环时,输出sptr所指字符,并让sptr增1,即可用代码*sptr++实现,所以在第二框填入代码++。 
  
    5.3  程序分析题 
  
1.阅读下列程序,写出程序的输出结果。
    main() 
    {char *a[6]={"AB","CD","EF","GH",U","KL"};
     int i;
     for(i=0;i<4;i++) printf("%s", a[i]);
     printf("\n");
   }
      【解】程序定义了有六个元素的字符指针数组a ,数组a 的各元素指向字符率常量。程序的for循环遍历了a的前四个元素,用字符率输出格式,输出指针数组a前四个元素所指的字符串。所以程序输出: ABCDEFGH。

        2.阅读下列程序,写出程序的主要功能。
    main()
    { int i,a[l0],*p=&a[9] ;
     for(i=0;i<10;i++) scanf("%d",&d[i]);
     for(; p>=a; p--) printf("%d\n",*p) ;
    }
        【解】程序定义了有10个元素的整型数组a,另定义指针变量p,并让它指向a的最后一个元素a[9]。执行代码的第一个循环是顺序输人数组a的10个元素。第二个循环利用指针p逆序遍历数组a,将数组a的各元素逆序输出。所以程序的功能是输入10个整数,并逆序输出这10个整数。

更多软考资料请访问:考试吧软件水平考试栏目

上一页  1 2 3 4 5 下一页
文章搜索
软件水平考试栏目导航
版权声明:如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。