您的位置:首页 > 编程语言 > C语言/C++

C语言 百炼成钢12

2016-01-23 16:57 295 查看
//题目34:对10个数进行排序

#include<stdio.h>
#include<stdlib.h>

//分析:使用冒泡排序

void main(){
int arr[10] = { 9, 2, 4, 7, 5, 71, 45, 46, 7, 8 };
//定义临时变量
int temp = 0;
//冒泡排序  双循环
for (int i = 0; i < 10; i++)
{
for (int j = i+1; j <10; j++)
{
if (arr[j-1]>arr[j])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d--", arr[i]);
}
system("pause");
}




//题目35:求一个3*3矩阵对角线元素之和
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//分析:就是一个二维数组,求a[0][0]+a[1][1]+a[2][2]的和,

void main(){
int arr[3][3] = { 0 };
//二维数组的遍历需要使用双for循环
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
scanf("%d", &arr[i][j]);
}
}
int sun = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
//对角线上的元素满足i=j
if (i==j)
{
sun += arr[i][j];
}
printf("%5d",arr[i][j]);
}
printf("\n");
}
printf("\n求一个3*3矩阵对角线元素之和是%d",sun);
system("pause");
}




//题目36:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//分析:for循环,遍历每个数,设定数组从大到小,一个个与输入的数进行比较,插入对应的空中
//这里需要用到动态分配内存,因为数组的元素是固定的不可以随意插入

void main(){
int *p = (int *)calloc(sizeof(int), 10);
printf("原来的数组\n");
//为这个数组赋值
for (int i = 0; i < 10; i++)
{
*(p + i) = i*2;
printf("%5d", *(p + i));
}
printf("\n");
//已经排好序的数组已经准备好了
int num = 0;
printf("请输入要插入的数字\n");
scanf("%d",&num);
//再次用realloc函数分配内存
//新的大小可大可小(但是要注意,如果新的大小小于原内存大小,可能会导致数据丢失,慎用!)
int *p1 = realloc(p, sizeof(int)*11);
//给最后一个元素赋值0
*(p1 + 10) = 0;
int temp = 0;
//从前往后排序,存在着逻辑上的不方便。因为就算我找到了位置,后面的所有元素都要向后移动一位
//那么有可能需要再写一个循环,来移动数组元素的位置
/*for (int i = 0; i < 11; i++)
{
if (*(p1+i)>num)
{

}
}*/
//我决定从后往前排序,因为最后面一个位置本来就是空着的
for (int i = 9; i>=0; i--)
{
if (*(p1 + i)<num)
{
*(p1 + i + 1) = num;
//换完位置后退出循环
break;
}
else{
//将指针内的数据向后移动一位,此时p1+i这个位置已经空出来了
*(p1 + i + 1) = *(p1 + i);
}
}
printf("\n新排序的数组\n");
for (int i = 0; i < 11; i++)
{
printf("%5d",*(p1+i));
}
//释放堆内存
free(p1);

system("pause");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: