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

2012年软件水平考试软件设计师课后练习题(10)

1.设有界说“int a=3, b,*p=&a;”,则下列语句中使 b不为3的语句是( )
  ① b=* &a;  ② b=* p;
  ③ b=a;  ④ b=*a;
  2 .设指针x指向的整型变量值为25,则"printf("%d\n",++ *x);"的输出是( )
  ① 23  ② 24
  ③ 25  ④ 26
  【解】界说有 int a=3, b,*p=&a;对b赋值的表达式有*&a、*p、a 、*a。引用变量。的值有两种体例,一是直接引用a,二是经由过程a的指针借居引用a。对于后者,又有多种表达体例,经由过程指向a的指针p,借居引用a的内容,如*p。或经由过程求地址运算符由变量a获得其指针&a,再由这指针表达式借居引用 a的内容,如* &a。所以表达式*&a、*p和a都能引用变量a的值,而使b的值为3。而表达式。a是错误的,因为a不是指针变量,不能对它施行取内容运算符。所以解答是④。
  【解】若指针变量x指向某个变量,例如指向变量v,而且变量v的值是25,则表达式++ *x的值是26。这是因为表达式的计较挨次可加圆括号表告竣(++(*x)),首先是*x,是对X所指变量V的引用,所以++ *X就是++V。++V是先让变量V增1,并以增至后的V的值为表达式++V的结不美观,所以其值是 26。所以解答是④。
  1.若给fun函数的形参s传送字符串:"ㄩㄩ 6354abcc"(其中ㄩ暗示空格字符),则函数的返回值是__________。
  # include
  long fun(char s[])
  { long n;int sign;
  for(; isspace(*s); s++);
  sign=(*s==’-’ )?-1:l;
  if(*s==’+’ ||*s==’-’) s++;
  for(n=0; isdigit(*s); s++) n=10*n+(*s-’0’);
  return sign *n;
  }
  2.下面函数要求计较两个整数X、y之和,并经由过程形参Z传回该和值,请填空。
  void add(int x,int y,________z)
  {_________=x+ y; return;}
  参考谜底:
  【解】函数fun的第一个for轮回跳过字符串的前导空白符,接着剖析第一个非空白符是否是负号,若是置变量sign为 -1;否则,置变量sign为1。接着的if语句在第一个非空白字符是负号或正号时,跳过该字符。往后的for轮回将后面的数字符算作十进制数的列位数字译出一个长整数n。遇字符a时,竣事译数轮回。最后,函数返回sign与n的乘积。所以若挪用函数时供给的实参是"ㄩㄩ6354abc",函数返回值是整数6354。
  【解】函数但愿经由过程形参z传送结不美观,形参z必需是指针类型的,因为返回整型结不美观,所以z的声名是int *z。函数返回前必需先把结不美观经由过程形参z借居引用(写成* z)传回。
页: [1]
查看完整版本: 2012年软件水平考试软件设计师课后练习题(10)