南华大学C语言实验报告_第1页
南华大学C语言实验报告_第2页
南华大学C语言实验报告_第3页
南华大学C语言实验报告_第4页
南华大学C语言实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、南华大学计算机科学与技术学院实验报告( 20152016学年度第 1 学期 )课程名称高级程序设计I实验名称C 语言实验报告姓名 刘让洲学号 20140440734专业计算机类班级14 级计类 07 班地点教师罗江琴实验一:计算定期存款本利之和1. 实验题目及要求rate 为 2.25%,并已知存款期为 n 年,存款设银行定期存款的年利率本金为 capital 元,试编程计算 n 年后的本利之和 deposit。要求定期存款的年利率rate、存款期 n 和存款本金 capital 均由键盘输入。2.实验内容1) 流程图: 1. 正确从键盘读入数据。 2. 把读入的数据带入公式计算即可。2) 源

2、程序#include <stdio.h>#include <stdlib.h>#include <math.h>void main ()int n;float deposit,rate,capital;printf ("请输入存款金额capital:");scanf ("%f",&capital);fflush(stdin);printf ("请输入存款年限n: ");scanf (" %d",&n);fflush(stdin);printf ("请输入

3、年存款利率rate :");scanf (" %f",&rate);deposit = capital*pow(rate+1),n) ;printf ("%d年以后您的余额为 :%.2f",n,deposit);4.实验运行结果及分析5. 实验总结:注意格式控制符的匹配,定义的是 float 型,scanf 中一定要是 %f,我就因为这个错误,错了好几次;还有, scanf 是取地址, &这个符号一定要注意加上,不然也会出错,我也好几次忘记这个 &符号,找错找了好久。实验二 -1 :身高预测1. 实验题目及要求编程从键盘

4、输入你的性别(用字符型变量 sex 存储,输入字符 F 表示女性,输入字符 M 表示男性)、父母身高(用实型变量存储, faHeight 为其父身高, moHeight 为其母身高)、是否喜爱体育锻炼(用字符型变量 sports 存储,输入字符 Y表示喜爱,输入字符 N 表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量 diet 存储,输入字符 Y 表示喜爱,输入字符 N 表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。2.实验内容1) 流程图1. 首先根据提示,要求输入父母的身高。2. 选择性别:根据读入的是 M还是 F 进行选择。2.1如果是 M,则身高 Height=

5、(faHeight+moHeight ) *0.542.2如果是 F,则身高 Height= (faHeight*0.923+moHeight) /23. 提示是否喜欢体育锻炼3.1如果喜爱体育锻炼,则身高Height 增加 2%;4. 提示是否有良好的卫生习惯4.1如果有,则身高 Height 增加 1.5%;5. 输出预测身高2) 源程序#include <stdio.h>#include <stdlib.h>void main ()char sex,sports,diet;float faHeight,moHeight,Hight;printf("请输入

6、你的性别M or F :(M/ 男 F/ 女 )n");scanf("%c",&sex);fflush(stdin);printf(" 请输入你父亲的身高( cm):n"); scanf("%f",&faHeight);fflush(stdin);printf(" 请输入你母亲的身高( cm):n"); scanf("%f",&moHeight); fflush(stdin);switch(sex)case 'M':Hight=(faHeight

7、+moHeight)*0.54;break;case 'F':Hight=(faHeight*0.923+moHeight)/2;break;printf(" 你喜欢体育锻炼吗?( Y/N):n"); scanf("%c",&sports);if(sports='Y')Hight*=(1+0.02);fflush(stdin);printf(" 你有良好的卫生饮食习惯吗?( Y/N):n"); scanf("%c",&diet);if(diet='Y'

8、)Hight*=(1+0.015);printf("你的身高预测为: %.0fcm",Hight);4.实验运行结果及分析 :5. 实验总结本实验主要根据用户的输入进行判断,利用 switch 或者 if 语句进行相应的选择。需要注意的是,身高定义为 float 型,因为要进行浮点运算。但最后结果不输出小数。同时,每次输入数据之前,记得请输缓冲区,避免出现错误;实验二 -2 :简单计算器1. 实验题目及要求编程设计一个简单的计算器程序, 要求根据用户从键盘输入如下形式的表达式:操作数 1运算符 op操作数 2然后,计算并输出表达式的值指定的运算符为加( +)减(-)乘(*

9、)除(/ )2.实验内容1) 流程图1. 提示输入;2. 根据输入的运算符,利用 switch 语句对输入的运算符进行判断,然后进行相应的计算。2.1 进行除法时,除数不能为 0;当输入的除数为 0 时,提示除数不能为 0;3. 输出打印结果,4. 利用 do-while 循环,多次计算。直到用户输入 N时结束。2) 源程序#include <stdio.h>#include <stdlib.h>void main()int data,data1,data2,length;char op,reply;doprintf(" 请输入需要计算的式子(如: 1+2):

10、n"); scanf("%d%c%d",&data1,&op,&data2);switch(op)case '+':data=data1+data2;break;case '-':data=data1-data2;break;case '*':data=data1*data2;break;case '/':if(0=data2)printf("除数不能为 0.");elsedata=data1/data2;break;if(data2=0);elseprin

11、tf("%d%c%d=%dn",data1,op,data2,data);printf("需要继续计算吗?( Y or N )n");fflush(stdin);scanf("%c",&reply);while(reply='Y');printf("计算结束! ");4.实验运行结果及分析 :5. 实验总结本实验综合应用 lswitch 语句和 do-while 循环语句进行多次计算操作;需要注意设置 do-while 循环结束的标志, 否则会进入死循环。实验三:猜数游戏1. 实验题目及要求

12、编程先由计算机 “想”一个 1 到 100 之间的数请人猜, 如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,且结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜 10 次,如果猜了 10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。2.实验内容1) 流程图1. 首先利用随机函数产生一个 1-100 之间的随机数,初始化计数器。2. 提示用户输入一个数。3. 把用户输入的数与产生的随机数进行比较,并提示用户是大了还是小了;4. 用户根据提示,再猜一个数。5. 反复执行 3 和

13、4,直到用户猜对或者超过十次,结束当前循环;6. 提示用户是否需要再来一次;2) 源程序#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>void main ()int magic,guess,counter;char reply;/ 产生随机数种子srand (unsigned)time(NULL);/ 首先由系统产生一个 1100 之间的数字,并初始化计数器domagic = rand () % 100 + 1; counter = 0;doprin

14、tf("please guess a magic number :n"); scanf("%d",&guess);counter+;if (guess>magic) printf("Wrong! Too hight !n");else if (guess<magic)printf("Wrong ! Too low !n");elseprintf ("Rihgt!You are so clever !n");while (guess !=magic && cou

15、nter < 10);printf("counter = %dn",counter);fflush(stdin);/清除缓冲区printf("Do You Want To Continue ?(Y/N or y/n )n"); reply=getchar ();printf("n"); while(reply = 'Y'| reply = 'y'); printf("The Game Is Over !");4.实验运行结果及分析 :5. 实验总结需要设置双重循环, 内层循环用

16、于统计猜的次数及是否猜对, 外层循环用于是否需要再来一次;需要注意刘勇 fflush (stdin )清除缓冲区,否则可能会因读入空格而结束程序;实验四:小学生加法考试题1. 实验题目及要求连续做 10 道题,通过计算机随机产生两个 110 之间的加数给学生出一道加法运算题,如果输入答案正确, 则显示“Right!”,否则显示“Not correct! ”,不给机会重做, 10 道题做完后,按每题 10 分统计总得分,然后打印出总分和做错的题目数量。2.实验内容1) 流程图1. 首先通过随机函数产生两个 1-10 之间的整数。2. 循环调用函数, 提示输出产生的两个相加, 并要求输入两个数相加

17、的结果。3. 对输入的结果进行判断。3.1如果输入的答案正确,提示答对了,同时,score 加 10;3.2如果输入的答案错误, 提示答错了,并显示正确答案, 错误计数器加 1,score不累加。4. 直到调用函数 10 次,退出循环,并输出分数及错误计数器的值。5. 提示用户是否需要再来一次。5.1如果输入 Y,则再次进入循环,执行上面2-4 步骤。5.2如果输入 N,则结束所有循环。2) 源程序#include <stdio.h>static int score=0;static int count=0;void main ()int i=1;char reply;doint

18、score=0;int count=0;doint a,b;srand(time(NULL);a=rand()%10+1;b=rand()%10+1;AddTest(a,b);i+;while(i<=10);printf("n");printf("你的得分为: %d分! ",score);printf(" 你错了 %d道题目! n",count); printf("Do you want to try again ! (Y or N):n"); fflush(stdin);scanf("%c&quo

19、t;,&reply);while(reply='Y');printf("n");printf("已经退出! ");void AddTest(int a,int b)int answer;printf("计算: %d+%d=n",a,b);scanf("%d",&answer);if (answer=a+b)printf("恭喜你,答对了! n");score+=10;printf("n");elseprintf("很遗憾,答错了! n

20、");printf("正确答案是: %dn",a+b);printf("n");count+;4.实验运行结果及分析5. 实验总结通过这个例子,对循环以及选择结构有了更好地认识。这次实验需要注意, 怎么对每次的分数以及错误次数累加。 我采用的是静态全局变量,并且,当用户需要再来一次是,把count再次置 0;和 score实验五 -1 :检验并打印魔方矩阵1. 实验题目及要求在下面的 5×5 魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的, 试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩

21、阵,并将其按如下格式显示到屏幕上。2.实验内容1) 流程图1. 定义二维数组,存储输入的数据。2. 累加二维数组的每行每列以及对角线上的元素的和。3. 判断每行每列以及对角线上的元素和是否相等。4. 输出数组以及判断结果。2) 源程序#include <stdio.h>#define N 6void main ()int aNN;int i,j,sum1=0,sum2=0,flag;/ 读入矩阵。for(i=1;i<N;i+)ai0=0;/ 数组第一行元素初始化为 0,用来累加每一列的和; for(j=1;j<N;j+)a0j=0;/数组第一列初始化为0,用来累加每一行

22、的和;scanf("%d",&aij);/ 用多出来的一行和一列来累加每行和每列之和;/sum1 和 sum2累加两条对角线之和 ;for(i=1;i<N;i+)sum1+=aii;/不要放进里面去了。因为放在里面,调试好久。sum2+=ai6-i;for(j=1;j<N;j+)ai0+=aij;a0j+=aij;/ 输出矩阵 for(i=1;i<N;i+) for(j=1;j<N;j+)printf("%-4d",aij); if(j=5) printf("n");/ 判断矩阵是否为魔方矩阵,并设置标

23、志。 for(i=1;i<6;i+)if(a0i!=ai0)|(a0i!=sum1)|(ai0!=sum2)flag=0;elseflag=1;/ 根据标志来判断是否为魔方矩阵。 if(flag=1)printf(" 该矩阵是魔方矩阵 n"); elseprintf("该矩阵不是魔方矩阵 n");printf("每行和每列以及两条对角线的之和都为: %d",sum1);4.实验运行结果及分析5. 实验总结本次实验主要对二维数组进行操作。 要思考怎么读入二维数组, 怎么检验每一行每一列以及对角线上的元素相加是否相等。刚开始,我对这

24、样的题感到手足无措, 可是后来耐着性子, 慢慢琢磨,发现其实也并不是难,只要掌握规律,弄清楚思路,一步一步来,经过不断的调试和改进,我终于做出来。好吧,让我们来理一下思路。题目要求得的是,对输入的 5*5 的矩阵进行判断,我们可以定义一个 6*6 的矩阵,矩阵的第一行以及第一列都初始化为 0(不初始化,我这里老是出现乱码,应该来说,定义好数组,不进行赋值时,会自动初始化为 0,可能是我机器的问题,反正初始化为 0,以保万全吧),多出来的一行和一列用来累加没一行和每一列的和,当然,同时,我也定义了两个整形变量来记住两条对角线上和。最后,对每行每列的和以及对角线的和进行判断,这里,我们设置了一个标

25、志,最后的输出是对标志进行判断是否是魔方矩阵。实验五 -2 :餐饮服务质量调查打分1. 实验题目及要求有 40 个学生被邀请给自助餐厅的食品和服务质量打分( 110 等级),统计调查结果,并用 * 打印如下形式的统计结果直方图Grade Count Histogram15*210*37*2.实验内容1) 流程图1. 定义两个数组,一个数组 a 用来存储学生所打的分数。 另一个数组 count用来累加每个等级的个数。2.利用循环,对数组中的每个元素判断,是几就在countai中累加 1.3. 再次利用循环,打印 count1-count10 的值,并根据期的值打印相应个数的*号。2) 源程序#i

26、nclude <stdio.h>#define N 40void main()int i,j,k,count11;int aN=1,1,1,1,1,2,7,2,5,5,5,4,4,8,8,8,9,2, 9,10,5,7,4,3,7,8,9,10,10,9,7,8,9,5,6,7,9,3,10,8;for(k=1;k<11;k+)countk=0;for(i=0;i<N;i+)countai+;printf("统计结果如下: n");printf("Grade Count Histogramn");for(i=0;i<10;i

27、+)printf("%-8d%d",i+1,counti+1);for(j=0;j<counti+1;j+)printf("*");printf("n");4.实验运行结果及分析5. 实验总结本实验对数组进行了综合的应用, 而且还要带点技巧, 不然会很麻烦呢。除了数组,对前面的循环结构也进行了复习。通过本次实验,对数组有了更深的理解, 除了前面那种需要找规律的, 这种需要技巧性的数组也很好玩。需要好好掌握。实验六:学生成绩统计1. 实验题目及要求从键盘输入一个班(全班最多不超过 30 人)学生某门课的成绩,当输入成绩为负值时,输

28、入结束,分别统计下列内容:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单;(3)统计各分数段的学生人数及所占的百分比;2.实验内容1) 流程图1. 用 numi 存放第 i+1 个学生的学号,用 scorei 存放第 i+1 个学生的成绩。设置计数器count ,当 scorei<60分时,计数器 count 计数一次,并打印numi 和 scorei。2.先计算全班平均分aver ,当第 i 个学生的成绩 scorei>=aver时,打印numi 和 scorei。3. 将成绩分为六个分数段, 60 分以下为第 0 段,

29、 6069 为第 1 段, 7079 为第 2 段, 8089 为第 3 段, 9099 为第 4 段, 100 分为第 5 段,因此,成绩与分数段的对应关系为:4. 各分数段的学生人数保存在变量 count1-count5 中,对于每个学生的成绩,先计算出该成绩所对应的分数段, 然后将相应的变量的人数加 1,即 count+ 。2) 源程序#include <stdio.h>#define N 10void main()int numN=2014001,2014002,2014003,2014004, 2014005,2014006,2014007,2014008,2014009

30、,2014010; int scoreN,i=0;float sum=0,aver,count=0,count1=0,count2=0, count3=0,count4=0,count5=0,count6=0; for(i=0;i<N;i+)printf(" 请输入学号为: %d的成绩: n",numi); scanf("%d",&scorei);sum+=scorei;if(scorei<60) count+;else if(scorei<70) count1+;else if(scorei<80) count2+;el

31、se if(scorei<90) count3+;else if (scorei<100) count4+;else count5+;printf("n");printf("不及格人数名单如下:n");for(i=0;i<N;i+)if(scorei<60)printf("学号:%d成绩:%dn",numi,scorei);printf("总计 %.0f 人n",count);aver=sum/N;printf("n平均分为: %.2fn",aver);printf(&q

32、uot;n 成绩在平均分以上的学生有: n"); for(i=0;i<N;i+)if(scorei>aver)printf(" 学号: %d 成绩: %dn",numi,scorei); count6+;printf("总计 %.0f 人n",count6);printf("n");printf("不及格人数为: %.0f所占百分比为:%.0f%n",count,count/N*100);printf("69-69分人数为: %.0f所占百分比为:%.0f%n",count

33、1,count1/N*100);printf("70-79分人数为: %.0f所占百分比为:%.0f%n",count2,count2/N*100);printf("80-89分人数为: %.0f所占百分比为:%.0f%n",count3,count3/N*100);printf("90-99分人数为: %.0f所占百分比为:%.0f%n",count4,count4/N*100);printf("100人数为:%.0f所占百分比为:%.0f%n",count5,count5/N*100);4.实验运行结果及分析5

34、. 实验总结通过这次实验, 加深了我对面向过程程序设计的思想的理解, 面向过程的基本思想是:自顶向下,逐步求精,分而治之。具体来说,就是要明白,第一步要干什么,第二步要干什么。然后把每一步用慢慢用程序来实现。实验七:成绩排名次1. 实验题目及要求某班期末考试科目为数学 (MT)、英语 (EN) 和物理 (PH),有最多不超过 30 人参加考试。考试后要求:( 1)计算每个学生的总分和平均分;( 2)按总分成绩由高到低排出成绩的名次;( 3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;( 4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。2.实验内容1) 流程图1.

35、 定义二维数组 score (多定义两列和一行)存放每个学生各门课程的成绩,用一维数组 num存放每个学生的学号,用多定义的第一列存放每个学生的总分,多定义的第二列存放每个学生的平均分。多定义的一行用来充当交换的中间变量。2. 实现计算每个学生的总分;3. 实现按总分由高到低对学生成绩排序,排序时,注意二维数组 score 和一维数组 num一起变化;4. 编程实现查找学号为 k 的学生在班级中的排名名次及相关成绩等信息。2) 源程序#include <stdio.h>#define N 5void main ()float scoreN+1N=140,120,97,120,145

36、,96,128,136,91,135,122,93,134,140,86;int numN+1=2014001,2014002,2014003,2014004,2014005; int i,j,k,m,n;for(i=0;i<N;i+)scorei3=0;scorei4=0;for(j=0;j<3;j+)scorei3+=scoreij;scorei4=scorei3/3;for(k=0;k<N-1;k+)for(i=0;i<N-1;i+)for(j=i;j<N;j+)if(scorei+13>scorei3)for(m=0;m<N;m+)scoreN

37、m=scoreim;scoreim=scorei+1m;scorei+1m=scoreNm;numN=numi;numi=numi+1;numi+1=numN;printf("学号:数学英语物理总分平均分 n");printf("-n");for(i=0;i<N;i+)printf("%d",numi);for (j=0;j<N;j+)printf("%-3.1f",scoreij);printf("n");printf("请输入学号查询成绩:n");scanf(

38、"%d",&n);for(i=0;i<N;i+)if(numi=n)break;printf("学号:%d 数学 :%.1f英语 :%.1f物理 :%.1f总分 :%.1f平均分 :%.1f排名: %d",numi,scorei0,scorei1,scorei2,scorei3,scorei4,i+1);4.实验运行结果及分析5. 实验总结这个实验,我仍旧采用面向过程的实际思想,先利用循环,统计每个学生的总分和平均分。 然后排序,排序需要注意每一行元素一起移动,我是采用多定义一行来充当这个中间容器的作用。 在利用循环, 总分从高到低输出每个学生的学号以及每个学号对应的各科分数,总分,平均分。最后,通过对输入的学号进行匹配,输出该学号对应的分数以及排名。实验八:打印最高分和学号1. 实验题目及要求编写一个能计

温馨提示

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

评论

0/150

提交评论