C语言习题08_指针
习题08(01)基础
![img](https://i-blog.csdnimg.cn/blog_migrate/48b3af6c32ced1415ebb22eaac088f09.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/8a11caffb8542bee8f1d0b5b48f9be79.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/f5fd9d616af5f885ccc83b77b2a5e666.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/4d455d6fe6f26af1f059b059069b6af0.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/515a8d71825b54adf49c737f03ffb841.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/66c53e2fa08591395a7aa79f7a0ef839.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/978f073f847e029c25c47786bb1e1db9.png)
习题08(02)矩阵转置
题目描述
编写函数,实现将一个 3×3 的矩阵转置。
矩阵输入及输出都在主函数中完成。
输入描述
输入一个 3×3 的 int 型整数
输出描述
输出转置矩阵
输入样例
23 42 44
16 35 81
25 14 45
输出样例
23 16 25
42 35 14
44 81 45
#include <stdio.h>
void zhuanzhi(int a[3][3]);
void scan();
int a[3][3];
int i, j, t;
int main()
{
scan();
zhuanzhi(a);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d", a[i][j]);
if (j == 2)
printf("\n");
else
printf(" ");
}
}
return 0;
}
void zhuanzhi(int a[3][3])
{
int i, j, t;
for (i = 0; i < 3; i++)
{
for (j = i; j < 3; j++)
{
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
}
void scan()
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
}
习题08(03)冒泡法排序(指针)
题目描述
编写函数,使用指针实现冒泡法排序。
数据输入输出在主函数中完成
输入描述
输入 6 个 int 型数
输出描述
输出按由小到大的排序结果
输入样例
34 78 -123 41 90 19
输出样例
-123 19 34 41 78 90
#include <stdio.h>
void paixu(int a[6]);
int main()
{
int a[6];
int i;
for (i = 0; i < 6; i++)
scanf("%d", a + i);
paixu(a);
for (i = 0; i < 6; i++)
printf("%d ", a[i]);
return 0;
}
void paixu(int a[6])
{
int i, j, temp;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
习题08(04)使用函数排序(指针)
10-从键盘输入三个整数,按从大到小排列。题目描述
从键盘输入三个整数,按从大到小排列。写三个函数,主函数,exchange 函数和 swap 函数。
swap 函数实现两个数排序。在 exchange 函数中多次调用 swap(),实现三个数排序。主函数
中输入数据、调用 exchange()排序,输出结果。
输入描述
从键盘输入三个数
输出描述
输入三个数从大到小排列
输入样例
10 20 30
输出样例
30,20,10
#include <stdio.h>
void swap(int *a, int *b);
void exchange(int *p1, int *p2, int *p3);
void main()
{
int *p1, *p2, *p3, a, b, c;
scanf("%d%d%d", &a, &b, &c);
p1 = &a;
p2 = &b;
p3 = &c;
exchange(p1, p2, p3);
printf("%d,%d,%d\n", a, b, c);
return 0;
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void exchange(int *p1, int *p2, int *p3)
{
if (*p1 < *p2)
swap(p1, p2);
if (*p1 < *p3)
swap(p1, p3);
if (*p2 < *p3)
swap(p2, p3);
}
习题08(05)字符复制
题目描述
有一个字符串,包含 n 个字符,写一个函数,将此字符串中从第 m 个字符开始的全部字符
复制称为另一个字符串。
函数原型为 void copystr(char *,char *,int );
输入描述
键盘输入分两行,第一行输入一个字符串,第二行输入一个整型数
输出描述
输出复制结果
输入样例
qwertyuiop(第一组数据)
3
qwert(第二组数据)
6
输出样例
result:ertyuiop(符号均为英文符号)
input error!
#include <stdio.h>
#include <string.h>
void copystr(char *p1, char *p2, int m);
int main(void)
{
char a[50], b[50] = {0};
char *p1, *p2;
int m, i, t;
p1 = a;
p2 = b;
scanf("%s", p1);
scanf("%d", &m);
if (m > strlen(a))
printf("input error!");
else
{
copystr(p1, p2, m);
printf("result:%s\n", p2);
}
return 0;
}
void copystr(char *p1, char *p2, int m)
{
int i, t;
for (i = m - 1, t = 0; i < *(p1 + i) != '\0'; i++, t++)
{
*(p2 + t) = *(p1 + i);
}
}
习题08(06)指定字符删除
10-编写把字符串 string 中指定字符删除的函数和主函数题目描述
编写把字符串 string 中指定字符删除的函数和主函数。函数原型为:
void DeleteChar(char *string,char c);
输入描述
从键盘输入字符串
输出描述
从键盘输入要从字符串中删除的一个字符
输入样例
asdddde
d
输出样例
ase
#include <stdio.h>
#include <string.h>
void DeleteChar(char *p1, char c);
int main()
{
char a[20] = {0};
char *p1;
char c;
p1 = a;
scanf("%s\n%c", p1, &c);
DeleteChar(p1, c);
printf("%s\n", p1);
return 0;
}
void DeleteChar(char *p1, char c)
{
int i, j;
char b[20];
for (i = 0, j = 0; i < strlen(p1); i++)
{
if (p1[i] != c)
{
b[j] = p1[i];
j++;
}
}
b[j] = '\0';
strcpy(p1, b);
}