指针 交换
输入一组数,找出最大数和最小数,最大数与最后一个值互换,最小数与第一个数互换。如: 5 1 8 2
输出 1 5 2 8
# include <stdio.h>
int pri(int *j)//此函数用于输出
{
int k;
for(k=0;k<10;k++)
{
printf("%d ",*j);
j++;
}
return 0;
}
int num(int *p[])//此函数用于交换
{
int *j,max,min,*temp;
max=min=*p;
j=p;
for(p=j+1;p<(j+10);p++)
{
if(*p>max)
{
max=*p;//找出最大数
}
if(*p<min)
{
min=*p;//找出最小数
}
}
// 接下去我不知道该如何交换值,我发现我只能替代了那个值,却交换不了
pri(j);
return 0;
}
int main()
{
int a,i;
for(i=0;i<10;i++)
{
scanf("%d",&a);//输入数
}
num(a);
return 0;
}
求指点,我改了好多,发现用指针我只能用最小数把第一个数给替代了,而不能交换。 楼主 还有 我想说
初学编程 就要养成函数封装的习惯
不要什么都咣咣的往主函数里塞
把某一个功能单独封装成函数 并且遵循“一个函数只干一件事情”的原则
c/c++代码就像是搭积木 很好玩 是由一大堆零件(函数)拼起来的 可扩展性非常的高 也非常的灵活
建议楼主 早点学习到函数的部分 打下良好的编程风格 呵呵,关注一下下 本帖最后由 ryxcaixia 于 2015-11-17 13:43 编辑
#include <stdio.h>
#include <stdlib.h>
#include <vector>;
#include <algorithm>
using namespace std;
void splitstr(const char* str, vector<string>* vec)
{
const char* iter = str;
const char* pos= str;
while (*iter != NULL)
{
pos = strchr(iter, ' ');
if (pos == NULL) // last char
{
vec->push_back(iter);
return;
}
char buf = {0};
memcpy(buf, iter, pos - iter);
iter = pos+1;
vec->push_back(buf);
}
}
void _swap(int* lhs, int* rhs)
{
if (lhs == rhs) // not swap
return;
int tmp = *lhs;
*lhs = *rhs;
*rhs = tmp;
}
void sort_arr(int* arr, const int len)
{
int min = arr;
int min_pos = 0;
int max = arr;
int max_pos = 0;
// 找到最大值和最小值, 并记录下他们的位置
for (int i = 0; i != len; i++)
{
if (max < arr)
max = arr, max_pos = i;
if (min > arr)
min = arr, min_pos = i;
}
_swap(&arr, &arr); // 最大值与数组最后一个元素交换
_swap(&arr, &arr); // 最小值与数组第一个元素交换
}
int main()
{
// get the str
char buf = {0};
gets(buf);
// vec save the numbers(type string)
vector<string> vecstr;
vecstr.reserve(0xFF);
splitstr(buf, &vecstr);
// str(string) -> number(int)
vector<int> vecnum;
vecnum.reserve(vecstr.size());
for(vector<string>::const_iterator iter = vecstr.begin(); iter != vecstr.end(); iter++)
vecnum.push_back(atoi((*iter).c_str()));
// check
cout << "check stdin" << endl;
copy(vecnum.begin(), vecnum.end(), ostream_iterator<int>(cout, " "));
cout << endl;
// 如果楼主看不懂以上代码没有关系 上面的代码就是把标准输入的字符串 先转成一个一个字符串 再转成整数
// 看下面的就可以了, 结果是普通int数组, 方便楼主你理解
int* arr = (int*)malloc(sizeof(int) * vecnum.size());
int i = 0;
for(vector<int>::const_iterator iter = vecnum.begin(); iter != vecnum.end(); iter++)
arr = *iter;
// sort the array
int arr_len = vecnum.size();
sort_arr(arr, arr_len);
// after sort
printf("after the sort\n");
for (int i = 0; i != arr_len; i++)
printf("%d ", arr);
printf("\n");
free(arr)
return 0;
}
ryxcaixia 发表于 2015-11-17 12:05
楼主 还有 我想说
初学编程 就要养成函数封装的习惯
不要什么都咣咣的往主函数里塞
其实我已经学到 函数部分了,但是,为什么我感觉一起就会写,但是一分开,就感觉思路不清晰了,好难:cry 独一无② 发表于 2015-11-17 15:15
其实我已经学到 函数部分了,但是,为什么我感觉一起就会写,但是一分开,就感觉思路不清晰了,好难
买一本c++primer中文第四部
老外写的 绝对权威的入门书籍
全书所有习题代码从头敲到尾 编译通过
同时也能起到规范代码风格的作用
每天坚持几个小时 初学者 争取4个月内搞定 本帖最后由 ryxcaixia 于 2015-11-17 15:53 编辑
ryxcaixia 发表于 2015-11-17 15:49
买一本c++primer中文第四部
老外写的 绝对权威的入门书籍
全书所有习题代码从头敲到尾 编译通过
我现在学C,学C++ 可以看懂吗?
独一无② 发表于 2015-11-17 15:51
我现在学C,学C++ 可以看懂吗?
如果只是基础的语法 不涉及stl 类等c++特有的东西 完全看的懂 ryxcaixia 发表于 2015-11-17 15:53
如果只是基础的语法 不涉及stl 类等c++特有的东西 完全看的懂
哦哦,好的,谢谢~ 新手学习中。。。
页:
[1]