首页 软件工程-C语言--C语言 上机实验报告

软件工程-C语言--C语言 上机实验报告

举报
开通vip

软件工程-C语言--C语言 上机实验报告软件工程-C语言--C语言 上机实验报告 青 岛 理 工 大 学 课程实验报告 2011.04.21 计算机程序设计 (C) 课程名称 班级 软件 111 实验日期 姓名 赵亚东 学号 201107209 实验成绩 实验名称 实验一 C程序的运行环境和运行C程序的方法 1,熟悉Visual C++6.0环境。 实 验 2,了解建立控制台应用程序的基本步骤。 目 的 3,初步了解Visual C++6.0的环境设置。 及 要 4,初步学会简单的程序调试方法。 求 5,学会编写简单的C程序。 6,...

软件工程-C语言--C语言 上机实验报告
软件 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 -C语言--C语言 上机实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 青 岛 理 工 大 学 课程实验报告 2011.04.21 计算机程序设计 (C) 课程名称 班级 软件 111 实验日期 姓名 赵亚东 学号 201107209 实验成绩 实验名称 实验一 C程序的运行环境和运行C程序的方法 1,熟悉Visual C++6.0环境。 实 验 2,了解建立控制台应用程序的基本步骤。 目 的 3,初步了解Visual C++6.0的环境设置。 及 要 4,初步学会简单的程序调试方法。 求 5,学会编写简单的C程序。 6,初步熟悉C语言操输入scanf函数、输出printf函数的使用。 7,掌握C语言基本数据类型,熟悉变量的定义及变量的初始化和赋 值操作。 8,掌握不同的类型数据之间赋值的规律。 9,掌握C语言的算术运算符的使用以及算术表达式的使用,掌握自 加自减运算符的特点及使用。 实 Visual 6.0++ Windows 7 验 环 境 1(按照上述步骤,创建一个基于控制台的应用程序,该程序项目中只包含一 个源程序文件。功能为求两个整数的和,数据从键盘输入。 2(创建一个基于控制台的应用程序,求一元二次方程的根。使得当输入三个实 实数a,b,c(满足b*b-4*a*c>0),能够求出方程a*x*x+b*x+c=0的两个实根,验 并显示在屏幕上。分析提示: 通过键盘输入方程系数a,b,c的值,而后根据内 求根公式计算并输出它的两个根。 容 1 算 实验 一 法 1、先定义两个变量 a,b。2、键入a和b。3、输出两个数的和。 描 实验 二 述 1、定义并输入a b c。2、判断d=b^2-4ac的大小。3、如果小于零则 及 无解,等于零有一个解,x1=(-b)/(2*a)。4、大于零有两个解。 实 x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);5、输出结果。 验 步 骤 调 1 试 过 程 2 及 实 验 结 果 掌握了掌握C语言基本数据类型,变量的定义及变量的初始化和赋值 总 操作,不同的类型数据之间赋值的规律。 了解了C语言的算术运算符的使用以及算术表达式的使用,自加自减 结 运算符的特点及使用。 实验一 1 附 #include 录 void main() { int a,b,s; scanf("%d%d",&a,&b); printf("s=%d\n",a+b); } 实验一 2 #include #include void main() { double a,b,c,d,x1,x2; printf("a b c :"); scanf("%lf%lf%lf",&a,&b,&c); d=b*b-4*a*c; if (d<0) printf("无解\n"); 2 else if (d==0) { x1=(-b)/(2*a); printf("一个解:x=%g\n",x1); } else { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("两个解:x1=%g,x2=%g\n",x1,x2); } } 3 青 岛 理 工 大 学 课程实验报告 课程名2012.4.28 计算机程序设计 (C) 班级 软件 111 实验日期 称 姓名 赵亚东 学号 201107209 实验成绩 实验名实验二 选择结构程序设计 称 1(掌握赋值语句的使用方法。 实 2(掌握各种类型数据的输入输出方法,能正确使用各种 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 转换符。 验 3(能正确使用关系运算符及表达式、逻辑运算符及表达式。 目 4(熟练掌握if语句,学会使用if-else语句设计双分支和多分支结构的 程序。 及 5(熟练掌握switch语句的特点,学会使用switch语句设计多分支结要 构程序。 求 实 Visual 6.0++ Windows 7 验 环 境 实 3(编写程序,根据输入的学生成绩,给出相应的等级。90分以上的验 等级为A,60分以下的等级为E,其余每10分为一个等级。要求分内 别用if语句和switch语句实现。 容 4(使用switch语句编写简单的四则运算程序。 实验 3 用if 语句时:先输入学生成绩,判断等级,然后直接输出等 级代号A,B,C,D,E。 算 用switch 语句时:先输入学生成绩,除以十,取整。根据数法 值6到9判断等级。然后输出等级代号A,B,C,D,E。 描 述 实验 4 先定义字符变量c和数值变量a,b。然后判断字符变量为何种及 运算符号。最后输出相应结果。 实 验 步 4 骤 调 试 3 过 程 及 4 实 验 结 果 掌握了赋值语句的使用方法,各种类型数据的输入输出方法,能 总 正确使用各种格式转换符、关系运算符及表达式、逻辑运算符及表达 式。 结 掌握了if语句,学会使用if-else语句设计双分支和多分支结 构程序;掌握了switch语句的特点,学会使用switch语句设计多分 支结构程序 实验二 3 附 录 用 if 语句: #include void main() { int a; printf("请输入学生成绩:\n"); scanf("%d",&a); if (a>90) printf("该学生成绩等级是 A\n"); else if (a>80) printf("该学生成绩等级是 B\n"); else if (a>70) printf("该学生成绩等级是 C\n"); else if (a>60) printf("该学生成绩等级是 D\n"); else printf("该学生成绩等级是 E\n"); } 用 switch 语句: #include 5 void main() { int a,m; printf("请输入学生成绩:\n"); scanf("%d",&a); m=a/10; switch(m) { case 9:printf("该学生的成绩等级是:A\n"); case 8:printf("该学生的成绩等级是:B\n"); case 7:printf("该学生的成绩等级是:C\n"); case 6:printf("该学生的成绩等级是:D\n"); default:printf("该学生的成绩等级是:E\n"); } } 实验二 4 #include void main() { float a,b; char c; scanf("%f%c%f",&a,&c,&b); switch(c) { case '+':printf("%f\n",a+b);break; case '-':printf("%f\n",a-b);break; case '*':printf("%f\n",a*b);break; case '/':printf("%f\n",a/b);break; } } 6 青 岛 理 工 大 学 课程实验报告 计算机程序设课程实验日2012-5-2 班级 软件111 计 (C) 名称 期 实验成 姓名 赵亚东 学号 201107209 绩 实验实验三 循环结构程序设计 名称 1(熟练掌握while、do-while、for语句的特点,学会设计循环结构程序。 实 2(掌握break语句以及continue语句的特点及使用范围。 验 3(学会编写循环嵌套程序。 目 3(结合程序掌握一些简单的算法。 的 4(进一步学习调试程序。 及 要 求 实 Visual 6.0++ Windows 7 验 环 境 2n4(编程练习。求 的部分和。直到最后一项的值小于1.0e-4。 xxxe,1,x,,...,,... 2!n!nn+1 提示:第 n 项 u=x/n!, 第 n+1 项 u= x/(n+1)! nn+1 及 u = u(x/(n+1)) 实 n+1n 5(编程练习。有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数,分验 别是多少, 内 容 算 实验四1、调用函数。2、定义x s i j。输入x。3、直到n大于10000。4、 法 i=i*(x/(j+1)); s=s+i; 5、输出s 描 实验五 1、定义i j k fre=0。2、利用三重for语句。for(i=1;i<=4;i++) 述 for(j=1;j<=4;j++);for(k=1;k<=4;k++)。 及 3、if(i!=k&&i!=j&&k!=j),输出i*100+j*10+k。4、最后输出("总数为:%d\n",fre) 实 验 步 骤 调 3、 试 7 过 4、 程 及 实 验 结 果 (对实验结果进行分析,问题回答,实验心得体会及改进意见) 总 结 实验三 3 附 #include 录 #include void main() { int x; double s,i,j; scanf("%d",&x); s=1,j=0; for(i=1;i>=pow(10,-4);j++) { i=i*(x/(j+1)); s=s+i; } printf("s=%f\n",s); } 实验三 4 #include void main() { int i,j,k,fre=0; for(i=1;i<=4;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) { if(i!=k&&i!=j&&k!=j) { printf("%5d",i*100+j*10+k); fre=fre+1; } } printf("\n"); printf("总数为:%d\n",fre); 8 } 青 岛 理 工 大 学 课程实验报告 计算机程序设计 课程实验日2012-5-2 班级 软件111 (C) 名称 期 实验成 姓名 赵亚东 学号 201107209 绩 实验实验四 数组程序设计 名称 1.掌握一维数组、二维数组的定义、引用及其存储方式。 实 2.掌握字符数组、字符串以及字符串数组的含义及区别。 验 3.掌握常用字符函数及字符串函数的使用。 目 4.掌握常用数组的排序、查找等算法。 的 及 要 求 实 Visual C++6.0 Windows XP 验 环 境 2(编写程序,定义一个含有30个元素的int类型数组.依次给数组元素赋奇数1、实 3、5、7……;然后按每行十个数顺序输出,最后再按每行十个数逆序输出。 验 3(已知数组中的值在0-9的范围内,统计每个整数的个数。 内 容 算 实验2 1、定义一个一维数组a[30],i,j=1。2、利用for循环输出, 法 a[i+1]=a[i]+2;printf("%6d",a[i])。 描 3、输出数组,定义初始值1或者59。确定顺、逆序。 述 实验 3 1、定义一个一维随机数组含20个数。2、输出该一维数组。 及 3、利用for循环int m,n,k; for(m=0;m<=9;m++) for(n=0;n<20;n++) 实 if(m==a[n])。4、输出每个数各有几个。 验 步 骤 调 2、 试 过 程 及 实 验 9 结 果 3、 掌握常用字符函数及字符串函数的使用,掌握常用数组的排总 序、查找等算法。 结 实验2 附 #include 录 void main() { int a[30],i,j=1; for(i=1;i<31;i++) { a[1]=1; a[i+1]=a[i]+2; printf("%6d",a[i]); if(i%10==0) printf("\n"); } printf("\n"); for(i=1;i<31;i++) { 10 a[1]=59; a[i+1]=a[i]-2; printf("%6d",a[i]); if(i%10==0) printf("\n"); } } 实验4 #include #include void main() { int i,a[20]; for(i=0;i<20;i++) { a[i]=rand()%10; printf("%3d",a[i]); } printf("\n"); int m,n,k; for(m=0;m<=9;m++) { k=0; for(n=0;n<20;n++) if(m==a[n]) k++; printf("%d有%d个\n",m,k); } } 11 青 岛 理 工 大 学 课程实验报告 2012-5-7 计算机程序设计 (C) 课程名称 班级 软件111 实验日期 姓名 赵亚东 学号 201107209 实验成绩 实验五 函数 实验名称 1(掌握函数定义的各个要素。如函数返回值的类型、形式参数与实际参数等。 2(掌握变量的作用域和生存期的概念。 实 3(掌握局部变量与全局变量的区别、静态局部变量和局部变量的区别、静态验 全局变量和全局变量的区别;理解外部变量和外部函数的概念。 目 4(理解数组作为函数的参数的含义。 的 5(理解函数的嵌套调用。 及 6(掌握函数的递归调用。 要 求 实 Visual C++6.0 window7 验 环 境 3(求100~200之间的素数。 要求:每行10个数输出;定义子函数isprime,函数原型为 int isprime( int n); 322324(设f(x)=(2x+3x-4x+1)/(10x+3),q(x)=3f(x)+2f(x)+f(x),编程实现输入x的值,实 计算输出q(x)的值,要求有q(x)和f(x)的定义。 验 5(求菲波那契数列1,1,2,3,5,8,13,21,34……的前20项。 内 要求:使用递归;每行输出5个数。 容 算 实验3 1、定义函数 isprime(int n)。2、当(n%i==0)时,返回0.否则 法 返回1。3、定义main函数。确定范围100~200. 4、当isprime函数成 描 立,每五个一行输出。 述 实验 4 1、定义函数 及 f= (2*pow(x,3)+3*pow(x,2)-4*x+1)/(10*pow(x,2)+3); 实 q= 3*pow(f(x),3)+2*pow(f(x),2)+f(x);。2、定义main 函数。3、输出q 12 验 函数。 步 实验 5 1、定义fib函数。前两项为1.2、利用递归函。 骤 Fib(x)= fib(x-1)+fib(x-2);。3、每五项一行输出。 调 试 过 程 3、 及 实 验 结 果 4、5、 1,掌握了函数定义的各个要素。 总 2,如函数返回值的类型、形式参数与实际参数等. 3,需要进一步掌握函数。 结 实验 3 附 #include 录 int isprime(int n) { int i; for(i=2;i #include double f(float x) { double c; c=(2*pow(x,3)+3*pow(x,2)-4*x+1)/(10*pow(x,2)+3); return c; } double q(float x) { double c; c=3*pow(f(x),3)+2*pow(f(x),2)+f(x); return c; } main() { float x; double y; scanf("%f",&x); y=q(x); printf("%lf\n",y); } 实验 5 #include int fib(int x) { if(x==1||x==2) return 1; else return fib(x-1)+fib(x-2); } main() { int n,s; for(n=1;n<=20;n++) { 14 s=fib(n); printf("%-5d",s); if(n%5==0) printf("\n"); } printf("%\n"); } 青 岛 理 工 大 学 课程实验报告 2012-5-16 计算机程序设计 (C) 课程名称 班级 软件111 实验日期 姓名 赵亚东 学号 201107209 实验成绩 实验名称 实验六 指针 实 1.理解指针的定义,学会指针变量的初始化以及指针可以参与的运验 算。 目 2.掌握指针和一维数组的关系。 的 3.理解指针和二维数组的关系、理解行指针(或数组指针)的概念。 及 4.理解指针数组和数组指针的区别。 要 5.理解指针和函数的关系以及指针函数和函数指针的含义。 求 6.了解指针的指针(即二级指针)。 实 Visual C++6.0 window7 验 环 境 实 6(编写程序。读入三个浮点数,将整数部分和小数部分分别输出。验 要求使用指针作形参。 内 7(编写一个函数,返回数组元素中最大值的地址,并在主函数中输容 出该元素。 算法描 实验6 1、定义函数,指针做形参。2、定义a为整数部分,*p-a既述及实 是小数部分。然后输出。3、主函数中,键入三个浮点型数。并使用验 fu函数。 步 实验71、定义dizhi函数,指针做形参。返回地址。2、定义主函数,骤 以及一个数组。3、调用dizhi函数,输出数组和最大值。 15 调 试 过 6、 程 及 实 验 7、 结 果 总 1.运用指针时应时刻注意指针指向的改变,避免逻辑上的错误,加大 编程时的难度。2.通过指针变量可以提高程序质量,编写程序方便灵 结 活,可以实现多个值的返回 实验6 附 #include 录 void fu(float *p) { int a; a=(int)*p; printf("整数部分是%d 小数部分是%f\n",a,*p-a); } main() { float a[3]; int i; for(i=0;i<3;i++) { scanf("%f",&a[i]); fu(&a[i]); } } 实验7 #include int dizhi(int *p) { int s; p=&s; printf("地址是:%d\n",p); return p; } main() { int i,s,a[10],*p; for(i=0;i<10;i++) { a[i]=rand()%10; 16 printf("%d ",a[i]); } printf("\n"); s=a[0]; for(i=0;i<10;i++) { if(s 录 void fu(float *p) { int a; a=(int)*p; printf("整数部分是%d 小数部分是%f\n",a,*p-a); } main() { float a[3]; int i; for(i=0;i<3;i++) { scanf("%f",&a[i]); fu(&a[i]); } } 实验7 #include int dizhi(int *p) { int s; p=&s; printf("地址是:%d\n",p); return p; } main() { int i,s,a[10],*p; for(i=0;i<10;i++) { a[i]=rand()%10; 18 printf("%d ",a[i]); } printf("\n"); s=a[0]; for(i=0;i<10;i++) { if(s 录 #define N 5 void input(struct student stud[]); double av1(struct student stud[]); double av2(struct student stud[]); double av3(struct student stud[]); int max(struct student stud[]); struct student { int no; char name[10]; double degree1; double degree2; double degree3; }; void main() { struct student stud[N]; double aver[3],avg;int a,i; input(stud); 21 aver[0]=av1(stud); aver[1]=av2(stud); aver[2]=av3(stud); a=max(stud); avg=(stud[a].degree1+stud[a].degree2+stud[a].degree3)/3.0; for(i=0;i<3;i++) { printf("第%d门平均分:\t",i+1); printf("%.2lf\n",aver[i]); } printf("分数最高的学生信息如下:\n"); printf("%d\t%s\t%.2lf %.2lf %.2lf %.2lf\n",stud[a].no,stud[a].name, stud[a].degree1,stud[a].degree2,stud[a].degree3,avg); } void input(struct student stud[])//输入N个学生的信息 { int i; printf("学生信息输入格式:学号、姓名 、分开输入三门分数\n"); for(i=0;i #include #define N 3 typedef struct stud { int no; char name[10]; char sex[10]; int age; struct stud *next; }Stud; Stud *create(); void show(Stud *head); void delet(Stud *head); Stud *getnode(Stud *head,int n); void shan(Stud *head); void main()//主函数 { Stud *head; int n; do 23 { printf("1-创建链表,2-显示链表,3-删除相同年龄,0-退出操作\n"); scanf("%d",&n); switch(n) { case 1:head=create();break; case 2:show(head);break; case 3:delet(head);break; default:break; } }while(n!=0); } Stud *create()//创建链表储存学生信息 { Stud *p,*head,*r; int i; head=(Stud *)malloc(sizeof(Stud)); r=head; printf("输入学生信息格式:学号、姓名、性别、年龄\n"); for(i=1;i<=N;i++) { p=(Stud *)malloc(sizeof(Stud)); printf("输入第%d个学生信息\n",i); scanf("%d%s%s%d",&p->no,p->name,p->sex,&p->age); r->next=p; r=p; } r->next=NULL; return head; } void show(Stud *head)//显示学生信息 { int i=0; Stud *p=head->next; printf("学生信息如下:\n"); while(p!=NULL) { printf("第%d个学生信息:\n\n",i+1); printf("%d\t%s\t%s\t%d\n",p->no,p->name,p->sex,p->age); p=p->next; i++; } } Stud *getnode(Stud *head,int n) 24 { int i=1;Stud *p=head; if(n<1) return NULL; while(p!=NULL&&inext; i++; } if(p!=NULL) return p; else return NULL; } void delet(Stud *head)//删除与输入年龄相同的学生信息 { int year,i=1,k=1; Stud *p=head->next,*q; printf("输入要删除的年龄\n"); scanf("%d",&year); while(p!=NULL) { if(year==p->age) { if(k==1) { head->next=p->next; free(p); p=head; } else { q=getnode(head,k); q->next=p->next; free(p); p=q; } } else k++; p=p->next; } printf("相同年龄已删除\n"); } 25 青 岛 理 工 大 学 课程实验报告 2012-6-8 计算机程序设计 (C) 课程名称 班级 软件111 实验日期 20110720 姓名 赵亚东 学号 实验成绩 9 实验八 综合程序设计 实验名称 1.掌握文件以及缓冲文件系统、文件指针的概念。 2.学会使用文件打开、关闭、读、写等文件操作函数。 实 3.通过一个综合程序,使学生对综合运用C语言程序设计语言有初步的认识。 验 目 的 及 要 求 VC++6.0 实 验 环 境 26 一、学生管理系统 1、学生基本信息的管理,包括添加、修改、删除、查找、全删等 操作; 2、课程数据的管理,包括添加、修改、删除、查找、全删等操作; 实 3、学习成绩数据的管理,包括添加、修改、删除、查找、全删等验 操作; 内 4、学生成绩查询系统,包括按学号、按课程号、按班号统计学生容 的成绩。 首先自定义学生信息、课程数据、学生成绩的结构体,定义这些变量 的链表, 算 一边对这些数据进行操作。 法 一、在写主函数时,先把数据从文件中提取到链表中,操作后再写入描 文件中进行保存。 述 二、在学生信息管理系统中,添加,即是判断是否存在相同学号,没及 有通过链表进行添加操作,有的话进行提示 ,修改时只改对应学号实 的信息,学号不需要修改,但需要同时修改成绩管理系统中的对应 学验 号的学生姓名,在进行删除操作时,先查找是否有和需要修改的学号步 相对应的学生信息,有的话则按照链表删除操作进行删除,查找时判骤 断是否有需要查找的学号,若有,输出对应的学生信息,进行全删操 作时,和链表的释放操作差不多,但是要注意的是不能释放头结点的 地址,它是一个全局变量,释放后不能进行其他操作。 在课程数据、学习成绩数据的处理时,采取同样的处理方式; 三、学生成绩查询系统分按学号、按课程号、按班号三种方式来统计 学生的成绩。 27 调 试 过 程 及 实 验 结 果 28 可以熟练地进行文件操作,打开文件,写文件,向文件中添加内容, 总 以及文件的读取等操作进行编写小型程序。 结 Student文件 附 录 #include #include #include #include #include"school.h" void addstudent(); void displaystudent(); void alterstudent(); void changename(int no,char name[]); void findstudent(); void deletstudent(); 29 void deleallstu(); extern StudNode *studenthead; extern ScoreNode *scorehead; void student() { int x; do{ printf("1-添加,2-修改,3-显示,4-查找,5-删除,6-全删,0-返回\n"); scanf("%d",&x); switch(x) { case 1:addstudent();break; case 2:alterstudent();break; case 3:displaystudent();break; case 4:findstudent();break; case 5:deletstudent();break; case 6:deleallstu();break; case 0:break; default :printf("选择错误\n");break; } }while(x!=0); } void addstudent()//添加一个学生信息 { StudNode *p=studenthead->next,*s,*q=studenthead; int no;StudType st; printf("输入添加的学生学号\n"); scanf("%d",&no); while(p!=NULL && p->data.no!=no) { q=p; p=p->next; } if(p==NULL)//学号不重复 { s=(StudNode *)malloc(sizeof(StudNode)); printf("输入学生信息格式:姓名、年龄、班号\n"); scanf("%s%d%s",st.name,&st.age,st.classno); st.no=no; s->data=st; s->next=q->next; q->next=s; } else 30 printf("学号重复\n"); } void displaystudent() { StudNode *p=studenthead->next; if(p!=NULL) { printf("学生信息如下:\n"); printf("学号 姓名 年龄 班号\n"); while(p!=NULL) { printf("%3d%8s%5d%8s\n",p->data.no,p->data.name,p->data.age,p->dat a.classno); p=p->next; } printf("学生信息输出完毕\n"); } else printf("无学生信息\n"); } void alterstudent() //修改一个学生的信息,但是学号不改变,同时改变成绩管理文件的姓 名 { StudNode *p=studenthead->next; int no;StudType st; if(p!=NULL) { printf("输入要修改的学生学号\n"); scanf("%d",&no); while(p!=NULL&& p->data.no!=no) p=p->next; if(p!=NULL) { printf("输入修改学生信息,格式:姓名、年龄、班号\n"); scanf("%s%d%s",st.name,&st.age,st.classno); st.no=no; p->data=st; changename(st.no,st.name); } else printf("未查到要修改信息的学生\n"); } } 31 void changename(int no,char name[])//修改学生成绩管理系统中的名字 { ScoreNode *p2=scorehead->next; while(p2!=NULL&&p2->data.no!=no) p2=p2->next; if(p2!=NULL) strcpy(p2->data.name,name); else printf("在成绩管理系统中未发现要修改的学生资料\n"); } void findstudent()//根据学号查找学生信息并输出 { StudNode *p=studenthead; int no; printf("输入要查找的学生学号\n"); scanf("%d",&no); while(p!=NULL &&p->data.no!=no) p=p->next; if(p!=NULL) { printf("要查找的学生信息如下:\n"); printf("%3d%8s%5d%8s\n",p->data.no,p->data.name,p->data.age,p->dat a.classno); } else printf("未找到该学号的学生信息\n"); } void deletstudent()//根据学号删除学生信息 { StudNode *p=studenthead,*q; int no; printf("输入要删除的学生学号\n"); scanf("%d",&no); while(p!=NULL &&p->data.no!=no) { q=p; p=p->next; } if(p!=NULL) { q->next=p->next; free(p); printf("学号对应学生信息已删除\n"); } 32 else printf("要删除的学生信息不存在\n"); } void deleallstu()//删除全部学生信息 { StudNode *p=studenthead->next,*q; if(studenthead->next!=NULL) { q=p->next; while(q!=NULL) { free(p); p=q; q=q->next; } free(p); studenthead->next=NULL; printf("文件已全删\n"); } else printf("不存在学生信息\n"); } Score文件 #include #include #include"school.h" #define N 100 void addscore(); void showscore(); void alterscore(); void findscore(); void delescore(); void deleallsc(); extern CourseNode *coursehead; extern ScoreNode *scorehead; void score() { int x; do{ printf("1-添加,2-修改,3-显示,4-查找,5-删除,6-全删,0-返回\n"); scanf("%d",&x); switch(x) 33 { case 1:addscore();break; case 2:alterscore();break; case 3:showscore();break; case 4:findscore();break; case 5:delescore();break; case 6:deleallsc();break; case 0:break; default:printf("选择错误\n");break; } }while(x!=0); } void addscore()//添加一个分数记录 { ScoreNode *p2=scorehead->next,*r2=scorehead,*s2,*t[N]; ScoreType sc;int n=0,i; printf("输入添加学生学号\n"); scanf("%d",&sc.no); while(p2!=NULL) { if(p2->data.no==sc.no) { t[n]=p2; n++; } r2=p2; p2=p2->next; } if(n==0)//学号不重复,可以添加 { s2=(ScoreNode *)malloc(sizeof(ScoreNode)); printf("输入要添加的学生信息格式:名字、课程号、课程名、分 数\n"); scanf("%s%d%s%lf",sc.name,&sc.cno,sc.cname,&sc.degree); s2->data=sc; s2->next=r2->next; r2->next=s2; } else if(n>0)//学号重复要考虑课程号是否重复,不重复就添加 { printf("输入想要添加的课程号\n"); scanf("%d",&sc.cno); for(i=0;idata.cno==sc.cno) 34 { printf("该学生的此课程分数信息已存在\n"); return; } if(i==n) { s2=(ScoreNode *)malloc(sizeof(ScoreNode)); printf("输入要添加的学生信息格式:名字、课程名、分数\n"); scanf("%s%s%lf",sc.name,sc.cname,&sc.degree); s2->data=sc; s2->next=r2->next; r2->next=s2; printf("学生信息已添加\n"); } } } void alterscore()//修改分数信息 { ScoreNode *p2=scorehead->next; ScoreType sc; printf("输入想要修改的学生学号和课程号\n"); scanf("%d%d",&sc.no,&sc.cno); if(p2!=NULL) { while(p2!=NULL) { if(p2->data.no==sc.no) { if(p2->data.cno==sc.cno) { printf("输入学生信息格式:姓名、课程名、分数\n"); scanf("%s%s%lf",sc.name,sc.cname,&sc.degree); p2->data=sc; printf("该生的该课程成绩已修改\n"); return; } } p2=p2->next; } printf("不存在需要修改的学生信息\n"); } else printf("不存在任何可以修改的信息\n"); } 35 void showscore()//显示分数信息 { ScoreNode *p2=scorehead->next; ScoreType sc; if(p2==NULL) {printf("无学生分数信息\n"); return; } printf("学号 姓名 课程号 课程名\t分数\n"); while(p2!=NULL) { sc=p2->data; printf("%4d%8s%5d%10s\t%g\n",sc.no,sc.name,sc.cno,sc.cname,sc.degr ee); p2=p2->next; } printf("分数文件显示完成\n"); } void findscore()//查找一个学生成绩信息 { ScoreNode *p2=scorehead->next; ScoreType sc; printf("输入需要查找的学生成绩学号和课程号\n"); scanf("%d%d",&sc.no,&sc.cno); if(p2!=NULL) { while(p2!=NULL) { if(p2->data.no==sc.no) if(p2->data.cno==sc.cno) {sc=p2->data; printf("学号 姓名 课程号 课程名\t分数\n"); printf("%4d%8s%5d%10s\t%g\n",sc.no,sc.name,sc.cno,sc.cname,sc.degr ee); return; } p2=p2->next; } printf("未查到该学生的该课程成绩\n"); } else printf("无任何学生成绩信息\n"); } 36 void delescore()//删除一个学生信息 { ScoreNode *p2=scorehead->next,*q2=scorehead; int no,cno; if(p2!=NULL) { printf("输入要删除的学生成绩信息的学号、课程号\n"); scanf("%d%d",&no,&cno); while(p2!=NULL) { if(p2->data.no==no) if(p2->data.cno==cno) {q2->next=p2->next; free(p2); printf("该生成绩信息已删除\n"); return; } q2=p2; p2=p2->next; } printf("文件中无要删除的学生成绩信息\n"); } else printf("无任何成绩信息可删除\n"); } void deleallsc()//全删 { ScoreNode *p2=scorehead->next,*q2; if(scorehead->next!=NULL) { q2=p2->next; while(q2!=NULL) {free(p2); p2=q2; q2=q2->next; } free(p2); scorehead->next=NULL; printf("文件已全删\n"); } else printf("文件为空 \n"); } 37
本文档为【软件工程-C语言--C语言 上机实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_153723
暂无简介~
格式:doc
大小:290KB
软件:Word
页数:56
分类:企业经营
上传时间:2017-09-30
浏览量:63