C语言函数
一、自己实现和库函数提供的strcpy以及strcat功能完全相同的函数(返回值是指针,并且可以直接使用puts(strcpy)输出拷贝结果)
- char *my_strcpy(char *dest,char *src)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int my_strcat(char *p1,char *p2)
{
int i=0,j=0;
while(*(p1+i))
{
i++;
}
while(*(p2+j))
{
*(p1+i)=*(p2+j);
i++;
j++;
}
*(p1+i)=*(p2+j);
}
int main(int argc, const char *argv[])
{
char str1[52]="hello";
char str2[20]="world";
char *p1=str1;
char *p2=str2;
my_strcat(str1,str2);
printf("%s\n",str1);
printf("%p\n",strcat(str1,str2));
printf("%p\n",str1);
return 0;
}
2.char *my_strcat(char *dest,char *src)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int my_strcpy(char *p1,char *p2)
{
while((*p1))
{
*(p2)=*(p1);
p1++;
p2++;
}
*(p2)=*(p1);
}
int main(int argc, const char *argv[])
{
char str1[7]="hh";
char str2[8]="hhh";
char *p1=str1;
char *p2=str2;
my_strcpy(str1,str2);
printf("%s\n",str2);
printf("%p\n",strcat(str1,str2));
printf("%p\n",str2);
return 0;
}
二、实现一个可以返回数组中最大元素地址的函数
int *find_max(int *arr,int len)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int *find_max(int *arr, int len)
{
int *max_p = arr;
for (int i = 0; i < len; i++)
{
if (*max_p < *(arr + i))
{
max_p = arr + i;
}
}
return max_p;
}
int main(int argc, const char *argv[])
{
int arr[] = {7, 8, 1, 1, 87, 78, 11};
int len = sizeof(arr) / sizeof(arr[0]);
int *max = find_max(arr, len);
printf("数组中的最大元素是:%d\n",*max);
return 0;
}
三、实现一个函数实现删除字符串中空格的操作
char *del(char *s)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *del(char *s)
{
char *yuan = s;
char *new = s;
while(*yuan!='\0')
{
if(*yuan != ' ')
{
*new = *yuan;
new++;
}
yuan++;
}
*new ='\0';
return s;
}
int main(int argc, const char *argv[])
{
char str[100];
char jg[100];
char *yuan =str;
char *new = jg;
printf("请输入一个字符串:");
gets(str);
char *zh =del(str);
printf("删除空格后的字符串:%s\n",zh);
return 0;
}
- 有以下定义,说明哪些量可以改变哪些不可以改变?
const char *p;
const (char *) p;
char *const p;
const char* const p;
char const *p;
(char *) const p;
char const* const p;
定义 | 指针指向能否改变 | 指针指向的内容能否改变 |
---|---|---|
const char *p; 、char const *p; | 能 | 不能 |
const (char *) p; 、(char *) const p; 、char * const p; | 不能 | 能 |
const char* const p; 、char const* const p; | 不能 | 不能 |
四、将前面循环时写的打怪兽的小游戏,每一个功能封装成函数
#include <stdio.h>
#include <stdlib.h>
int a = 10000; // 怪兽血量
int b = 0; // 攻击次数
int j[] = {50, 70, 90}; // 技能攻击值
int z[] = {5, 3}; // 装备攻击值
int g = 0; // 当前攻击力
void cd();
void jxz(int choice);
void zxz();
void gs();
void jg();
void cd()
{
printf("请选择技能:\n");
printf("'1':技能一(%d攻击值),'2':技能二(%d攻击值),'3':技能三(%d攻击值),'4':拾取装备,'5':退出游戏\n",
j[0], j[1], j[2]);
}
void jxz(int choice)
{
switch (choice)
{
case 1: g = j[0]; break;
case 2: g = j[1]; break;
case 3: g = j[2]; break;
}
}
void zxz()
{
int z_choice;
printf("请选择装备:\n");
printf("'1':刀+5攻击值,'2':木棍+3攻击值\n");
scanf("%d", &z_choice);
if (z_choice == 1)
{
g += z[0];
}
else if (z_choice == 2)
{
g += z[1];
} else
{
printf("无效的选择,已忽略。\n");
}
}
void gs()
{
a -= g;
b++;
printf("怪兽剩余血量:%d\n", a);
g = 0;
}
void jg()
{
printf("怪兽被杀死!一共攻击了%d次。\n", b);
}
int main()
{
int choice;
while (a > 0)
{
cd();
scanf("%d", &choice);
switch (choice)
{
case 1:
case 2:
case 3:
jxz(choice);
break;
case 4:
zxz();
break;
case 5:
printf("退出游戏。\n");
return 0;
default:
printf("无效选择,请重新选择。\n");
continue;
}
gs();
}
jg();
return 0;
}
六、’写一个函数实现对二维数组中元素的输出
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void pt(int arr[][3],int hang,int lie )
{
for(int i=0;i<hang;i++)
{
for(int j=0;j<lie;j++)
{
printf("%4d",arr[i][j]);
}
printf("\n");
}
}
int main(int argc, const char *argv[])
{
int arr[2][3]={{1,7,8},{9,8,87}};
pt(arr,2,3);
return 0;
}