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

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

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

        3.阅读下列程序,写出程序运行的输出结果。
     char s[]="ABCD";
  main()
    { char * p;
     for( p=s;p< s+4;p++) printf("%s\n", p);
    }
      【解]程序定义了一个字符数组s,由给它所赋的字符串初值知,该数组只有五个元素。程序另定义了字符指针变量p。循环开始时,先让p指向数组的首元素。循环每次输出以p所指字符为首字符的字符串,并让它指向下一个字符。如此反复循环四次,所以程序输出以下内容:
       ABCD
       BCD
       CD
       D

        4.阅读下列程序,试写出程序运行的结果。
     main()
     {int i,b,c,a[]={1,10,-3,-21,7,13},*p_b,*p_c;
     b=C=1;p_b=p_C= a;
     for(i=0;i<6; i++)
    { if(b<*(a+i)) {b=*(a+i); p_b=&a[i]; }
      if(c>*(a+i)) {c=*(a+i); p_c=&a[i]; }
    }
   i=*a;*a=*p_b;*p_b=i;i=*(a+5);*(a+5)=*p_c;*p_c=i;
    printf("%d,%d,%d,%d,%d,%d\n", a[O],a[1],a[2],a[3],   a[4], a[5]);
    }
      【解]程序定义了一个整型数组。,由给它所赋的初值知,该数组有六个元素。程序另定义了三个整型变量i.b、C和两个指针变量p_b.p_c。程序首先置变量b和C都为1,p_b和p_c都指向数组a 的首元素a[0]。接着执行六次循环,循环体由两个if语句。第一个if语句是当 b的值小于*(a+i)(就是a[i])时,将*(a+i)的值复制到b,并让p_b指向a[i]。这是在a中找最大值,将最大值存于b,最大值元素的指针存于指针变量p_b。第二个if语句是当c的值大于*(a+i)(就是a[i])时,将*(a+i) 的值复制到c,并让p_c指向a[i]。这是在a中找最小值,将最小值存于c,最小值元素的指针存于指针变量p_c。循环结束后的前三个语句实现最大元素与a[0]交换。接着三个语句是在已经过前面交换的基础上,将最小元与a[5]交换。最后程序顺序输出数组a的六个元素。所以程序输出内容是:
             13, 10,-3, l, 7,-21。
    若数组a的初值由输入任意指定,上述程序对一种特殊情况不能完成功能的要求,即最小元素若是a[0],p_c所指元素已被移到p_b指针所指位置,实际与a[5]交换的不再是数组中的最小元素,而是最大元素。

    5.4  程序设计题 
  
      1.输人3个整数,按从大到小顺序输出。
     【解】存储输入的三个整数可用三个简单变量,也可用数组。设用三个简单变量x,y,z存储输入的三个整数。另设若干个指针变量指向存储输入数据的变量。实现从大到小输出三个整数有多种方案,如通过比较交换变量的值,多次比较交换使变量满足条件x>=y>=z。这样,变量的输入值可能会与它的输出值不一样。如通过比较交换指针变量,当比较后发现要交换时,就交换变量的指针,而不交换变量的值,则在比较结束后,变量的值没有改变,但从指针方向来看,它们的值是从大到小排列的。下面的程序就采用这种方案。
      # include 
        main()
       { int x,y,z;
    int *big=&x,*mid=&y,*sma=&z,/*置三个指针变量分别指向x,y, z*/
    *temp;
     printf("Enter x,y,z.\n");
     scanf("%d%d%d", big,mid,sma);/*顺序为变量x,y,z输入值*/
  if(*big< *mid) {temp=big;big=mid; mid=temp; }/*使*big>=*mid*/
  if(*big<*sma) { temp=big;big=sma;sma=temp; }/*使*big>=*sma*/
  if(*mid<*sma){temp=mid;mid=sma;sma=temp; }/*使*mid>=*sma*/
  printf("%d\t%d\t%d\n", x,y,z);/*按输入顺序输出x,y,z*/
  printf("%d\t%d\t%d\n",*big,*mid,*sma);/*按从大到小的顺序输出*/
   }

          2.编一个程序,输入15个整数存入一维数组,再按逆序重新存放后再输出。
       【解】输入数组的元素,并重新颠倒存放后输出。将存储于数组中的元素颠倒存储,只要首尾相对应的元素两两交换即可。若用指针实现,可让一个指针p指向前端的元素,另一个指针q指向与前端元素对应的后端的元素。循环前,让p指向数组的首元素,让q指向数组的末元素。循环时,让p和q所指两个元素交换,并让p增1,q减l。循环条件是p所指元素在前,q所指元素在后,即p<q。程序如下:
        # include 
        main()
      { int a[15],*p,*q, temp;
       printf("Enter 15 numbers.\n");
       for(p=a;p<a+15;p++) 
       scanf("%d", p);
       for(p=a,q=a+14;p<q;P++,q--) { 
       temp=*p; *p=*q;*q=temp;
      }
      for(p=a;p      printf("%d\t",*p);
   printf("\n");
     }

          3.输入一个字符串,按相反的次序输出其中的全部字符。
      【解】要相反的次序输出字符串的全部字符,可用一个字符指针变量,从指向字符串的本字符开始,逆序遍历字符串,输出指针所指字符即可。但为了让字符指针指向字符串的末字符,若不用字符串处理库函数,得用一个循环,让它从字符串的首字符开始,顺序移至字符串的结束标记符,然后倒退一个字符,就能让它指向字符串的末字符。程序如下:
      # include
      # define N 200
      main()
     { char s[N],*p;
     printf("Enter a string.\n");
     scanf("%s", s);
     for(p=s;*p; p++);
     for(p--; p>=s; p--)
     printf("%c",*p);
     printf("\n");
     } 

          4.输入一个一维实型数组,输出其中的最大值、最小值和平均值。
      【解】设实型数组的元素个数n不超过20。程序输入n,并用循环输入数组的元素,再用循环遍历数组,求出数组的最大值和最小值、数组元素的和。然后求出数组元素的平均值,最后输出结果。程序如下:
        # include
       # define N 20
      main()
    { double a[N],max,min,ave,*p, t;
      int n;
      printf("Enter n(0<n<20).\n");
      do{
     scanf("%d",&n);
    if(n>0 && n<20) break;
    printf("n值不合要求,请重新输入!\n");
    } while(l);
    printf("输入%d个实数\n", n);
    for(n=a;n    scanf("%lf",&t);*p=t;
   } 
   max=min=ave=*a;
   for(p=p+l;p   if(max<*p) max=*p;
if(min>*p) min=*p;
 ave+=*p;
 }
 ave/=n;
  printf("最大值:%f\t最小值:%f\t平均值:%f\n",max,min,ave);
  }

           5.输入一个3×6的二维整型数组,输出其中的最大值、最小值及其所在的行列下标。
   【解】找出其最大值和最小值,及它们的行列位置。采用按行按列顺序遍历数组的方法找出数组的最大值、最小值,以及它们在数组中的位置指针。输出时,将位置指针转换成行下标和列下标。程序如下:
    # include 
    # define N 3
    # define M 6
    main()
   { int a[N][M],*maxp,*minp,*q,t;
   printf("输入%d个整数\n", N*M);
   for(q=a[0];q<*a+N*M;q++) {
   scanf("%d",&t);*q=t;
   }
   maxp=minp=*a; 
   for(q=a[0];q<*a+ N*M; q++) {
  if(*maxp<*q) maxp=q;
  if(*minp>*q) minp=q;
  }
   printf("最大值:%d它的行下标是%d它的列下标是%d\n",
  *maxp,(maxp-*a)/M,(maxp-*a)%M);
   printf("最小值:%d它的行下标是%d它的列下标是%d\n",
   *minp,(minp-*a)/M,(minp-*a)%M;
   }

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

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