麻烦c语言题库大神帮忙写一下这道题!万分感激!!

(加多宝凉茶)
(zhiyuansk)
(7。祥如意)
第三方登录:您的位置:&&推荐的文章
求助C语言高手,跪求一个关于成绩统计程序.希望哪位大侠帮帮忙,感激不尽!!!
#include &stdio.h&#include &string.h&#include &stdlib.h&int login(char p[16])//登录,密码判断,{
char login[16]; printf(&请输入密码\n&); gets(login);//输入字符串作为密码 w=strcmp(p,login);//判断两字符串是否相同,若相同则返回0 //返回密码判断的值}void display()//菜单{ printf(&*——————————————————————————————————————*\n&); printf(&|请选择您所需的操作:
|\n&);
printf(&|——————————————————————————————————————|\n&);
printf(&|1.输入成绩
2.顺序输出成绩
3.查找最高分
4.查找最低分|\n&);
printf(&|5.查找特定成绩
6.降序排序成绩
7.求总成绩和平均成绩
|\n&);
printf(&|8.查找低于特定分数的成绩
9.分段成绩人数及位置 10.增加成绩
|\n&);
printf(&|11.更改成绩
12.删除单个成绩
13.删除全部成绩
14.修改密码
|\n&); printf(&|0.退出
|\n&);
printf(&*——————————————————————————————————————*\n&);}int input(double score[200])//输入数据{ int p,q,i=1; printf(&请输入学生人数\n&); scanf(&%d&,&p); for(q=0;q&p;q++) { printf(&请输入第%d个人成绩\n&,i); scanf(&%lf&,&score[q]); i++; } printf(&输入完毕\n&); //返回总人数}void output(double score[200],int x)//顺序输出学生成绩{ int i=0; if(x!=0)
while(i!=x)
printf(&第%d个人的成绩为%lf\n&,i+1,score[i]);
} else printf(&数据为空,请先输入数据\n&);//容错,当数组中没有数据时提示用户先输入数据}void max(double score[200],int x)//查询最大成绩{ int m,n;
if(x!=0) {
max=score[0];n=1;
for(m=1;m&x;m++)//循环判断最大成绩与其所在位置,所在位置为下标加1
if(max&score[m])
max=score[m];
printf(&最高成绩为%lf,是第%d个\n&,max,n); } else printf(&数据为空,请先输入数据\n&);//容错}void min(double score[200],int x)//查询最低成绩{ int m,n;
if(x!=0) {
min=score[0];n=1;
for(m=1;m&x;m++)//循环判断最低成绩与其所在位置,所在位置为下标加1
if(min&score[m])
min=score[m];
printf(&最低成绩为%lf,是第%d个\n&,min,n); } else printf(&数据为空,请先输入数据\n&);//容错}void spe(double score[200],double m,int n)//查询特定成绩{ int i,x=0; int location[200];
for(i=0;i&n;i++)//循环
if(score[i]==m)//判断是否为所查询的成绩
location[x]=i+1;
printf(&您所查询的成绩为%lf,在以下位置出现\n&,m);//输出所查询的成绩
for(i=0;i&x;i++)
printf(&%d
&,location[i]);//输出所查询成绩的所在位置,此位置为下标加1
printf(&\n&);
printf(&此成绩不存在\n&);//容错,当所查询的成绩不存在是输出}void down(double score[200],int x)//降序排列{ int m,n;
if(x!=0) {
for(m=0;m&x;m++)//选择排序,控制第一个数
for(n=m+1;n&x;n++)//选择排序,控制第二个数
if(score[m]&score[n])//判断,当后面的数比前面的小时两数交换位置
temp=score[m];
score[m]=score[n];
printf(&降序排列为\n&);
for(m=0;m&x;m++)//输出控制,每行只输出4个数
printf(&%lf
&,score[m]);
if(n==5)//输出控制,用于判断回车符的输出
printf(&\n&);
} } else printf(&数据为空,请先输入数据\n&);//容错}double ave(double score[200],int x)//输出总分与平均分{ double sum=0,ave0;
if(x!=0) {
for(i=0;i&x;i++)//累加求和,求出总分
sum=sum+score[i];
ave0=sum/x;//求出平均分
printf(&总成绩为%lf\n&,sum);
return ave0; } else
printf(&数据为空,请先输入数据\n&);//容错
return 0; } }void fil(double score[200],double w,int x)//输出小于特定分数的成绩所在位置,位置为下标加1{ int i,m; int location[200];
for(i=0;i&x;i++)
if(score[i]&w)
location[m]=i+1;
printf(&所查询的成绩在以下位置出现\n&);
for(i=0;i&m;i++)
printf(&%d
&,location[i]);
printf(&此成绩不存在\n&);}void sec(double score[200],int x)//成绩分段并输出各段人数与位置,位置为下标加1{ int s,i=0,m=0,n=0,s80[200],s60[200],s0[200],f=1; if(x!=0) {
for(s=0;s&x;s++)//循环判断各成绩所在段
if(score[s]&=80)
s80[i]=s+1;
if(score[s]&=60)
s60[m]=s+1;
if(score[s]&60)
s0[n]=s+1;
printf(&80分至100分的人数为%d,在以下位置出现\n&,i);//输出各段的人数
for(s=0;s&i;s++)
printf(&%d
&,s80[s]);
printf(&\n&);
printf(&\n60分至80分的人数为%d,在以下位置出现\n&,m);
for(s=0;s&m;s++)
printf(&%d
&,s60[s]);
printf(&\n&);
printf(&\n60分以下的人数为%d,在以下位置出现\n&,n);
for(s=0;s&n;s++)
printf(&%d
printf(&\n&);
} } else printf(&数据为空,请先输入数据\n&);//容错}int add(double score[200],int x,double y,int z){
for(i=z;i&=x;i--)
score[i]=score[i-1];
score[x-1]=y;
printf(&增加成功\n&);
return 1;}void rejigger(double score[200],int x,double y){
score[x-1]=y;
printf(&更改成功\n&);}void del(double score[200],int x,int y){
for(i=x;i&y;i++)
score[i-1]=score[i];
score[y]=0;}int format(double score[200]){
printf(&是否确认删除所有数据Y/N\n&); scanf(&%c&,&validate); scanf(&%c&,&validate); if(validate=='Y'||validate=='y') {
for(i=0;i&200;i++)
score[i]=0;
printf(&删除成功\n&);
return 1; }
printf(&取消删除\n&);
}}void main(){
char password[16]=&123456&;//定义默认密码
double score[200],m,n,w,z;
int choose,x=3,i,f,b=0,change=1,y;
double *a;
int flag = 0;
while(f)//密码错误次数控制,当错误时重新输入,若连续错误3次则直接退出程序
i=login(password);
printf(&密码错误,请重新输入,您还有%d次机会\n&,x);
printf(&密码错误,程序自动退出\n&);
f--;//次数控制
else//当密码输入正确时进入下一步
while(flag)//主循环,控制菜单的循环输出与程序的循环使用
display();//输出菜单
scanf(&%d&,&choose);//功能选择
switch(choose)//功能判断
case 1:b=input(score);//输入成绩
case 2://顺序输出成绩
output(score,b);
case 3:max(score,b);//输出最大值
case 4:min(score,b);//输出最小值
case 5://查询特定成绩
printf(&请输入要查询的成绩\n&);
scanf(&%lf&,&m);
spe(score,m,b);
printf(&数据为空,请先输入数据\n&);
case 6:down(score,b);//降序排列
case 7:n=ave(score,b);printf(&平均成绩为%lf\n&,n);//输出总成绩与平均成绩
case 8://查询低于特定分数的成绩
printf(&请输入分数\n&);
scanf(&%lf&,&w);
fil(score,w,b);
printf(&数据为空,请先输入数据\n&);
case 9:sec(score,b);//成绩分段
printf(&请输入要增加的成绩和所在位置\n&);
scanf(&%lf%d&,&z,&y);
add(score,y,z,b);
printf(&数据为空,请先输入数据\n&);
printf(&请输入要修改的位置和修改后的成绩\n&);
scanf(&%d%lf&,&y,&z);
rejigger(score,y,z);
printf(&数据为空,请先输入数据\n&);
printf(&请输入要删除的位置\n&);
scanf(&%d&,&y);
del(score,y,b);
printf(&数据为空,请先输入数字\n&);
y=format(score);
if(y==1) b=0;
printf(&程序退出后所有数据将消失,确定退出程序?Y/N\n&);
scanf(&%c&,&validate);
scanf(&%c&,&validate);
if(validate=='Y'||validate=='y') flag=0;//退出
printf(&谢谢使用\n&);}
毅力不强的话健身有计划也没用。因为坚持不下来。好的健身计划并不适合每个人。所以要自己根据自己的条件来...
呵呵,我随便写的,不知道对你有没有用! 你怎么没给出从哪方面选择..... #include &st...
是TCP连接吗 服务器地址是多少 是哪个端口
现在谁家也不缺孝子,又跪又求的,瞧这点出息! ----------- 可以应用Baiduhi告诉我 ...
你不说问题大家没办法给你解决的。把问题描述一下吧。
楼主,消息你了呀。。ID是iloveMotel168
你 联系北大品牌研究所网址就有。
楼主您好! 已发送到邮箱,454。。。。那个
什么类型的代码,app还是游戏
已发送至邮箱
购物网站热门产品排行求大神写下这道题。。用C语言写代码_百度知道
求大神写下这道题。。用C语言写代码
我有更好的答案
#include&&stdio.h&#include&&string.h&const&int&MAXSIZE&=&100;&//&struct&person&{ int& char&name[10]; char&tel[15];};int&main()&{ int&i,n; struct&person&ap[MAXSIZE]; printf(&人数n&=&&); scanf(&%d&,&n); n&=&(n&&&MAXSIZE)&?&MAXSIZE&:&n; for(i&=&0;&i&&&n&;&++i)&{
printf(&第&%d&个人的信息:&);
scanf(&%d%s%s&,&ap[i].code,&ap[i].name,ap[i].tel); } return&0;}
struct person ap[MAXSIZE]这里有错啊
对不起,这是C++用法,可改为#define&MAXSIZE&100
采纳率:67%
为您推荐:
其他类似问题
您可能关注的内容
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。哈希表的设计与实现  【问题描述】  设计哈希表实现电话号码查询系统  【基本要求】  1、设每个记录有下列数据项:电话号码、用户名、地址;  2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;  3、采用再哈希法或链表法解决冲突;   4、查找并显示给定电话号码的记录;  5、查找并显示给定用户名的记录。  6、在哈希函数确定的前提下,尝试各种不同类型处理冲突的方法(至少两种),考察平均查找长度的变化。
  【测试数据】  自行设定。    五、 压缩器/解压器  【问题描述】  为了节省存储空间,常常需要把文本文件采用压缩编码的方式储存。例如:一个包含1000个x的字符串和2000个y的字符串的文本文件在不压缩时占用的空间为3002字节(每个x或每个y占用一个字节,两个字节用来表示串的结尾)。同样是这个文件,采用游程长度编码(run-length coding),可以存储为字符串y,仅为10个字母,占用12个字节。若采用二进制表示游程长度()可以进一步节约空间。如果每个游程长度占用2个字节,则可以表示的最大游程长度为2*pow(16),这样,上例中的字符串只需要用8个字节来存储。当要读取编码文件时,需要对其进行解码。由压缩器(compressor)对文件进行编码,由解压器(decompressor)进行解码。  ①(1)长度-游程编码的压缩/解压;+(2)LZW压缩/解压(散列);  ②(1)长度-游程编码的压缩/解压;+(3)霍夫曼编码压缩/解压 (霍夫曼树)   【基本要求】   要求选用二种压缩/解压策略实现压缩/解压器[(1)为必选]。输入的为本文文件(.txt),输出的为一种自定义的文件(.nz)。考虑当构成文本的字符集合为{a,b,c,……,z,0,1,2,…9}时,请用实例测试你的压缩/解压器。你的压缩器会不会出现抖动?(压缩后的文本比原来的还要大)。扩充构成文本的字符集合以便使它适应更一般的情况。  【实现提示】  LZW:由Lempel、Ziv和Welch这三位科学家所开发的技术。该方法把文本的字符串映射为编码,首先,为该文本中所有可能出现的字母分别分配一个代码。例如:要压缩的对象是aaabbbbbbbaabaaba,由a和b组成。为a分配代码0,为b分配代码1。字符串和编码的关系被存储在字典中。  字典如下:  Key
0 1 2 3 4 5 6 7  Code A b Aa aab bb bbb bbba aaba   LZW压缩器不断的在输入文件中寻找在字典中出现的最长的前缀p,并输出其相应的代码。若输入文件的下一个字符为c,则为pc分配下一个代码,并插入字典,这种策略称为LZW规则。相反,在解压时,编码表由压缩文件重新构造,LZW原则使这种重建成为可能。  
如上例子,压缩时,文件中第一个在字典中出现的最长前缀是a, 输出其编码0,然后为字符串aa分配代码2,并插入到字典中。余下的字符串在字典中出现的最长前缀是aa,输出aa的对应代码2,同时为字符串aab分配代码3并将其插入到字典中。依次类推,由此,输出0214537  
解压时,要输入代码,然后用代码所表示的文本来替换这些代码。代码到文本的映射可按下面的方法重建:首先把分配给单一字母的代码插入到字典中。象前面一样,字典的入口为key-code对。然而此时是根据给定的代码(key)去寻找相应的入口(而不是根据文本Code)。压缩文件中的第一个代码对应于单一的字母,因此可以由该字母代替。对于压缩文件中的其他代码p,要考虑两种情况:1)在字典中;2)不在字典中。  在1)情况下,找到p对应的文本text(p)输出。并且,根据压缩原理可知,若在压缩文件中代码q写在p之前且text(q)是与q对应的文本,则压缩器会为文本text(q)(其后紧跟fc(p),text(p)的第一个字符)分配一新代码。因此在字典中插入序偶(下一个代码,text(q)fc(p))。  
情况2)时,只有在当前文本段形如text(q)text(q)fc(q)且text(p)=text(q)fc(q)时才会发生。相应的压缩文件段是qp。在压缩过程中,为text(q)fc(q)分配的代码为p。在解压过程中,在用text(q)代替q后,又遇到代码p。然而,此时字典中没有与p对应的文本。因为这种情况只在解压文本段为text(p)text(q)fc(q)时才发生,因此可以对p解码。当遇到一个没有定义代码文本对的代码p时,p对应的文本为text(q)fc(q),其中q为p前面的代码。  如上例子:首先,初始化字典,在其中插入(0,a),(1,b)。压缩的第一个代码为0,则用a代替之。下一个代码2未定义,因为前一个代码为0,且text(0)=a,fc(0)=a,则  text(2)=text(0)fc(0)=aa。因此用aa代替2,并把(2,aa)插入字典中。下个代码1由b来替换,并把(3,text(2)fc(1))=(3,aab)插入字典中。依次类推,得解压结果。  霍夫曼编码:根据不同符号在文本中出现的不同的频率来进行压缩编码。假设文本是由a,u,x,z组成的字符串,若这个字符串的长度为1000,每个字符用一个字节来存储,共需1000个字节(即8000位)的空间。如果每个字符用2位二进制来编码(00=a,01=x,10=u,11=z),则用2000位二进制即可以表示1000个字符。此外,还需要一定的空间来存放编码表,可以采用如下格式来存储:  符号个数:代码1,符号1,代码2,符号2,……  符号个数及每个符号分别用8位二进制来表示,每个代码需要占用[log2(符号个数)]位二进制。因此,上例中,代码表需占用5*8+4*2=48位,压缩比为.9 。利用这种编码方法,字符串aaxuaxz的压缩码为二进制串11,每个字符的编码具有相同的位数(两位)。从左到右依次从位串中取出两位,通过查编码表边可以获得原字符串,这是解压缩过程。  我们利用霍夫曼编码来实现压缩,必须:  1) 必须获得不同字符的频率。  2) 建立具有最小加权外部路径的二叉数(即霍夫曼树),树的外部结点用字符串中  的字符表示,外部结点的权重(weight)即为该字符出现的频率。  3) 遍历从根到外部结点的路径得到每个字符的编码。  4) 使用字符的编码来代替字符串中的字符。  为了方便解码,需要保存字符代码映射表或每个字符的  频率表(在保存信息为频率表的情况下,解码需要重构霍夫曼数以获得相应的编码表)。  构造霍夫曼树:首先从仅含一个外部结点的二叉树集合开始,每个外部结点代表字符串的一个不同的字符,其权重等于该字符的频率。此后不断的从集合中选择两棵具有最小权重的二叉树,并把它们合并成一棵新的二叉树,合并方法是把这两棵二叉树分别作为左右子树,然后增加一个新的根结点。新二叉树的权重为两棵子树的权重之和。这个过程一直可以持续到仅剩下一棵树为止。[二叉树的集合可以使用有序表 /优先队列(基于队列/基于堆)实现]。  编码:构造完毕霍夫曼树后,可以对从根开始到外部结点(叶子)的路径进行编码,方法是向左孩子移动时取0,向右孩子移动时取1。  【选作内容】对于策略2)我们用这种方法修改它:每当压缩/解压1024*x个字节后,重新初始化代码表。取文本长度为100K到200K之间,x=10,20,30,40和50。测试修改后的程序,请给出你的结论:采用那种x值比较好?  对于霍夫曼编码:当文本中的字符出现的频率差别很大时,我们可以通过使用变长的编码来降低每个位串的长度。但是,怎样对使用变长编码的位串解码呢?我们可以发现:在得到的霍夫曼编码中,没有任何一个代码是另一个代码的前缀。因此与编码向匹配的实际的字符是唯一的。请用实现这样的变长策略,并验证它。      谢谢大家帮忙,麻烦将答案寄到,,跪谢…………  
主帖获得的天涯分:0
楼主发言:1次 发图:0张 | 更多
  给红包…………
  你确定要用C语言来实现?    没有现成的模块可用,这工作量差不多够我拿到公司做项目分解了
  第一个还不是很多, LZW的压缩代码量不小
  这是我们的一个课程设计,希望大虾能帮一下忙,万分感激啊有这方面的兴趣爱好的请联系下我,QQ  
  工作量有点大啊~~
  水平很高啊,值得学习
  希望各位朋友帮下忙啊,懂的朋友就不要太吝啬了…………谢谢了
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)麻烦大神帮我讲解下C语言选择法排序的过程,要详细的!万分的感激!另外我这有个程序,顺便帮我分析下过程_百度知道
麻烦大神帮我讲解下C语言选择法排序的过程,要详细的!万分的感激!另外我这有个程序,顺便帮我分析下过程
#include &stdio.h&
int main()
int a[10];
int iT /*定义这些变量神马意思*/
for(i=0;i&10;i++)/*为什么只循环9次,而不是10次*/
scanf(&%d&, &a[i]);
for(i=0;i&9;i++)
iTemp = a[i];
for(i=0;i&9;i++)
/*这个为什么循环9次,不用比肩10次么*/ {
iTemp = a[i];
/*这循环嵌套根本就不懂,麻烦详解*/
for(j=i+1;j&10;j++)
if(a[j]&iTemp)
iTemp = a[j];
/*这些变量神马意思*/
我有更好的答案
#include &stdio.h& int main(){ int i,j; int a[10]; int iT
//定义这些变量神马意思&&这个变量是临时变量,自然有用,等会下面讲解 int iP
for(i=0;i&10;i++)
//为什么只循环9次,而不是10次&&很遗憾的告诉你,就是10次,这个循环是执行到i=9时终止,1--9+开始时的0,不就是10次吗 {
scanf(&%d&, &a[i]);
} for(i=0;i&9;i++)
iTemp = a[i];
//itemp这个变量是用来记录在在a[i]--a[9]之间的最小值
//ipos这个变量是用来记录在在a[i]--a[9]之间的最小值 的 位置
for(j=i+1;j&10;j++) //这个for循环的作用就是找到在a[i]--a[9]之间的最小值,呃,罗嗦一句这是闭区间
if(a[j]&iTemp)
iTemp = a[j];
/*这些变量神马意思*/
a[iPos] = a[i]; //这两句作用就是将a[i]--a[9]间的最小值与a[i]互换位置
}for(i=0;i&10;i++) {
printf(&%d\t&,a[i]);
if(i == 4)
printf(&\n&);
} return 0;
谢谢你了,前面的大体了解,就是
a[iPos] = a[i];
//这两句作用就是将a[i]--a[9]间的最小值与a[i]互换位置
这两句还没懂,a[i]--a[9]间的最小值与a[i]互换位置?这多a[i],晕了我。
在这里不需要10次,下面的那个循环是比较出 a[i]--a[9] 之间的最小值,如果你这里的循环是for(i=0;i&10;i++) 的话,i 的终止值为9那么最后一次循环就会变成 a[9]--a[9] 的比较,没有意义的当然,如果你这么写的话 for(i=0;i&10;i++) 无所谓,反正不影响结果在VC上不会出错,在其他编译器上就不见得了
采纳率:43%
建议仔细看看C语言的书籍!比如:你的问题:for(i=0;i&10;i++)/*为什么只循环9次,而不是10次*/这个循环就是10次!0到9!
任意输入十个数排序。#include &stdio.h&int main(){int i,j; int a[10]; int iT /*itemp 临时变量 ipos 临时变量的序号。*/ int iP for(i=0;i&10;i++)/*循环10次,从0~9*/ { scanf(&%d&, &a[i]); } for(i=0;i&9;i++) { iTemp = a[i]; /*赋初值,初值为第一个数*/ iPos = for(j=i+1;j&10;j++) { if(a[j]&iTemp) { iTemp = a[j]; iPos = /*将从地2个数开始的数与临时变量比较,如果比临时变量更小,则交换循环9次最后获得剩下10-i个数里的最小值赋予itemp,其序号赋予ipos;参考冒泡法排序。*/ } } a[iPos] = a[i]; /*将原第i个数值移到第ipos位置上*/ a[i] = iT /* 将剩下的10-i个数中的最小值移到第i位上。i从0~9循环一次就可以不断把后10-i个数中的最小值往前排,完成冒泡过程。从小到大排序*/ } for(i=0;i&10;i++){ printf(&%d\t&,a[i]); if(i == 4) printf(&\n&); } return 0; }
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 计算机二级c语言题库 的文章

 

随机推荐