不知道哪里错了,新人求教
本帖最后由 1037733929 于 2018-10-25 14:01 编辑题目:输入十个数字,将其中最小的数与第一个数对换,讲最大的数与最后一个数对换。(要用指针完成)
#include <stdio.h>
int n(int *p_0)
{
int number_g,number_h,number_j,number_o,number_x;
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j != i && j <= 9; j++)
{
if (*(p_0 + i) > *(p_0 + j))
{
number_g = *(p_0 + i);
number_o = i;
}
}
for (int j = 0; j != i && j <= 9; j++)
{
if (*(p_0 + i) < *(p_0 + j))
{
number_h = *(p_0 + i);
number_x = i;
}
}
}
number_j = *(p_0 + 9);
*(p_0 + 9) = *(p_0 + number_o);
*(p_0 + number_o) = number_j;
number_j = *p_0;
*p_0 = *(p_0 + number_x);
*(p_0 + number_x) = number_j;
return NULL;
}
int main()
{
int number;
int *p;
p = number;
printf("Please entern ten numbers:");
for (int i = 0; i <= 9; i++)
{
printf("\n%d:", i + 1);
scanf_s("%d", p);
}
n(p);
for (int j = 0; j <= 9; j++)
{
printf("%d\n", *(p + j));
}
return 0;
}
不知道哪里错了,求指导{:5_94:} 你的函数没有必要有返回值 void 就好。如果你要返回整形,那应该 return 0。NULL 会被认为是空指针
不是很完整,不过绝对是透过指针修改的
你原本的等等#include <stdio.h>
void swap(int *x, int *y)
{
int t = *x;
*x = *y;
*y = t;
}
void arrange(int arr[], int index_min, int index_max)
{
if(index_min != 0)
swap(&arr, &arr);
if(index_max != 9)
swap(&arr, &arr);
}
int main()
{
int number;
int max = -65535, min = 65535;
int index_max, index_min;
printf("Please enter ten numbers:\n");
for (int i = 0; i < 10; i++)
{
printf("%d: ", i + 1);
scanf("%d", &number);
if(number > max)
{
max = number;
index_max = i;
}
if(number < max)
{
min = number;
index_min = i;
}
}
arrange(number,index_min, index_max);
for (int i = 0; i < 10; i++)
{
printf("%d ", number);
}
printf("\n");
return 0;
} #include <stdio.h>
#define ARR_MAX 10
struct _ {
int max;
int mix;
}struct_;
void is_max_mix(int* arr) {
struct_.mix = arr, struct_.max = arr;
// 找最大
for (int i = 0; i < ARR_MAX; i++) {
if (arr > struct_.max) {
struct_.max = arr;
}
}
// 找最小
for (int i = 0; i < ARR_MAX; i++) {
if (arr < struct_.mix) {
struct_.mix = arr;
}
}
}
void Swap(int* arr) {
// 换最小数
for (int i = 0; i < ARR_MAX; i++) {
if (arr == struct_.mix) {
int temp = arr;
arr = arr;
arr = temp;
break;
}
}
// 换最大数
for (int i = 0; i < ARR_MAX; i++) {
if (arr == struct_.max) {
int temp = arr;
arr = arr;
arr = temp;
break;
}
}
}
int main(void) {
int number_arr = { 0 };
printf("Please enter ten numbers:\n");
for (int i = 0; i < ARR_MAX; i++) {
// 这里就不做输入检查了
scanf("%d", &number_arr);
}
is_max_mix(number_arr);
Swap(number_arr);
for (int i = 0; i < ARR_MAX; i++) {
printf("%d ", number_arr);
}
system("pause");
return 0;
} claws0n 发表于 2018-10-25 18:07
你的函数没有必要有返回值 void 就好。如果你要返回整形,那应该 return 0。NULL 会被认为是空指针
不是很 ...
在编译的时候编译器报出是“number_o”变量正在被使用而无法初始化继续是什么意思?{:5_94:} 1037733929 发表于 2018-10-26 10:37
在编译的时候编译器报出是“number_o”变量正在被使用而无法初始化继续是什么意思?
你什么编译器?我的没有这一项,换了 VS 也没有。只是提醒说 NULL 是指针型,返回的类型不匹配 #include <stdio.h>
void n(int *p_0)
{
int number_g,number_h,number_j = 0,number_o = 0,number_x = 0;
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j != i && j <= 9; j++)
{
if (*(p_0 + i) > *(p_0 + j))
{
number_g = *(p_0 + i);
number_o = i;
}
}
for (int j = 0; j != i && j <= 9; j++)
{
if (*(p_0 + i) < *(p_0 + j))
{
number_h = *(p_0 + i);
number_x = i;
}
}
}
number_j = *(p_0 + 9);
*(p_0 + 9) = *(p_0 + number_o);
*(p_0 + number_o) = number_j;
number_j = *p_0;
*p_0 = *(p_0 + number_x);
*(p_0 + number_x) = number_j;
}
int main()
{
int number;
int *p;
p = number;
printf("Please entern ten numbers:");
for (int i = 0; i <= 9; i++)
{
printf("\n%d:", i + 1);
scanf_s("%d", p);
}
n(p);
for (int j = 0; j <= 9; j++)
{
printf("%d\n", *(p + j));
}
return 0;
}
虽然这次打印出来了,但是好像只是打印出第一个最小值后房后并没有打印出其他的数组,只有同一个的地址{:5_99:} claws0n 发表于 2018-10-26 10:47
你什么编译器?我的没有这一项,换了 VS 也没有。只是提醒说 NULL 是指针型,返回的类型不匹配
我用的是visual studio 2017
我把int 改为 void 后,然后i给number_o给赋值初始化了,程序也可以运行,但是在后面的循环打印里面输出的时候只输出了一个数,但是后面的数并没有打印出来,而是数组的地址
for (int j = 0; j <= 9; j++)
{
printf("%d\n", *(p + j));
}
Sleep(10000);
结果片段:
9:9
10:0
0
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
why?????{:5_99:} 1037733929 发表于 2018-10-26 12:56
我用的是visual studio 2017
没有初始化,VS 很喜欢大呼小叫的。大型或进阶的程序可以,但是不推荐用 VS 入门。
int number_g, number_h, number_j, number_o = 0, number_x; //先初始化就好了
但是你后面的输出是 CCCCCC,意思是没有换到~~
入门的话,个人推荐用 dev c++。另一位管理大大推荐 FreeC,好像没有版主推荐 code blocks 1037733929 发表于 2018-10-26 12:56
我用的是visual studio 2017
初步改一改,可以执行了,但是结果错误,自己再调一调#include <stdio.h>
void n(int *p_0)
{
int number_g = 0, number_h = 0, number_j = 0, number_o = 0, number_x = 0; //<-----------------------------------
for (int i = 0; i < 10; i++)
{
for (int j = 0; j != i && j < 10; j++)
{
if (*(p_0 + i) > *(p_0 + j))
{
number_g = *(p_0 + i);
number_o = i;
}
}
for (int j = 0; j != i && j < 10; j++)
{
if (*(p_0 + i) < *(p_0 + j))
{
number_h = *(p_0 + i);
number_x = i;
}
}
}
number_j = *(p_0 + 9);
*(p_0 + 9) = *(p_0 + number_o);
*(p_0 + number_o) = number_j;
number_j = *p_0;
*p_0 = *(p_0 + number_x);
*(p_0 + number_x) = number_j;
}
int main()
{
int number;
int *p;
p = number;
printf("Please enter ten numbers:\n");
for (int i = 0; i < 10; i++)
{
printf("%d:", i + 1);
scanf_s("%d", p + i); //<-----------------------------------
}
puts("");
n(p);
for (int j = 0; j < 10; j++)
{
printf("%d\n", *(p + j));
}
return 0;
} claws0n 发表于 2018-10-26 13:13
没有初始化,VS 很喜欢大呼小叫的。大型或进阶的程序可以,但是不推荐用 VS 入门。
int number_g, numbe ...
谢谢,好的
不过我还是喜欢visual studio2017 {:5_109:}
也不算新手了,只是开始换语言学习而已{:5_109:}
页:
[1]