7-1 利用指针返回多个函数值
分数 30
全屏浏览
切换布局
作者 陈晓梅
单位 广东外语外贸大学
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行:
第一行是n值;
第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0
#include<stdio.h>
int *max_min(int *p,int n)
{
int i;
static int a[2];
*a=*(a+1)=*p;
for(i=0;i<n;i++)
{
if(*(p+i)>*a)
{
*a=*(p+i);
}
if(*(p+i)<*(a+1))
{
*(a+1)=*(p+i);
}
}
return a;
}
int main()
{
int n,*p,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int *m = max_min(a,n);
printf("max = %d\nmin = %d\n",*m,*(m+1));
return 0;
}
7-2 逆置一维数组
分数 10
全屏浏览
切换布局
作者 usx程序设计类课程组
单位 绍兴文理学院
编写程序,以指针的方式,就地逆置一维数组。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据先输入数据个数n,然后输入n个整数。
输出格式:
对于每组测试,在一行上输出逆置之后的结果。数据之间以一个空格分隔。
输入样例:
2
4 1 2 5 3
5 4 3 5 1 2
输出样例:
3 5 2 1
2 1 5 3 4
#include<stdio.h>
int f(int*a,int n)
{
int t=0;
for(int i=0;i<n/2;i++)
{
t=*(a+i);
*(a+i)=*(a+n-i-1);
*(a+n-i-1)=t;
}
for(int i=0;i<n;i++)
{
if(i==0)
printf("%d",*a);
else
printf(" %d",*(a+i));
}
}
int main()
{
int T,n;
scanf("%d",&T);
while(T>0)
{
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
f(a,n);
printf("\n");
T--;
}
return 0;
}
7-3 两数的互换
分数 30
全屏浏览
切换布局
作者 王群芳
单位 合肥师范学院
从键盘任意输入两个整数,用指针作函数参数,编程实现将其交换后再重新输出。
函数接口:
void swap(int *x, int *y)
输入格式:
从键盘输入两个整数。
输出格式:
按输出样例的形式输出交换后的两个整数。
输入样例:
11 22
输出样例:
After swap:22,11
#include<stdio.h>
void swap(int *x,int *y)
{
printf("After swap:%d,%d",*y,*x);
}
int main()
{
int x,y;
scanf("%d %d",&x,&y);
swap(&x,&y);
return 0;
}
7-4 sdut-C语言实验-虎子的难题
分数 10
全屏浏览
切换布局
作者 马新娟
单位 山东理工大学
稷下英才实验班有个同学叫虎子,有一天虎子刷到了一道编程题:给M(M<=100)组数据,每组数据有N个正整数(N<=100),要求把每组的N个数按升序排成一行。虎子觉得应该用指针和函数实现比较高效,但总是调试不出来,你能帮帮他吗?
输入格式:
输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数。(输入数据之间会用空格隔开)
输出格式:
输出包括M行,每行分别对应输入中M组数据的升序序列,数与数之间用一个空格隔开。
输入样例:
2 3
1 3 2
4 2 6
输出样例:
在这里给出相应的输出。例如:
1 2 3
2 4 6
#include<stdio.h>
void f(int *q,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(*(q+i)>=*(q+j))
{
t=*(q+i);
*(q+i)=*(q+j);
*(q+j)=t;
}
}
}
}
int main()
{
int m,n,i,j;
scanf("%d %d",&m,&n);
int nums[m][n];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&nums[i][j]);
}
}
for(i=0;i<m;i++)
{
f(nums[i],n);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(j==0)
{
printf("%d",nums[i][j]);
}
else
{
printf(" %d",nums[i][j]);
}
}
printf("\n");
}
return 0;
}