复习题(二)
一、 基础题
1、 设有:int  k[]={2,4,6,8,10,12}, *p=k+2;  表达式 *(p+2)*p[2] 的值:100
2、 设有:int a[10], *p1, *p2; 则执行语句:p1=a; p2=&a[5]; 则p2-p1的值:5
3、 设有:int x[]={4,3,2,1},q,*p=&x[1];则执行语句:q=(*--p)++ ;  后;变量q的值为 4
4、 设有:int *p, a=10, b=1;  则执行以下语句:p=&a; a=*p+b; 后;  a的值为: 11
5、 下列程序段的输出结果是   2,1
int k=1, j=2, *p=&k, *q=p;
p=&j;
printf("%d, %d",*p, *q);
6、 设x为整型变量,p为指向整型的指针变量,则让p指向x变量的赋值表达式是 P=&x
7、 设有变量定义:float d[]={1.0,2.0,3.0,4.0,5.0}, *p=d+3;
请写出 printf("\n %f  %f", *p, d[0]); 的输出结果为: 4.0  1.0
8、 设有变量定义如下:char  s[]="Hello!", *p=s;  int  i;
    执行完  for(i=0; *(p+i); i++); 后,变量i的值是_6_*(p+i)的值是’\0’_
9、 函数
    void f(char s[ ], char t[ ])
    {  int k=0;
          while (s[k]=t[k])  k++;
    }
等价于
    void f(char *s, char *t)
1、     {    while (*s++=*t++);    }
二、 选择题
1、下面的程序段用来定义指针并赋值,请选出语法正确的程序段(  C )。
A)int  *p;  scanf(“%d”,p);              B)int  *s,k;  *s=100;
C) int  *s,k;                          D) int  *s,k
  char *p,*c;                                char *p,*c;
  s=&k;  p=&c;                            s=&k;  p=&c;
*p=’a’;                                    s=p; *s=1;
2、程序段:int *p,a,b=1;  p=&a;  *p=10;  a=*p+b; 执行后,a的值(  B)。
A)12                    B)11                C)10                D)编译出错
3、若定义:int i,j=2,*p=&i ; 则能完成i=j赋值的功能的语句是(  B)。
A)i=*p;            B)*p=*&j;            C)i=&j;                D)i=**p;
4、若定义:double *p,a;则下列能通过scanf()正确输入项读入数据的程序段是( D)。
A)*p=&a;      scanf(“%lf”,p);                  B)p=a;  scanf(“%f”,p);                C) p=&a;  scanf(“%lf”,a);                      D) p=&a;    scanf(“%lf”,p);     
5、若有以下定义语句:int  a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是( D )。
A) p+=2,++*p        B) p+=2,*++p        C) p+=3,*p++        D)p+=2,*(p++)
6、设p1p2是指向同一个int型一维数组的指针变量,kint 型变量,则下列不能正确执行的语句是( B)。
A)k=*p1+*p2;          B) p2=k;            C) p1=p2;          D) k=*p1*(*p2);
7、设有以下定义:int a[]={6,7,8,9,10}; int *p;
  则下列程序的输出结果为( D)。
  p=a;  *(p+2)+=2;  printf(“%d,%d \n”,*p,*(p+2));
A)8,10              B)6,8                  C)7,9                D)6,10
8、下面程序输出结果是( C)。
  main()
  { int a[]={2,4,6,8,10};
    int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
  y+=*(p+x);
printf(“%d\n”,y);
}
A)17                    B)18                C)19                D)20
9、下列程序输出数组中的最大值,由s指针指向该元素,则在if语句中的判断表达式应该是(B)。
  void  main()
  { int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s;
scanf输入整型数组
    for(p=a,s=a;p-a<10;p++)
      if(        )  s=p;
  printf(“The max:%d\n”,*s);
}
A) p>s            B) *p>*s            C) a[p]>a[s]                D) p-a>p-s
10、以下选项中,错误的赋值是(A)。
A)char s1[10];s1=”Ctest”;              B)char s2[]={‘C’,’t’,’e’,’s’,’t’};   
C) char s3[20]=”Ctest”;                  D)char  *s[4]=”Ctest\n”;       
11、若有以下定义:char s[20]=”programming”,*ps=s; 则下列不能代表字符’o’的表达式是( A)。
A) ps+2            B) s[2]            C) ps[2]                D) ps+=2,*ps
12、若有定义和语句:
int  **pp,*p,a=10,b=20;
pp=&p; p=&a; p=&b;
printf(“%d  %d \n”,*p,**pp);
则输出结果是( D )。
A)10  20              B)10  10                  C)20  10            D)20  20
13、下面程序的输出是( A)。
char s[]=”ABCD”;
main()
{ char *p;
for(p=s;p<s+4;p++)\
    printf(“%s\n”,p);
}
A)ABCD                B)A                C)D            D)ABCD
BCD                  B                C            ABC
CD                  C                B              AB
D                    D                A              A
三、 程序填空题
1、 函数strlinkb字符串连接到a字符串的后面,并返回a中的新字符串。
#include <stdio.h>
char *strlink(char a[],char b[])
{ char *p=a;
  while(*a++);
  --a;
  while(*a++=*b++);
    *b='\0'   ;
  return    p  ;
}
void main()
{ char s1[80],s2[40],*ps;
  gets(s1);
  gets(s2)
  ps=strlink(s1,s2);
  puts(ps);
}
2、 函数trans仅把字符串s中的小写字母转为大写字母,其他字符不变。
#include<stdio.h>
void trans(char s[])
{ int i;
for(i=0; s[i]; i++)
  if(s[i]<= 'a'&&s[i]>= 'z'    )
      s[i]=  s[i]- 'a'+'A' ;
}
void main()
{ char s[10];
gets(s);
trans(s)  ;
printf("\n%s", s);
}
四、 改错题
1、 从键盘上输入一个字符串,并调用函数funo实现字符串的倒置,输出字符串。(本小题一共3个错)
#include<stdio.h>                                改正:
void  func(char st[50])                            void  func(char st[])
{ char *p,*q , t;
                                                q=st;
while( *q!='\0' ) q++;
for(p=st, q--; p<q; p++)                            for(p=st, q--; p<q; p++, q--)
  {  t=*p;
    *p=*q;
    *q=t;
  } 
}
void main()
{ char s[50] ;
gets (s);
func (s);
puts (s);
}
从键盘上输入一个字符串s,并调用函数copy将字符串s中的数字字符复制到字符串t中,输出字符串t。(本小题一共3个错)
#include<stdio.h>                                改正:
void copy(char  *t, char  *s)
{
while(*s!='\0')
{
  if(*s>=0 && *s<=9)                              if(*s>='0'&& *s<='9')
  {  *t=*s; 
      t++; 
  }
  s++;
}
                                                *t='\0';
}
main()
{
char s[50], t[50];
gets(s);
copy(s,t);                                      copy(t,s);
puts (t);
}
2、
五、 编程题
1、 设计一个函数,在一个整型数组中求最大数及最大数的个数。函数原型:
int max(int a[],  int  n,  int  *mc) 其中:最大值有函数返回值获得;最大值的个数存放在mc指向的变量中;a为被求整型数组,n为整型数组中元素个数。
int max(int a[],int n,int *mc)
{ int i, max=a[0],c=0;
for(i=1;i<n;i++) if(max<a[i])  max=a[i];
for(i=0;i<n;i++) if(max==a[i]) c++;
*mc=c;
return max;
}
2、 设计一函数,判断s字符串是否是回文。若是回文返回值为1;否则返回值为0。(回文
是顺读和倒读都一样的字符串)函数原型:
int  fun(char  *s)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。