第六章 指针
一、单项选择
1.若已定义char s[10];则在下面表达式中不表示s[1]的地址是( )。
A.&s[1]
B.&s[0]+1
C.s+1
D.s++
2.下面程序段的运行结果是( )。
char a[ ]=”language” , *p ;
p=a ;
while (*p!='u') { printf(“%c”,*p-32); p++ ; }
A.language
B.langUAGE
C.LANGUAGE
D.LANG
3.下面能正确进行字符串赋值操作的是( )
A.char s[5]={'A','B','C','D','E'};
B.char s[5]={"ABCDE"};
C.char *s ; s="ABCDE" ;
D.char *s; scanf("%s",s) ;
4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下能正确执行并得到有意义的结果的赋值语句是( )。
A.p2=c;
B.c=*p1+*p2;
C.p1=p2;
D.c=*p1*(*p2);
5.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )。
A.*p=max(a,b);
B.*p=max;
C.p=max;
D.p=max(a,b);
6.以下正确的叙述是( )。
A.C语言允许main函数带形参,且形参个数和形参名均可由用户指定
B.当main函数带有形参时,传给形参的值只能从命令行中得到
C.若有说明: int main(int argc,char **argv),则argc的值必须大于1
D.C语言允许main函数带形参,形参名只能是argc和argv
7.若有定义:int (*p)[4];则标识符p( )。
A.是一个指针数组名
B.定义不合法
C.是一个指向整型变量的指针
D.是一个指针,它指向一个含有四个整型元素的一维数组
8.设有程序段:char s[ ]="china"; char *p ; p=s ;则下面叙述正确的是()。
A.*p与s[0]相等
B.数组s中的内容和指针变量p中的内容相等
C.s数组长度和p所指向的字符串长度相等
D.s和p完全相同
9.下面程序段的运行结果是( )。
char *s=”abcde” ;
s+=2 ; printf(“%s”,s);
A.字符'c'的地址
B.不确定
C.cde
D.字符'c'
10.下面判断正确的是()。
A.char str[10]={"china"}; 等价于 char str[10]; str[ ]={"china";}
B.char c[4]="abc",d[4]="abc"; 等价于 char c[4]=d[4]="abc" ;
C.char *a="china"; 等价于 char *a; *a="china" ;
D.char *s="china"; 等价于 char *s; s="china" ;
11.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是( )
A.数组s中的内容和指针变量p中的内容相等
B.*p与s[0]相等
C.s数组长度和p所指向的字符串长度相等
D.s和p完全相同
12.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是( )
void print_value(int *x)
{ printf(“%d\n”,++*x); }
A.24
B.23
C.25
D.26
13.若有说明:int *p,m=5,n;以下程序段正确的是( )
A.p = &n ; *p = m ;
B.p=&n ;scanf("%d",&p);
C.p = &n ;scanf("%d",*p);
D.scanf("%d",&n); *p=n ;
14.变量的指针,其含义是指该变量的( )
A.值
B.地址
C.一个标志
D.名
15.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )
A.ptr2=k;
B.k=*ptr1+*ptr2;
C.k=*ptr1*(*ptr2);
D.ptr1=ptr2
16.8882.若要对a进行自增运算,则a应具有下面说明( )。
Int b[10],*a=b;
二、程序设计
1.8885. /*假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。
在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序: */
#include <string.h>
#include <stdio.h>
void fun (char *a)
{
/************Begin*************/
/************End**************/
}
int main()
{
char s[81];
FILE *in,*out;
int i;
printf("Enter a string :\n");
gets(s);
fun(s);
printf("The string after deleted:\n");
puts(s);
/******************************/
in=fopen("in21.dat","r");
out=fopen("out21.dat","w");
for(i=0;i<8;i++)
{
fscanf(in,"%s",s);
fun(s);
fprintf(out,"%s\n",s);
}
fclose(in);
fclose(out);
/******************************/
return 0;
}
【参考代码】
int i=0;
char *p=a;
while(*p&&*p=='*')
{
a[i]=*p;i++;p++;
}
while(*p)
{
if(*p!='*')
{
a[i]=*p;i++;
}
p++;
}
a[i]='\0';
2.8863. /*请编写函数fun,该函数的功能是:统计一行字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入