我自己在学习c语言中的一些小总结,对c语言刚入门的人有些帮助
c语言环境下如何创建一个外部函数
1.首先确定要创建一个满足什么条件的函数;
2.按照格式写出主函数(作用:测试外部函数)
例:
int main()
{
int i = 0;
int arr[] = { 1,22,12,4,5,6,7,8,9};
int sz = sizeof(arr) / sizeof(arr[0]);
exchange(arr,sz);完成要求的函数,功能“将奇数转换到前面偶数放到后面”
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
3.编写满足要求的函数 exchange(arr,sz);
(1)分析函数所需的功能,捋清编程思路:
奇数放前 偶数放后
我们可以从两边开始找,从左边第一个数开始向右找偶数,从右边第一个数开始找奇数;
然后将左边的偶数与右边的奇数互换;到此就完成了一次互换,交换了一组奇偶数;
我们在此可以加一个while循环就可以完成所有奇偶数的互换了。
参数设置:
先求出元素个数 :int sz=sizeof(arr)/sizeof(arr[0]);
左端第一个数的地址:int *left=arr;
右端第一个数的地址:int *right=arr+sz-1;
循环的限制条件:while(left<right);
(2)函数代码:
void exchange(int *arr, int sz)
{
int *left =arr;
int *right = arr + sz - 1;
while (left < right)
{
while ((*left) % 2 == 1)
{
left++;
}
while ((*right) % 2 == 0)
{
right--;
}
if (left < right)
{
int ret = *left;
*left = *right;
*right = ret;
}
left++;
right--;
}
}
4.函数与主函数组合的完整代码:
#include<stdio.h>
void exchange(int *arr, int sz)
{
int *left =arr;
int *right = arr + sz - 1;
while (left < right)
{
while ((*left) % 2 == 1)
{
left++;
}
while ((*right) % 2 == 0)
{
right--;
}
if (left < right)
{
int ret = *left;
*left = *right;
*right = ret;
}
left++;
right--;
}
}
int main()
{
int i = 0;
int arr[] = { 1,22,12,4,5,6,7,8,9};
int sz = sizeof(arr) / sizeof(arr[0]);
exchange(arr,sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
注:如果主函数 int main()放在前面,需要对函数声明
即:
#include<stdio.h>
int main()
{
void exchange(int *arr,int sz);
int i = 0;
int arr[] = { 1,22,12,4,5,6,7,8,9};
int sz = sizeof(arr) / sizeof(arr[0]);
exchange(arr,sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
void exchange(int *arr, int sz)
{
int *left =arr;
int *right = arr + sz - 1;
while (left < right)
{
while ((*left) % 2 == 1)
{
left++;
}
while ((*right) % 2 == 0)
{
right--;
}
if (left < right)
{
int ret = *left;
*left = *right;
*right = ret;
}
left++;
right--;
}
}