C程序实验(1)_第1页
C程序实验(1)_第2页
C程序实验(1)_第3页
C程序实验(1)_第4页
C程序实验(1)_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 熟悉上机环境和顺序结构编程1.熟悉 VC 环境,练习自己的第一个程序 使用 Visual C+ 6.0 集成环境来编辑、编译并运行下面简单C程序: #include <stdio.h> int main() printf("haha, my first C program.n"); return 0; 3简单的数据输入和运算实验 (1)输入下面的程序,然后运行并分析结果。 #include<stdio.h> void main() int x=6, y ; printf(" x=%dn",x) ; y = +x ; pri

2、ntf(" x=%d,y=%dn",x,y) ; x=6; y=x+; printf("x=%d,y=%dn",x,y); y = -x ; printf(" x=%d,y=%dn",x,y) ; x=6; y=x-; printf("x=%d,y=%dn",x,y); (2) 输入下面的程序,然后运行并分析结果。 #include<stdio.h> void main() int a=20, b=6; a+=a; printf("a=%dn",a); a=20; a-=a; pri

3、ntf("a=%dn",a); a=20; a*=a; printf("a=%dn",a); a=20; a/=b; printf("a=%dn",a); a=20; a%=b; printf("a=%dn",a); a=20; a=a-b; printf("a=%dn",a); a=10; b=4; a+=a*=a-=a/b; printf("a=%dn",a); (3)编写一个程序,要求:提示输入 3 个数;显示这 3 个数,求他们的平均值并输出。#include<

4、stdio.h> Int main() float a,b,c;float aver; printf("请输入三个数:") ; scanf(" %f,%f,%f",&a,&b,&c) ; aver=(a+b+c)/3;printf("aver=%fn",aver);return 0;实验二 选择结构程序设计1. 输入三角形的 3 条边 a、b、c,如果能够出三角形,输出面积area和周长perimeter;否则,输出“Can Not make a triangle!”。三角形面积公式: area=sqrt

5、(s(s-a)(s-b)(s-c) 其中s=(a+b+c)/2; (sqrt 为系统提供的求平方根的函数,包含在数学头文件中)#include <stdio.h> #include <math.h> int main() float a,b,c; float area,perimeter,s; printf("Enter 3 sides of the triangle:n"); scanf("%f,%f,%f",&a,&b,&c); if(a+b>c && b+c>a &

6、& a+c>b) s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); perimeter=a+b+c; printf("area=%.2f;perimeter=%.2fn",area,perimeter); else printf("Can Not make a triangle!n"); return 0; /* 如果用float型单位用%f;用double型就用%lf */2. 身高预测 每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影 响小孩成人后的身高的因素包括遗传

7、、饮食习惯与体育锻炼等。小孩成人后的身高与其父母 的身高和自身的性别密切相关。 设 faHeight 为其父身高,moHeight 为其母身高,身高预测公式为 男性成人时身高=(faHeight + moHeight)×0.54cm 女性成人时身高=(faHeight×0.923 + moHeight)/2cm 此外,如果喜爱体育锻炼,那么可增加身高 2%;如果有良好的卫生饮食习惯,那么可增加 身高 1.5%。编程从键盘输入用户的性别(用字符型变量 sex 存储,输入字符 F 表示女性,输入字符M 表示男性) 、父母身高(用实型变量存储,faHeight 为其父身高,moH

8、eight 为其母身高)是否喜爱体育锻炼(用字符型变量 sports 存储,输入字符 Y 表示喜爱,输入字符 N表示不喜爱) 、是否有良好的饮食习惯等条件(用字符型变量 diet 存储,输入字符 Y 表示良好,输入字符 N 表示不好) ,利用给定公式和身高预测方法对身高进行预测。#include<stdio.h>int main()char sex,sport,diet;double faHeight,moHeight,Height;printf("请输入父亲身高(cm):");scanf("%lf",&faHeight);print

9、f("请输入母亲身高(cm):");scanf("%lf",&moHeight);printf("请输入你的性别(F/M):");scanf("%s",&sex);switch(sex)case'F':Height=(faHeight*0.923+moHeight)/2;break;case'M':Height=(faHeight+moHeight)*0.54;break;printf("是否喜欢运动(Y/N):");scanf("%s&

10、quot;,&sport);switch(sport)case'Y':Height=Height*1.02;break;case'N':Height=Height;break;printf("卫生饮食习惯是否良好(Y/N):");scanf("%s",&diet);switch(diet)case'Y':Height=Height*1.015;break;case'N': Height=Height;break;printf("你的身高应为(cm):%lfn&quo

11、t;,Height);return 0;3. 简单计算器 用 switch 语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数 1 运算符 op 操作数 2 计算表达式的值,指定的算术运算符为加(+) 、减(-) 、乘(*) 、除(/)。 编程要求:程序能进行浮点数的算术运算,有用户输入输出提示信息。 提示:因为除法中的除数不能为 0,因此关键在于如何比较浮点变量 data2 和常数 0 是否相 等。作为整型变量跟 0 的比较,简单的就可以解决。而浮点型等实型变量需要用 if (fabs(data2) <= 1e-7) 进行判断(即判断其是否足够小) 。若使用函数

12、 fabs,需要包含头文件 cmath.h#include<stdio.h>int main()float data1,data2,s;char op;printf("请输入你的式子:");scanf("%f%c%f",&data1,&op,&data2);switch(op)case'+':s=data1+data2;break;case'-':s=data1-data2;break;case'*':s=data1+data2;break;case'/'

13、:if(data2!=0)s=data1/data2;else printf("你输入的式子有错!n");printf("请你重新输入你的式子:");scanf("%f%c%f",&data1,&op,&data2);s=data1/data2;break;printf("s=%fn",s);return 0;实验三 循环结构程序设计1. 计算 1+5+9+97 的值。#include <stdio.h> int main() int i,sum; sum=0; for(i=1;

14、i<100;i+=4) sum=sum+i; printf("sum=%dn",sum); return 0; /* #include <stdio.h> int main() int i,sum; sum=0,i=1; while(i<100) sum=sum+i; i+=4; printf("sum=%dn",sum); return 0; */2编写程序 实现从 1 到20 之间的偶数累加,奇数相乘,并将偶数累加的结果输出, 奇数相乘的结果输出。#include <stdio.h> int main() int

15、i,n,sum; n=1,sum=0; for(i=1;i<=20;i+) if(i%2=0)sum+=i;else n*=i; printf("偶数累加的结果为%d,奇数相乘的结果为%dn",sum,n); return 0; 3编写程序 将一面额为 10 元倍数的整钱(<=100 元)换成1元、2 元和5 元的零钱组合(每种面值都要有)。输入要换的面额(如 10元),输出所有可能的换法(如2 种)。 进阶:若希望换出来的零钱数量越少越好,怎么修改程序可以很快得到最优方案?#include <stdio.h> int main() int x,y,

16、z,n,m; int d,min=100; int a=0,b=0,c=0; n=0; printf("请输入你要换的面额(10 元倍数且<=100 元):"); scanf("%d",&m); for(x=1;x<=m/5;x+) for(y=1;y<=m/2;y+) for(z=1;z<=m;z+) if(x*5+y*2+z=m) n+; if(d=x+y+z) if(d<min) min=d; a=x,b=y,c=z; printf("There are %d ways.n",n); pri

17、ntf("总张数最小为:%d张.n",min); printf("5元的张数:%d,2元的张数:%d,1元的张数:%d。n",a,b,c); return 0; 实验四 有序数据的编程1. 程序具备如下功能:输入一个以回车结束的字符串(少于 80 个字符),将它逆序输出。如输入3c school of guet,则输出为teug fo loohcs c3.#include <stdio.h> int main() int i,k,temp; char str80; printf("input a string:"); i=

18、0; while(stri=getchar()!='n') i+; stri=0; k=i-1; for(i=0;i<k;i+) temp=stri; stri=strk; strk=temp; k-; for(i=0;stri!=0;i+) putchar(stri); return 0; 2编写程序 随即产生 N 个正整数(10 < 20 )存入数组 a 中,输出 a 中的最大值,最小值及求出其平均值(保留两位小数)。#include <stdio.h> #define N 15 / (10<N<=20)int main() int i,

19、aN; int max,min,sum; float aver; sum=0; for(i=0;i<N;i+) ai=rand(); sum+=ai; max=a0,min=a0; for(i=0;i<N;i+) if(ai>max) max=ai; else if(ai<min) min=ai; aver=sum/N; printf("最大值为:%d,最小值为:%d.",max,min); printf("平均值为:%.2fn",aver); return 0; 3餐饮服务质量调查打分 在商业和科学研究中, 人们经常需要对数据进

20、行分析并将结果以直方图的形式显示出来。例 如, 一个公司的主管可能需要了解一年来公司的营业状况, 比较一下各月份的销售收入状况。 如果仅给出一大堆数据,这显然太不直观了,如果能将这些数据以条形图(直方图)的形式表示,将会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,练习这方面的程序编写方法。假设有 40 个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为 110 这 10 个等级(1 表示最低分,10 表示最高分) ,试统计调查结果,并用*打印出如下形式的统计结果直方图。 Grade Count Histogram 1 5 * 2 10 * 3 7 *

21、. 提示: 定义数组 score 存放打的分数 定义数组 count 为计数器(count0不用) 计算统计结果: 设置一个循环, 依次检查数组元素值 scorei, 是 1 则将数组元素 count1 加 1,是 2 则将数组元素 count2加 1,依此类推 for (i=0; i<STUDENTS; i+) countscorei +; 打印统计结果,设置一个循环,按 count 数组元素的值,打印相应个数的符号* 提示:输入 40 个数据太多,进行测试的时候,可以让计算机生成随机数代替手工输入数据。#include <stdio.h>#include<stdli

22、b.h>#include<stdlib.h> int main()int score40,count12=0;char str='*'int i,j; printf("Grade Count Histogramn");for(i=0;i<40;i+) scorei=rand()%9+1; countscorei+; for(j=1;j<=10;j+) printf("%3d",j); printf("%8d",countj); for(i=1;i<=countj;i+) printf

23、("%c",str); printf("n"); return 0; 实验五 模块化程序设计1. 分别输入 2 个复数的实部与虚部,用函数计算 2 个复数积。#include <stdio.h>void complex_product(float,float,float,float); float real,imag;/ 全局变量,用于存放函数结果 int main() float real1,real2,imag1,imag2;printf("input 1st complex num:n"); scanf("

24、%f%f",&real1,&imag1); printf("input 2st complex num:n"); scanf("%f%f",&real2,&imag2); complex_product(real1,imag1,real2,imag2); printf("product is %f+%fin",real,imag); return 0; void complex_product(float x1,float y1,float x2,float y2) real=x1*x2-y1

25、*y2; imag=x1*y2+x2*y1; 2学生成绩统计(注意保留代码,为后面的实验做准备) 随机产生一个班(全班不少于 30 人)学生某门课的成绩,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)统计各分数段的学生人数及所占的百分比。 注:将成绩分为六个分数段,60 分以下为第 0 段,6069 为第 1 段,7079 为第 2 段,8089为第 3 段,9099 为第 4 段,100 分为第 5 段。 编程要求: 1.较好的用户输入输出提示信息 2.使用子函数来实现上述各个功能 3.最好不要

26、使用全局变量 提示:1.用 numi存放第 i+1 个学生的学号, 用 scorei存放第 i+1 个学生的成绩。 设置计数器 count, 当 scorei<60 分时,计数器 count 计数一次,并打印 numi和 scorei。 2.先计算全班平均分 aver,当第 i 个学生的成绩 scorei>=aver 时,打印 numi和 scorei。 3.各分数段的学生人数保存在数组 stu 中,用 stui存放第 i 段的学生人数。对于每个学生的 成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加 1,即 stui+。 供参考的函数原型如下: 函数功能:从键盘输入

27、一个班学生某门课的成绩及其学号 函数参数: 长整型数组num,存放学生学号 实型数组 score,存放学生成绩 函数返回值:学生总数 int ReadScore(long num, float score); 函数功能:统计不及格人数并打印不及格学生名单 函数参数:长整型数组 num,存放学生学号 实型数组 score,存放学生成绩 整型变量 n,存放学生总数 函数返回值:不及格人数 int GetFail(long num, float score, int n);函数功能:计算全班平均分 函数参数:实型数组 score,存放学生成绩 整型变量 n,存放学生总数 函数返回值:平均分 floa

28、t GetAver(float score, int n); .(其他的省略,同学们自己定义)#include<stdio.h>#include <stdlib.h># define N 33 / N>=30int GetFail(long num,float score);float GetAver(long num,float score);void FenShuD(float score);int main()int i,j,n;long numN;float scoreN=0,aver;printf(" 学号 成绩n");for (i=

29、0,j=1400330301;i<N,j<1400330301+N;i+,j+)numi=j;scorei=rand()%101;for (i=0;i<N;i+)printf("%d",numi); printf("%9.2fn",scorei);n=GetFail(num,score);printf("不及格学生人数:%dn",n);aver=GetAver(num,score);printf("全班平均分:%.2fn",aver);FenShuD(score,N);return 0;int G

30、etFail(long num,float score)int i,count=0;printf("不及格学生情况:n");printf(" 学号 成绩n");for(i=0;i<N;i+)if(scorei<60) count+;printf("%d",numi); printf("%9.2fn",scorei);return count;float GetAver(long num,float score)int i,m=0;float aver,sum=0;printf("平均分之上的学

31、生情况:n");printf(" 学号 成绩n");for(i=0;i<N;i+) sum+=scorei;aver=sum/N;for(i=0;i<N;i+)if(scorei>aver) printf("%d",numi); printf("%9.2fn",scorei); m+;printf("平均分之上的学生人数:%dn",m);return aver;void FenShuD(float score)int i,stu6=0;float bai6=0;char s='%

32、'printf("各分数段的情况:n");printf("分数段 人数 百分比n");for(i=0;i<N;i+)if (scorei<60) stu0+;else if (scorei<=69) stu1+;else if (scorei<=79) stu2+;else if (scorei<=89) stu3+;else if (scorei<=99) stu4+;else stu5+;for(i=0;i<6;i+) baii=1.0*stui/N*100;for(i=0;i<6;i+) pr

33、intf("第%d段",i); printf("%8d",stui);printf("%10.2f%cn",baii,s);实验六 结构体与文件编程1学生成绩统计 (注意保留代码,为后面的实验做准备)要求有 5个班级的数据,每个班级至少有30名以上的同学,至少有 5门以上的课程。分别实 现下列功能:【注:数据通过随机函数产生】 (1)能够实现各种查询(分别根据学生姓名 、学号、班级、课程名称等)。 (2)能够查询每个课程的最高分、最低分及相应学生姓名、班级和学号。【最高分或最 低分有多个同学的,都要罗列出来】 编程要求: 1.较好的用

34、户输入输出提示信息 2.使用子函数来实现上述各个功能 3.尽量少用全局变量 4. 建议实验指导老师先规划或写出主程序模块 名称,学生具体实现功能 提示:定义一个学生成绩信息的结构体类型,然后在此基础上编程。 typedef struct char stu_number20;/学号 char stu_name20; /姓名 int class_number; /班级号 int cprog_score; /C 程序成 int eng_score; /英语成绩 int math_score; /高数成绩 int phy_score; /物理成绩 int pe_score;. /体育成绩 StuInf

35、o; 关于 class_number 班级号属性,可以作为成员,也可以不作为成员,而 用 ourgradeclass_numbern来表示,也即用二维结构体数组,前面的属性表 示班级号, 后面的属性表示第 n 个学生的成绩。it's up to you! 例如: ourgrade210.cprog_score=90;就是将 3 班的第 11 个同学的 C 程序 设计成绩赋值为 90.(当然,下标【0】也可以不用,这样就表示 2 班的第 10 个 同学的 C 程序设计成绩) #include<stdio.h>#include <string.h>#define N

36、 180#include<stdlib.h>struct Studentlong stu_number;char stu_name20;int class_number;int cprog_score;int eng_score;int math_score;int phy_score;int pe_score;stuN;void input(struct Student stu);void save(struct Student stu); void chazhao(struct Student stu);void zuizhi(struct Student stu);int m

37、ain()int i; input(stu);printf(" 学号 姓名 班级号 C程序 英语 高数 物理 体育n");for (i=0;i<N;i+)printf("%2d%5s%8d%8d%8d%8d%8d%8dn",stui.stu_number,stui.stu_name,stui.class_number,stui.cprog_score, stui.eng_score,stui.math_score,stui.phy_score,stui.pe_score);save(stu); /保存数据/*FILE *fp; int i; if(

38、 (fp = fopen( "data.txt", "rb" ) = NULL ) printf("cannot open filen"); exit(0); printf(" 学号 姓名 班级号 C程序 英语 高数 物理 体育nn"); for (i=0;i<N;i+) fread(&stui, sizeof(struct Student),1, fp ); printf("%2d%5s%8d%8d%8d%8d%8d%8dn",stui.stu_number,stui.stu_n

39、ame,stui.class_number,stui.cprog_score, stui.eng_score,stui.math_score,stui.phy_score,stui.pe_score); */ /从文件读出数据chazhao(stu);zuizhi(stu);return 0;/*/void input(struct Student stu)int i,j;printf("请输入各位学生的姓名:n");for (i=0;i<N;i+) scanf("%s",&stui.stu_name);for (i=0,j=1400301

40、;i<N,j<N+1400301;i+,j+) stui.stu_number=j; stui.class_number=rand()%5+301; stui.cprog_score=rand()%100; stui.eng_score=rand()%100; stui.math_score=rand()%100; stui.phy_score=rand()%100; stui.pe_score=rand()%100;/*/void save(struct Student stu) FILE *fp; int i; if( (fp = fopen( "data.txt&q

41、uot;, "wb" ) = NULL ) printf("cannot open filen"); return; for (i=0;i<N;i+) if(fwrite(&stui, sizeof(struct Student),1,fp )!=1) printf("file write errorn"); fclose(fp);/*/void chazhao(struct Student stu) int i,a,y=N,x=N; char b20; printf("n请选择你查找学号或班级:")

42、; scanf("%d",&a); printf(" 学号 姓名 班级号 C程序 英语 高数 物理 体育n"); for (i=0;i<N;i+) if (a=stui.stu_number | a=stui.class_number) y=i; printf("%2d%5s%8d%8d%8d%8d%8d%8dn",stui.stu_number,stui.stu_name,stui.class_number,stui.cprog_score, stui.eng_score,stui.math_score,stui.ph

43、y_score,stui.pe_score); if (y=N) printf("查找不到有关信息.n"); printf("n请选择你查找姓名:"); scanf("%s",&b); printf(" 学号 姓名 班级号 C程序 英语 高数 物理 体育n"); for (i=0;i<N;i+) if (strcmp(b,stui.stu_name)=0) x=i; printf("%2d%5s%8d%8d%8d%8d%8d%8dn",stui.stu_number,stui.st

44、u_name,stui.class_number,stui.cprog_score, stui.eng_score,stui.math_score,stui.phy_score,stui.pe_score); if (x=N) printf("查找不到有关信息.n");/*/void zuizhi(struct Student stu)int i,j=0,k=0;int max,min; printf("nC程序(高分、低分):n");max=stu0.cprog_score,min=stu0.cprog_score;for(i=0;i<N;i+)

45、if(stui.cprog_score>max) max=stui.cprog_score,j=i;if(stui.cprog_score<min) min=stui.cprog_score,k=i; printf(" 学号 姓名 班级号 C程序n"); printf("%2d%4s%8d%8dn",stuj.stu_number,stuj.stu_name,stuj.class_number,stuj.cprog_score); printf("%2d%4s%8d%8dn",stuk.stu_number,stuk.st

46、u_name,stuk.class_number,stuk.cprog_score);/*/ printf("n英语(高分、低分):n");max=stu0.eng_score,min=stu0.eng_score;for(i=0;i<N;i+)if(stui.eng_score>max) max=stui.eng_score,j=i;if(stui.eng_score<min) min=stui.eng_score,k=i; printf(" 学号 姓名 班级号 英语n"); printf("%2d%4s%8d%8dn&qu

47、ot;,stuj.stu_number,stuj.stu_name,stuj.class_number,stuj.eng_score); printf("%2d%4s%8d%8dn",stuk.stu_number,stuk.stu_name,stuk.class_number,stuk.eng_score);/*/ printf("n高数(高分、低分):n");max=stu1.math_score,min=stu1.math_score;for(i=0;i<N;i+)if(stui.math_score>max) max=stui.mat

48、h_score,j=i;if(stui.math_score<min) min=stui.math_score,k=i;printf(" 学号 姓名 班级号 高数n"); printf("%2d%4s%8d%8dn",stuj.stu_number,stuj.stu_name,stuj.class_number,stuj.math_score);printf("%2d%4s%8d%8dn",stuk.stu_number,stuk.stu_name,stuk.class_number,stuk.math_score);/*/pr

49、intf("n物理(高分、低分):n"); max=stu0.phy_score,min=stu0.phy_score;for(i=0;i<N;i+)if(stui.phy_score>max) max=stui.phy_score,j=i;if(stui.phy_score<min) min=stui.phy_score,k=i;printf(" 学号 姓名 班级号 物理n"); printf("%2d%4s%8d%8dn",stuj.stu_number,stuj.stu_name,stuj.class_numb

50、er,stuj.phy_score);printf("%2d%4s%8d%8dn",stuk.stu_number,stuk.stu_name,stuk.class_number,stuk.phy_score);/*/ printf("n体育(高分、低分):n");max=stuN-1.pe_score,min=stuN-1.pe_score;for(i=0;i<N;i+)if(stui.pe_score>max) max=stui.pe_score,j=i;if(stui.pe_score<min) min=stui.pe_score,k=i; printf(" 学号 姓名 班级号 体育n"); printf("%2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论