C语言实验8_指针
实验08(01)利用指针实现
题目描述
输入 10 个整数,将其中最大的数与第一个数对换,把最小的数与最后一个数对换。写 3 个
子函数分别实现:(1)输入 10 个数;(2)进行处理;(3)输出 10 个数。
输入描述
依次输入十个整数。
输出描述
以格式 printf("%5d",m[i]);依次输出调整后的数组。
输入样例
2 23 12 56 -1 6 9 10 56 4
输出样例
56 23 12 2 4 6 9 10 56 -1
#include
#define N 10
void scan(int *p);
void print(int m[]);
void xuanze(int *p);
int main()
{
int m[N];
int *p;
p = m;
scan(p);
xuanze(p);
print(p);
return 0;
}
void scan(int *p)
{
int i;
for (i = 0; i < N; i++)
scanf("%d", (p + i));
}
void print(int m[])
{
int i;
for (i = 0; i < N; i++)
printf("%5d", m[i]);
printf("\n");
}
void xuanze(int m[])
{
int i, j, max, min, t;
int m1 = 0, m2 = 0;
max = m[0];
min = m[0];
for (i = 0; i < N; i++)
{
for (j = i + 1; j < N; j++)
{
if (m[j] > max)
{
max = m[j];
m1 = j;
}
if (m[j] < min)
{
min = m[j];
m2 = j;
}
}
}
m[m1] = m[0];
m[m2] = m[N - 1];
m[0] = max;
m[N - 1] = min;
}
实验08(02) 数组操作
题目描述
编写主函数定义两个数组 a[3][3]和 b[3][3]并初始化,随机输入数组的行和列(行列从 0 开始
计数)。编写子函数对两个数组进行调整,要求将两个数组中对应位置的数进行比较,较大
的数存入 a 数组,较小的数存入 b 数组。数组数据在程序中固定给出。
输入描述
输入要调整的数的位置坐标(小于 3)
输出描述
以格式 printf("%5d",m[i][j]);依次输出调整后的 n 个数。
输入样例
2 2
输出样例
调整前 a 数组
0 12 200
3 4 5
6 7 8
调整前 b 数组
11 12 23
34 45 56
67 78 89
调整后 a 数组
0 12 200
3 4 5
6 7 89
调整后 b 数组
11 12 23
34 45 56
67 78 8
#include
void tz(int a[3][3], int b[3][3], int i, int j);
int main()
{
int a[3][3] = {{0, 12, 200}, {3, 4, 5}, {6, 7, 8}};
int b[3][3] = {{11, 12, 23}, {34, 45, 56}, {67, 78, 89}};
int m, n;
scanf("%d%d", &m, &n);
tz(a, b, m, n);
}
void tz(int a[3][3], int b[3][3], int m, int n)
{
int i, j, t;
printf("调整前 a 数组\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
printf("%5d", a[i][j]);
if (j == 2)
printf("\n");
}
printf("调整前 b 数组\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
printf("%5d", b[i][j]);
if (j == 2)
printf("\n");
}
if (a[m][n] < b[m][n])
{
t = a[m][n];
a[m][n] = b[m][n];
b[m][n] = t;
}
printf("调整后 a 数组\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
printf("%5d", a[i][j]);
if (j == 2)
printf("\n");
}
printf("调整后 b 数组\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
{
printf("%5d", b[i][j]);
if (j == 2)
printf("\n");
}
}
实验08(03) 求序列的逆序
题目描述
编写一个子函数 G(int *m, int n),要求将指针 m 指向的长度为 n 的序列按逆序排列。主函数
输入该 n 个数的序列,n 的值可变但不大于 10,当输入的数等于 1000 或者输入的数超过 10
个时,结束输入。调用子函数调整并在主函数中输出该序列。
输入描述
无
输出描述
以格式 printf("%5d",m[i]);依次输出调整后的 n 个数。
输入样例
2
12
56
-1
9
10
1000
输出样例
1000 10 9 -1 56 12 2
#include
void G(int *m, int t);
int main()
{
int m[10];
int i, t = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &m[i]);
t++;
if (m[i] == 1000)
break;
}
G(m, t);
for (i = 0; i < t; i++)
printf("%5d", m[i]);
printf("\n");
return 0;
}
void G(int *m, int t)
{
int i, temp;
for (i = 0; i < t / 2; i++)
{
temp = m[i];
m[i] = m[t - 1 - i];
m[t - 1 - i] = temp;
}
}
实验08(04) 字符大小写变换
题目描述
编写子函数,能将一个字符串中的大写字符变为小写字符,而小写字符变为大写字符。主函
数中要求能输入字符串,并输出变换后的字符串。
输入描述
输入字符串,回车结束。字符串长度不能大于 32
输出描述
输出变换后的字符串。
输入样例
Abc234zsyZ
输出样例
aBC234ZSYz
#include
void G(char *a);
int main()
{
char a[32];
char *p;
p = a;
scanf("%s", a);
G(p);
printf("%s\n", a);
return 0;
}
void G(char *a)
{
int i;
for (i = 0; a[i] != '\0'; i++)
{
if (a[i] >= 'a' && a[i] <= 'z')
{
a[i] -= 32;
continue;
}
if (a[i] >= 'A' && a[i] <= 'Z')
{
a[i] += 32;
continue;
}
}
}
实验08(05) 多字符串排序
题目描述
编写子函数,实现将一个二维字符数组中的每一个字符串的字符按升序重新排列,字符串的
个数为 3,每个字符串的长度不大于 15。
要求:(1)主函数中要求能输入字符串数组,并输出变换后的字符串数组。
(2)主函数只能调用一次子函数完成上述功能
输入描述
输入 3 个字符串,每个字符串回车结束。字符串长度不能大于 15.
输出描述
输出变换后的字符串。
输入样例
ergs
345d2xc
34da1
输出样例
egrs
2345cdx
134ad
#include
void GG(char a[][15]);
int main()
{
char a[3][15];
int i;
for (i = 0; i < 3; i++)
scanf("%s", &a[i]);
GG(a);
for (i = 0; i < 3; i++)
printf("%s\n", a[i]);
return 0;
}
void GG(char a[][15])
{
int i, j, k, t;
for (k = 0; k < 3; k++)
{
for (i = 0; a[k][i] != '\0'; i++)
for (j = i + 1; a[k][j] != '\0'; j++)
{
if (a[k][j] < a[k][i])
{
t = a[k][i];
a[k][i] = a[k][j];
a[k][j] = t;
}
}
}
}