目录
四、用字符数组存放一个字符串,求字符串的长度,并输出其长度及该字符串
前言
所有的程序均已经过调试
一、输入a,b两个整数,用指针实现按先后的顺序排列
#include<stdio.h>
int main()
{
int a,b,*p1,*p2,*p;
p1=&a;p2=&b;
printf("please input a b:");
scanf("%d%d",p1,p2);
if(*p1<*p2)
{p=p1;
p1=p2;
p2=p;}
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d *p2=%d",*p1,*p2);
return 0;
}
#include<stdio.h>
int main()
{
int a,b,*p1,*p2,t;
p1=&a;p2=&b;
printf("please input a b:");
scanf("%d%d",p1,p2);
if(*p1<*p2)
{
t=*p1;
*p1=*p2;
*p2=t;}
printf("%d,%d\n",a,b);
printf("%d,%d",*p1,*p2);
return 0;}
注意:这里改变了a,b 的取值,而指针的指向没有改变
二、从键盘输入n个学生的成绩,求他们的平均成绩
#include<stdio.h>
#define N 5
int main()
{
int a[N],i,sum=0;
for(i=0;i<N;i++)
scanf("%d",a+i);
for(i=0;i<N;i++)
sum=sum+*(a+i);
printf("%d",sum/N);
return 0;
}
三、用指针输出数组元素的值
1.列地址法
#include<stdio.h>
int main()
{
int a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24},*p;
for(p=a[0];p<a[0]+12;p++)
{if((p-a[0])%4==0)
printf("\n");
printf("%-5d ",*p);
}
return 0;}
2.偏移量法
#include<stdio.h>
int main()
{
int a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24},*p=a[0];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
printf("%-5d ",*(p+i*4+j));}
printf("\n");
return 0;}
注意:使用的还是列指针。输出用的是偏移量法。
3.行指针法
#include<stdio.h>
int main()
{
int a[3][4]={2,4,6,8,10,12,14,16,18,20,22,24};
int (*p)[4];
int j;
p=a;
for(;p<a+3;p++)
{ for(j=0;j<4;j++)
printf("%-5d ",*(*p+j));}
printf("\n");
return 0;}
注意:定义p时,圆括号不可省,因为【】的优先级高于*
四、用字符数组存放一个字符串,求字符串的长度,并输出其长度及该字符串。
1.数组:
#include<stdio.h>
int main()
{
char str[]={"gong zhu dian xai."};
int i,len;
len=i=0;
while(str[i++]!='\0')
len++;
printf("len=%d\n",len);
printf("%s\n",str);
return 0;
}
2.字符指针:
#include<stdio.h>
int main()
{
char str[]={"gong zhu dian xai."},*p;
int len;
len=0;
p=str;
while(*p!='\0')
{ len++;p++;}
printf("len=%d\n",len);
p=str;
printf("%s\n",p);
return 0;
}
注意: p=str;
printf("%s\n",p);
可以改为printf("%s\n",p-len);
可以先定义指针,再赋值。
char *p;
p="gong zhu dian xia .";
数组名是常量,其值直可引用,不可改变,不能作为赋值对象出现。
字符串的存储:
char str[20],*p=str;
scanf("%s",p);此时p有了明确的地址,可以进行存储。
五、用指针输出二维数组:
#include<stdio.h>
int main()
{
int arr[3][3]={9,8,7,6,5,4,3,2,1},i,j;
int *p[3]={arr[0],arr[1],arr[2]};
for(i=0;i<3;i++)
{printf("\n");
for(j=0;j<3;j++)
printf("%3d\n",p[i][j]);
}
return 0;
}
注意:指针数组p是数组名,不能进行自增自减运算。
六、有多个字符串,求其中最大的字符串
#include<stdio.h>
#include<string.h>
int main()
{
char *str[]={"mei","li","xiao","hai"};
int m=4;
int i,max=0;
for(i=1;i<m;i++)
if(strcmp(str[i],str[max])>0)
max=i;
printf("max=%s\n",str[max]);
return 0;}
七、用二级指针输出英文的星期
#include<stdio.h>
int main()
{
char *week[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int w;
char **ppw=week;
for(;ppw<week+7;ppw++)
printf("%10c %10s\n",**ppw,*ppw);
return 0;
}