1.整理思维导图

2.使用指针实现冒泡排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//冒泡排序
void maop(int *p,int len)
{
for(int i=0;i<len;i++)
{
for(int j=i;j<len-1;j++)
{
//比较
if(*(p+j)>*(p+j+1))
{
*(p+j)=*(p+j)^*(p+j+1);
*(p+j+1)=*(p+j)^*(p+j+1);
*(p+j)=*(p+j)^*(p+j+1);
}
}
}
}
int main(int argc, const char *argv[])
{
//输入数组长度
printf("请输入数组长度:");
int len=0;
scanf("%d",&len);
//定义数组
int arr[len];
int *p=arr;
//输入数组元素;
for(int i=0;i<len;i++)
{
printf("请输入数组第%d个元素",i+1);
scanf("%d",p+i);
}
//冒泡排序
maop(p,len);
//遍历
for(int i=0;i<len;i++)
{
printf("%d",*(p+i));
}
return 0;
}
运行结果

3.用指针求一维数组中元素的最大值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int ymax(int *p)
{
int max=0;
for(int i=0;i<2;i++)
{
if(max<*(p+i))
{
max=*(p+i);
}
}
return max;
}
int main(int argc, const char *argv[])
{
int arr[4]={1,9,7,6};
printf("最大值为:%d\\n",ymax(arr));
return 0;
}
运行结果

4.实现自已的strlen、strcpy、strcat、strcmp函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//strlen()求的是长度
//返回值就是数组长度(int类型)
//需要传入待测字符数组
int my_strlen(char *p)
{
int i=0;
while(*(p+i))
{
i++;
}
return i;
}
//strcpy()的功能是复制
//strcpy会覆盖原有字符
//需要传入两个字符数组
void my_strcpy(char *p,char *p1)
{
int i=0;
while(*(p+i))
{
*(p1+i)=*(p+i);
i++;
}
}
//strcat()的功能是追加
//在原字符串后增加新的字符
//需要传入两个字符数组
void my_strcat(char *p,char *p1)
{
int i=0;
//计算字符数组1的长度
while(*(p+i))
{
i++;
}
//根据字符数组1的长度向后追加
int j=0;
while(*(p1+j))
{
*(p+j+i)=*(p+j);
j++;
}
}
//strcmp()功能是比较两个字符串的内容
//返回不同位置的ASCII码差值
//需要穿两个字符数组
int my_strcmp(char *p,char *p1)
{
int i=0;
while(*(p+i)||*(p1+i))
{
if(*(p+i)!=*(p1+i))
{
return (*(p+i)-*(p1+i));
}
i++;
}
}
int main(int argc, const char *argv[])
{
//定义一维字符数组
char str1[128]="empty";
char str2[]="hello world";
//strlib
int len=my_strlen(str2);
printf("数组长度为:%d\\n",len);
printf("复制前str1:");
puts(str1);
my_strcpy(str2,str1);
printf("复制后str1:");
puts(str1);
printf("追加前str1:");
puts(str1);
my_strcat(str1,str2);
printf("追加后str1:");
puts(str1);
int deff=my_strcmp(str1,str2);
printf("my_strcmp=%d\\n",deff);
printf("srtcmp=%d\\n",strcmp(str1,str2));
return 0;
}
运行结果

5.尝试用指针实现求二维数组中,最大值的函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dmax(int (*p)[3],int ilen,int jlen)
{
int max=0;
for(int i=0;i<ilen;i++)
{
for(int j=0;j<3;j++)
{
if(max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
}
}
}
return max;
}
//比较二维数组中最大值
//返回值可设置为最大值
int main(int argc, const char *argv[])
{
//定义二维数组
int arr[2][3]={1,5,7,4,6,8};
//比较最大值的函数
printf("最大值为:%d\\n",dmax(arr,2,3));
return 0;
}
运行结果

6.猴子吃桃问题是一个著名的数学问题,也是中国古代著名的算术题之一。“猴子吃桃”的背景是这样的:一只猴子第一天摘下了
一堆桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃了一半,同样又多吃了一个;以后每天早
上都吃了前一天剩下的一半零一个,到第十天早上再想吃时,发现只剩下一个桃子了,问这只猴子第一天共摘了多少个桃子?
(1534)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//猴子吃桃问题
//已知第十天早(第九天结束后)剩下一个桃
//即需要九次循环
//每天吃桃一半多一可知即每天吃x/2+1个
//换算成消耗即x=x-x/2-1
//由第十天早的一个桃子开始
int pch=1;
int day=10;
while(day!=1)
{
pch=(pch+1)*2;
day–;
}
printf("介猴第一天一共摘了%d\\n",pch);
return 0;
}
评论前必须登录!
注册