C语言实验报告.docx

上传人:b****5 文档编号:8509516 上传时间:2023-01-31 格式:DOCX 页数:27 大小:233.88KB
下载 相关 举报
C语言实验报告.docx_第1页
第1页 / 共27页
C语言实验报告.docx_第2页
第2页 / 共27页
C语言实验报告.docx_第3页
第3页 / 共27页
C语言实验报告.docx_第4页
第4页 / 共27页
C语言实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言实验报告.docx

《C语言实验报告.docx》由会员分享,可在线阅读,更多相关《C语言实验报告.docx(27页珍藏版)》请在冰豆网上搜索。

C语言实验报告.docx

C语言实验报告

实验一进制转换

一、实验要求

采用模块化程序设计完成进制转换。

由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六)形式输出。

指定的进制由用户输入。

二、实验目的

1、熟悉C环境的安装、使用。

2、承上启下,复习《C程序设计》等基础课程的知识。

3、掌握C语言编程的方法。

三、预备知识

1、VC6.0的安装与使用。

2、C程序设计基础知识。

四、实验内容

采用模块化程序设计完成进制转换。

五、程序框图

六、程序清单

1.编写主函数:

输入需转换的数与转换的进制

2.编写子函数

(1)函数转换为除16进制以外的进制转换算数编程,使用while循环实现计算进制的转换,并输出转换后的数字;

(2)函数转换为16进制,用while函数实现16进制转换的计算并输出16进制转换后的数据;

3.编写数组,关于16进制的一系列字符

4.编写主函数加入dowhile使函数可以循环。

七、实验步骤

#include

charnum[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

voidfun(intn,intm)

{

inti=-1,a[100];

if(m!

=16)

{

while(n)

{

a[i++]=n%m;

n=n/m;

}

while(i!

=-1)

printf("%d",a[--i]);

printf("\n");

}

else

{

while(n)

{

a[++i]=num[n%16];

n/=16;

}

while(i!

=-1)

printf("%c",a[i--]);

printf("\n");

}

}

intmain()

{

inta,c;

charcIn=0;

do

{

printf("\n输入正整数,转换的进制:

");

scanf("%d%d",&a,&c);

fun(a,c);

printf("Goon?

(Y/N):

");

cIn=getchar();

if(cIn=='N'||cIn=='n')

return0;

}

while

(1);fun(a,c);

printf("Goon?

(Y/N):

");

cIn=getchar();

if(cIn=='N'||cIn=='n')

return0;

}

while

(1);

}

3、调试。

八、实验结果

 

实验二学生班级成绩统计

一、实验要求

设计一个统计班级学生成绩的程序。

统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:

(1)由键盘输入每个学生的学号和四门课程的成绩。

(2)计算每个学生的平均成绩和总成绩。

(3)按总成绩从高到低排名,并按名次输出每个学生的情况,包括:

学号,各科成绩,平均成绩,总成绩,排名

(4)根据要求输出某门课程(由键盘输入课程号)成绩在90分(含90分)以上且总分在前5名的学生情况(请采用结构体数据类型,并采用模块化结构实现)。

二、实验目的

1、进一步熟悉C环境的安装、使用。

2、进一步复习《C程序设计》等基础课程的知识。

3、进一步掌握C语言编程的方法。

三、预备知识

1、VC6.0的安装与使用。

2、C程序设计基础知识。

3、软件实现基本流程。

四、实验内容

设计一个统计班级学生成绩的程序。

六、程序清单

1、先编写主函数,将所需要用到的子函数编写,

2、子函数1:

输入数据,将所需要的数据存到数组中并计算平均值和总分,

3、子函数2:

根据子函数1计算所得值进行排序,

4、子函数3:

输出排序完的数据,

5、子函数4:

编写查询程序,输入查询的科目缩写,并排名后输出。

七、实验步骤

1、可行性分析

2、需求分析

3、概要设计与详细设计(含绘制流程图)。

 

4、编码实现

#include

intorder[35];

doubleaddsum[35];

doubleaddaver[35];

intb=0;

typedefstructstudent

{

intid;

charname[35];

doublemath;

doubleenglish;

doublechinese;

doublecomputer;

}student;

studentstu[35];

voidshuru()

{

b=0;

while(b<35)

{

printf("输入学号(输入0退出输入):

");

scanf("%d",&stu[b].id);

fflush(stdin);

if(stu[b].id<=0)

break;

printf("输入名字:

");

scanf("%s",&stu[b].name);

printf("输入4门成绩(数学英语语文计算机):

");

scanf("%lf%lf%lf%lf",&stu[b].math,&stu[b].english,

&stu[b].chinese,&stu[b].computer);

fflush(stdin);

addsum[b]=stu[b].math+stu[b].english+stu[b].chinese,stu[b].computer;addaver[b]=addsum[b]/4.0;

order[b]=stu[b].id;

b++;

}

}

intquery(intid)

{

inti=0;

for(i=0;i

{

if(stu[i].id==id)

returni;

}

return-1;

}

voidpaiming()

{

inti,j;

for(i=0;i

{

for(j=i+1;j

{

if(addsum[i]-addsum[j]<0.001)

{

inttemp_id=order[i];

order[i]=order[j];

order[j]=temp_id;

}

}

}

}

voidoutput()

{

inti;

printf("名次学号姓名数学英语语文

for(i=0;i

{

intj=query(order[i]);

if(j<0)计算机总分平均\n");

6/21页

printf("order[%d]=%derror\n",i+1,order[i]);

continue;

}

printf("%02d%5.d%s%4.2f%4.2f%4.2f%6.2f%4.2f%4.2f\n",i+1,stu[j].id,stu[j].name,stu[j].math,stu[j].english,stu[j].chinese,stu[j].computer,addsum[j],addaver[j]);

}

}

voidchaxun()

{

chara[1];

inti;

printf("输入你所想要查询的课程代号:

");

scanf("%c",&a[1]);

printf("名次学号姓名数学英语语文计算机总分平均\n");if(a[1]=='m')

{

for(i=0;i

{

if(stu[i].math>90&&order[i]<5)

{

printf("%02d%5.d%s%4.2f%4.2f%4.2f%6.2f%4.2f%4.2f\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i].computer,addsum[i],addaver[i]);

}

}

}

elseif(a[1]=='e')

{

for(i=0;i

{

if(stu[i].english>90&&order[i]<5)

{

printf("%02d%5.d%s%4.2f%4.2f%4.2f%6.2f%4.2f%4.2f\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i].computer,addsum[i],addaver[i]);

}

}

}

elseif(a[1]=='c')

{

for(i=0;i

if(stu[i].chinese>90&&order[i]<5)

{

printf("%02d%5.d%s%4.2f%4.2f%4.2f%6.2f%4.2f%4.2f\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i].computer,addsum[i],addaver[i]);

}

}

}

else

{

for(i=0;i

{

if(stu[i].computer>90&&order[i]<5)

{

printf("%02d%5.d%s%4.2f%4.2f%4.2f%6.2f%4.2f%4.2f\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i].computer,addsum[i],addaver[i]);

}

}

}

}

voidmain()

{

shuru();

paiming();

output();

chaxun();

}

5、调试。

八、实验结果

 

 

实验三文件合并

一、实验要求

将两个文件中的数据合并至一个文件。

有两个文件“Afile”和“Bfile”,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“Cfile”中去。

二、实验目的

1、掌握指针、文件指针的概念。

2、掌握文件操作的知识。

3、进一步掌握软件开发的基本流程。

三、预备知识

1、C程序设计基础知识。

2、软件实现基本流程。

四、实验内容

将两个文件中的数据合并至一个文件。

五、程序清单

请按照自己对程序设计需求的理解进行设计。

六、程序框图

 

七、实验步骤

#include

#include

voidOutput(FILE*fp)

{

charch,t,str3[100];

inti=0,j,k;

while((ch=fgetc(fp))!

=EOF)

{

str3[i]=ch;

i++;

}

for(j=0;j<=i;j++)

{

for(k=j+1;k

{

if(str3[j]>str3[k])

{

t=str3[j];

str3[j]=str3[k];

str3[k]=t;

}

}

}

for(j=0;j<=i;j++)

printf("%c",str3[j]);

}

main(void)

{

FILE*fp1,*fp2,*fp3;

charch1[100],ch2[100],ch3[100];

charch,str1[100],str2[100];

printf("pleaseinputfirstfilename:

\n");

scanf("%s",ch1);

printf("pleaseinputsecondfilename:

\n");

scanf("%s",ch2);

printf("pleaseinputthirdfilename:

\n");

scanf("%s",ch3);

if((fp1=fopen(ch1,"w"))==NULL)

{

printf("cannotopenfile");

getchar();

exit(0);

}

printf("pleasewritefirstfile:

\n");

getchar();

gets(str1);

fputs(str1,fp1);

printf("\n");

if((fp2=fopen(ch2,"w"))==NULL)

{

printf("cannotopenfile");

getchar();

exit(0);

}

printf("pleasewritesecondfile:

\n");

getchar();

gets(str2);

fputs(str2,fp2);

printf("\n");

fclose(fp1);

fclose(fp2);

 

if((fp3=fopen(ch3,"w"))==NULL)

{

printf("cannotopenfile");

getchar();

exit(0);

}

fp1=fopen(ch1,"r");

while((ch=fgetc(fp1))!

=EOF)

{

fputc(ch,fp3);

}

fclose(fp1);

fp2=fopen(ch2,"r");

while((ch=fgetc(fp2))!

=EOF)

{

fputc(ch,fp3);

}

fclose(fp2);

fclose(fp3);

fp3=fopen(ch3,"r");

printf("thethirdfile:

\n");

Output(fp3);

printf("\n");

}

 

八、实验结果

 

实验四链表基本操作

一、实验要求

完成单链表的建立、插入和删除操作。

链表,就是用“指针域”链在一起的自引用结构(称为“结点”)的线性集合。

链表是通过指向链表第一个结点的指针访问的,其后的结点是通过前一结点中的“指针域”访问的。

在单链表中,数据域用来存储数据,指针域用来存储下一个结点的地址。

建立单链表可以通过头插法完成,也可以通过尾插法完成。

在单链表的第i个元素前插入一个新的元素,先必须找到第i-1个元素、找到第i个元素,然后新建一个节点,再进行相应的插入。

从单链表中删除一个元素,先必须找到这个元素的前一个元素、找到这个元素,然后进行相应的删除,删除后的元素必须被释放掉内存。

二、实验目的

1、复习指针的概念。

2、复习数据结构的有关基本知识。

3、掌握链表的使用方法。

三、预备知识

1、C程序设计基础知识。

2、数据结构的有关基本知识。

四、实验内容

完成单链表的建立、插入和删除操作。

五、程序清单

1、定义头文件,编写共用体结构体及主函数;

2、在主函数中运用switch以及do—while函数使程序可以循环调用子函数;

3、编写子函数1:

手动输入链表长度及链表中的数值建立链表;

4、编写子函数2:

从键盘输入需要查询的值,然后输出其所在的节点;

5、编写子函数3:

从键盘输入需要删除的节点,然后输出删除此节点后的链表;

6、编写子函数4:

从键盘输入需要添加数值的节点,从键盘输入要添加进去的数值,然后输出增加此节点数加1后添加数值的链表;

7、从键盘输入0后推出程序。

六、程序框图

 

七、实验步骤

1、可行性分析

2、需求分析3

4、编码实现

#include#include

#include

structlian_node{

intn;intnum;

structlian_node*link;

};

structlian_node*Create_Lian_Doc();voidSearchDoc_num(structlian_node*link,intnum);voidInsertDoc(structlian_node*llist,structlian_node*p,intn);voidDeleteDoc(structlian_node*llist,intn);voidPrint_Lian_Doc(structlian_node*llist);

intmain(void)

{

structlian_node*llist,*p;

intn,num,choice;

intsize=sizeof(structlian_node);

llist=Create_Lian_Doc();

do{

printf("\n链表操作\n");

printf("1:

查找\n");

printf("2:

删除\n");

printf("3:

插入\n");

printf("0:

退出\n");

printf("请选择功能:

");

scanf("%d",&choice);

switch(choice){

case0:

break;

case1:

printf("输入值:

");

scanf("%d",&num);

13/21页

SearchDoc_num(llist,num);

break;

case3:

printf("插入结点位置:

");

scanf("%d",&n);

printf("插入结点数值:

");

scanf("%d",&num);

p=(structlian_node*)malloc(size);

p->n=n+1;

p->num=num;

p->link=NULL;

InsertDoc(llist,p,n);

break;

case2:

printf("\n删除结点:

");

scanf("%d",&n);

DeleteDoc(llist,n);

break;

}

}while(choice!

=0);

return0;

}

structlian_node*Create_Lian_Doc()

{

inti,num,n;

intsize=sizeof(structlian_node);

structlian_node*llist,*tail,*p;

llist=tail=NULL;

printf("请输入链表长度n=");

scanf("%d",&n);

printf("请输入链表的各个值:

");

for(i=1;i<=n;i++)

{

p=(structlian_node*)malloc(size);

scanf("%d",&num);

p->n=i;

p->num=num;

p->link=NULL;

if(llist==NULL)

llist=p;

else

14/21页

tail->link=p;

tail=p;

}

returnllist;

}

voidSearchDoc_num(structlian_node*llist,intnum){

structlian_node*ptr;

if(llist==NULL){

printf("\n无结果!

\n");

return;

}

for(ptr=llist;ptr;ptr=ptr->link){

if(ptr->num==num){

printf("输出序号为:

%d\n\n",ptr->n);

break;

}

}

if(ptr==NULL)

printf("\n无结果!

\n");

}

voidInsertDoc(structlian_node*llist,structlian_node*p,intn){

inti=1;

structlian_node*ptr,*ptr1,*ptr2;

ptr1=llist;

ptr2=llist->link;

while(ptr1->n!

=n&&ptr2!

=NULL){

ptr1=ptr2;

ptr2=ptr2->link;

}

if(ptr1->n==n){

p->link=ptr2;

ptr1->link=p;

}

else

printf("\n无结果!

\n");

for(ptr=llist;ptr;ptr=ptr->link){

ptr->n=i;

i++;

}

Print_Lian_Doc(llist);

}

voidDeleteDoc(structlian_node*llist,intn)

{

structlian_node*ptr,*ptr1,*ptr2;

inti=1;

while(llist!

=NULL&&llist->n==n){

ptr2=llist;

llist=llist->link;

free(ptr2);

}

if(llist==NULL)

printf("\n无结果!

\n");

ptr1=llist;

ptr2=llist->link;

while(ptr2!

=NULL){

if(ptr2->n==n){

ptr1->link=ptr2->link;

free(ptr2);

}

else

ptr1=ptr2;

ptr2=ptr1->link;

}

for(ptr=llist;ptr;ptr=ptr->link){

ptr->n=i;

i++;

}

Print_Lian_Doc(llist);

}

voidPrint_Lian_Doc(structlian_node*llist)

{

structlian_node*ptr;

printf("输出链表:

");

for(ptr=llist;ptr;ptr=ptr->link)

printf("%5d",ptr->num);

printf("\n");

}

5、调试

6、运行维护,完善文档

八、实验结果

 

实验五约瑟夫环

(一)

一、实验要求

编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。

试设计一个程序,求出出列顺序。

要求利用单循环链表作为存储结构模拟此过程,按照出列顺序打印出各人的编号。

例如m的初值为20,

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

当前位置:首页 > 初中教育

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

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