C语言编程题,急求!!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程题,急求!!!!相关的知识,希望对你有一定的参考价值。
【问题描述】
从标准输入连续读入 n 个学生的学号(不超过int类型表示范围)、姓名(由不超过10个英文字母组成)以及数学、英语、语文三门课的成绩,计算各人的平均成绩。输出总成绩最高的学生的信息(如果总成绩最高的学生有多名,按输入顺序输出总成绩最高的第一个同学),要求学号占10个字符,姓名占10个字符,数学、英语、语文、平均成绩各占5个字符)。要求用链表实现。
【输入形式】
从控制台输入一个正整数,表示学生人数;然后分行输入学号、姓名以及数学、英语、语文三门课的成绩,中间用空格分隔。
【输出形式】
控制台输出成绩最高的第一个同学,要求输出:学号、姓名、数学成绩、英语成绩、语文成绩、平均成绩。
【样例输入】
8
39060415 zf 98 88 80
39060427 lzw 87 92 88
39060413 wr 95 88 90
39060412 wp 95 87 91
39060405 syj 78 82 69
39060425 yef 85 78 93
39060419 sw 75 89 88
39060421 rr 89 88 75
【样例输出】
39060413 wr 95 86 90 91
传统的 NFA 引擎运行所谓的“贪婪的”匹配回溯算法,以指定顺序测试正则表达式的所有可能的扩展并接受第一个匹配项。因为传统的 NFA 构造正则表达式的特定扩展以获得成功的匹配,所以它可以捕获子表达式匹配和匹配的反向引用。但是,因为传统的 NFA 回溯,所以它可以访问完全相同的状态多次(如果通过不同的路径到达该状态)。因此,在最坏情况下,它的执行速度可能非常慢。因为传统的 NFA 接受它找到的第一个匹配,所以它还可能会导致其他(可能更长)匹配未被发现。
POSIX NFA 引擎与传统的 NFA 引擎类似,不同的一点在于:在它们可以确保已找到了可能的最长的匹配之前,它们将继续回溯。因此,POSIX NFA 引擎的速度慢于传统的 NFA 引擎;并且在使用 POSIX NFA 时,您恐怕不会愿意在更改回溯搜索的顺序的情况下来支持较短的匹配搜索,而非较长的匹配搜索。
使用DFA引擎的程序主要有:awk,egrep,flex,lex,mysql,Procmail等;
使用传统型NFA引擎的程序主要有:GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,php,Python,Ruby,sed,vi;
使用POSIX NFA引擎的程序主要有:mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);
也有使用DFA/NFA混合的引擎:GNU awk,GNU grep/egrep,Tcl。
举例简单说明NFA与DFA工作的区别:
比如有字符串this is yansen’s blog,正则表达式为 /ya(msen|nsen|nsem)/ (不要在乎表达式怎么样,这里只是为了说明引擎间的工作区别)。 NFA工作方式如下,先在字符串中查找 y 然后匹配其后是否为 a ,如果是 a 则继续,查找其后是否为 m 如果不是则匹配其后是否为 n (此时淘汰msen选择支)。然后继续看其后是否依次为 s,e,接着测试是否为 n ,是 n 则匹配成功,不是则测试是否为 m 。为什么是 m ?因为 NFA 工作方式是以正则表达式为标准,反复测试字符串,这样同样一个字符串有可能被反复测试了很多次!
而DFA则不是如此,DFA会从 this 中 t 开始依次查找 y,定位到 y ,已知其后为a,则查看表达式是否有 a ,此处正好有a 。然后字符串a 后为n ,DFA依次测试表达式,此时 msen 不符合要求淘汰。nsen 和 nsem 符合要求,然后DFA依次检查字符串,检测到sen 中的 n 时只有nsen 分支符合,则匹配成功!
由此可以看出来,两种引擎的工作方式完全不同,一个(NFA)以表达式为主导,一个(DFA)以文本为主导!一般而论,DFA引擎则搜索更快一些!但是NFA以表达式为主导,反而更容易操纵,因此一般程序员更偏爱NFA引擎! 两种引擎各有所长,而真正的引用则取决与你的需要以及所使用的语言! 参考技术A #include <stdio.h>
#include<string.h>
struct MyStruct
char num[11];
char name[11];
double val[3];
MyStruct *data=NULL;
double Sum()
return val[0] + val[1] + val[2];
double Average() return Sum() / 3;
void Print()
printf("学号:%s\\t姓名:%s\\t数学:%.lf\\t英语:%.2lf\\t语文:%.2lf\\t平均:%.2lf\\t总分:%.2lf\\n", num, name, val[0], val[1], val[2],Average(),Sum());
;
int main()
MyStruct* head=NULL,*p,*pmax;
int n;
scanf("%d", &n);
while (n>0)
n--;
if (head == NULL)
head = new MyStruct();
p = head;
pmax = p;
else
p->data = new MyStruct();
p = p->data;
scanf("%s %s %lf %lf %lf", &p->num, p->name, &p->val[0], &p->val[1], &p->val[2]);
if (p->Sum() > pmax->Sum()) pmax = p;
printf("\\n学生成绩信息表\\n");
p = head;
while (p!=NULL)
p->Print();
p = p->data;
printf("\\n最好成绩学生信息\\n");
pmax->Print();
scanf("%d", &n);
return 0;
刚给你写了个
本回答被提问者采纳 参考技术B 混沌剑神那就睡觉小鸡小鸡时间就是 参考技术C 打开数据结构那本书,上面有现成的类似的例子,抄一个,改吧改吧就成了。 参考技术D 上CF找大神以上是关于C语言编程题,急求!!!!的主要内容,如果未能解决你的问题,请参考以下文章