会计考友 发表于 2012-8-2 09:08:23

2011软考软件设计师练习题:第七章及解答

 7.1单项选择题
  1.设有定义"struct {int x;int y;} d={{1,3},{2, 7}};",则
  printf("%d\n", d.y/d.x*d.x);的输出是(   )
  ①O            ②l
  ③3            ④6
  【解】结构数组d有两个结构元素,每个结构又由两个整型成分组成,初始化后,d.x=1,d.y=3,d.x=2。所以表达式d.y/d.x* d.x的值是 6。所以正确解答是④。
  2.设有定义"enum term { my, your=4, his, her=his+10};",则
  printf("%d,%d,%d,%d\n",my, your, his, her);
  的输出是(   )
  ①0,l,2,3             ②0,4,0,10
  ③0,4,5,15            ④1,4,5,15
  【解】按枚举类型定义的规定,枚举类型team的枚举常量对应的整数分别是my=0、your=4、his=5、her=15。所以语句输出0,4,5,15。正确解答是③。
  3.以下对枚举类型名的定义中,正确的是()
  ①enum a ={one,two,three};
  ② enum a{a1, a2,a3};
  ③enum a ={’1’,’2’,’3’};
  ④ enum a {"one","two","three" };
  【解】枚举类型定义的句法是:
  enum   枚举类型名 {枚举类型常量1,枚举类型常量2,……};
  其中枚举类型常量都是互不相同的标识符。所以定义enum a {a1,a2,a3 };
  是一个正确的定义。任何在枚举类型名之后接上 =,或用字符常量,或用字符串常量作为枚举类型常量都是不正确的定义。解答应是②。
  4.若有如下定义,则 printf("%d\n", sizeof(them));的输出是()
  typedef union { lOng x;int y;char z;} MYTYPE;MYTYPE them;
  ①32            ②16            ③8             ④24
  【解】共用型变量的成分是覆盖存储,为共用型变量分配存储时,以其中需要最多存储字节的成分进行分配。设long型数据占4个字节、int型数据占2个字节。共用型MYTYPE有三个成分,第一个成分是有两个long型元素的数组,它需要8个字节;第二个成分是有4个int型元素的数组,它也需要8个字节;第三个成分是有8个字符元素的数组,也是8个字节。所以MYTYPE类型的共用型变量只需要8个字节。正确解答是③。
  5.设有以下说明和定义:
  typedef union {long i;int k; char c;} DATE;
  struct date {int cat; DATE cow; double dog;} too;
  DATE max;
  则下列语句的执行结果是()
  printh("%d",sizeof(struct date)+sizeof(max));
  ① 26               ② 30
  ③ 18                  ④ 8
  【解】设long型数据占4个字节、int型数据占2个字节,double数据占8个字节。共用型DATE有三个成分:long型成分i,有五个int型元素的数组k,char型成分 c。所以 DATE类型的变量需要10个字节。结构类型date有三个成分:int型成分cat,DATE共用类型cow, double型成分dog。所以结构类型 date需要20个字节。所以表达式 sizeof(struct date)+sizeof max的值是30。正确解答是②。
  6.根据下面的定义,能打印出字母M的语句是()
  struct person {char name; int age; };
  struct person c = {{"John",17 },{"Paul",19 },{"Mary",18 },{"Adam",16 }};
  ① printf("%c", c.name);      ② printf("%c", c.name );
  ③printf("%c",c.name);      ④printf("%c",c.name );
  【解】结构类型struct person有两个成分:九个元素的字符数组name和一个基本整型age。元素类型为 struct person的数组c有10个元素,其中前四个元素被设定了初值。在已设定初值的元素中,只有c.mame的值是字符M。其余元素及元素的成分都不是字符比正确解答是④。
  7.设有如下定义,则对data中的a成员的正确引用是()
  struct sk{int a;float b;} data,*p= & data;
  ①(*p).data.a      ②(*p).a      ③ p -> data.a       ④ p.data.a
  【解】结构变量data有两个成分a和b。结构指针变量p指向结构变量data。引用结构变量data的成分a有两种方法:一是直接由变量data引用其自己的成分a,写成data.a;二是通过指针变量p引用它所指的结构的成分a,这又有两种写法,分别是p -> a和(*p).a。正确解答是②。

会计考友 发表于 2012-8-2 09:08:24

2011软考软件设计师练习题:第七章及解答

  7.2填充题
  1.运算符"."称为__________运算符,运算符" -> "称为__________运算符。
  【解】引用结构变量或共用型变量的成分用成员运算符’.’,若某指针指向一个结构变量或共用型变量,通过指针引用它所指变量的成分用指向成员运算符’ -> ’。
  2.设有定义"struct {int a; float b; char c;} abc,*p_abc=&abc;",则对结构体成员a的引用方法可以是abc_________a和p_abc___________a。
  【解】若有结构变量abc有成分a,并有指针p_abc指向结构变量abc,则引用变量abc成分a的标记形式有abc.a和p_abc ->a。
  3.若有以下说明和定义语句,则变量W在内存中所占的字节数是__________。
  union aa {float x;float y; char c; };
  struct st { union aa v; float w; double ave; } w;
  【解】共用型aa有三个成分,一个是float型成分x,一个是float型成分y,再一个是有六个元素的字符数组。若float型数据占4个字节,则类型aa数据要占用6个字节。结构变量w有三个成分,一个是共用型成分aa,要占用6个字节;一个是有5个float型元素的数组w,要占用20个字节;再一个是double型的ave。若doube型数据要8个字节,则结构变量w要占用34个字节。
  7.3    程序分析题
  1.阅读下列程序,写出运行结果。(字符0的ASCII码为十六进制的30)
  main()
  { union { char c; char i; } z;
  z.i= 0x39;z.i= 0x36;
  printf("%c \n", z.c);
  }
  【解】共用型变量z有两个成分,一个是字符型的c,另一个是有4个字符的数组i。由于共用型的成分是覆盖存储,成分c的内容也是成分i的首元素。程序给Z的i成分的首元素置十六进制代码0x39,即十进制数57。数57是字符’9’的ASCII代码。用字符输出格式,输出该变量的值,将输出字符’9’ 。
  2.阅读下列程序,写出程序的运行结果。
  main ()
  { struct student
  { char name;
  float k1;
  float k2;
  } a={ {"zhang", 100,70} ,{"wang",70,80 } },* p=a;
  int i;
  printf("\nname:%s total=%f",p ->name,p -> k1+p -> k2);
  printf("\nname:%s total=%f",a.name, a.k1+a.k2);
  }
  【解】结构数组a 有两个元素,每个元素有三个成分:10个元素的字符数组和两个类型为float的成分k1、k2。结构指针变量p指向结构数组a的首元素。其中初始化使a的两个元素分别有值如下:
  a.name="zhang",a.k1= 100.0,a.k2=70.0,
  a.name="wang",
  a.k1=70.0, a.k2 =80.0。所以程序运行后输出:
  name:zhang total = 170.000000
  name: wang total= 150.000000
  3.阅读下列程序,写出程序的运行结果。
  main ( )
  { enum em { em1=3, em2=l, em3 };
  char * aa[] = {"AA","BB","CC","DD" };
  printf("%s%s%s\n",aa,aa, aa );
  }
  【解】由枚举类型测的定义知,枚举类型常量em1的值是3,枚举类型常量em2的值是1,枚举类型常量em3的值是2。所以程序运行后输出:
  DD BB CC
  7.4   程序设计题
  1.用结构体存放下表中的数据,然后输出每人的姓名和实发工资( 基本工资+浮动工资-支出)。
  姓名   基本工资(元) 浮动工资(元)   支出(元)
  Li   220.00       300.00         90.00
  Xia    370.00       180.00         60.00
  Wang   620.00       0.00         70.00
  【解】程序定义struct person结构类型,包含人的姓名( base=d;
  scanf("%f",&d); p -> ds=d;
  scanf("%f", &d ); p -> pay= d;
  }
  for(p = person; p< person+n; p++)

会计考友 发表于 2012-8-2 09:08:25

2011软考软件设计师练习题:第七章及解答

  printf("%s %.2f\n",p-> name,P->base+p->ds-P -> pay);
  }
  2.编一个程序,输入10个职工的编号、姓名、基本工资、职务工资,求出其中“基本工资十职务工资”最少的职工姓名并输出。
  【解】类似上一程序,直接给出程序如下:
  # include
  # define N 10
  struct person {
  char no;
  char name;
  float base1;
  float base2;
  } person, *p, *minp;
  void main ()
  { float d;
  char buf;
  printf("输入%d个人的编号、姓名、基本工资、职务工资 \n", N);
  for(p=person; pscanf("%s", buf); strncpy(p -> no,buf,9);
  scanf("%s", buf); strncpy( p -> name, buf, 19);
  scanf("%f", &d);p -> base1 =d;
  scanf("%f",&d);p -> base2=d;
  }
  for(minp=p=person; pif (p -> basel+p -> base2< minp -> basel+ minp -> base2)minp =p;
  printf("基本工资与职务工资和最少的职工是%s \n",minp -> name);
  printf("他的基本工资与职务工资和是%.2f \n",minp -> basel+ minp -> base2);
  }
  3.编一个程序,输入10个学生的学号、姓名、3门课程的成绩,求出总分最高的学生姓名并输出。
  【解】类似上一程序,直接给出程序如下:
  # include
  # include
  # define N 10
  struct stu {
  char no;
  char name;
  int score;
  } students,*p, *maxp;
  void main()
  { char buf; int maxs;
  printf("输入%d个学生的编号、姓名、三门课程成绩 \n", N);
  for(p= students;p< students+N;p++) {
  scanf("%s", buf); strncpy(p -> no, buf, 9);
  scanf("%s", buf); strncpy( p -> name, buf,19);
  scanf("%d%d%d",&p -> score, &p -> score, &p ->score);
  }
  for(maxp= p =students, maxs=-1; p< students+N; p++)
  if( p -> score + p -> score+p -> score> maxs) {
  maxp=p;maxs=p ->score+p -> score+p ->score;
  }
  printf("最高总分的学生是%s他的总分是 %d \n", maxp -> name, maxs);
  }
  4.编一个程序,输入下列学生成绩表中的数据,并用结构体数组存放,然后统计并输出三门课程的名称和平均分数。
  namefoxbase pascal    c
  wang98.0   87.0    77.0
  qian90.5   91.0    88.0
  sun   74.0   77.5    66.5
  li    84.5   64.5    55.0
  【解】类似上一程序,直接给出程序如下:
  # include
  # include
  # define N 100
  struct stu {
  char namep;
  int foxbase;
  int pascal;
  int c;
  } students, *p;
  void main ()
  { int n, sf, sb, sc;
  char buf;
  printf("输入n(< %d) ! \n", N);
  do {
  scanf("%d", &n);
  if(n>0 && nprintf("输入 n不合理! 请重新输入! \n");
  } while(1);
  printf("输入%d个人的姓名、Foxbase成绩、Pascal成绩、C成绩 \n", n);
  for( p= students;p< students+n; p++);
  scanf("%s",buf );strncpy(p -> name, buf, 19);
  scanf("%d%d%d", &p -> foxbase,&p -> pascal,&p -> c)
  }
  sf=sb=sc =0;
  for( p=students; p   sf+= p -> foxbase; sb+= p -> pascal; sc+= p -> c;
  }
  printf("Foxbase:%.2f \t Pascal:%.2f \t c:%.2f \n",
  (float)sf/n,(float)sb/n,(float)sc/n);
  }</p>
页: [1]
查看完整版本: 2011软考软件设计师练习题:第七章及解答