学习c语言的第二天:关于数组名作为函数参数的一些学习
#include<stdio.h>#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
//数组名作函数的参数:
//知道了指针变量之后,其实数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,
////形参得到该地址后也指向同一数组。同样的,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用
//
//float aver(float *pa);
//
//int main()
//{
// float sco, av, *sp;
// int i;
// sp = sco;
// printf("\ninput 5 scores:\n");
// for (i = 0; i < 5; i++)
// {
// scanf_s("%f", &sco);
// av = aver(sp);
// }
// printf("averge score is %5.2f\n", av);
// return 0;
//
//}
//float aver(float *pa)
//{
// int i;
// float av, s = 0;
// for (i = 0; i < 5; i++)
// {
// s = s + *pa++;
// }
// av = s / 5;
// return av;
//}
//例子:将数组a中的n个整数按相反顺序存放
//void inv(int x[], int n)
//{
// int temp, i, j, m = (n-1)/2;
// for (i = 0; i < m; i++)
// {
// j = n - 1 - i;
// temp = x; x = x; x = temp;
// }
// return ;
//}
//
//int main()
//{
// int i, a = { 0,1,2,3,4,5,6,7,8,9 };
// printf("The original array is:\n");
// for (i = 0; i < 10; i++)
// {
// printf("a[%d]=%d\n", i, a);
// }
// inv(a, 10);
// printf("The array has been inverted:\n");
// for (i = 0; i < 10; i++)
// {
// printf("a[%d]=%d\n", i, a);
// }
// printf("\n");
// return 0;
//}
//例子;将上面的形参的例子改为指针变量
//void inv(int *x, int n)//形参为指针变量
//{
// int *i, *j, *p, temp, m = (n - 1) / 2;
// i = x; j = x + n - 1; p = x + m;
// for (; i < p; i++, j--)
// {
// temp = *i; *i = *j; *j = temp;
// }
// return ;
//}
//
//int main()
//{
// int a = { 0,1,2,3,4,5,6,7,8,9 }, i,*p;
// p = a;
// printf("The original array is:\n");
// for (i = 0; i < 10; i++)
// {
// printf("a[%d]=%d\n", i, a);
// }
// inv(a, 10);
// printf("The array has been inverted:\n");
// for (i = 0; i < 10; i++)
// {
// printf("a[%d]=%d\n", i, a);
// }
// printf("\n");
// return 0;
//
//}
//例子:从10中找出其中的最大值和最小值
//int max, min;//设置的是全局变量
//void max_min_value(int array[], int n)
//{
// int *p, *array_end;
// array_end = array +n;
// max = min = *array;
// for (p = array + 1; p < array_end; p++)
// {
// if (*p > max) max = *p;
// else if (*p < min) min = *p;
// }
// return;
//}
//int main()
//{
// int number, i;
// printf("please enter 10 number:\n");
// for (i = 0; i < 10; i++)
// {
// scanf_s("%d", &number);
// }
// max_min_value(number, 10);
// printf("max=%d,min=%d\n", max, min);
//
// return 0;
//}
//1.由于max和min是全局变量可以在函数里面直接使用
//2.函数max_min_value的语句中:max=min=*array;array是数组名,他接收从实参传来的数组number的首地址
//*array相当于*(&array)。上述语句max=min=array是等价的
//上述例子可以把形参array改为指针变量的类型。实参也可以不用数组名,而是用指针变量传递地址。
//程序可以改为一下
//int max, min;//全局变量
//void max_min_value(int *array ,int n)
//{
// int *p, *array_end;
// array_end = array + n;
// max = min = *array;
// for (p = array + 1; p < array_end; p++)
// {
// if (*p > max) max = *p;
// else if (*p < min) min = *p;
// }
// return ;
//}
//
//int main()
//{
// int number, i,*p;
// p = number;
// printf("please enter 10 number:\n");
// for (i = 0; i < 10; i++,p++)
// {
// scanf_s("%d", p);
// }
// p = number;//一定要p回到数组的首地址
// max_min_value(p, 10);
// printf("max=%d,min=%d\n", max, min);
// return 0;
//
//}
//例子用实参指针变量改写将n个整数按相反顺序存放
//void inv(int *x, int n)
//{
// int temp, *first, *end, mid,*m;
// first = x;
// end = x + n - 1;
// mid = (n - 1) / 2;
// m = first + mid;
// for (; first <=m; first++,end--)
// {
// temp = *first; *first = *end; *end = temp;
// }
// return;
//}
//
//int main()
//{
// int array = { 0,1,2,3,4,5,6,7,8,9 }, i, *p;
// p = array;
// printf("The original array:\n");
// for (i = 0; i < 10; i++,p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// inv(array, 10);
// printf("The array has been inverted:\n");
// p = array;
// for (i = 0; i < 10; i++, p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// return 0;
//
//}
//main函数中指针变量p是有确定值的,即如果用指针作实参,必须使指针变量有确定的值
//例子:用选择法对10个整数进行由大到小进行排序
//从数组中的第一个开始一次和数组后面的每个数进行比较
//void sort(int x[], int n)
//{
// int i, j, k, t;
// for (i = 0; i < n-1; i++)
// {
// k = i;
// for (j = i + 1; j < n; j++)
// {
// if (x > x) x = x;//这行有一个错误
//
// }
// if (k!=i)
// {
// t = x;
// x = x;
// x = t;
// }
// }
// return;
//}
//
//int main()
//{
// int *p, i, a = { 0,1,2,3,4,5,6,7,8,9 };
// printf("The original array is:\n");
// p = a;
// for (i = 0; i < 10; i++,p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// sort(a, 10);
// p = a;
// printf("The sort array is:\n");
// for (i = 0; i < 10; i++, p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// return 0;
//}
//说明:函数sort用数组名作为形参,也可改为用指针变量,这时候,函数的首部可以改为:sort(int *x,int n)其他可以一律不改
//void sort(int *x, int n);
//
//int main()
//{
// int i, *p, a = { 0,1,2,3,4,5,6,7,8,9 };
// printf("The original array is :\n");
// p = a;
// for (i = 0; i < 10; i++,p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// sort(a, 10);
// printf("The has sort array is:\n");
// p = a;
// for (i = 0; i < 10; i++, p++)
// {
// printf("a[%d]=%d\n", i, *p);
// }
// return 0;
//}
//
//void sort(int *x, int n)
//{
// int i, j, k, t;
// for (i = 0; i < n - 1; i++)
// {
// k = i;
// for (j = i + 1; j < n; j++)
// {
// if (x > x) k = j;//(编写时的错误)数组下标交换,不是数组内容交换
// }
// if (k != i)
// {
// t = x;
// x = x;
// x = t;
// }
// }
// return;
//} 帮楼主重排一下
#include<stdio.h>
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
//数组名作函数的参数:
//知道了指针变量之后,其实数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,
////形参得到该地址后也指向同一数组。同样的,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用
//
float aver(float *pa);
int main()
{
float sco, av, *sp;
int i;
sp = sco;
printf("\ninput 5 scores:\n");
for (i = 0; i < 5; i++)
{
scanf_s("%f", &sco);
av = aver(sp);
}
printf("averge score is %5.2f\n", av);
return 0;
}
float aver(float *pa)
{
int i;
float av, s = 0;
for (i = 0; i < 5; i++)
{
s = s + *pa++;
}
av = s / 5;
return av;
}
//例子:将数组a中的n个整数按相反顺序存放
void inv(int x[], int n)
{
int temp, i, j, m = (n-1)/2;
for (i = 0; i < m; i++)
{
j = n - 1 - i;
temp = x; x = x; x = temp;
}
return ;
}
int main()
{
int i, a = { 0,1,2,3,4,5,6,7,8,9 };
printf("The original array is:\n");
for (i = 0; i < 10; i++)
{
printf("a[%d]=%d\n", i, a);
}
inv(a, 10);
printf("The array has been inverted:\n");
for (i = 0; i < 10; i++)
{
printf("a[%d]=%d\n", i, a);
}
printf("\n");
return 0;
}
//例子;将上面的形参的例子改为指针变量
void inv(int *x, int n)//形参为指针变量
{
int *i, *j, *p, temp, m = (n - 1) / 2;
i = x; j = x + n - 1; p = x + m;
for (; i < p; i++, j--)
{
temp = *i; *i = *j; *j = temp;
}
return ;
}
int main()
{
int a = { 0,1,2,3,4,5,6,7,8,9 }, i,*p;
p = a;
printf("The original array is:\n");
for (i = 0; i < 10; i++)
{
printf("a[%d]=%d\n", i, a);
}
inv(a, 10);
printf("The array has been inverted:\n");
for (i = 0; i < 10; i++)
{
printf("a[%d]=%d\n", i, a);
}
printf("\n");
return 0;
}
//例子:从10中找出其中的最大值和最小值
int max, min;//设置的是全局变量
void max_min_value(int array[], int n)
{
int *p, *array_end;
array_end = array +n;
max = min = *array;
for (p = array + 1; p < array_end; p++)
{
if (*p > max) max = *p;
else if (*p < min) min = *p;
}
return;
}
int main()
{
int number, i;
printf("please enter 10 number:\n");
for (i = 0; i < 10; i++)
{
scanf_s("%d", &number);
}
max_min_value(number, 10);
printf("max=%d,min=%d\n", max, min);
return 0;
}
//1.由于max和min是全局变量可以在函数里面直接使用
//2.函数max_min_value的语句中:max=min=*array;array是数组名,他接收从实参传来的数组number的首地址
//*array相当于*(&array)。上述语句max=min=array是等价的
//上述例子可以把形参array改为指针变量的类型。实参也可以不用数组名,而是用指针变量传递地址。
//程序可以改为一下
int max, min;//全局变量
void max_min_value(int *array ,int n)
{
int *p, *array_end;
array_end = array + n;
max = min = *array;
for (p = array + 1; p < array_end; p++)
{
if (*p > max) max = *p;
else if (*p < min) min = *p;
}
return ;
}
int main()
{
int number, i,*p;
p = number;
printf("please enter 10 number:\n");
for (i = 0; i < 10; i++,p++)
{
scanf_s("%d", p);
}
p = number;//一定要p回到数组的首地址
max_min_value(p, 10);
printf("max=%d,min=%d\n", max, min);
return 0;
}
//例子用实参指针变量改写将n个整数按相反顺序存放
void inv(int *x, int n)
{
int temp, *first, *end, mid,*m;
first = x;
end = x + n - 1;
mid = (n - 1) / 2;
m = first + mid;
for (; first <=m; first++,end--)
{
temp = *first; *first = *end; *end = temp;
}
return;
}
int main()
{
int array = { 0,1,2,3,4,5,6,7,8,9 }, i, *p;
p = array;
printf("The original array:\n");
for (i = 0; i < 10; i++,p++)
{
printf("a[%d]=%d\n", i, *p);
}
inv(array, 10);
printf("The array has been inverted:\n");
p = array;
for (i = 0; i < 10; i++, p++)
{
printf("a[%d]=%d\n", i, *p);
}
return 0;
}
//main函数中指针变量p是有确定值的,即如果用指针作实参,必须使指针变量有确定的值
//例子:用选择法对10个整数进行由大到小进行排序
//从数组中的第一个开始一次和数组后面的每个数进行比较
void sort(int x[], int n)
{
int i, j, k, t;
for (i = 0; i < n-1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (x > x) x = x;//这行有一个错误
}
if (k!=i)
{
t = x;
x = x;
x = t;
}
}
return;
}
int main()
{
int *p, i, a = { 0,1,2,3,4,5,6,7,8,9 };
printf("The original array is:\n");
p = a;
for (i = 0; i < 10; i++,p++)
{
printf("a[%d]=%d\n", i, *p);
}
sort(a, 10);
p = a;
printf("The sort array is:\n");
for (i = 0; i < 10; i++, p++)
{
printf("a[%d]=%d\n", i, *p);
}
return 0;
}
//说明:函数sort用数组名作为形参,也可改为用指针变量,这时候,函数的首部可以改为:sort(int *x,int n)其他可以一律不改
void sort(int *x, int n);
int main()
{
int i, *p, a = { 0,1,2,3,4,5,6,7,8,9 };
printf("The original array is :\n");
p = a;
for (i = 0; i < 10; i++,p++)
{
printf("a[%d]=%d\n", i, *p);
}
sort(a, 10);
printf("The has sort array is:\n");
p = a;
for (i = 0; i < 10; i++, p++)
{
printf("a[%d]=%d\n", i, *p);
}
return 0;
}
void sort(int *x, int n)
{
int i, j, k, t;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (x > x) k = j;//(编写时的错误)数组下标交换,不是数组内容交换
}
if (k != i)
{
t = x;
x = x;
x = t;
}
}
return;
} 沙发,谢谢分享 第二天就学这么深了 苏紫方璇 发表于 2021-11-7 12:03
帮楼主重排一下
#include
#define _CRT_SECURE_NO_DEPRECATE
突然就干劲十足了;www sqhs008 发表于 2021-11-7 17:11
第二天就学这么深了
每天学一点嘛,不怕它深就怕自己不想学{:1_907:}
页:
[1]