今天是刷题第14天,放弃不难,但坚持一定很酷~
临近期末,集中把模拟卷的编程题都刷一下
设计程序实现比较两数大小,若相等,输出两数相等;若不等,则输出较大值。
方法一:正常使用else if
语句逐个比较
#include
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
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;
}
从键盘输入10名学生的成绩数据,按成绩从高到低的顺序排列并输出。(提示:用数组存放成绩数据)
主要考排序算法,排序算法一共有十种,这里我就写个三种我常用的吧。
方法一:快速排序法
#include
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
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
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;
}
输入5个数,求它们中最大值和平均值并输出。
#include
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;
}
从键盘上输入一个4*3的整型数组,找出数组中的最小值及其在数组中的下标。
#include
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循环进行控制,一个控制行,一个控制列。
其他的和求一维数组的最小值和下标没多大的区别。
用指针的方法处理:写一个函数,将3*3的整型矩阵转置
转置:第一行变为第一列…最后一行变为最后一列
要求使用指针写这个转置函数,那就使用数组指针来间接进行转置操作
#include
void move(int(*pa)[3])
{int i, j, temp;for (i = 0; i < 3; i++)for (j = 0; j < i; j++){temp = *(*(pa + i) + j);*(*(pa + i) + j) = *(*(pa + j) + i);*(*(pa + j) + i) = temp;}
}
int main()
{int a[3][3];int temp;for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)scanf("%d", &a[i][j]);printf("转置前的数组为:\n");for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++)printf("%5d ", a[i][j]);printf("\n");}move(a);printf("转置后的数组为:\n");for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++)printf("%5d ", a[i][j]);printf("\n");}return 0;
}
用指针的方法处理:写一个函数,将两个字符串连接。
#include
#include
char* my_strcat(char* dest, const char* src)
{char* ret = dest;assert(dest != NULL);assert(src != NULL); while (*dest){dest++;}while (*dest = *src){dest++;src++;}return ret;
}
int main()
{char str1[30],str2[30];scanf("%s", str1);scanf("%s", str2);my_strcat(str1, str2);printf("连接后的结果为:%s", str1);
}