北航 计算机软件基础 作业讲解.docx

上传人:b****2 文档编号:24517988 上传时间:2023-05-28 格式:DOCX 页数:26 大小:129.99KB
下载 相关 举报
北航 计算机软件基础 作业讲解.docx_第1页
第1页 / 共26页
北航 计算机软件基础 作业讲解.docx_第2页
第2页 / 共26页
北航 计算机软件基础 作业讲解.docx_第3页
第3页 / 共26页
北航 计算机软件基础 作业讲解.docx_第4页
第4页 / 共26页
北航 计算机软件基础 作业讲解.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

北航 计算机软件基础 作业讲解.docx

《北航 计算机软件基础 作业讲解.docx》由会员分享,可在线阅读,更多相关《北航 计算机软件基础 作业讲解.docx(26页珍藏版)》请在冰豆网上搜索。

北航 计算机软件基础 作业讲解.docx

北航计算机软件基础作业讲解

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->averageaverage)

{

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->expexp)

{

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(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1