C语言题库第6章指针.docx

上传人:b****6 文档编号:6029453 上传时间:2023-01-03 格式:DOCX 页数:27 大小:22.77KB
下载 相关 举报
C语言题库第6章指针.docx_第1页
第1页 / 共27页
C语言题库第6章指针.docx_第2页
第2页 / 共27页
C语言题库第6章指针.docx_第3页
第3页 / 共27页
C语言题库第6章指针.docx_第4页
第4页 / 共27页
C语言题库第6章指针.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言题库第6章指针.docx

《C语言题库第6章指针.docx》由会员分享,可在线阅读,更多相关《C语言题库第6章指针.docx(27页珍藏版)》请在冰豆网上搜索。

C语言题库第6章指针.docx

C语言题库第6章指针

第六章指针

一、单项选择

1.若已定义chars[10];则在下面表达式中不表示s[1]的地址是()。

A.&s[1]

B.&s[0]+1

C.s+1

D.s++

2.下面程序段的运行结果是()。

chara[]=”language”,*p;

p=a;

while(*p!

='u'){printf(“%c”,*p-32);p++;}

A.language

B.langUAGE

C.LANGUAGE

D.LANG

3.下面能正确进行字符串赋值操作的是()

A.chars[5]={'A','B','C','D','E'};

B.chars[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.若有说明:

intmain(intargc,char**argv),则argc的值必须大于1

D.C语言允许main函数带形参,形参名只能是argc和argv

7.若有定义:

int(*p)[4];则标识符p()。

A.是一个指针数组名

B.定义不合法

C.是一个指向整型变量的指针

D.是一个指针,它指向一个含有四个整型元素的一维数组

8.设有程序段:

chars[]="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.charstr[10]={"china"};等价于charstr[10];str[]={"china";}

B.charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]="abc";

C.char*a="china";等价于char*a;*a="china";

D.char*s="china";等价于char*s;s="china";

11.设有程序段:

chars[]=”china”;char*p;p=s;则下面叙述正确的是()

A.数组s中的内容和指针变量p中的内容相等

B.*p与s[0]相等

C.s数组长度和p所指向的字符串长度相等

D.s和p完全相同

12.已有变量定义和函数调用语句:

inta=25;print_value(&a);下面函数的输出结果是()

voidprint_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.已有定义intk=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应具有下面说明()。

Intb[10],*a=b;

二、程序设计

1.8885./*假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:

除了字符串前导的*号之外,将串中其他*号全部删除。

在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

*/

#include

#include

voidfun(char*a)

{

/************Begin*************/

/************End**************/

}

intmain()

{

chars[81];

FILE*in,*out;

inti;

printf("Enterastring:

\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:

\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);

/******************************/

return0;

}

【参考代码】

inti=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的花括号中填入所编写的若干语句。

试题程序:

*/

#include

#include

#defineN80

intfun(char*s)

{

/************Begin*************/

/*************End*************/

}

intmain()

{

FILE*wf,*in;

charline[N];

intnum=0;

printf("Enterastring:

\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:

%d\n\n",num);

/******************************/

in=fopen("in19.dat","r");

wf=fopen("out19.dat","w");

fgets(line,81,in);

fprintf(wf,"%d",fun(line));

fclose(wf);

fclose(in);

/*****************************/

return0;

}

【参考代码】

inti,j=0;

for(i=0;s[i]!

='\0';i++)

if(s[i]!

=''&&(s[i+1]==''||s[i+1]=='\0'))

/*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/

j++;

returnj;/*返回单词个数*/

3.8860./*假定输入的字符串中只包含字母和*号。

请编写函数fun,它的功能是:

将字符串中的前导*号全部删除,中间和后面的*号不删除。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

*/

#include

voidfun(char*a)

{

/************Begin**************/

/************End*************/

}

intmain()

{

FILE*wf,*in;

inti;

chars[81],t[81]="****A*BC*DEF*G*******";

printf("Enterastring:

\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:

\n");puts(s);

/******************************/

in=fopen("in18.dat","r");

wf=fopen("out18.dat","w");

for(i=0;i<8;i++)

{

fscanf(in,"%s",t);

fun(t);

fprintf(wf,"%s\n",t);

}

fclose(in);

fclose(wf);

/*****************************/

return0;

【参考代码】

char*p=a;

while(*p=='*')

p++;

/*指针p指向字符串第一个字母*/

for(;*p!

='\0';p++,a++)

*a=*p;

*a='\0';

4.8852./*请编写函数fun,该函数的功能是:

判断字符串是否为回文,若是则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。

回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,而字符串123312就不是回文。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

*/

#include

#defineN80

intfun(charstr[])

{

/***************Begin************/

/***************End************/

}

intmain()

{

chars[N];

FILE*out,*in;

chartest[][80]={"1234321","123421","123321","abcdCBA"};

inti;

printf("Enterastring:

");

gets(s);

printf("\n\n");

puts(s);

if(fun(s))

printf("YES\n");

else

printf("NO\n");

/************************************/

in=fopen("in12.dat","r");

for(i=0;i<4;i++)

fscanf(in,"%s",test[i]);

out=fopen("out12.dat","w");

for(i=0;i<4;i++)

if(fun(test[i]))

fprintf(out,"YES\n");

else

fprintf(out,"NO\n");

fclose(in);

fclose(out);

/************************************/

return0;

}

【参考代码】

intfun(charstr[])

{

inti,n=0,fg=1,j=0;

while(str[j])

{

n++;

j++;

}

for(i=0;i

/*循环比较字符*/

if(str[i]==str[n-1-i]);

/*相同,什么都不作*/

else

/*不同,直接跳出循环*/

{

fg=0;

break;

}

returnfg;

}

5.8862./*请编写函数fun,其功能是:

将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:

将a数的十位和个位依次放在c数的千位和十位上,b数的十位和个位依次放在c数的百位和个位上。

例如,当a=45,b=12,调用该项函数后,c=4152。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

*/

#include

#include

voidfun(inta,intb,long*c)

{

/************Begin************/

/************End***************/

}

intmain()

{

inta,b,i;

longc;

FILE*out,*in;

printf("Inputa,b:

");

scanf("%d%d",&a,&b);

fun(a,b,&c);

printf("Theresultis:

%ld\n",c);

/******************************/

in=fopen("in20.dat","r")

out=fopen("out20.dat","w");

for(i=10;i<20;i++)

{

fscanf(in,"%d%d",&a,&b);

fun(a,b,&c);

fprintf(out,"%d\n",c);

}

fclose(out);

fclose(in);

/******************************/

return0;

}

【参考代码】

*c=(a/10)*1000+(b/10)*100+(a%10)*10+b%10;

6.8880./*请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。

例如,字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

*/

#include

#include

#defineN81

voidfun(char*s)

{

/************Begin*************/

/************End**************/

}

intmain()

{

chara[N];

FILE*out,*in;

printf("Enterastring:

");

gets(a);

printf("Theoriginalstringis:

");

puts(a);

fun(a);

printf("\n");

printf("Thestringaftermodified:

");

puts(a);

strcpy(a,"HelloWorld!

ThisisafirstCprogram!

");

fun(a);

/******************************/

in=fopen("in17.dat","r");

fgets(a,81,in);

out=fopen("out17.dat","w");

fprintf(out,"%s",a);

fclose(out);

fclose(in);

/******************************/

return0;

}

【参考代码】

charch;

inti,m,n;

i=0;

m=n=strlen(s)-1;

while(i<(n+1)/2)

{

ch=s[i];

s[i]=s[m];

s[m]=ch;

i++;

m--;

}

三、程序改错

1.9812./*下列给定程序中,函数fun的功能是:

分别统计字符串中大写字母和小写字母的个数。

例如,给字符串s输入:

AaaaBBb123CCccccd,则应输出结果:

upper=5,lower=9。

请改正程序中的错误,使它能计算出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

*/

#include

#include

/**********ERROR**********/

voidfun(char*s,inta,intb)

{

while(*s)

{

if(*s>='A'&&*s<='Z')

/**********ERROR**********/

a++;

if(*s>='a'&&*s<='z')

/**********ERROR**********/

b++;

s++;

}

}

intmain()

{

chars[100];

intupper=0,lower=0;

printf("\npleaseastring:

");

gets(s);

fun(s,&upper,&lower);

printf("\nupper=%dlower=%d\n",upper,lower);

return0;

【改错1】voidfun(char*s,int*a,int*b)

【改错2】(*a)++;

【改错3】(*b)++;

2.9332./*下列给定函数中,函数fun的功能是:

统计字符串中各元音字母(即A、E、I、O、U)的个数。

注意:

字母不分大小写。

例如,输入THIsisaboot,则应输出是10220。

请改正程序中的错误,使它能得出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

*/

#include

/**********ERROR**********/

fun(char*s,intnum[5])

{intk,i=5;

for(k=0;k

/**********ERROR**********/

num[i]=0;

for(;*s;s++)

{i=-1;

/**********ERROR**********/

switch(s)

{case'a':

case'A':

{i=0;break;}

case'e':

case'E':

{i=1;break;}

case'i':

case'I':

{i=2;break;}

case'o':

case'O':

{i=3;break;}

case'u':

case'U':

{i=4;break;}

}

if(i>=0)

num[i]++;

}

}

intmain()

{chars1[81];intnum1[5],i;

printf("\nPleaseenterastring:

");

gets(s1);

fun(s1,num1);

for(i=0;i<5;i++)printf("%d",num1[i]);

printf("\n");

return0;

}

【改错1】voidfun(char*s,intnum[5])

【改错2】num[k]=0;

【改错3】switch(*s)

3.8876./*下列给定程序中,函数fun的功能是:

计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。

注意:

不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

*/

#include

#include

#include

#include

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

p=&s[0];

/**********ERROR**********/

*r=t;

while(*p)

{

if(*r==*p)

{

r++;

if(*r=='\0')

{

n++;

/**********ERROR**********/

【1】;

}

}

p++;

}

returnn;

}

intmain()

{chara[N],b[N];intm;

system("CLS");

printf("\nPleaseenterstringa:

");

gets(a);

printf("\nPleaseentersubstringb:

");

gets(b);

m=fun(a,b);

m=printf("\nTheresultis:

m=%d\n",m);

return0;

}

【改错1】r=t;

【改错2】r=t;

4.8853./*下列给定程序中,函数fun的功能是:

从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,

平均分存放在形参aver所指的存储单元中。

例如输入8名学生的成绩:

80.5607290.59851.58864

则低于平均分的学生人数为4(平均分为75.5625

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1