复习题(二)
一、 基础题
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、设p1和p2是指向同一个int型一维数组的指针变量,k为int 型变量,则下列不能正确执行的语句是( 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”;
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、 函数strlink把b字符串连接到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) 其中:最大值有函数返回值获得;最大值的个数存放在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)
int fun(char *s)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论