
#include <stdlib.h>
#include <iostream>
#include "time.h"
using namespace std
struct STU{
char id[11],name[15]
int score[5]
double ave
STU *next
}
void getdata(STU (*p)[45]){//输入信息
int i,j,k,t
for(i=0i<4i++)
for(j=0j<45j++){
for(k=0k<5p[i][j].score[k++]=rand()%101)
for(t=1000000000+i*45+j,k=9k>=0p[i][j].id[k--]=t%10+'0',t/=10)
p[i][j].id[10]='\0'
p[i][j].name[0]='S',p[i][j].name[1]='T',p[i][j].name[2]='U'
p[i][j].name[3]=p[i][j].id[7],p[i][j].name[4]=p[i][j].id[8]
p[i][j].name[5]=p[i][j].id[9],p[i][j].name[6]='\0'
}
}
void ave(STU (*p)[45]){//求5门功课平均值并存入ave
for(int i=0i<4i++)
for(int j=0j<45j++){
for(int s=0,k=0k<5s+=p[i][j].score[k++])
p[i][j].ave=s/5.0
}
}
int main(int argc,char *argv[]){
STU stu[4][45],t,*hp
int i,j,k,n,m
srand((unsigned)time(NULL))
getdata(stu)
ave(stu)
for(k=0k<4k++)//冒泡
for(i=0i<45i++)
for(j=0j<44j++)
if(stu[k][j].ave<stu[k][j+1].ave)
t=stu[k][j],stu[k][j]=stu[k][j+1],stu[k][j+1]=t
for(k=0k<4k++){//选择(已经排过了,再排有意义?这题!)并输出
cout <<"CLASS" <<k+1 <<":\n "//不要输出时删除此行
for(m=i=0i<45i++){
for(n=i,j=n+1j<45j++)
if(stu[k][n].ave<stu[k][j].ave)
n=j
if(n!=i)
t=stu[k][n],stu[k][n]=stu[k][i],stu[k][i]=t
cout <<stu[k][i].ave <<(++m%9 ? "\t" : "\n ")//不要输出时删除此行
}
cout <<endl//不要输出时删除此行
}
if((hp=new STU[4*45])==NULL){//按要求创建链表
cout <<"Application memory failure, exit...\n"
return 0
}
for(m=i=0i<4i++)//把数据拷贝到链表
for(j=0j<45hp[m++]=stu[i][j++])
for(m=4*45,i=0i<mi++){//按平均值由大到小排序
for(k=i,j=k+1j<mj++)
if(hp[k].ave<hp[j].ave)
k=j
if(k!=i)
t=hp[k],hp[k]=hp[i],hp[i]=t
if(i)
hp[i-1].next=hp+i
}
//以下打出前10个结点看看,若不需要则删除到return 0之前
cout <<" STUID\tNAME\tSCORE1\tSCORE2\tSCORE3\tSCORE4\tSCORE5\tAVE\n"
cout <<"====================================================================\n"
for(STU *p=hpp!=hp+10p=p->next){
cout <<p->id <<'\t' <<p->name <<'\t' <<p->score[0] <<'\t' <<p->score[1]
cout <<'\t' <<p->score[2] <<'\t' <<p->score[3] <<'\t' <<p->score[4]
cout <<'\t' <<p->ave <<endl
}
return 0
}
代码格式和运行样例图片:
这段程序是一个功能函数,传过来的参数是x、y、z,然后进行逻辑处理。
主要的逻辑部分其实就是两个选择型结构,比较容易处理。
3. 程序流程图和N-S图分别如下:
上图为程序流程图
上图为N-S图
4. 如果有什么不清楚的地方,欢迎追问,可以相互讨论一下。
1. 首先,编写一段简单的C语言程序,输出百分号,程序代码如下图所示:
#include <stdio.h>
void main()
{
printf("输出百分号:% \n")
}
2.然后,进行编译运行,结果如下,发现并没有输出所要的结果。
3. 对刚才的代码作下修改,如下所示:(即在输出函数中书写俩个百分号)
#include <stdio.h>
void main()
{
printf("输出百分号:%% \n")
}
4. 最后,在运行测试一下,结果如下图所示:(可以看到输出了百分号)
从上面的分析中,知道,如果要打印输出一个百分号,只需要书写两个百分号就可以了。同理,如果要输出两个百分号,那么书写四个百分号就可以了,依此类推。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)