1
#include<stdio.h>
int IndexOfMax(const int* p, int n);
void Selection(int* p, int n);
void OutputArray(const int* p, int n);
void SwapByAddress(int* a, int* b);
int main() {
int a[10];
int i;
printf("Enter 10 integers:\n");
for (i = 0; i < 10; i++) {
scanf_s("%d", a + i);
}
Selection(a, 10);
OutputArray(a, 10);
return 0;
}
int IndexOfMax(const int* p, int n) {
int i;
int max = 0;
for (i = 1; i < n; i++) {
if (p[max] < p[i])
max = i;
}
return max;
}
void Selection(int* p, int n) {
int max;
while (n > 1) {
max = IndexOfMax(p, n);
SwapByAddress(p+max, p+n-1);
n--;
}
}
void OutputArray(const int* p, int n) {
for (int i = 0; i < n; i++)
printf("%d\t", p[i]);
printf("\n");
}
void SwapByAddress(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
2,3题
#include<stdio.h>
int IndexOfMin(const int* p, int n);
void Selection(int* p, int n);
void OutputArray(const int* p, int n);
void SwapByAddress(int* a, int* b);
int main() {
int a[10];
int i;
printf("Enter 10 integers:\n");
for (i = 0; i < 10; i++) {
scanf_s("%d", a + i);
}
Selection(a, 10);
OutputArray(a, 10);
return 0;
}
int IndexOfMin(const int* p, int n) {
int i;
int min = 0;
for (i = 1; i < n; i++) {
if (p[min] > p[i])
min = i;
}
return min;
}
void Selection(int* p, int n) {
int min;
int temp = n;
while (n > 1) {
min = IndexOfMin(p + temp - n, n) + temp - n;
//返回的min是后面部分数组的index,而不是原本数组的index
SwapByAddress(p + min, p + temp - n);
n--;
}
}
void OutputArray(const int* p, int n) {
for (int i = 0; i < n; i++)
printf("%d\t", p[i]);
printf("\n");
}
void SwapByAddress(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
4,5,6题
#include<stdio.h>
void BubbleDown(int p[], int n);
void BubbleUp(int p[], int n);
void UpDown(int p[], int n);
void OutputArray(const int* p, int n) {
for (int i = 0; i < n; i++)
printf("%d\t", p[i]);
printf("\n");
}
void SwapByAddress(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main() {
const int num = 10;
int a[10];
printf("Enter %d integers:\n", num);
for (int i = 0; i < num; i++) {
scanf_s("%d", a + i);
}
//for (int i = 0; i < num; i++)
// BubbleUp(a + i, num - i);
//for (int i = 0; i < num; i++)
// BubbleDown(a, num - i);
int i = 0;
int j = num;
for (; i < j; i++, j--)
UpDown(a + i, j - i);
OutputArray(a, 10);
return 0;
}
void BubbleDown(int p[], int n) {
for (int i = 0; i < n - 1; i++) {
if (p[i] > p[i + 1])
SwapByAddress(p + i, p + i + 1);
}
}
void BubbleUp(int p[], int n) {
for (int i = n - 1; i >= 0; i--) {
if (p[i] < p[i - 1])
SwapByAddress(p + i, p + i - 1);
}
}
void UpDown(int p[], int n) {
BubbleUp(p, n);
BubbleDown(p + 1, n - 1);
}
7
#include<stdio.h>
void Partition1(int p[], int n);
void Partition2(int p[], int n);
void OutputArray(const int* p, int n) {
for (int i = 0; i < n; i++)
printf("%d\t", p[i]);
printf("\n");
}
void SwapByAddress(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main() {
const int num = 10;
int a[10];
printf("Enter %d integers:\n", num);
for (int i = 0; i < num; i++) {
scanf_s("%d", a + i);
}
//支点为第一个元素
Partition2(a, num);
OutputArray(a, 10);
return 0;
}
void Partition1(int p[], int n) {
int* a;
int* b;
int* c;
a = (int*)malloc(n * sizeof(int));
b = (int*)malloc(n * sizeof(int));
c = (int*)malloc(n * sizeof(int));
int temp = p[0];
for (int i = 1; i < n; i++) {
if (temp >= p[i])
a[i] = p[i], c[i] = 0;
else
b[i] = p[i], c[i] = 1;
}
int ai = 0;
for (int i = 0; i < n; i++)
if (c[i] == 0)
p[ai++] = a[i];
p[ai++] = temp;
for (int i = 0; i < n; i++)
if (c[i] == 1)
p[ai++] = b[i];
free(a);
free(b);
free(c);
}
void Partition2(int p[], int n) {
int i = 0;
int j = n - 1;
while (i != j)
{
if (p[i] < p[i + 1])
{
SwapByAddress(p + i + 1, p + j);
j--;
}
else
{
SwapByAddress(p + i + 1, p + i);
i++;
}
}
}
8
#include<stdio.h>
#include<stdlib.h>
int main() {
int n;
printf("Enter an integer:\n");
scanf_s("%d", &n);
int* a;
a = (int*)calloc(n + 1, sizeof(int));
if (a == 0)
{
printf("allocation failure!\n");
exit(1);
}
a[0] = a[1] = 1;
for (int i = 2; i < n + 1; i++)
if (a[i] == 0)
for (int j = i + 1; j < n + 1; j++)
if (j % i == 0)
a[j] = 1;
int hang = 0;
for (int i = 0; i < n + 1; i++)
if (a[i] == 0)
if ((hang % 5 != 0) || (hang == 0))
{
printf("%d\t", i);
hang++;
}
else
{
printf("\n");
hang = 0;
}
free(a);
return 0;
}
9
这里有个问题,不管把函数声明定义,函数指针声明定义怎么改,只要不是在定义函数指针时直接赋值,都会出现问题C2373,一直查不到问题所在
#include<stdio.h>
int indexofmax(const int* p, int n) {
int i = 1;
int max = 0;
for (; i < n; i++)
if (p[max] < p[i])
max = i;
return max;
}
int (*pofi)(const int*, int) = indexofmax;
void Selection(int* p, int n) {
int max;
int temp;
while (n > 1) {
max = pofi(p, n);
temp = p[max];
p[max] = p[n - 1];
p[n - 1] = temp;
n--;
}
}
void (*pofs)(int* ,int) = Selection;
void OutputArray(const int* p, int n) {
for (int i = 0; i < n; i++)
printf("%d\t", p[i]);
printf("\n");
}
int main() {
int a[10];
printf("Enter 10 integers:\n");
for (int i = 0; i < 10; i++) {
scanf_s("%d", a + i);
}
(*pofs)(a, 10);
OutputArray(a, 10);
return 0;
}