模拟题(一)
1.设计程序实现比较两数大小
设计程序实现比较两数大小,若相等,输出两数相等;若不等,则输出较大值。
方法一:正常使用else if
语句逐个比较
#include<stdio.h>
int main()
{
int a, b,max;
printf("请输入两个数:");
scanf("%d %d", &a, &b);
max = a;
if (a == b)
printf("两个数相等!");
else if (a > b)
{
printf("最大值为:%d", max);
}
else
{
max = b;
printf("最大值为:%d", max);
}
return 0;
}
方法二:使用三目运算符
#include<stdio.h>
int main()
{
int a, b;
printf("请输入两个数:");
scanf("%d %d", &a, &b);
if (a == b)
printf("这两个数相等!");
else
{
int max = a > b ? a : b;
printf("最大值为:%d", max);
}
return 0;
}
2.排序成绩
从键盘输入10名学生的成绩数据,按成绩从高到低的顺序排列并输出。(提示:用数组存放成绩数据)
主要考排序算法,排序算法一共有十种,这里我就写个三种我常用的吧。
方法一:快速排序法
#include<stdio.h>
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i++; while (q[i] > x);
do j--; while (q[j] < x);
if (i < j)
{
int tmp;
tmp = q[i];
q[i] = q[j];
q[j] = tmp;
}
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
int main()
{
int arr[10];
printf("请依次输入十名同学的成绩:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
quick_sort(arr, 0, 9);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
方法二:冒泡排序法
#include<stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main()
{
int arr[10];
int len = sizeof(arr) / sizeof(arr[0]);
printf("请依次输入十名同学的成绩:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
bubble_sort(arr, len);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
方法三:希尔排序
#include<stdio.h>
void shell_sort(int arr[], int len) {
int gap, i, j;
int temp;
for (gap = len >> 1; gap > 0; gap >>= 1)
for (i = gap; i < len; i++) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] < temp; j -= gap)
arr[j + gap] = arr[j];
arr[j + gap] = temp;
}
}
int main()
{
int arr[10];
int len = sizeof(arr) / sizeof(arr[0]);
printf("请依次输入十名同学的成绩:\n");
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
shell_sort(arr, len);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
模拟题(二)
1.求最大值与平均值
输入5个数,求它们中最大值和平均值并输出。
#include<stdio.h>
int main()
{
int arr[5], max;
float ave;
float sum = 0.0;
for (int i = 0; i < 5; i++)
scanf("%d", &arr[i]);
max = arr[0];
for (int i = 0; i < 5; i++)
{
sum += arr[i];
if (max < arr[i])
max = arr[i];
}
ave = sum / 5;
printf("最大值是:%d 平均值是:%f", max, ave);
return 0;
}
2.找二维数组的最小值下标
从键盘上输入一个4*3的整型数组,找出数组中的最小值及其在数组中的下标。
#include <stdio.h>
int main()
{
int a[4][3] = {0};
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
int row = 0, col= 0;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
if (a[i][j] < a[row][col])
{
row = i;
col = j;
}
printf("该数组的最小的数是%d\n", a[row][col]);
printf("所处的位置为数组的第%d行第%d列\n", row + 1, col + 1);
}
** 二维数组需要两个for循环进行控制,一个控制行,一个控制列。
其他的和求一维数组的最小值和下标没多大的区别。**