1.将数组A中的内容和数组B中的内容进行交换。(数组一样大)
解题思想:
a,将两组数组分别打印,在键盘输入可以通过for语句打印
b,数组和两个数组交换的思想是一样的,需要借助帮手。将数组1的内容放在tmp中,将数组2的内容放在数组1里面,然后再将tmp里面的内容给数组1,通过循环将内容打印。
void chage(int* arr1, int* arr2)
{
int i = 0;
int tmp = 0;
//数组进行交换
for (i = 0; i < 10; i++)
{
tmp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = tmp;
}
}
int main()
{
int arr1[10] = { 0 };
int arr2[10] = { 0 };
int i = 0;
printf("请输入第一组数字:");
for (i = 0; i < 10; i++)
{
scanf("%d",&arr1[i]);
}
printf("请输入第二组数字:");
for (i = 0; i < 10; i++)
{
scanf("%d",&arr2[i]);
}
chage(arr1, arr2);
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
2.创建一个整形数组,完成对数组的操作
1.实现函数init() 初始化数组为全0
2.实现print() 打印数组的每个元素
3.实现reverse() 函数完成数组元素的逆置
方法一:
void init_arr(int* arr,int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
printf("%d ",arr[i]);
}
}
void print_arr(int* arr,int sz)
{
printf("\n");
int i = 0;
for (i = 0; i < sz; i++)
{
scanf("%d",&arr[i]);
}
}
void reverse_arr(int* arr, int sz)
{
int i = 0;
for (i = sz-1; i >= 0; i--)//将数组从最后一个打印
{
printf("%d ",arr[i]);
}
}
int main()
{
//创建一个整形数组,完成对数组的操作
//实现函数init() 初始化数组为全0
//实现print() 打印数组的每个元素
//实现reverse() 函数完成数组元素的逆置。
int arr[5] = { 1,2,3,4,5 };
int sz = sizeof(arr) / sizeof(arr[1]);
init_arr(arr,sz);
printf("\n请输入5个数:>");
print_arr(arr,sz);
reverse_arr(arr, sz);
return 0;
}
方法二:
void init_arr(int* arr,int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
arr[i] = 0;
printf("%d ",arr[i]);
}
}
void print_arr(int* arr,int sz)
{
printf("\n");
int i = 0;
for (i = 0; i < sz; i++)
{
scanf("%d",&arr[i]);
}
}
void reverse_arr(int* arr, int sz)
{
int i = 0;
int left = 0;
int right = sz - 1;
int tmp = 0;
while(right>left)//数组交换
{
tmp = arr[right];
arr[right] = arr[left];
arr[left] = tmp;
right--;
left++;
}
for (i = 0; i < sz; i++)
{
printf("%d ",arr[i]);
}
}
int main()
{
//创建一个整形数组,完成对数组的操作
//实现函数init() 初始化数组为全0
//实现print() 打印数组的每个元素
//实现reverse() 函数完成数组元素的逆置。
int arr[5] = { 1,2,3,4,5 };
int sz = sizeof(arr) / sizeof(arr[1]);
init_arr(arr,sz);
printf("\n请输入5个数:>");
print_arr(arr,sz);
reverse_arr(arr, sz);
return 0;
}
3.实现一个对整形数组的冒泡排序
解题思想:
a,一组数字一共需要进行sz-1次排序
b,第一个数字需要进行sz-1;第二个数字需要进行sz-2。。。。
void fun_arr(int* arr, int sz)
{
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < sz-1; i++)//一趟数组进行比较大小
{
for (j = 0; j < sz - i-1; j++)
{
if (arr[j+1] > arr[j ])
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int arr[5] = {0};
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
printf("请输入数字:>");
for (i = 0; i < sz; i++)
{
scanf("%d",&arr[i]);
}
fun_arr(arr, sz);
return 0;
}
4.输入NxM矩阵,矩阵元素均为整数,计算其中大于零的元素之和。
解题思路:
a,首先需要打印二维数组,用两个for循环语句控制行列。
b,在通过两个for循环语句找到大于0的数组位置进行相加
#include <stdio.h>
int main()
{
printf("请输入二维数组的行列:>");
int n = 0;
int m = 0;
int i = 0;
int j = 0;
int sum = 0;
scanf("%d %d",&m,&n);
int arr[10][10] = { 0 };
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&arr[i][j]);
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (arr[i][j] > 0)
{
sum = sum + arr[i][j];
}
}
}
printf("%d\n",sum);
return 0;
}
5. 矩阵转置
解题思想:
a,两个for循环语句控制行列
b,转置就是将数组的行列的数组对调,本来是行控制列现在转置是列控制行
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int arr[10][10] = {0};
int i = 0;
int j = 0;
scanf("%d %d",&m,&n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&arr[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%d ",arr[j][i]);
}
printf("\n");
}
return 0;
}