指针与数组补充习题文档格式.docx

上传人:b****5 文档编号:8497042 上传时间:2023-05-11 格式:DOCX 页数:27 大小:21.99KB
下载 相关 举报
指针与数组补充习题文档格式.docx_第1页
第1页 / 共27页
指针与数组补充习题文档格式.docx_第2页
第2页 / 共27页
指针与数组补充习题文档格式.docx_第3页
第3页 / 共27页
指针与数组补充习题文档格式.docx_第4页
第4页 / 共27页
指针与数组补充习题文档格式.docx_第5页
第5页 / 共27页
指针与数组补充习题文档格式.docx_第6页
第6页 / 共27页
指针与数组补充习题文档格式.docx_第7页
第7页 / 共27页
指针与数组补充习题文档格式.docx_第8页
第8页 / 共27页
指针与数组补充习题文档格式.docx_第9页
第9页 / 共27页
指针与数组补充习题文档格式.docx_第10页
第10页 / 共27页
指针与数组补充习题文档格式.docx_第11页
第11页 / 共27页
指针与数组补充习题文档格式.docx_第12页
第12页 / 共27页
指针与数组补充习题文档格式.docx_第13页
第13页 / 共27页
指针与数组补充习题文档格式.docx_第14页
第14页 / 共27页
指针与数组补充习题文档格式.docx_第15页
第15页 / 共27页
指针与数组补充习题文档格式.docx_第16页
第16页 / 共27页
指针与数组补充习题文档格式.docx_第17页
第17页 / 共27页
指针与数组补充习题文档格式.docx_第18页
第18页 / 共27页
指针与数组补充习题文档格式.docx_第19页
第19页 / 共27页
指针与数组补充习题文档格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

指针与数组补充习题文档格式.docx

《指针与数组补充习题文档格式.docx》由会员分享,可在线阅读,更多相关《指针与数组补充习题文档格式.docx(27页珍藏版)》请在冰点文库上搜索。

指针与数组补充习题文档格式.docx

方法二:

charstr[80];

//只用一个数组哦

char*p1=str+1,*temp=NULL,*t=NULL,x,*k=NULL;

gets(str);

while(*p1)

temp=t=p1;

temp--;

while(temp!

=str)

{

if(*p1==*temp)break;

elsetemp--;

}

if(temp!

=str)

while(*t)

{

*t=*(t+1);

t++;

}

elseif(*temp==*p1)

while(*t)

}

elsep1++;

for(p1=str+1;

*p1;

p1++)//插入法排序

x=*p1;

for(temp=str;

temp<

=p1-1;

temp++)

if(x<

*temp)break;

for(k=p1-1;

k>

=temp;

k--)

*(k+1)=*k;

*temp=x;

puts(str);

方法三:

#include<

stdio.h>

charstr1[500]={0},str2[256]={0};

inti;

str2[str1[i]]=1;

i!

=256;

if(str2[i]==1)

printf("

%c"

i);

putchar('

\n'

2、从键盘输入一个n×

n的二维数组(n键盘输入),找出此二维数组中各行的最大值,并按从大到小的次序输出各行的最大值及此值所在的行号。

如:

输入

4(n=4)

13342344

45782130

98321150

5668822(n×

n)

输出

983(最大98,在第3行)

884

782

441

解题步骤:

1.找每行最大值将它们存入一维数组中

2.对一维数组排序

3.输出的同时查找这个数在第几行

inta[80][80],b[80],c[80];

//定义b数组保存各行最大值,c数组保存各行行号

intn,i,j,k=0,l=0,index,max,temp;

scanf("

%d"

&

n);

请输入%d阶矩阵:

n);

i<

n;

for(j=0;

j<

scanf("

a[i][j]);

max=a[i][0];

for(j=1;

if(a[i][j]>

max)max=a[i][j];

b[k++]=max;

//记录此行的最大值

c[l++]=i+1;

//记录这时的行号

n-1;

i++)//选择排序

if(b[j]>

b[index])index=j;

temp=b[index];

b[index]=b[i];

b[i]=temp;

temp=c[index];

//交换最大值时别忘了交换相应的行号

c[index]=c[i];

c[i]=temp;

每行最大数排序后:

\n"

printf("

%-4d在第%2d行\n"

b[i],c[i]);

/*从键盘输入一个n×

n的二维数组(n键盘输入),

找出此二维数组中各行的最大值,并按从

大到小的次序输出各行的最大值及此值所在的行号。

3.输出的同时查找这个数在第几行*/

3、下面程序实现如下功能:

输入一个整数字符串转换为一个整数值,如”1234”转换为1234,”-1234”转换为-1234。

读懂main函数,编写转换函数chnum。

string.h>

chars[60];

intn;

longchnum(char*p);

gets(s);

if(*s=='

-'

)n=-chnum(s+1);

elsen=chnum(s);

%d\n"

return0;

longchnum(char*p)

longsum=0;

while(*p)

if(*p>

='

0'

&

*p<

9'

sum=sum*10+*p-'

;

p++;

returnsum;

4、从键盘输入一个字符串,去掉所有非十六进制字符后转换成十进制数输出。

读懂以下main函数,编写相应的函数del16和htod。

voidmain()

{

chars1[10],s2[10];

voiddel16(char*p1,char*p2);

longhtod(char*p);

gets(s1);

//读入一字符串

del16(s1,s2);

//去掉所有非十六进制字符到s2

htod(s2));

//把s2转换为10进制

voiddel16(char*p1,char*p2)

if(*p1<

f'

*p1>

a'

||*p1<

F'

A'

*p2++=*p1;

p1++;

*p2='

\0'

longhtod(char*p)

if(*p<

*p>

)sum=sum*16+*p-'

+10;

elseif(*p<

5、编写函数insert(char*s1,char*s2,intpos),实现在字符串s1中的指定位置pos处插入字符串s2。

(花了我1天的编程时间2010.3.12)

Happy---Year

New

7

HappyNewYear

思路:

1.s1字符串找第pos个位置

2.将pos位置后的元素顺移动一位,插入s2字符串中一个元素

3.接着插入直到s2字符串结束

/*

*/

chars1[80],s2[80];

intn;

voidinsert(char*s1,char*s2,intpos);

gets(s2);

insert(s1,s2,n);

puts(s1);

voidinsert(char*s1,char*s2,intpos)

inti,count2=0;

char*p=NULL,*p1=s1,*p2=s2;

while(*s2!

){

s2++;

count2++;

}//统计s2字符串字符个数,以确定字符串s1位移量。

i=1;

while(i<

pos)

s1++;

i++;

}//让指针指向pos位置

p=s1;

//记录pos位置

while(*s1)s1++;

//s1指向’\0’

for(i=1;

count2;

i++)//位移count2-1个位移量,腾出位置给s2

while(s1>

=p)

*(s1+1)=*s1;

s1--;

while(*s1)s1++;

//准备第二轮位移的开始!

}//指针指向pos位置

while(*p2)

*p1++=*p2++;

}//加载s2字符串

/*遇见问题处理:

1.位移量不能为count2,会位移多一位,不符合题目要求

2.循环体要有出口,有步长,否则会陷入死循环

3.指针的指向要明确,来回都要非常清楚它的位置。

chars[80];

char*p=s1,*p1=s;

p=p+pos-1;

*p++=0;

*p1++=*p++;

*p1=0;

strcat(s1,s2);

strcat(s1,s);

6、编写程序,实现下面一个有关单词个数统计问题。

编写一个函数findstr(char*str,char*substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。

例如,假定输入的字符串为”asdasasdfgasdaszx67asdmklo”,子字符串为as,函数返回值是6。

asdasasdfgasdaszx67asdmklo

as

6

intfindstr(char*str,char*substr);

请输入你要查找的字符串:

n=findstr(s1,s2);

%s在%s里共有%d个\n"

s2,s1,n);

intfindstr(char*str,char*substr)

inti,j,k,count=0;

chartemp[80];

intlength=strlen(substr);

strlen(str);

k=0;

for(j=i;

i+length;

temp[k++]=str[j];

temp[k]='

if(!

strcmp(temp,substr))count++;

returncount;

法二:

intcount=0,falg;

char*p=substr;

while(*str)

if(*str==*substr)

falg=0;

//这个初始化的位置很关键,不要放错位置!

str++;

substr++;

while(*substr)

if(*str!

=*substr)

{

falg=1;

break;

}

else

str++;

if(falg==1)

substr=p;

else

count++;

substr=p;

elsestr++;

/*sdasasdfgasdadszx67asdmklo

6*/

7、有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规则插到字符串a中,最后输出”abdefghjkmnptwy”。

chara[20]="

bdfhjmptwy"

//升序

chars[]="

ganke"

char*p1=a,*p2=s,*p=NULL;

while(*p2)

while(*p1)

if(*p2>

*p1)p1++;

elsebreak;

//要有出口!

p=p1;

//保存指针的位置!

while(*p1)p1++;

while(p1!

*(p1+1)=*p1;

p1--;

*(p1+1)=*p1;

*p=*p2;

p2++;

p1=a;

//指针复原很重要!

puts(a);

8、编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。

chara[]="

acegikm"

charb[]="

bdfhjlnpq"

//升序

charc[80],*p=c;

inti=0,j=0,k=0;

char*p1=a,*p2=b;

while(*p1||*p2)

if(*p1=='

*p2)

while(*p2)

*p++=*p2++;

if(*p1>

*p2)

*p++=*p2;

p2++;

elseif(*p1==*p2)

*p++=*p1;

p1++;

else

p1++;

*p=0;

puts(c);

intmain()

strcat(a,b);

voidpaixu(chara[]);

//排序函数

paixu(a);

voidpaixu(chara[])

inti,j,index,temp;

strlen(a)-1;

strlen(a);

if(a[j]<

a[index])index=j;

temp=a[index];

a[index]=a[i];

a[i]=temp;

}

9、编写程序判断一个字符串是否为回文字符串。

Level

Yes

12345

No

#include<

chars[81],*p1,*p2;

gets(s);

p1=p2=s;

while(*p2)p2++;

p2--;

while(p1<

p2)

if(*p1!

=*p2)break;

else

p1++;

p2--;

if(p1<

No\n"

else

Yes\n"

 

10、有n个人围成一个圆圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号?

intcount,i,j,m,n,no=0;

intnum[100];

&

for(i=0;

i<

n;

i++)

num[i]=i+1;

for(i=0,j=0;

for(count=0;

j=(j+1)%n)

if(num[j])

if(++count==3)break;

no++;

if(no==n)break;

No%d:

%d\n"

no,num[j]);

num[j]=0;

LastNois:

num[j]);

(借鉴别人的)

#defineN5//排队人数(可任意更改)

#defineCAL3//凡报3的人出列(可任意更改)

//下面是排队编号函数:

从h开始的n个人依次编号1到n

voidstdline(int*h,intn)

inti;

for(i=1;

n+1;

i++)*(h+i-1)=i;

/*下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列*/

voidoutline(int*h,intboy,intcall)

int*p,chu,callnum;

/*说明:

p工作指针,表示从头依次指向每个元素,点名

chu计数器,记录出列的人数

callnum计数器,记录点名次序

*/

chu=0;

callnum=0;

//各计数器清零

p=h;

//开始时,工作指针指向数组首

printf("

出列顺序是:

while(chu<

boy)

if(*p!

=0)callnum++;

//每次加报数

if(callnum==call)//如果某一个人报到出列数call...

%5d"

*p);

//打印编号,表示出列

chu++;

//出列人数加1

if(chu==boy)//如果全部出列....

*h=*p;

//把最后一个出列人的编号记入地址开始处

return;

//结束

if(chu%10==0)printf("

//每输出10个换行

callnum=0;

//出列后,重新报数

*p=0;

//出列后,将其编号赋零,以示区别

p++;

//工作指针移向下一个人,即下一个数组元素

if(p>

h+boy-1)p=h;

/*如果移到最后一个元素的后面,则让指向地址开头继续报数*/

inta[N];

//用数组模拟队列,每个元素代表一个人

stdline(a,N);

//编号

outli

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2