C语言指针精选习题和答案精心整理Word文档格式.docx
- 文档编号:16031406
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:14
- 大小:18.44KB
C语言指针精选习题和答案精心整理Word文档格式.docx
《C语言指针精选习题和答案精心整理Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言指针精选习题和答案精心整理Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
二、C语言用指针方法输入3个字符串按由小到大顺序输出
#include"
stdio.h"
string.h"
intmain(intargc,char*argv[])
{
char*t;
char*p1=NULL,*p2=NULL,*p3=NULL;
charch1[20]={0},ch2[20]={0},ch3[20]={0};
p1=ch1;
p2=ch2;
p3=ch3;
printf("
No1:
"
);
scanf("
%s"
p1);
fflush(stdin);
No2:
scanf("
p2);
No3:
p3);
if(strcmp(p1,p2)>
0)
{t=p1;
p1=p2;
p2=t;
if(strcmp(p1,p3)>
p1=p3;
p3=t;
if(strcmp(p2,p3)>
{t=p2;
p2=p3;
%s\n%s\n%s\n"
p1,p2,p3);
return0;
9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数
#include<
inta=0,b=0,c=0,d=0,e=0,i=0;
char*p,s[20];
while((s[i]=getchar())!
='
\n'
)i++;
p=s;
while(*p!
=10)
if(*p>
A'
&
*p<
Z'
)
a++;
elseif(*p>
a'
z'
b++;
elseif(*p=='
'
c++;
0'
9'
d++;
elsee++;
p++;
大写字母%d小写字母%d\n"
a,b);
空格%d数字%d非字符%d\n"
c,d,e);
9.5写一个函数,将33矩阵转置
voidTranspose(int(*matrix)[3])
inttemp;
inti,j;
for(i=1;
i<
3;
i++)/*转置*/
{
for(j=0;
j<
i;
j++)
temp=*(*(matrix+j)+i);
*(*(matrix+j)+i)=*(*(matrix+i)+j);
*(*(matrix+i)+j)=temp;
}
voidmain()
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
Transpose(a);
for(inti=0;
i++)
for(intj=0;
%d"
a[i][j]);
\n"
9.6用指向一维数组的指针做函数参数
string.h>
intmain()
voidsort(char(*s)[6]);
//一维数组的指针做函数参数
inti;
charstr[10][6];
char(*p)[6];
//定义一维数组的指针做函数参数
pleaseinputstring:
/n"
for(i=0;
10;
str[i]);
p=str;
//将str一维数组指针,赋值给p;
sort(p);
theoutputsequence:
%s/n"
str[i]);
return0;
voidsort(char(*s)[6])//s指向一维数组的指针做函数参数;
inti,j;
chartemp[6],*t;
t=temp;
for(i=0;
9;
i++)//i应该小于9;
如果小于10,那么就比较了9+1次;
按照冒泡法则,
for(j=0;
9-i;
j++)//第一次比较需要9次就是i=0到i=8共九次;
第二次需要比较8次;
依次类推;
if(strcmp(s[j],s[j+1])>
strcpy(t,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],t);
9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
用另一函数对它们排序,然后在主函数中输出10个已排好序的字符串
//用指针数组处理
voidsort(char*[]);
charstr[10][6],*p[10];
pleaseinput10string:
i++)//首先将10个str的首地址赋值给10个p[i];
p[i]=str[i];
//将第i个字符串的首地址赋予指针数组p的第i个元素;
p[i]);
//scanf输入到&
p[i]
sort(p);
theoutput10string:
//输出到p[i];
voidsort(char*s[])
char*temp;
if(strcmp(*(s+j),*(s+j+1))>
temp=*(s+j);
//*(s+j)指向数组指针,我想应该是字符串的首地址;
所以可以直接赋值给temp指针;
*(s+j)=*(s+j+1);
*(s+j+1)=temp;
9.8指针将n个数按输入时顺序的逆序排列,用函数实现
voidreverse(inta[],intn)
{int*p;
for(p=a+n-1;
p>
=a;
p--)
%4d"
*p);
main()
{inta[20],n;
inti;
Inputthelengthofarray:
%d"
n);
Inputthenumberofarray:
n;
a[i]);
reverse(a,n);
9.9写一函数,实现两个字符串的比较。
即自己写一个strcmp函数,函数原型为:
intstremp(char*p1,char*p2)
设p1指向字符串s1,p2指向字符串s2。
要求:
当s1=s2时,返回值为0。
当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);
如果s1>
s2,则输出正值;
如果s1<
s2,则输出负值。
{intstrcmp(char*p1,char*p2);
intm;
charstr1[20],str2[20],*p1,*p2;
Inputtwostrings:
str1);
str2);
p1=&
str1[0];
p2=&
str2[0];
m=strcmp(p1,p2);
result:
%d\n"
m);
intstrcmp(char*p1,char*p2)/*两个字符串比较的函数*/
{inti;
i=0;
while(*(p1+i)==*(p2+i))
if(*(p1+i++)=='
\0'
)return(0);
/*相等时返回结果0*/
return(*(p1+i)-*(p2+i));
/*不等时返回结果为第一个不等字符ASCII码的差值*/
运行情况如下:
①Inputtwostrings:
CHINA↙
Chen↙
Result:
-32
②Inputtwostrings:
hello!
↙
Hello!
0
③Inputtwostings:
dog↙
cat↙
result:
1
9.10编一个程序,打入月份号,输出该月的英文月名。
例如,输入“3”,则输出“March”,要求用指针数组处理。
{char*month_name[13]={"
illegalmonth"
"
January"
February"
March"
April"
"
May"
June"
July"
August"
September"
October"
November"
December"
};
intn;
Inputmonth:
if((n<
=12)&
(n>
=1))
Itis%s.\n"
*(month_name+n));
else
Itiswrong.\n"
运行结果:
①Inputmonth:
2↙
ItisFebruary.
②Inputmonth:
8↙
ItisAugust.
③Inputmonth:
13↙
Itiswrong.
9.11c语言:
将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。
请用指针实现
#defineMA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 精选 习题 答案 精心 整理