C语言实验报告.docx
- 文档编号:30509289
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:28
- 大小:63.50KB
C语言实验报告.docx
《C语言实验报告.docx》由会员分享,可在线阅读,更多相关《C语言实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
C语言实验报告
ThismodelpaperwasrevisedbytheStandardizationOfficeonDecember10,2020
C语言实验报告
实验一进制转换
一、实验要求
采用模块化程序设计完成进制转换。
由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六)形式输出。
指定的进制由用户输入。
二、实验目的
1、熟悉C环境的安装、使用。
2、承上启下,复习《C程序设计》等基础课程的知识。
3、掌握C语言编程的方法。
三、预备知识
1、的安装与使用。
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、的安装与使用。
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]puter);
fflush(stdin);
addsum[b]=stu[b].math+stu[b].english+stu[b].chinese,stu[b]puter;addaver[b]=addsum[b]/;
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]<)
{
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%%s%%%%%%\n",i+1,stu[j].id,stu[j].name,stu[j].math,stu[j].english,stu[j].chinese,stu[j]puter,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%%s%%%%%%\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i]puter,addsum[i],addaver[i]);
}
}
}
elseif(a[1]=='e')
{
for(i=0;i
{
if(stu[i].english>90&&order[i]<5)
{
printf("%02d%%s%%%%%%\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i]puter,addsum[i],addaver[i]);
}
}
}
elseif(a[1]=='c')
{
for(i=0;i
if(stu[i].chinese>90&&order[i]<5)
{
printf("%02d%%s%%%%%%\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i]puter,addsum[i],addaver[i]);
}
}
}
else
{
for(i=0;i
{
if(stu[i]puter>90&&order[i]<5)
{
printf("%02d%%s%%%%%%\n",i+1,stu[i].id,stu[i].name,stu[i].math,stu[i].english,stu[i].chinese,stu[i]puter,addsum[i],addaver[i]);
}
}
}
}
voidmain()
{
shuru();
paiming();
output();
chaxun();
}
5、调试。
八、实验结果
实验三文件合并
一、实验要求
将两个文件中的数据合并至一个文件。
有两个文件“Afile”和“Bfile”,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“Cfile”中去。
二、实验目的
1、掌握指针、文件指针的概念。
2、掌握文件操作的知识。
3、进一步掌握软件开发的基本流程。
三、预备知识
1、C程序设计基础知识。
2、软件实现基本流程。
四、实验内容
将两个文件中的数据合并至一个文件。
五、程序清单
请按照自己对程序设计需求的理解进行设计。
6、程序框图
7、实验步骤
#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");
}
8、实验结果
实验四链表基本操作
一、实验要求
完成单链表的建立、插入和删除操作。
链表,就是用“指针域”链在一起的自引用结构(称为“结点”)的线性集合。
链表是通过指向链表第一个结点的指针访问的,其后的结点是通过前一结点中的“指针域”访问的。
在单链表中,数据域用来存储数据,指针域用来存储下一个结点的地址。
建立单链表可以通过头插法完成,也可以通过尾插法完成。
在单链表的第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,n=7,7个人的密码依次是3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5。
请用链表完成。
二、实验目的
1、复习指针的概念。
2、复习数据结构的有关基本知识。
3、复习链表的使用方法。
三、预备知识
1、C程序设计基础知识。
2、数据结构的有关基本知识。
四、实验内容
用链表完成约瑟夫环的过程。
五、程序清单
请按照自己对程序设计需求的理解进行设计。
六、程序框图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 报告