北航 计算机软件基础 作业讲解.docx
- 文档编号:10951856
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:26
- 大小:129.99KB
北航 计算机软件基础 作业讲解.docx
《北航 计算机软件基础 作业讲解.docx》由会员分享,可在线阅读,更多相关《北航 计算机软件基础 作业讲解.docx(26页珍藏版)》请在冰点文库上搜索。
北航计算机软件基础作业讲解
1、编写一程序,输入全班40名同学的姓名(字符串)、学号、语文成绩、数学成绩、外语成绩;保存在结构体数组中。
然后对此结构体数组排序,使得排序后的结构体数组中的元素按学生平均成绩非递增有序。
#include
#include
#defineNUM40//定义NUM代表全班人数
structSTUDENT
{
charname[20];
intnumber;
floatchinese,math,english;
floataverage;
}student[NUM];//定义结构体数组
typedefstructSTUDENTS;//声明一个结构体变量
voidsort(Ss[NUM])//冒泡法进行排序
{
inti,j;
chartemp1[20];
inttemp2;
floattemp3,temp4,temp5,temp6;
for(i=0;i for(j=0;j if(s[j].average { strcpy(temp1,s[j].name); strcpy(s[j].name,s[j+1].name); strcpy(s[j+1].name,temp1); temp2=s[j].number; s[j].number=s[j+1].number; s[j+1].number=temp2; temp3=s[j].chinese; s[j].chinese=s[j+1].chinese; s[j+1].chinese=temp3; temp4=s[j].math; s[j].math=s[j+1].math; s[j+1].math=temp4; temp5=s[j].english; s[j].english=s[j+1].english; s[j+1].english=temp5; temp6=s[j].average; s[j].average=s[j+1].average; s[j+1].average=temp6; } } voidmain() { inti; for(i=0;i { printf("请的输入第%d个学生学生的信息: \n",i+1); printf("name: "); scanf("%s",&student[i].name); printf("number: "); scanf("%d",&student[i].number); printf("chinese: "); scanf("%f",&student[i].chinese); printf("math: "); scanf("%f",&student[i].math); printf("english: "); scanf("%f",&student[i].english); student[i].average=(student[i].chinese+student[i].math+student[i].english)/3; } printf("姓名学号语文数学英语平均\n"); for(i=0;i { printf("%s%d%5.2f%5.2f%5.2f%5.2f\n",student[i].name,student[i].number,student[i].chinese,student[i].math,student[i].english,student[i].average); } sort(student); printf("排序结果为: \n"); printf("姓名学号语文数学英语平均\n"); for(i=0;i { printf("%s%d%5.2f%5.2f%5.2f%5.2f\n",student[i].name,student[i].number,student[i].chinese,student[i].math,student[i].english,student[i].average); } } 图1 2、编写一程序,输入全班N名同学的姓名、学号、语文成绩、数学成绩、外语成绩。 然后按照学生平均成绩非递增排序。 程序需能方便地进行插入、删除等操作。 #include #include #include typedefstructnode//定义一个结构体并声明结构体类型 { charname[20]; intnumber; floatchinese,math,english; floataverage; structnode*Link; }Node; typedefNode*List;//声明结构类类型的指针 Node*NewNode()//生成新节点 { Node*p=(Node*)malloc(sizeof(Node)); p->Link=NULL; returnp; } ListBuildList(intn)//建立空链表 { Node*p,*r=NULL,*first=NULL; inti; for(i=0;i { p=NewNode(); if(first! =NULL) r->Link=p; else first=p; r=p; } returnfirst; } ListSort(ListSL)//冒泡法进行排序 { Listp,q; chartemp1[20]; inttemp2; floattemp3,temp4,temp5,temp6; for(p=SL;p! =NULL;p=p->Link) { for(q=p->Link;q! =NULL;q=q->Link) { if(p->average { strcpy(temp1,q->name); strcpy(q->name,p->name); strcpy(p->name,temp1); temp2=q->number; q->number=p->number; p->number=temp2; temp3=q->chinese; q->chinese=p->chinese; p->chinese=temp3; temp4=q->math; q->math=p->math; p->math=temp4; temp5=q->english; q->english=p->english; p->english=temp5; temp6=q->average; q->average=p->average; p->average=temp6; } } } returnSL; } voidmain() { Node*LS,*p; intn; printf("thenumberofstudentis\n"); scanf("%d",&n); LS=BuildList(n); p=LS; for(;p;p=p->Link) { printf("thenameis"); scanf("%s",&p->name); printf("thenumberis"); scanf("%d",&p->number); printf("thechineseis"); scanf("%f",&p->chinese); printf("themathis"); scanf("%f",&p->math); printf("theenglishis"); scanf("%f",&p->english); p->average=(p->chinese+p->math+p->english)/3; } for(p=LS;p;p=p->Link) { printf("namenumberchinesemathenglishaverage\n"); printf("%s%5d%5.2f%5.2f%5.2f%5.2f\n",p->name,p->number,p->chinese,p->math,p->english,p->average); } LS=Sort(LS); printf("排序后的结果为: \n"); for(p=LS;p;p=p->Link) { printf("namenumberchinesemathenglishaverage\n"); printf("%s%5d%5.2f%5.2f%5.2f%5.2f\n",p->name,p->number,p->chinese,p->math,p->english,p->average); } } 图2 3、实现约瑟夫环 #include"stdio.h" #include"stdlib.h" structnode//定义一个结构体 { intnum; intcode; structnode*Link; }; typedefstructnodeNODE;//声明一个结构体类型 NODE*createlinklist(intn)//建立链表 { NODE*head,*p,*q; inti=1; head=p=(structnode*)malloc(sizeof(structnode)); p->num=i; p->code=rand()%100; p->Link=NULL; for(i=2;i<=n;i++) { q=(structnode*)malloc(sizeof(structnode)); q->Link=NULL; if(q==0)return(0); p->Link=q; p=q; p->num=i; p->code=rand()%100; } p->Link=head;//使链表尾指向链表头形成循环链表 returnhead; } voidprintlinklist(NODE*p,intn)//输出链表 { inti; NODE*q=p; if(NULL==q->Link) { printf("thelistisNULL! "); return; } printf("所有玩家的信息列表: \n"); for(i=1;i<=n;i++) { if(NULL==q) { printf("thelistisNULL! "); return; } printf("%d%d\n",p->num,p->code); p=p->Link; } } voidjoseph(NODE*p,intn,intm)//实现约瑟夫环 { inti,j; NODE*q; for(i=1;i { for(j=1;j<=m-1;j++) { p=p->Link; } q=p->Link; p->Link=q->Link; printf("%d%d\n",q->num,q->code); free(q); } printf("\n最后剩余的是第%d号的密码是%d.\n",p->num,p->code); p->Link=NULL; } voidmain() { NODE*head; intn,m; printf("请输入人数N: \n"); scanf("%d",&n); printf("输入K: \n"); scanf("%d",&m); head=createlinklist(n); printlinklist(head,n); printf("依次被选出的是: \n"); joseph(head,n,m); } 图3 4、实现多项式的表示与三则运算(+,-,×) #include #include #include typedefstructnode {//定义并声明一个结构体变量 intcoe; intexp; structnode*Link; }Node; typedefNode*List;//声明一个结构体指针 Node*NewNode()//生成一个新节点 { Node*p=(Node*)malloc(sizeof(Node)); p->Link=NULL; returnp; } ListBuildList(intn)//生成链表 { Node*p,*r=NULL,*first=NULL; inti; for(i=0;i { p=NewNode(); if(first! =NULL) r->Link=p; else first=p; r=p; } returnfirst; } voidprintList(Node*p)//多项式显示 { for(;p;p=p->Link) { printf("%dx^%d",p->coe,p->exp); if(p->Link) printf("+"); } printf("\n"); } ListSort(ListSL)//多项式排序 { Listp,q; inttemp1,temp2; for(p=SL;p! =NULL;p=p->Link) { for(q=p->Link;q! =NULL;q=q->Link) { if(p->exp>q->exp) { temp1=q->coe; q->coe=p->coe; p->coe=temp1; temp2=q->exp; q->exp=p->exp; p->exp=temp2; } } } returnSL; } ListAddList(Node*la,Node*lb)//多项式相加 { Node*p,*lc=NULL,*r=NULL; while(la! =NULL&&lb! =NULL) { if(la->exp==lb->exp) { p=(Node*)malloc(sizeof(Node)); p->coe=la->coe+lb->coe; p->exp=la->exp; p->Link=NULL; la=la->Link; lb=lb->Link; } elseif(la->exp { p=(Node*)malloc(sizeof(Node)); p->coe=la->coe; p->exp=la->exp; p->Link=NULL; la=la->Link; } else { p=(Node*)malloc(sizeof(Node)); p->coe=lb->coe; p->exp=lb->exp; p->Link=NULL; lb=lb->Link; } if(lc! =NULL) r->Link=p; else lc=p; r=p; } if(la) r->Link=la; else r->Link=lb; returnlc; } ListMultiList(ListLA,ListLB)//多项式相乘 { Listla=LA; Listlb=LB; Lists=NULL; Listlc[100]; Listr[100]; Listnode=NULL; inti=0; for(;i<100;i++) { lc[i]=NULL; r[i]=NULL; } i=0; for(;la;la=la->Link) { for(lb=LB;lb;lb=lb->Link) { node=(List)malloc(sizeof(Node)); node->coe=la->coe*lb->coe; node->exp=la->exp+lb->exp; node->Link=NULL; if(lc[i]! =NULL) r[i]->Link=node; else lc[i]=node; r[i]=node; } i++; } s=lc[0]; for(i=1;i<100;i++) { if(lc[i]) s=AddList(s,lc[i]); else break; } returns; } voidmain() { inta,b; Node*LA,*LB,*LC,*S,*p,*r; printf("thefirstmultinomialis\n"); scanf("%d",&a); LA=BuildList(a); p=LA; for(;p;p=p->Link) { printf("thecoeis"); scanf("%d",&p->coe); printf("theexpis"); scanf("%d",&p->exp); } printf("thesecondmultinomialis\n"); scanf("%d",&b); LB=BuildList(b); r=LB; for(;r;r=r->Link) { printf("thecoeis"); scanf("%d",&r->coe); printf("theexpis"); scanf("%d",&r->exp); } LA=Sort(LA); LB=Sort(LB); printList(LA); printList(LB); LC=AddList(LA,LB); printf("theresultofLA+LBis\n"); printList(LC); S=MultiList(LA,LB); printf("theresultofLA*LBis\n"); printList(S); } 图4 5.判断输入的数是否为素数? #include #include usingnamespacestd; main() { longN; cout<<"inputanumberfrom1to100000: "< cin>>N; cout<<"isitaprimenumber? "< if(N==2) cout<<"yes"< elseif(N>2) { inti=2; while(i { if(N%i==0) { cout<<"no"< return; } i++; } cout<<"yes"< } else cout<<"error"< } 图5.1图5.2 图5.3 6.解释程序 #include main() { intn; printf("请输入一个数: "); scanf("%d",&n); inta=0x1f; printf("n的十六进制为: %x\n",n); printf("a的十六进制为: %x\n",a); if(n&a==a) printf("theresultis%d\n",n); else printf("donothing\n"); } 图6.1图6.2 图6.3图6.4 #include main() { intn; printf("请输入一个数: "); scanf("%d",&n); inta=0x1f; printf("n的十六进制为: %x\n",n); printf("a的十六进制为: %x\n",a); if((n&a)==a) printf("theresultis%d\n",n); else printf("donothing\n"); } 图6.5图6.6 图6.7图6.8 主要是运算符号的优先级判断: ==(等于) 高于 &(位与) 7.时间复杂度分析: 分析算法的复杂度,分析频度的次数. 按数量级递增排列,常见的时间复杂度: O (1) ) O(nloglogn) ) ) )< O( ) ) )
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北航 计算机软件基础 作业讲解 计算机软件 基础 作业 讲解