#include <stdio.h>
/*以下程序从键盘输入变量a的值后,让指针pa指向a,再通过pa将a的值修改为原值加20。请修改每对“ /”之间的错误。 */
int main()
{
int a, *pa;
scanf("%d", &a);
/**/ pa = &a; /**/
/**/ *pa += 20; /**/
printf("%d\n", a);
return 0;
}
/*2、fun函数通过指针参数返回两个整数的和、差,主函数调用fun函数求整数x、y的和、差。请在每对“ **”之间填写内容。*/
#include <stdio.h>
void fun(int x, int y, int *p, int *q)
{
/**/ *p /**/ = x + y;
/**/ *q /**/ = x - y;
}
int main()
{
int x, y, sum, dif;
scanf("%d,%d", &x, &y);
fun(x, y, /**/ &sum/**/, /**/ &dif /**/);
printf("%d + %d = %d\n", x, y, sum);
printf("%d - %d = %d\n", x, y, dif);
return 0;
}
/*3、数组 a 共 N 个元素(N为代表6的符号常量),要求用指针移动法遍历数组,完成对数组的输入输出。请在每对“ ”之间填写内容。*/
#include <stdio.h>
#define N 6
int main()
{
int a[N], *p;
for (p = a; p < a + N; p++)
scanf("%d", /**/ p/**/);
for (p = a; p < /**/ a + N /**/; p++)
printf("%4d ", /**/*p /**/);
printf("\n");
return 0;
}
/*4、函数chag的功能:将N行N列的矩阵a转置(N为符合常量)。主函数输入一个N行N列的矩阵b,调用chag函数将其转置,输出转置后的矩阵b。 请在一对标志行“Program - End”之间实现chag函数功能。【算法可参考第8单元举例2】*/
#include <stdio.h>
#define N 5
void chag(int a[N][N]);
int main()
{
int b[N][N];
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d", &b[i][j]);
chag(b);
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%4d", b[i][j]);
printf("\n");
}
return 0;
}
void chag(int a[N][N])
{
/**********Program**********/
int i, j, *p1, *p2, *temp;
for (i = 0; i < N; i++)
{
for (j = 0; j < i; j++)
{
p1 = &a[i][j];
p2 = &a[j][i];
*temp = *p1;
*p1 = *p2;
*p2 = *temp;
}
}
/********** End **********/
}
/*5、函数fun的功能:将x所指int型数组n个元素的平均值作为函数返回值,并将大于平均值的元素个数存放在形参pnum所指的存储单元中。主函数输入n(0 < n <= 20),然后输入n个整数存放在一维数组a中,调用fun函数求他们的平均值aver以及高于平均值的元素个数num。 请在一对标志行“Program - End”之间实现fun函数功能。*/
#include <stdio.h>
float fun(int *x, int n, int *pnum);
int main()
{
int a[20], n, i, num;
float aver;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
aver = fun(a, n, &num); // 函数调用求得aver和num
printf("%.2f %d\n", aver, num);
return 0;
}
float fun(int *x, int n, int *pnum)
{
/**********Program**********/
float sum, aver;
int *x1 = x;
*pnum = 0;
for (x1 = x; x1 < x + n; x1++)
{
sum += *x1;
}
aver = sum / n;
for (x1 = x; x1 < x + n; x1++)
if (*x1 > aver)
{
*pnum += 1;
}
return aver;
/********** End **********/
}
/*6、定义函数void sort(int a[][5], int n, int k):对 n 行 5 列的二维数组 a, 将列下标为 k的列元素从小到大排序(注:仅对这一列排序)。主函数输入一个整数k(0 <= k <= 4),调用sort函数对给定的4行5列数组,将列下标为k的列元素从小到大排序,最后输出该二维数组。 请在一对标志行“Program - End”之间实现sort函数功能。
输入样例 : 2
输出样例 :
5 9 3 4 2
1 2 3 4 5
8 4 5 2 1
7 5 7 6 4
*/
#include <stdio.h>
void sort(int a[][5], int n, int k);
int main()
{
int a[4][5] = {{5, 9, 7, 4, 2}, {1, 2, 3, 4, 5}, {8, 4, 5, 2, 1}, {7, 5, 3, 6, 4}}, k;
int i, j;
scanf("%d", &k);
if (k >= 0 && k <= 4)
{
sort(a, 4, k); // 调用sort函数
for (i = 0; i < 4; i++)
{
for (j = 0; j < 5; j++)
printf("%4d", a[i][j]);
printf("\n");
}
}
else
printf("k值应在[0,4]内.\n");
return 0;
}
void sort(int a[][5], int n, int k) // 对第k列排序,其它列不变
{
/**********Program**********/
int i, j, *p1, *p2, *temp = &a[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[j][k] > a[j + 1][k])
{
p1 = &a[j][k];
p2 = &a[j + 1][k];
*temp = *p1;
*p1 = *p2;
*p2 = *temp;
}
}
}
/********** End **********/
}