1.编写一函数,完成一个字符串的拷贝,要求用字符指针实现。在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。
#include
#include
void my_copy(char *p,char *q)
{
while(*p != '\0')
{
*q = *p;
q++;
p++;
}
*q = '\0';
}
int main(int argc, const char *argv[])
{
char str1[100],str2[100];
gets(str1);
puts(str1);
my_copy(str1,str2);
puts(str2);
return 0;
}
2.编写一函数,求一个字符串的长度,要求用字符指针实现。在主函数中输入字符串,调用该函数输出其长度。
#include
#include
int my_strlen(char *p)
{
int tot=0;
while(*p != '\0')
{
tot++;
p++;
}
return tot+1; //包含 '\0'
}
int main(int argc, const char *argv[])
{
char str[100];
gets(str);
printf("tot:%d\n",my_strlen(str));
return 0;
}
3.从键盘上输入10个数据到一维数组中,然后找出数组中的最大值和该值所在的元素下标。
#include
int max(int *p)
{
int max;
int i,j;
int index;
for(i=0;i<9;i++)
{
max = *(p+i);
index = i;
for(j=1;j<10;j++)
{
if(max < *(p+j))
{
max = *(p+j);
index = j;
}
}
}
return index;
}
int min(int *p)
{
int min;
int i,j;
int index;
for(i=0;i<10;i++)
{
min = *(p+i);
index = i;
for(j=1;j<10;j++)
{
if(min > *(p+j))
{
min = *(p+j);
index = j;
}
}
}
return index;
}
int main(int argc, const char *argv[])
{
int a[10];
int i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("max下标:%d,min下标:%d\n",max(a),min(a));
return 0;
}
4.从键盘上输入10个整数存放到一维数组中,将其中最小的数与第一个数对换,最大的数与最后一个数对换。要求进行数据交换的处理过程编写成一个函数,函数中对数据的处理要用指针方法实现。输入数据为:35,20,94,-23,39,-56,100,87,49,12.
#include
void max(int *p)
{
int max,temp;
int i,j;
int index;
for(i=0;i<9;i++)
{
max = *(p+i);
index = i;
for(j=1;j<10;j++)
{
if(max < *(p+j))
{
max = *(p+j);
index = j;
}
}
}
temp = *(p + index);
*(p + index) = *(p + 9);
*(p + 9) = temp;
}
void min(int *p)
{
int min,temp;
int i,j;
int index;
for(i=0;i<10;i++)
{
min = *(p+i);
index = i;
for(j=1;j<10;j++)
{
if(min > *(p+j))
{
min = *(p+j);
index = j;
}
}
}
temp = *(p + index);
*(p + index) = *(p + 0);
*(p + 0) = temp;
}
int main(int argc, const char *argv[])
{
int a[10];
int i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
min(a);
max(a);
for(i=0;i<10;i++)
{
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}
5.编写一个函数(参数用指针)将一个3×3矩阵转置。
#include
void zhuanzhi(int (*p)[3],int (*q)[3])
{
int i,j,k;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
*(*(q+i)+k) = *(*(p +k) + i);
}
}
}
}
int main(int argc, const char *argv[])
{
int a[3][3],b[3][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
zhuanzhi(a,b);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",b[i][j]);
}
}
printf("\n");
return 0;
}
6.利用指向行的指针变量求5×3数组各行元素之和
#include
void my_tot(int (*p)[3])
{
int tot;
int i,j;
for(i=0;i<5;i++)
{
tot = 0;
for(j=0;j<3;j++)
{
tot += *(*(p+i) + j);
}
printf("第%d行元素之和为:%d\n",i+1,tot);
}
}
int main(int argc, const char *argv[])
{
int a[5][3];
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
//printf("tot:%d\n",my_tot(a));
my_tot(a);
return 0;
}
7.从键盘上输入10个整数存放到一维数组中,用函数实现将10个整数按输入时的顺序逆序排列,函数中对数据的处理要用指针方法实现。
#include
void my_nixu(int *head,int *tail)
{
char temp;
while(head < tail)
{
temp = *head;
*head = *tail;
*tail = temp;
head ++;
tail --;
}
}
int main(int argc, const char *argv[])
{
int a[10];
int i;
int *head,*tail;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
head = &a[0];
tail = &a[9];
my_nixu(head,tail);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
8.用指针法编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串,并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。
#include
#include
int main(int argc, const char *argv[])
{
//通过调用系统库函数来写的
char s[6];
char max[6];
gets(s);
strcpy(max,s);
while(1)
{
gets(s);
if(strncmp(s,"*****",5) == 0)
break;
if(strcmp(max,s) < 0)
strcpy(max,s);
}
printf("%s\n",max);
return 0;
}
9、编写一个函数,函数的功能是移动字符串中的内容。移动的规则如下:把第1到第m个字符,平移到字符串的最后;再把第m+1到最后的字符移动到字符串的前部。例如,字符串中原由的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC。在主函数中输入一个长度不大于20的字符串和平移的值m,调用函数完成字符串的平移。要求用指针方法处理字符串。
#include
#include
void fun(char *head,char *tail,char *p,int m,int n)
{
int i;
for(i = 0;i < n-m-1 ;i ++) //去掉 '\0' 的位置
{
*p = *(tail+i);
p++;
}
for(i = 0;i < m;i++)
{
*p = *(head + i);
p++;
}
*p = '\0';
}
int main(int argc, const char *argv[])
{
char str1[20],str2[40];
int m,n;
char *head,*tail;
gets(str1);
n = strlen(str1);
scanf("%d",&m);
head = str1 + 0;
tail = str1 + m;
fun(head,tail,str2,m,n);
puts(str2);
return 0;
}
10、输入一个长度不大于30的字符串,将此字符串中从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针方法处理字符串。
#include
#include
void my_copy(char *p,char *q,int m,int n)
{
int i;
for(i = m - 1;i < n;i ++)
{
*q = *(p + i);
q++;
}
*q = '\0';
}
int main(int argc, const char *argv[])
{
char str1[30],str2[30];
int m,n ;
gets(str1);
scanf("%d",&m);
n = strlen(str1);
my_copy(str1,str2,m,n);
puts(str2);
return 0;
}