【例1】从键盘任意输入两个整数,编程实现将其交换后再重新输出。试分析下面的程序能实现这一功能吗?如果不能,该如何修改程序呢?
#include<stdio.h> 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; }
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的上限值)。