【例1】从键盘任意输入两个整数,编程实现将其交换后再重新输出。试分析下面的程序能实现这一功能吗?如果不能,该如何修改程序呢? #include
void Swap (intx,int y);
int main ()
{
int a,b;
printf ("Please enter a,b:");
scanf ("%d,%d",&a,&b);
printf("Before swap: a=%d,b=%d\n",a,b); /*打印交换前的a,b*/
Swap (a,b); /*按值调用函数Swap()*/
printf("After swap:a=%d,b=%d\n",a,b); /*验证a,b是否交换*/
return 0;
}
void Swap (int x,int y)
{
int temp;
temp =x; /*执行图7-5(b)中的步骤①*/
x=y; /*执行图7-5(b)中的步骤②*/
y = temp; /*执行图7-5(b)中的步骤③*/
}
程序的运行结果如下:
Please enter a,b:15,8⤹
Before swap: a =15,b=8
After swap:a=15,b=8
1、请结合例9.6程序分析下面两个程序能否实现两数交换功能?并说明为什么?
(1)
void Swap(int *x,int *y)
{
int *pTemp;
*pTemp=*x;
*x=*y;
*y=*pTemp
}
(2)
void Swap(int*x,int*y)
{
int*pTemp;
pTemp=x;
x = y;
y=pTemp;
} 2、利用例1程序中的函数Swap(),用函数编程实现两个数组中对应元素值的交换。
3、利用例1程序中的函数Swap(),从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。
4、利用例1程序中的函数Swap(),分别按如下函数原型编程计算并输出n×n阶矩阵的转置矩阵。其中,n由用户从键盘输入。已知n值不超过10。
void Transpose (int a[][N],int n);
void Transpose (int(*a)[N],int n);
void Transpose (int *a,int n);
5、在4、的基础上,分别按如下函数原型编程计算并输出m×n阶矩阵的转置矩阵。其中,m和n的值由用户从键盘输入。已知m和n的值都不超过10。
void Transpose (int a[][N],int at[][M],int m,int n);
void Transpose (int(*a)[N],int(*at)[M],int m,int n);
void Transpose (int *a,int *at,int m,int n);
6、参考5、,按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。
void InputArray (int *p,int m,int n);
int FindMax (int *p,int m,int n,int *pRow,int *pCol);
7、(选做)参考习题6、,用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,计算最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。