指针和结构体理论题文档格式.docx

上传人:b****5 文档编号:20790779 上传时间:2023-01-25 格式:DOCX 页数:13 大小:19.53KB
下载 相关 举报
指针和结构体理论题文档格式.docx_第1页
第1页 / 共13页
指针和结构体理论题文档格式.docx_第2页
第2页 / 共13页
指针和结构体理论题文档格式.docx_第3页
第3页 / 共13页
指针和结构体理论题文档格式.docx_第4页
第4页 / 共13页
指针和结构体理论题文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

指针和结构体理论题文档格式.docx

《指针和结构体理论题文档格式.docx》由会员分享,可在线阅读,更多相关《指针和结构体理论题文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

指针和结构体理论题文档格式.docx

}}

main()

{inti=0,digit,letter,other;

charch,str[80];

printf("

"

);

ch=getchar();

while((11)){

str[i]=ch;

i++;

}

str[i]='

\0'

;

(12);

Digit=%dletter=%dother=%d\n"

digit,letter,other);

}

本题的思想很简单,只不过使用了指针而已。

(9)A.intdigit=0,letter=0,other=0;

B.int*digit=0,*letter=0,*other=0;

C.digit=letter=other=0;

D.*digit=*letter=*other=0;

内容赋值为0,不是指针赋值为0,因为*是取值运算.

(10)A.*s++!

B.*s++!

\n'

C.*s!

D.*s!

因为不结束,就继续。

数组不结束,就是不等于\0,所以只能在A和C中选择。

但因为A选项在结束循环后还要移动指针S,此时已经指向了\0,再移动指针会出错,所以选择C。

(11)A.ch!

B.ch!

C.ch=='

D.ch=='

(12)A.count(str,&

digit,&

letter,&

other)

B.count(&

str,&

C.count(*str,digit,letter,other)

D.count(*str,*digit,*letter,*other)

传地址,注意str就是字符串的首地址。

由此判断其他几个选项都是错误的。

P24

试题6(每小题3分,共12分)

structst{

charc;

chars[80];

};

这是结构体数组的定义(2个成员)

char*f(structstt);

voidmain()

{intk;

structsta[4]=

{{'

1'

"

123"

},{'

2'

321"

3'

4'

}};

这是结构体数组的初始化

for(k=0;

k<

4;

k++)

%s\n"

f(a[k]));

char*f(structstt)

{intk=0;

while(t.s[k]!

){

if(t.s[k]==t.c)returnt.s+k;

k++;

returnt.s;

 

本题的意思是,从t.s中找出与t.c相同的,从此开始,输出k位。

本题组合了函数和结构体、字符串的知识,比较难。

t.s+k的作用是向后移动k个元素。

注意:

’1’,’2’,’3’,’4’是字符型,t.c

’123’,’321’,’123’,’321’是字符串型,t.s

(21)程序运行时,第1行输出(21)。

A、321B、21

C、123D、12

第1行,从”123”中的第一个元素开始。

因为

t.s[k]==t.c

此时,t.c=1t.s[0]=1,

以下语句中if的条件成立:

if(t.s[k]==t.c)returnt.s+k;

所以,执行returnt.s+k;

这样从”1”开始输出,所以输出123。

(22)程序运行时,第2行输出(22)。

A、21B、12

C、3D、1

第2行,

此时,t.c=2,t.s[1]=2

所以,从”321”中的”2”开始输出,输出21。

(23)程序运行时,第3行输出(23)。

A、3B、123

C、1D、321

第3行,从”123”中的”3”开始输出,所以输出3。

(24)程序运行时,第4行输出(24)。

A、123B、1

C、3D、321

第4行,while(t.s[k]!

)条件不成立(321中没有4)

所以返回t.s,直接输出321。

P49

STRING.h>

{char*s[2]={"

****"

"

};

while(*s[1]!

s[0]+strlen(s[1])-1);

s[1]++;

}}

A、****B、***

C、**D、*

S是一个指针数组。

S[0]指向字符数组”****”,也就是说,

[*][*][*][*][\0]

s0

S1指向字符数组”****”,也就是说,

s1

strlen(s[1])计算指针s的长度。

循环第一次时,*s[1]=*,*s[1]!

为真。

strlen(s[1])=4

strlen(s[1])-1=3

s[0]+strlen(s[1])-1=s[0]+3

这时,s[0]的指针变化为(向后移动指针3位):

所以输出的结果是*

C、**D、*

循环第2次时,*s[1]=*,*s[1]!

strlen(s[1])=3(注意:

s[1]++;

使s[1]的指针后移一位,所以长度减少)

strlen(s[1])-1=2

s[0]+strlen(s[1])-1=s[0]+2

这时,s[0]的指针变化为(向后移动指针2位):

所以输出的结果是**

C、**D、*

循环第3次时,*s[1]=*,*s[1]!

strlen(s[1])=2(注意:

strlen(s[1])-1=1

s[0]+strlen(s[1])-1=s[0]+1

这时,s[0]的指针变化为(向后移动指针1位):

所以输出的结果是***

A、****B、***

同理。

P54

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

main()

charch,a[10],*s[10]={"

one"

two"

three"

four"

k=0;

while((ch=getchar())!

9)

if(ch>

5'

ch<

8'

)a[k++]=ch;

a[k]='

for(k=0;

a[k]!

printf("

%s"

s[('

-a[k])-1]);

}

s[0]one,s[1]two,s[2]three,s[3]four

(21)程序运行时,输入5678,输出(21)。

A、twothreeB、two

C、onefourthreeD、fourthreetwoone

第1次,输出s[‘9’-5-1]=s[3]=four

第2次,输出s[‘9’-6-1]=s[2]=three

第3次,输出s[‘9’-7-1]=s[1]=two

第4次,输出s[‘9’-8-1]=s[0]=one

(22)程序运行时,输入8561#,输出(22)。

A、twothreeB、two

第1次,输出s[‘9’-8-1]=s[0]=one

第2次,输出s[‘9’-5-1]=s[3]=four

第3次,输出s[‘9’-6-1]=s[2]=three

第4次,因为ch>

不成立,a[k]='

下移循环没有执行,所以没有输出结果。

注意一下各题,输入9和3时,与输入1一样。

(23)程序运行时,输入7902#,输出(23)。

C、onefourthreeD、fourthreetwoone

(24)程序运行时,输入7633#,输出(24)。

P65

1.阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

(每小题3分,共12分)

string.h>

main()

{inti,j;

charstr[10],*s[10]={"

SQL"

hello"

bear"

zone"

gets(str);

/**读入一个字符串/

for(i=0;

i<

i++){

if(strcmp(str,s[i])>

0)continue;

j=3;

while(j>

=i){/*逐一后移,腾出一个位置*/

s[j+1]=s[j];

j--;

}

s[i]=str;

/*放入刚才输入的字符串*/

break;

if(i==4)s[4]=str;

/*循环结束,没有比任何一个大,

也就是break语句没有起作用,此时循环正常结束,i==4

就把刚才输入的字符串放到最后*/

5;

i++)

s[i]);

putchar('

【问题】

(21)程序运行时,输入apple,输出(21)。

A.SQLapplehellobearzoneB.appleSQLhellobearzone

C.SQLhellobearzoneappleD.SQLhelloapplebearzone

(22)程序运行时,输入I,输出(22)。

A.SQLhellobearIzoneB.ISQLhellobearzone

C.SQLIhellobearzoneD.SQLhellobearzoneI

(23)程序运行时,输入zoo,输出(23)。

A.zooSQLhellobearzoneB.SQLhellobearzoozone

C.SQLhellobearzonezooD.SQLhellozoobearzone

(24)程序运行时,输入orange,输出(24)。

A.SQLorangehellobearzoneB.SQLhelloorangebearzone

C.orangeSQLhellobearzoneD.SQLhellobearorangezone

这个函数的作用是:

把输入的字符串与S[10]中的串逐一比较,如果输入的串小,就插入。

如果比所有的串都大,就放到最后。

大写字母比小写字符小(按照ASCII码比较)

P59

structnum{inta,b;

voidf(structnums[],intn)

{intindex,j,k;

structnumtemp;

n-1;

k++){

index=k;

for(j=k+1;

j<

n;

j++)

if(s[j].b<

s[index].b)index=j;

temp=s[index];

s[index]=s[k];

s[k]=temp;

{intcount,i,k,m,n,no;

structnums[100],*p;

scanf("

%d%d%d"

&

n,&

m,&

k);

s[i].a=i+1;

s[i].b=0;

p=s;

count=no=0;

while(no<

n){

if(p->

b==0)count++;

if(count==m){

no++;

p->

b=no;

count=0;

p++;

if(p==s+n)

f(s,n);

%d:

%d\n"

s[k-1].b,s[k-1].a);

(21)程序运行时,输入543,输出(21)。

A.3:

5B.2:

3

C.1:

2D.4:

1

(22)程序运行时,输入534,输出(22)。

5B.1:

2

C.4:

3D.4:

2

(23)程序运行时,输入752,输出(23)。

A.1:

5B.6:

1

C.2:

3D.2:

4

(24)程序运行时,输入424#,输出(24)。

3B.4:

4D.4:

一、

通过分析以下一段程序,

for(i=0;

我们知道:

结构体s的最初情况是:

S[0].a=1,s[0].b=0

S[1].a=2,s[1].b=0

S[2].a=3,s[2].b=0

S[3].a=4,s[4].b=0

S[4].a=5,s[0].b=0

二、通过分析以下一段程序,

if(s[j].b<

我们知道,函数f是按照s[j].b的大小排序,小的在前、大的在后。

注意,排序时s[j].a也相应改变。

三、分析以下程序:

/*赋初值,为0*/

n){/*1*/

/*2*/

if(count==m){/*3*/

/*4*/

/*5*/

}/*6*/

/*7,指针向后移动一次*/

if(p==s+n)/*8这两句的意思是,如果指到头,再返回起点*/

当循环进行了4次时,语句3的条件得到满足,所以语句4得到执行,no=1

此时,指针指向s[3].b,所以s[3].b=1;

注意,此后语句7继续执行,但语句8的条件不满足,所以继续,但因为语句6已经执行,所以count=0

然后,语句2再执行一次,语句8条件满足,又指向s[0].

这样,当下次语句3的条件满足时,no=2,而指针指向s[2],所以,s[2].b=2

依次类推,我们得到结构体s的最后结果:

S[0].a=1,s[0].b=5

S[1].a=2,s[1].b=4

S[2].a=3,s[2].b=2

S[3].a=4,s[4].b=1

S[4].a=5,s[5].b=3

特别应该注意的是,这里m的次数是4,而n=5,所以不匹配。

四,调用函数f对以上结构体排序后,结果如下:

S[0].a=4,s[0].b=1(注意是原来的s[4].b,所以S[0].a=4)

S[1].a=3,s[1].b=2

S[2].a=5,s[2].b=3

S[3].a=2,s[4].b=4

S[4].a=1,s[0].b=5

五.

S[k-1].b=s[3-1].b=s[2].b=3

S[k-1].a=s[3-1].a=s[2].a=5

所以,(21)题的答案是A.

其余各题类似。

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

当前位置:首页 > 农林牧渔 > 林学

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

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