A卷(改错)
1. 数组排序(50分)
输入10个整数,存入数组,将最大的数与第一个数交换,最小的数与最后一个数交换,交换后存储并输出。
输入:10个整数。
输出:交换后的10个数。
样例:
评分标准:
(1)正确定义数组,给出输入语句,正确实现10个整数的输入,20分;
(2)正确交换,20分;
(3)正确输出结果,10分。
#include "stdafx.h"
- int main(void)
- {
- int a[10];
- for (int i = 0; i < 10; i++)
- {
- scanf_s("%d", &a[i]);
- }
- int min = a[0],max = a[0]; ;
- int minnum = 0,maxnum = 0;
- int j;
- for (j = 0;j < 10;j++)
- {
- if (a[j] < min)
- {
- min = a[j];
- minnum = j;
- }
- }
- int k ;
- for (k = 0; k < 10; k++)
- {
- if (a[k] > max)
- {
- max = a[k];
- maxnum = k;
- }
- }
- int temp;
- temp = a[0];
- a[0] = a[maxnum];
- a[maxnum] = temp;
- temp = a[9];
- a[9] = a[minnum];
- a[minnum] = temp;
- for (int i = 0; i < 10; i++)
- {
- printf("%d ", a[i]);
- }
- return 0;
- }
2. 查找最小的k个元素(40分)
题目描述:输入n个正整数(可以有重复的情况出现),输出其中最小的k个(如有重复的情况出现,重复输出),其中1≤k≤n≤10000,每个正整数小于10000。 例如输入1、4、8、2、5、7、6、3这8个数字,则最小的4个数字为1、2、3、4。
输入:第一行,n和k,用空格隔开。
n个整数,用空格隔开。
输出:最小的k个正整数,且从小到大排序,用空格隔开。
样例:
评分标准:
(1)正确定义数组,给出输入语句,正确实现n个整数的输入,10分;
(2)正确找到最小的k个数,10分;
(3)正确将k个数进行排序,10分;
(4)正确输出结果,10分。
- #include "stdafx.h"
- int maopaopaixu(int a[], int n);
- int main(void)
- {
- int n, k;
- scanf_s("%d %d", &n,&k);
- int a[10000];
- for(int i = 0;i<n;i++)
- {
- scanf_s("%d", &a[i]);
- }
- maopaopaixu(a, n);
- for (int i = 0; i < k; i++)
- {
- printf("%d ", a[i]);
- }
- return 0;
- }
- int maopaopaixu(int a[], int n)
- {
- int temp;
- for(int i =0;i<n;i++)
- for (int j = 0; j < n - i - 1; j++)
- {
- if (a[j] > a[j + 1])
- {
- temp = a[j];
- a[j] = a[j + 1];
- a[j + 1] = temp;
- }
- }
- return 0;
- }
3. 单词翻转(50分)
题目描述:对于一句话,在不改变单词的顺序的情况下,将每一个单词翻转(单词倒序写)。(失分原因:以为是对称)
输入:只有英文单词和空格(不含其它字符)。如:其中I am happy today是键盘输入的。
输出:按题目要求变换的字符串
(主要转换功能用自定义函数实现)
样例:
评分标准:
(1)正确定义数组,给出输入语句,正确实现句子的输入,10分;
(2)正确给出函数定义,5分;
(3)函数正确实现,10分;
(4)函数正确调用,10分;
(5)正确输出结果,15分。
- #include "stdafx.h"
- #define MAX 10000
- int swap(char a[],int i, int j);
- int main(void)
- {
- char words[MAX];
- gets_s(words);
- int num[MAX] = { -1 };
- int j = 1;
- for (int i = 0;;i++)
- {
- if (words[i] == ‘ ‘ || words[i] == ‘\0‘)
- {
- num[j] = i;
- j++;
- }
- if (words[i] == ‘\0‘) break;
- }
- for(int i = 0;i < j - 1;i++)
- {
- swap(words,num[i],num[i + 1]);
- printf(" ");
- }
- return 0;
- }
- int swap(char a[],int i,int j) //i,j都是空格的位置
- {
- for (;j - 1>= i + 1;j--)
- {
- printf("%c",a[j - 1]);
- }
- return 0;
- }
下一次 C语言分数一定不能这么低了
B卷
3. 查找并删除子串(50分)
给定一个短字符串(不含空格),再给一个带有空格的长字符串,在长字符串中删除所含有的短字符串。
输入:先输入一个指定将被删除的字符串,再输入一串将被删除指定字符串的长字符串。
输出:在长字符串中查找并删除输入的短字符串(不区分大小写),去掉空格后输出。如果长字符串中不含有短字符串,则只对长字符串去空格后输出。
样例:
评分标准:
(1)正确实现输入,10分;
(2)正确删除子串,30分;
(3)输出正确,10分。
C卷
题目描述:现在给你一个由n个互不相同的整数组成的序列,现在要求你任意交换相邻的两个数字,使序列成为升序序列,请问最少的交换次数是多少?
输入:包含多组测试数据。每组输入第一行是一个正整数n(n<20),表示序列的长度,当n=0时,终止程序。接下来的n行,每行一个整数a[i],表示序列中第i个元素。