码迷,mamicode.com
首页 > 编程语言 > 详细

C语言第二次考试改错

时间:2017-12-25 22:11:45      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:oda   yellow   word   输入   变换   today   大小写   inf   英文单词   

A卷(改错)

1. 数组排序(50分)

输入10个整数,存入数组,将最大的数与第一个数交换,最小的数与最后一个数交换,交换后存储并输出。

输入:10个整数。

输出:交换后的10个数。

样例:

技术分享图片技术分享图片

评分标准:

(1)正确定义数组,给出输入语句,正确实现10个整数的输入,20分;

(2)正确交换,20分;

(3)正确输出结果,10分。

 

#include "stdafx.h"  

  1. int main(void)  
  2. {  
  3.     int a[10];  
  4.     for (int i = 0; i < 10; i++)  
  5.     {  
  6.         scanf_s("%d", &a[i]);  
  7.     }  
  8.     int min = a[0]max = a[0]; ;  
  9.     int minnum = 0maxnum = 0;       
  10.     int j;  
  11.     for (j = 0;j < 10;j++)  
  12.     {  
  13.         if (a[j] < min)  
  14.         {  
  15.             min = a[j];  
  16.             minnum = j;  
  17.         }  
  18.     }  
  19.     int k ;  
  20.     for (k = 0; k < 10; k++)  
  21.     {  
  22.         if (a[k] > max)  
  23.         {  
  24.             max = a[k];  
  25.             maxnum = k;  
  26.         }  
  27.     }  
  28.     int temp;  
  29.     temp = a[0];  
  30.     a[0] = a[maxnum];  
  31.     a[maxnum] = temp;  
  32.  
  33.     temp = a[9];  
  34.     a[9] = a[minnum];  
  35.     a[minnum] = temp;  
  36.  
  37.     for (int i = 0; i < 10; i++)  
  38.     {  
  39.         printf("%d ", a[i]);  
  40.     }  
  41. return 0;
  42. }  

 

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分。

 

  1. #include "stdafx.h"  
  2. int maopaopaixu(int a[], int n);  
  3. int main(void)  
  4. {  
  5.     int n, k;  
  6.     scanf_s("%d %d", &n,&k);  
  7.     int a[10000];  
  8.     for(int i = 0;i<n;i++)  
  9.     {  
  10.         scanf_s("%d", &a[i]);  
  11.     }  
  12.     maopaopaixu(a, n);  
  13.     for (int i = 0; i < k; i++)  
  14.     {  
  15.         printf("%d ", a[i]);  
  16.     }  
  17.     
  18.     return 0;  
  19. }  
  20.      
  21. int maopaopaixu(int a[], int n)  
  22. {  
  23.     int temp;  
  24.     for(int i =0;i<n;i++)  
  25.         for (int j = 0; j < n - i - 1; j++)  
  26.         {  
  27.             if (a[j] > a[j + 1])  
  28.             {  
  29.                 temp = a[j];  
  30.                 a[j] = a[j + 1];  
  31.                 a[j + 1] = temp;  
  32.             }  
  33.         }  
  34.     return 0;  
  35. }  

 

 

3. 单词翻转(50分)

题目描述:对于一句话,在不改变单词的顺序的情况下,将每一个单词翻转(单词倒序写)。(失分原因:以为是对称)

输入:只有英文单词和空格(不含其它字符)。如:其中I am happy today是键盘输入的。

输出:按题目要求变换的字符串

(主要转换功能用自定义函数实现)

样例:

技术分享图片

评分标准:

(1)正确定义数组,给出输入语句,正确实现句子的输入,10分;

(2)正确给出函数定义,5分;

(3)函数正确实现,10分;

(4)函数正确调用,10分;

(5)正确输出结果,15分。

 

 

  1. #include "stdafx.h"  
  2. #define MAX 10000  
  3. int swap(char a[],int i, int j);  
  4.     
  5. int main(void)  
  6. {     
  7.     char words[MAX];  
  8.     gets_s(words);  
  9.     int num[MAX] = { -1 };  
  10.     int j = 1;  
  11.     for (int i = 0;;i++)  
  12.     {  
  13.         if (words[i] == ‘ ‘ || words[i] == ‘\0‘)  
  14.         {  
  15.             num[j] = i;  
  16.             j++;  
  17.         }  
  18.         if (words[i] == ‘\0‘break;  
  19.     
  20.     }  
  21.     for(int i = 0;i < j - 1;i++)  
  22.     {  
  23.         swap(words,num[i],num[i + 1]);  
  24.         printf(" ");  
  25.     }  
  26.     
  27.     return 0;  
  28. }  
  29.     
  30.     
  31. int swap(char a[],int i,int j) //i,j都是空格的位置  
  32. {  
  33.     for (;j - 1>= i + 1;j--)  
  34.     {  
  35.         printf("%c",a[j - 1]);  
  36.     }  
  37.     return 0;  
  38. }  

下一次 C语言分数一定不能这么低了

 

B卷

3. 查找并删除子串(50分)

给定一个短字符串(不含空格),再给一个带有空格的长字符串,在长字符串中删除所含有的短字符串。  

输入:先输入一个指定将被删除的字符串,再输入一串将被删除指定字符串的长字符串。

输出:在长字符串中查找并删除输入的短字符串(不区分大小写),去掉空格后输出。如果长字符串中不含有短字符串,则只对长字符串去空格后输出。 

样例:

技术分享图片

技术分享图片

评分标准:

(1)正确实现输入,10分;

(2)正确删除子串,30分;

(3)输出正确,10分。

 

C卷

3. 最少的交换(50分)

题目描述:现在给你一个由n个互不相同的整数组成的序列,现在要求你任意交换相邻的两个数字,使序列成为升序序列,请问最少的交换次数是多少?

输入:包含多组测试数据。每组输入第一行是一个正整数n(n<20),表示序列的长度,当n=0时,终止程序。接下来的n行,每行一个整数a[i],表示序列中第i个元素。

输出:对于每组输入,输出使得所给序列升序的最少交换次数。

(主要交换功能用自定义函数实现)

样例:

技术分享图片

评分标准:

(1)正确定义数组,给出输入语句,正确实现n个整数的输入,10分;

(2)正确给出函数定义,5分;

(3)函数正确实现,10分;

(4)函数正确调用,10分;

(5)正确输出结果,10分;

(6)实现多组数据,5分。

有数学背景 :逆序数

 

C语言第二次考试改错

标签:oda   yellow   word   输入   变换   today   大小写   inf   英文单词   

原文地址:https://www.cnblogs.com/kazoo310/p/8111274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!