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

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

4.1单项选择题
  1.若有下列说明,则数值为4的表达式是()
  int a={ l,2,3,4,5,6,7,8,9,10,11,12 };
  char c=’a’,d, g;
  ①a         ②a
  ③a[’d’-’c’]            ④a[’d’-c]
  【解】数组元素的下标自0开始顺序编号,值为4的元素是a。所以只有下标表达式的值为3的才是正确的。下标表达式g-C中的的变量g和c的值是还未被设定的,其值不确定。a的值为5,下标为4是不对的。’d’-’c’的值为1,a的值是2,所以也是不对的。变量c的值为’a’ ,’d’-c=3,所以正确解答是④。
  2.设有定义:"char s={"string"};" 则printf("%d\n",strlen(s));的输出是()
  ① 6            ② 7
  ③11             ④ 12
  【解】在C语言中,字符串是指在有效字符之后有字符率结束标记符的字符列,并约定字符串的长度是指字符率中有效字符个数,不包括字符串的结束标记符。存放于字符数组s中的字符串是“string”,该字符串的长度为6,所以输出该字符串的长度应是6。正确的解答是①。
  3.下列语句中,正确的是(   )
  ① char a[]={’abc",’1’};         ② char a[]={’abc’,’l’};
  ③char a[]={’a’,"1"};                ④char a[]={"a","1"};
  【解】如定义数组时有初始化,其最高维的长度可以省缺,由系统根据初始化时的初值个数确定,而其它维的长度是不可以缺省的。对二维字符数组的初始化,可以按行用字符串对其初始化,也可以按二维数组元素的存储顺序逐一用字符对其元素初始化。在供选择解答①和③中,有不是最高维的长度被缺省,所以是错误的。在供选择解答①和②中,还将字符串常量写作’abc’,这也是错误的。只有④,用字符率按行给二维字符数组初始化,这才是正确的。正确构解答是④。
  4.合法的数组定义是(    )
  ①int a[]={"string"}               ②int a={0,1,2,3,4,5};
  ③char a={"string"}                ④char a[]={0,1,2,3,4,5};
  【解】①错误的原因是整数数组不可以用字符串对其初始化。②错误的原因是,数组初始化时,初始化指定的值的个数多于数组的元素个数。③错误的原因是,能用字符串初始化的只;有字符指针变量,或字符数组。字符率不能对其它类型的变量初始化,包括字符变量。④是正确的,因为字符数组可以用小整数(作为字符的ASCII代码值)对其元素初始化。
  5.语句"printf("%d\n"strlen("ats\nol2\1\\"));"的输出结果是(    )
  ①11            ②10            ③ 9            ④ 8
  【解】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符开头的转义字符。在字符串"abs\no12\11\\" 中,有三个转义字符,它们是\n、\1、\\,所以该字符串的有效字符个数是9。所以正确的回答是③。
  6.函数调用“strcat(strcpy(strl,str2),str3)”的功能是(   )
  ①将字符串strl复制到字符串str2中后再连接到字符串str3之后
  ②将字符串strl连接到字符串str2中后再复制到字符率str3之后
  ③将字符串str2复制到字符串strl中后再将字符串str3连接到字符串strl之后
  ④将字符串str2连接到字符率strl之后再将字符串strl复制到字符串str3中
  【解】函数调用strcat(s1,s2)是将s2字符串复制连接到s1字符串之后,使s1字符串变得更长。函数调用strcpy(s1,s2)是将s2字符串复制到s1,使s1字符串的内容与s2字符串的内容相同。函数调用strcat(strcpy(strl,str2) ,str3) 是先执行strcpy(strl,str2),然后再执行strcat(strl,str3),所以其功能是将字符串str2复制到字符串strl中,然后再将字符串str3复制连接到字符串strl之后。正确的选择是③。
  7.设有如下定义,则正确的叙述为(   )
  char x[]={"abcdefg"};
  char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
  ①数组x和数组y等价②数组x和数组y长度相同
  ③数组X的长度大于数组y的长度④数组X的长度小于数组y的长度
  【解】不指定数组长度的字符数组定义,其所需要的字节数可由初始化中给出的值的个数确定。字符数组可以用字符串初始化,也可用字符逐个给字符数组的元素初始化。但用字符初始化时,尽管给出了字符串中的全部字符,还是不会自动有字符率结束字符。但字符串初始化自动会含有字符串的结束标记符,字符串初始化所需要的字节个数会比用同样多的字符初始化多1个字节。所以只有③才是正确的。

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

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

  4.2填充题
  1.根据变量定义“static int b, a[]={1,2,3,4,5,6};”,b=_____,a
  【解】系统规定,静态变量定义时,若末初始化,系统自动给定二进制代码全0的值。所以态数组b的元素全为0,当然包括b也为几静态数组a是二维数组,每行有三个元素,在初始化中结出了六个初值,所以数组a有2行。由于数组的元素按行顺序存储,并按行顺序初始化。前三个值是第一行,后三个值是第二行。a是第二行的第三列元素,也是 a的最后一个元素,所以其值是6。
  2.设有定义语句“static int a={{1},{2},{3}};”则a值为_,a的值为_。
  【解】给二维数组初始化时,可按行给出初值,并且每行可以只给前面部分的元素给出初值。系统规定,对哪些未给出初值的部分元素,系统自动置二进制代码全0的值。由于定义语句只给a给定初值l、a给定初值2、a给定初值3。这样,其它元素都为0值。所以,a= 0,a= 0。
  3.若在程序中用到“putchar( )”函数时,应在程序开头写上包含命令_____,若在程序中用到“strlen( )”函数时,应在程序开头写上包含命令______。
  【解】putchar()是系统提供的头文件stdio.h中定义的宏,所以程序要使用它,必须写上包含命令:#include。函数strlen()是系统提供的字符串处理函数之一,字符串处理函数的函数原型说明和它们用到的有关常量、数据结构等,在系统提供的头文件tring.h中定义,所以使用该函数的程序应在程序开头写上包含命令并include。
  4.下面程序的功能是输出数组s中最大元素的下标,请填空。
  main()
  {int k, p ;
  int s[]={1,-9,7,2,-10,3};
  for(p=0, k=p;ps)____________
  printf("%d\n" ,k);
  }
  【解】为要寻找数组中的最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考察数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考察了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考察是从首元素开始顺序向后继元素考察。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考察的循环控制变量。当发现当前元素s比临时最大元素s更大时,应该用p更新k。所以在空框处应填入代码“k=p;”。
  5.下面程序的功能是将一个字符串str的内容颠倒过来,请填空。
  # include
  main()
  {int i, j,_____________;
  char str[]={"1234567"};
  for(i=0,j=strlen(str); i    { k=str; str=str; str=k; }
  printf("%s\n", str);
  }
  【解】颠倒一个字符串中的字符,就是首尾对应的元素两两交换。简单地可用两个游标变量i和j, j是前端元素的下标, j是后端元素的下标, 交换以这两个变量值为下标的元素str和 str。开始时,i的值为 0,j的值为字符率未元素的不标(字符串长度减1)。每次交换后,i增 1,j减1。继续交换的条件是str还位于str的前面,即i转贴于:
  6.以下程序可把输入的十进制数以十六进制数的形式输出,请填空。
  main()
  { char b={"0123456789ABCDEF"};
  int c,d,i=0,base=16;
  long n;
  printf("Enter a number:\n");.
  scanf("%ld", &n):
  do{ c=________;i++;n=n/base;}
  while(n!=0);
  printf("Transmite new base:\n");
  for(--i; i>= 0;--i)
  {d=c; printf("%c",b);}
  printf("\n");
  【解】程序中,字符数组b存储十六进制的 16个数字符,整型数组C存储泽出的十六进制数的各位数值.从整数n译出它的各位十六进制数值,需采用除16取余的方法,即求n除16 的余.得到它的十六进制的个位数,接着将n除以16。在n不等于0的情况下循环,能顺序求出n的十六进制的个位数、十位数、百位数等等。程序中变量base已预置16,所以在第一个空框处可填代码nose或n。当n的十六进制数的个位、十位、百位等数字依次存放于数组C中后,就从最高位至最低位,参照数组c的内容d(以其内容为下标),取十六进制数字符表中的字符b输出。所以在第二个空框处可填入代码。
  4.3程序分析题
  1.阅读程序,写出程序运行结果。,
  main()
  {static int a[]={9,7,5,3,l,2,4,6,8};
  int i,j,sl=0,s2=0;
  for(i=0; i

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

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

  18
  10
  2.说明下列程序的功能。
  main()
  { int i,j;
  float a,b,x;
  for(i=0;i

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

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

  # include
  # define N 100
  main()
  { double x, s;
  int i,n;
  do {
  printf("Enter n(

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

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

  # include
  # define N 200
  main()
  {char s; int i;
  printf("Enter string! \n");
  scanf("%s", s);
  for(i=0;s !=’\0’; i++)
  if(s >=’A’ && s=’Z’)
  s=3;
  else if(s=’a’&& s=’z’ )
  s=3;
  printf("s=%s\n",s);
  }
  10.编一个程序,将按第9题中加密的字符率(从键盘输入)解密后输出。
  【解】本问题编写的程序是完成上一程序的逆操作。同样是顺序考察输入字符串,对满足要求的字符作恢复更改。要求是当字符减3后是大写英文字母时,则对其作减3处理的替换;当字符加3后是小写英文字母时,则对它作加3的处理。如此做法是有错误的,程序未考虑原
  先不是英文字母,而未被加3或减3处理,但对它减3或加3后是英文字母时,将被下面的程序转换成英文字母。所以下面的程序不是完成上题程序的逆操作。但没有简单的办法能避免这个错误。完整程序如下:
  # include
  # define N 200
  main()
  {char s; int i;
  printf("Enter string!\n");
  scanf("%s",s);
  for(i=0;s !=’\0’;i++)
  if(s-3>=’A’&&s-3=’a’ && s+3
页: [1]
查看完整版本: 2011软考软件设计师练习题:第四章及解答