C语言实验报告

 时间:2020-09-06  贡献者:cundang.org

导读:c语言上机实验报告书,实验一进制转换一、实验要求采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转 换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入

c语言上机实验报告书
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. 编写主函数加入 do while 使函数可以循环。

1 / 21

七、实验步骤#include char num[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; void fun(int n, int m) { int i=-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"); } } int main() { int a, c; char cIn = 0; do { printf("\n 输入正整数,转换的进制:"); scanf("%d %d",&a,&c); fun(a,c); printf("Go on? (Y/N):"); cIn = getchar( ); if(cIn == 'N' || cIn == 'n') return 0; } while(1);fun(a,c);2 / 21

printf("Go on? (Y/N):"); cIn = getchar( ); if(cIn == 'N' || cIn == 'n') return 0; } while(1); } 3、调试。

八、实验结果3 / 21

实验二学生班级成绩统计一、实验要求 设计一个统计班级学生成绩的程序。

统计一个班(最多有 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 / 21

4、编码实现 #include int order[35]; double addsum[35]; double addaver[35]; int b= 0; typedef struct student { int id; char name[35]; double math; double english; double chinese; double computer; } student; student stu[35]; void shuru() { 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++; } } int query( int id ) { int i = 0; for( i=0; i

return i; } return -1; } void paiming() { int i,j; for( i=0; i

for(i=0;i90 && 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 if(a[1]=='e') { for(i=0;i90 && 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 if (a[1]=='c') { for(i=0;i90 && 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;i90 && 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] ); } } } } void main() {7 / 21

shuru(); paiming(); output(); chaxun(); } 5、调试。

八、实验结果8 / 21

实验三一、实验要求文件合并将两个文件中的数据合并至一个文件。

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

二、实验目的1、掌握指针、文件指针的概念。

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

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

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

2、软件实现基本流程。

四、实验内容将两个文件中的数据合并至一个文件。

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

六、程序框图七、实验步骤#include #include void Output(FILE *fp) { char ch,t,str3[100]; int i=0,j,k; while((ch=fgetc(fp))!=EOF) {9 / 21

str3[i] = ch; i++; } for(j=0;j<=i;j++) { for(k=j+1;kstr3[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; char ch1[100],ch2[100],ch3[100]; char ch,str1[100],str2[100]; printf("please input first filename:\n"); scanf("%s",ch1); printf("please input second filename:\n"); scanf("%s",ch2); printf("please input third filename:\n"); scanf("%s",ch3); if((fp1=fopen(ch1,"w"))== NULL) { printf("can not open file"); getchar(); exit(0); } printf("please write first file:\n"); getchar(); gets(str1); fputs(str1,fp1); printf("\n");10 / 21

if((fp2=fopen(ch2,"w"))== NULL) { printf("can not open file"); getchar(); exit(0); } printf("please write second file:\n"); getchar(); gets(str2); fputs(str2,fp2); printf("\n"); fclose(fp1); fclose(fp2);if(( fp3 = fopen(ch3,"w"))== NULL ) { printf("can not open file"); 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("the third file:\n"); Output(fp3); printf("\n"); }11 / 21

八、实验结果12 / 21

实验四链表基本操作一、实验要求完成单链表的建立、插入和删除操作。

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

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

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

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

在单链表的第 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 后推出程序。

六、程序框图13 / 21

七、实验步骤1、可行性分析 2、需求分析 3 4、编码实现 #include #include #include struct lian_node{ int n; int num; struct lian_node*link; }; struct lian_node*Create_Lian_Doc(); void SearchDoc_num(struct lian_node*link,int num); void InsertDoc(struct lian_node*llist,struct lian_node*p,int n); void DeleteDoc(struct lian_node*llist,int n); void Print_Lian_Doc(struct lian_node*llist); int main(void) { struct lian_node*llist,*p; int n,num,choice; int size=sizeof(struct lian_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){ case 0: break; case 1: printf("输入值: "); scanf("%d",&num); 13/21 页 SearchDoc_num(llist,num); break; case 3: printf("插入结点位置:"); scanf("%d",&n); printf("插入结点数值:"); scanf("%d",&num); p=(struct lian_node *)malloc(size); p->n=n+1;14 / 21

 
 

微信扫一扫 送福利