Write By 木木原本没觉得会有多少人会看附加题,毕竟大佬不需要,跨考要了也没用。
但是事实是很多私聊我要附加题,由于确实没去AC,就索性没有回各位。
现在有时间了,把附加题AC了一下,放在blog上,有人反映404,应该是审核还没通过所以写了这个文档作为统一回复。
最后一点,求求各位女装大佬或女大佬别加我好友,问问题@我或者临时会话就行了。
上次那个谁谁谁就不点名了(说话好好说,别嗲嗲的),搞得我回去就是跪键盘。
宝宝心里苦啊。
试卷:2016-HITCS附加改错题(20分)1.(10分)下面程序的功能是:从键盘读入某门课程的成绩,然后根据输入选项将其排序,输入1则按升序排序,输入2则降序排序;最后输出排序结果。
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
#include <stdio.h>#include <stdlib.h>#define N 20int ReadScore(int score[]);void PrintScore(int score[], int n);void SelectionSort(int score[], int n, int (*compare)(int a, int b));void Swap(int *x, int *y);int Ascending(int a, int b);int Descending(int a, int b);int main(){int score[N],n;int order;n = ReadScore(score);printf("Total students are %d\n",n);printf("Enter 1 to sort in ascending order\n");printf("Enter 2 to sort in descending order\n");scanf("%d",&order);if(order == 1){SelectionSort(score, n, Ascending);printf("Data items in asending order\n");}else{SelectionSort(score, n, Descending);printf("Data items in descending order\n");}PrintScore(score, n);return 0;}/*读入成绩以负数结束,返回实际输入的成绩个数*/int ReadScore(int score[]){int i=-1;printf("Input score:\n");do{i++;scanf("%d",score[i]);}while (score[i]>=0);return i;}void PrintScore(int score[], int n){int i;for(i=0; i<n; i++)printf("%4d",score[i]);printf("\n");}void SelectionSort(int score[], int n, int *compare(int a, int b)) {int i, j, k;for(i=0; i<n-1;i++){k = i;for(j = i+1; j< n; j++){if((*compare)(score[i],score[k])){k = j;}}if(k!= i){Swap(score[i],score[k]);}}}int Ascending(int a, int b){return a < b;}int Descending(int a, int b){return a > b;}void Swap(int *x, int *y){int * temp;*temp = *x;*x = *y;*y = *temp;}注意:(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
(2)对于没有错误的语句,请不要修改。
(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加10分,部分正确不得分。
(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
运行示例:Input score:98 97 88 78 99 57 -1Total students are 6Enter 1 to sort in ascending orderEnter 2 to sort in descending order2Data items in descending order99 98 97 88 78 571格式化代码运行修改的地方都使用红色标记了#include <stdio.h>#include <stdlib.h>#define N 20int ReadScore(int score[]);void PrintScore(int score[], int n);void SelectionSort(int score[], int n, int (*compare)(int a, int b));void Swap(int *x, int *y);int Ascending(int a, int b);int Descending(int a, int b);int main(){int score[N],n;int order;n = ReadScore(score);printf("Total students are %d\n",n);printf("Enter 1 to sort in ascending order\n");printf("Enter 2 to sort in descending order\n");scanf("%d",&order);if(order == 1){SelectionSort(score, n, Ascending);printf("Data items in asending order\n");}else{SelectionSort(score, n, Descending);printf("Data items in descending order\n");}PrintScore(score, n);return 0;}/*读入成绩以负数结束,返回实际输入的成绩个数*/ int ReadScore(int score[]){int i=-1;printf("Input score:\n");do{i++;scanf("%d",&score[i]);}while (score[i]>=0);return i;}void PrintScore(int score[], int n){int i;for(i=0; i<n; i++)printf("%4d",score[i]);printf("\n");}void SelectionSort(int score[], int n, int (*compare)(int a, int b)){int i, j, k;for(i=0; i<n-1;i++){k = i;for(j = i+1; j< n; j++){if((*compare)(score[j],score[k])){k = j;}}if(k!= i){Swap(&score[i],&score[k]);}}}int Ascending(int a, int b){return a < b;}int Descending(int a, int b){return a > b;}void Swap(int *x, int *y){int temp;temp = *x;*x = *y;*y = temp;}2.(10分)创建动态链表并打印链表内容。
要求通过键盘读入学生的学号和分数,当输入的学号为0时表示链表创建结束,并将读入的学生学号和成绩打印输出。
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
#include <stdio.h>struct node{long num;float score;struct node *next;}int main(){struct node *head, *p, *q;head = (struct node*)malloc(sizeof(struct node));p = (struct node*)malloc(sizeof(struct node));q = p;head->next = p;scanf("%ld%f", p->num, p->score );while (p->num != 0){q = (struct node*)malloc(sizeof(struct node));p->next = q;scanf("%ld%f", p->num, p->score);}p = head->next;do{printf("%ld%.2f", p->num, p->score);p = p->next;}while ( p->next == NULL );free(p);return 0;}注意:(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
(2)对于没有错误的语句,请不要修改。
(3)当且仅当错误全部改正,且程序运行结果调试正确,才给加10分,部分正确不得分。
(4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。
运行示例:150301 65.5150302 78150303 87150304 98.50 0150301 65.50150302 78.00150303 87.00150304 98.501格式化代码运行修改的地方都使用红色标记了#include <stdio.h>#include<stdlib.h>struct node{long num;float score;struct node *next;};int main(){struct node *head, *p, *q;head = (struct node*)malloc(sizeof(struct node));p = (struct node*)malloc(sizeof(struct node));q = p;head->next = p;scanf("%ld%f", &(p->num), &(p->score) );while (p->num != 0){p = (struct node*)malloc(sizeof(struct node));q->next = p;scanf("%ld%f", &(p->num), &(p->score) );q=p;}p->next=NULL;p = head->next;while(p->next){printf("%ld %.2f\n", p->num, p->score);p = p->next;}free(p);return 0;}。