【程序71】 题目:输入3个数a,b,c,按大小顺序输出。 1.程序分析:利用指针方法。 2.程序源代码: /*pointer*/
#include void main() { int n1,n2,n3; int *pointer1,*pointer2,*pointer3; printf("please input 3 number:n1,n2,n3:"); scanf("%d,%d,%d",&n1,&n2,&n3); pointer1=&n1; pointer2=&n2; pointer3=&n3; if(n1>n2) swap(pointer1,pointer2); if(n1>n3) swap(pointer1,pointer3); if(n2>n3) swap(pointer2,pointer3); printf("the sorted numbers are:%d,%d,%d/n",n1,n2,n3); } swap(int * p1,int* p2); {int p; p=*p1;*p1=*p2;*p2=p; } ----------------------------------------------------------------------------- 【程序72】 题目:利用指针获取输入数组,并利用指针输出该数组
1.程序分析:注意指针的地址作用 2.程序源代码:
#include
void main()
{
int a[10];
int i;
int *p;
for(i=0;i<10;i++)
scanf("%d",(a+i));
for(p=a;p
printf("%d",*p); // printf("%d",*p++);
}
-----------------------------------------------------------------------------
【程序73】 题目:将数组a中n个整数按相反顺序存放
1. 程序分析:将a[0]与a[n-1]对换,用两个指针分别指向头和尾
2. 程序源代码:
#include
void main()
{
int array[10]={1,2,3,4,5,6,7,8,9,11};
int *p,*q;
int temp,i;
p=array;
q=&array[9];
for(i=0;i<5;i++,p++,q--)
{
temp=*p;
*p=*q;
*q=temp;
}
for(p=array;p
printf("%4d",*p++);
printf("/n");
}
-----------------------------------------------------------------------------
【程序74】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 1.程序分析: 2.程序源代码: #include
void maxminexchange(int *a,int n)
{
int *p,*q;
int max,min,i,temp;
max=a[0];
min=a[0];
for(i=0;i
{
if(a[i]>max){max=a[i];p=a+i;}
if(a[i]
}
temp=a[0];
a[0]=*p;
*p=temp;
temp=a[n-1];
a[n-1]=*q;
*q=temp;
}
void main()
{
int array[15]={2,1,12,3,23,4,5,6,4,6,2,8,7,2,9};
maxminexchange(array,15);
int *p=array;
while(p
printf("%4d",*p++);
} ----------------------------------------------------------------------------- 【程序75】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 1.程序分析: 2.程序源代码: #include
void pushback(int *a,int n,int m)
{
int temp[50];
int *p=a+n-m;
int i=0,j;
while(p
{
temp[i++]=*p++;
}
for(i=0;i
{
for(j=n-2;j>=0;j--)
a[j+1]=a[j];
}
for(i=0;i
a[i]=temp[i];
}
void main()
{
int array[20]={3,4,6,7,8,9,12,13,15,18,2,1,76,23,35,36,12,18,67,34};
pushback(array,20,3);
int *p=array;
while(p
printf("%4d",*p++);
} -----------------------------------------------------------------------------
【程序76】 题目:有一个班,3个学生,各学4门课,计算总平均分数,以及第n个学生的成绩,查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
1. 程序分析:这道题的目的在于练习二维数组指针的传参
2. .程序源代码:
#include
void average(float *p,int n);
void search(float (*p)[4],int n);
void search_fail(float (*p)[4],int n);
void main()
{
float score[3][4]={{65,47,70,60},{80,57,90,81},{90,99,100,98}};
average(score[0],12);
search(score,2);
search_fail(score,3);
}
void average(float *p,int n)
{
float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f/n",aver);
}
void search(float (*p)[4],int n)
{
int i;
printf("the score of No.%d are:/n",n);
for(i=0;i<4;i++)
printf("%5.2f",*(*(p+n)+i));
printf("/n");
}
void search_fail(float (*p)[4],int n)
{
int i,j,flag;
for(j=0;j
{
flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)flag=1;
if(flag==1)
{
printf("No.%d fails his scores are:/n",j+1);
for(i=0;i<4;i++)
printf("%5.1f",*(*(p+j)+i));
printf("/n");
}
}
} ----------------------------------------------------------------------------- 【程序77】 题目:将字符串a复制为字符串b 1.程序分析:熟悉字符指针的用法 2.程序源代码:
#include
void main()
{
char a[]="I am a boy.";
char b[20];
int i;
for(i=0;*(a+i)!='/0';i++)
*(b+i)=*(a+i);
*(b+i)='/0';
printf("string a is:%s/n",a);
printf("string b is:");
for(i=0;b[i]!='/0';i++)
printf("%c",b[i]);
printf("/n");
}
//char *a 和char a[]的不同,下边这道题开始的时候定义char *b=”…”;b表示字符串常量的首地//址,如果要改变字符数组的值就要以数组的形式定义。
#include
void copy_string(char *from,char *to)
{
int i=0;
for(;(*from)!='/0';from++,to++)
{*to=*from;}
*to='/0';
}
void main()
{
char a[]="I am a teacher";
char b[]="you are a student";
printf("/nstring a=%s/nstring b=%s/n",a,b);
copy_string(a,b);
printf("/nstring a=%s/nstring b=%s/n",a,b);
}
-----------------------------------------------------------------------------
【程序78】 题目:计算字符串中子串出现的次数 1.程序分析: 2.程序源代码: #include "string.h" #include "stdio.h" void main() { char str1[20],str2[20],*p1,*p2; int sum=0; printf("please input two strings/n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1!='/0') { if(*p1==*p2) {while(*p1==*p2&&*p2!='/0') {p1++; p2++;} } else p1++; if(*p2=='/0') sum++; p2=str2; } printf("%d",sum); getchar();
}
----------------------------------------------------------------------------- 【程序79】 题目:字符串排序。 1.程序分析: 2.程序源代码: main() { char *str1[20],*str2[20],*str3[20]; char swap(); printf("please input three strings/n"); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf("after being sorted/n"); printf("%s/n%s/n%s/n",str1,str2,str3); } char swap(char *p1,char*p2) { char *p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } -----------------------------------------------------------------------------
【程序80】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 1. 程序分析: 2.程序源代码: #define nmax 50 main() { int i,k,m,n,num[nmax],*p; printf("please input the total of numbers:"); scanf("%d",&n); p=num; for(i=0;i*(p+i)=i+1; i=0; k=0; m=0; while(m{ if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("%d is left/n",*p); } ----------------------------------------------------------------------------- 【程序81】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 1.程序分析: 2.程序源代码:
#include void main() { int len; char *str[20]; printf("please input a string:/n"); scanf("%s",str); len=length(str); printf("the string has %d characters.",len); } length(char *p) { int n; n=0; while(*p!='/0') { n++; p++; } return n; }
-----------------------------------------------------------------------------
【程序82】 题目:设一个函数process,在调用它的时候,每次实现不同的功能,输入a,b两个数,第一次调用process时找出a,b中大者,第二次找出小者,第三次求a,b和。(利用指针函数) 1.程序分析: 2.程序源代码:
#include
void process(int x,int y,int(*fun)(int,int));
void main()
{
int max(int,int);
int min(int,int);
int add(int,int);
int a,b;
printf("enter a and b:");
scanf("%d,%d",&a,&b);
printf("Max=");
process(a,b,max);
printf("min=");
process(a,b,min);
printf("sum=");
process(a,b,add);
}
int max(int x,int y)
{
int z;
if(x>y)z=x;
else z=y;
return z;
}
int min(int x,int y)
{
int z;
if(x
else z=y;
return z;
}
int add(int x,int y)
{
int z;
z=x+y;
return z;
}
void process(int x,int y,int(*fun)(int,int))
{
int result;
result=(*fun)(x,y);
printf("%d/n",result);
}
----------------------------------------------------------------------------- 【程序83】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) 1.程序分析: 2.程序源代码: #include "stdio.h" void main() { float peven(),podd(),dcall(); float sum; int n; while (1) { scanf("%d",&n); if(n>1) break; } if(n%2==0) { printf("Even="); sum=dcall(peven,n); } else { printf("Odd="); sum=dcall(podd,n); } printf("%f",sum); } float peven(int n) { float s; int i; s=1; for(i=2;i<=n;i+=2) s+=1/(float)i; return(s); } float podd(int n) { float s; int i; s=0; for(i=1;i<=n;i+=2) s+=1/(float)i; return(s); } float dcall(float (*fp), int n) { float s; s=(*fp)(n); return(s); } -----------------------------------------------------------------------------
【程序84】 题目:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号以后,输出该学生的全部成绩,用指针返回值。
1.程序分析:加深一下指针返回值和指针引用二维数组的理解 2.程序源代码
#include
float *search(float(*pointer)[4],int n);
void main()
{
float score[3][4]={{60,70,80,45},{56,67,88,89},{89,90,95,100}};
float *p;
int i,m;
printf("enter the number of student:");
scanf("%d",&m);
printf("The scores of No.%d are:/n",m);
p=search(score,m);
for(i=0;i<4;i++)
printf("%5.2f/t",*(p+i));
}
float *search(float(*pointer)[4],int n)
{
float *pt;
pt=*(pointer+n);
return pt;
}
-----------------------------------------------------------------------------
【程序85】 题目: 练习一道指向指针的指针
1.程序分析:
2.程序源代码
(1)
#include
Void main()
{
static int a[5]={1,3,5,7,9};
int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
int * *p,i
p=num;
for(i=0;i<5;i++)
{printf(“%d/t”,* *p);p++;}
}
(2)
#include
Void main()
{
char *name[]={“Follow me”,”BASIC”,”GreatWall”};
char **p;
int I;
for(i=0;i<3;i++)
{p=name+i;printf(“%s/n”,*p);}
}
-----------------------------------------------------------------------------
【程序86】 题目:两个字符串连接程序 1.程序分析: 2.程序源代码: #include "stdio.h" main() {char a[]="acegikm"; char b[]="bdfhjlnpq"; char c[80],*p; int i=0,j=0,k=0; while(a[i]!='/0'&&b[j]!='/0') {if (a[i]{ c[k]=a[i];i++;} else c[k]=b[j++]; k++; } c[k]='/0'; if(a[i]=='/0') p=b+j; else p=a+i; strcat(c,p); puts(c); }