实现对数组的排序
要求:
<1>在自定义函数Input中实现循环输入
<2>在Bubble函数中实现冒泡
<3>在Output函数中输出
#include <stdio.h>
int arr[5];//全局变量
//函数声明
void Input();
void Bubble();
void Output();
int main(void)
{
//实现对数组的排序
Input();//自定义输入函数
Bubble();//冒泡排序函数
Output();//打印输出函数
return 0;
}
void Input()
{
printf("请输入元素:(长度5)\n");
for (int i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
}
void Bubble()
{
for (int i = 0; i < 5 - 1; i++)
{
int cnt = 0;
for (int j = 0; j < 5 - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
cnt++;
}
}
if (!cnt)//标志:如果已经排序完成,则直接退出循环
{
break;
}
}
}
void Output()
{
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
}
2.单词逆置
要求:
<1>在主函数输入字符串
<2>定义有参函数void my_ strrev(char str[] ,int start,int end ),start表示起始 下标end表示终止下标
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void my_strrev(char str[], int start, int end);
int main(void)
{
//实现单词的逆置,在自定义函数中输出逆置后的字符串
char str[20] = "";
printf("请输入一句话:\n");
gets(str);
int start = 0;
int end = strlen(str) - 1;
my_strrev(str, start, end);
return 0;
}
void my_strrev(char str[], int start, int end)
{
int e = end;
while (start < end)//首先全部逆置
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
printf("%s\n", str);
int i = 0;
int cnt = 0;
while(i < e)//每个单词逆置
{
while(str[cnt] != ' ' && str[cnt] != '\0')//找到一个单词的结束下标
{
cnt++;
}
int k = cnt - 1;
while (i < k)
{
char t = str[i];
str[i] = str[k];
str[k] = t;
i++;
k--;
}
while (str[cnt] == ' ')//找到下一个单词的起始位置
{
cnt++;
}
i = cnt;
}
printf("%s\n", str);
}
3.自定义函数实现字符串比较
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int my_strcmp(char str1[], char str2[]);
int main(void)
{
//自定义函数实现字符串比较
char str1[20] = "";
char str2[20] = "";
printf("请输入两个字符串:\n");
scanf("%s%s", str1,str2);
//returns -1 if str1 < str2
//returns 0 if str1 == str2
//returns +1 if str1 > str2
int ret = my_strcmp(str1, str2);
printf("%d\n", ret);
return 0;
}
int my_strcmp(char str1[], char str2[])
{
int ret = 0;
int i = 0;
//比较每个单字符是否相等,并把计算结果赋值给ret
while ((ret = str1[i] - str2[i]) == 0 && str2[i])
{
++i;
}
return ((-ret) < 0) - (ret < 0);
}
4.自定义函数实现字符串拷贝
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void my_strcpy(char dest[], char src[]);
int main(void)
{
//自定义函数实现字符串拷贝
char str1[20] = "";
char str2[20] = "";
printf("请输入字符串:\n");
scanf("%s",str2);
my_strcpy(str1, str2);
return 0;
}
void my_strcpy(char dest[], char src[])
{
int i = 0;
while (dest[i] = src[i])
++i;
printf("str1:%s", dest);
}
5.自定义函数实现字符串连接
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void my_strcpy(char dest[], char src[]);
int main(void)
{
//自定义函数实现字符串连接
char str1[20] = "";
char str2[20] = "";
printf("请输入两个字符串:\n");
scanf("%s%s", str1, str2);
my_strcpy(str1, str2);
return 0;
}
void my_strcpy(char dest[], char src[])
{
int i = 0;
while (dest[i])//先找到目标字符串末尾下标
i++;
int j = 0;
while ((dest[i++] = src[j++]) != '\0')//从目标末尾开始拷贝
;
printf("%s", dest);
}
备注:对于库函数的自定义实现,是以学习源码来实现的