南华大学C语言实验报告.docx
- 文档编号:17481014
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:29
- 大小:103.24KB
南华大学C语言实验报告.docx
《南华大学C语言实验报告.docx》由会员分享,可在线阅读,更多相关《南华大学C语言实验报告.docx(29页珍藏版)》请在冰点文库上搜索。
南华大学C语言实验报告
南华大学
计算机科学与技术学院
实验报告
(2015~2016学年度第1学期)
课程名称
高级程序设计I
实验名称
C语言实验报告
姓名
刘让洲
学号
20140440734
专业
计算机类
班级
14级计类07班
地点
教师
罗江琴
实验一:
计算定期存款本利之和
1.实验题目及要求
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。
要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。
2.实验内容
1)流程图:
1.正确从键盘读入数据。
2.把读入的数据带入公式计算即可。
2)源程序
#include
#include
#include
voidmain()
{
intn;
floatdeposit,rate,capital;
printf("请输入存款金额capital:
");
scanf("%f",&capital);
fflush(stdin);
printf("请输入存款年限n:
");
scanf("%d",&n);
fflush(stdin);
printf("请输入年存款利率rate:
");
scanf("%f",&rate);
deposit=capital*pow((rate+1),n);
printf("%d年以后您的余额为:
%.2f",n,deposit);
}
4.实验运行结果及分析
5.实验总结:
注意格式控制符的匹配,定义的是float型,scanf中一定要是%f,我就因为这个错误,错了好几次;还有,scanf是取地址,&这个符号一定要注意加上,不然也会出错,我也好几次忘记这个&符号,找错找了好久。
实验二-1:
身高预测
1.实验题目及要求
编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。
2.实验内容
1)流程图
1.首先根据提示,要求输入父母的身高。
2.选择性别:
根据读入的是M还是F进行选择。
2.1如果是M,则身高Height=(faHeight+moHeight)*0.54
2.2如果是F,则身高Height=(faHeight*0.923+moHeight)/2
3.提示是否喜欢体育锻炼
3.1如果喜爱体育锻炼,则身高Height增加2%;
4.提示是否有良好的卫生习惯
4.1如果有,则身高Height增加1.5%;
5.输出预测身高
2)源程序
#include
#include
voidmain()
{
charsex,sports,diet;
floatfaHeight,moHeight,Hight;
printf("请输入你的性别MorF:
(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+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')
Hight*=(1+0.015);
printf("你的身高预测为:
%.0fcm",Hight);
}
4.实验运行结果及分析:
5.实验总结
本实验主要根据用户的输入进行判断,利用switch或者if语句进行相应的选择。
需要注意的是,身高定义为float型,因为要进行浮点运算。
但最后结果不输出小数。
同时,每次输入数据之前,记得请输缓冲区,避免出现错误;
实验二-2:
简单计算器
1.实验题目及要求
编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式:
操作数1运算符op操作数2
然后,计算并输出表达式的值
指定的运算符为
加(+)
减(-)
乘(*)
除(/)
2.实验内容
1)流程图
1.提示输入;
2.根据输入的运算符,利用switch语句对输入的运算符进行判断,然后进行相应的计算。
2.1进行除法时,除数不能为0;当输入的除数为0时,提示除数不能为0;
3.输出打印结果,
4.利用do-while循环,多次计算。
直到用户输入N时结束。
2)源程序
#include
#include
voidmain()
{
intdata,data1,data2,length;
charop,reply;;
do{
printf("请输入需要计算的式子(如:
1+2):
\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.");
else
data=data1/data2;
break;
}
if(data2==0)
;
else
printf("%d%c%d=%d\n",data1,op,data2,data);
printf("需要继续计算吗?
(YorN)\n");
fflush(stdin);
scanf("%c",&reply);
}while(reply=='Y');
printf("计算结束!
");
}
4.实验运行结果及分析:
5.实验总结
本实验综合应用lswitch语句和do-while循环语句进行多次计算操作;需要注意设置do-while循环结束的标志,否则会进入死循环。
实验三:
猜数游戏
1.实验题目及要求
编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,且结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。
每次运行程序可以反复猜多个数,直到操作者想停止时才结束。
2.实验内容
1)流程图
1.首先利用随机函数产生一个1-100之间的随机数,初始化计数器。
2.提示用户输入一个数。
3.把用户输入的数与产生的随机数进行比较,并提示用户是大了还是小了;
4.用户根据提示,再猜一个数。
5.反复执行3和4,直到用户猜对或者超过十次,结束当前循环;
6.提示用户是否需要再来一次;
2)源程序
#include
#include
#include
#include
voidmain()
{
intmagic,guess,counter;
charreply;
//产生随机数种子
srand((unsigned)time(NULL));
//首先由系统产生一个1—100之间的数字,并初始化计数器
do{
magic=rand()%100+1;
counter=0;
do{
printf("pleaseguessamagicnumber:
\n");
scanf("%d",&guess);
counter++;
if(guess>magic)
printf("Wrong!
Toohight!
\n");
elseif(guess printf("Wrong! Toolow! \n"); else printf("Rihgt! Youaresoclever! \n"); }while(guess! =magic&&counter<10); printf("counter=%d\n",counter); fflush(stdin);//清除缓冲区 printf("DoYouWantToContinue? (Y/Nory/n)\n"); reply=getchar(); printf("\n"); }while(reply=='Y'||reply=='y'); printf("TheGameIsOver! "); } 4.实验运行结果及分析: 5.实验总结 需要设置双重循环,内层循环用于统计猜的次数及是否猜对,外层循环用于是否需要再来一次;需要注意刘勇fflush(stdin)清除缓冲区,否则可能会因读入空格而结束程序; 实验四: 小学生加法考试题 1.实验题目及要求 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right! ”,否则显示“Notcorrect! ”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题目数量。 2.实验内容 1)流程图 1.首先通过随机函数产生两个1-10之间的整数。 2.循环调用函数,提示输出产生的两个相加,并要求输入两个数相加的结果。 3.对输入的结果进行判断。 3.1如果输入的答案正确,提示答对了,同时,score加10; 3.2如果输入的答案错误,提示答错了,并显示正确答案,错误计数器加1,score不累加。 4.直到调用函数10次,退出循环,并输出分数及错误计数器的值。 5.提示用户是否需要再来一次。 5.1如果输入Y,则再次进入循环,执行上面2-4步骤。 5.2如果输入N,则结束所有循环。 2)源程序 #include staticintscore=0; staticintcount=0; voidmain() { inti=1; charreply; do{ intscore=0; intcount=0; do{ inta,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("Doyouwanttotryagain! (YorN): \n"); fflush(stdin); scanf("%c",&reply); }while(reply=='Y'); printf("\n"); printf("已经退出! "); } voidAddTest(inta,intb) { intanswer; printf("计算: %d+%d=\n",a,b); scanf("%d",&answer); if(answer==a+b) { printf("恭喜你,答对了! \n"); score+=10; printf("\n"); } else{ printf("很遗憾,答错了! \n"); printf("正确答案是: %d\n",a+b); printf("\n"); count++; } 4.实验运行结果及分析 5.实验总结 通过这个例子,对循环以及选择结构有了更好地认识。 这次实验需要注意,怎么对每次的分数以及错误次数累加。 我采用的是静态全局变量,并且,当用户需要再来一次是,把count和score再次置0; 实验五-1: 检验并打印魔方矩阵 1.实验题目及要求 在下面的5×5魔方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些魔方矩阵中的元素读到一个二维整型数组中,然后,检验其是否为魔方矩阵,并将其按如下格式显示到屏幕上。 2.实验内容 1)流程图 1.定义二维数组,存储输入的数据。 2.累加二维数组的每行每列以及对角线上的元素的和。 3.判断每行每列以及对角线上的元素和是否相等。 4.输出数组以及判断结果。 2)源程序 #include #defineN6 voidmain() { inta[N][N]; inti,j,sum1=0,sum2=0,flag; //读入矩阵。 for(i=1;i a[i][0]=0;//数组第一行元素初始化为0,用来累加每一列的和; for(j=1;j a[0][j]=0;//数组第一列初始化为0,用来累加每一行的和; scanf("%d",&a[i][j]); } } //用多出来的一行和一列来累加每行和每列之和; //sum1和sum2累加两条对角线之和; for(i=1;i sum1+=a[i][i];//不要放进里面去了。 因为放在里面,调试好久。 sum2+=a[i][6-i]; for(j=1;j a[i][0]+=a[i][j]; a[0][j]+=a[i][j]; } } //输出矩阵 for(i=1;i for(j=1;j printf("%-4d",a[i][j]); if(j=5) printf("\n"); } //判断矩阵是否为魔方矩阵,并设置标志。 for(i=1;i<6;i++){ if((a[0][i]! =a[i][0])||(a[0][i]! =sum1)||(a[i][0]! =sum2)) flag=0; else flag=1; } //根据标志来判断是否为魔方矩阵。 if(flag==1) printf("该矩阵是魔方矩阵\n"); else printf("该矩阵不是魔方矩阵\n"); printf("每行和每列以及两条对角线的之和都为: %d",sum1); } 4.实验运行结果及分析 5.实验总结 本次实验主要对二维数组进行操作。 要思考怎么读入二维数组,怎么检验每一行每一列以及对角线上的元素相加是否相等。 刚开始,我对这样的题感到手足无措,可是后来耐着性子,慢慢琢磨,发现其实也并不是难,只要掌握规律,弄清楚思路,一步一步来,经过不断的调试和改进,我终于做出来。 好吧,让我们来理一下思路。 题目要求得的是,对输入的5*5的矩阵进行判断,我们可以定义一个6*6的矩阵,矩阵的第一行以及第一列都初始化为0(不初始化,我这里老是出现乱码,应该来说,定义好数组,不进行赋值时,会自动初始化为0,可能是我机器的问题,反正初始化为0,以保万全吧),多出来的一行和一列用来累加没一行和每一列的和,当然,同时,我也定义了两个整形变量来记住两条对角线上和。 最后,对每行每列的和以及对角线的和进行判断,这里,我们设置了一个标志,最后的输出是对标志进行判断是否是魔方矩阵。 实验五-2: 餐饮服务质量调查打分 1.实验题目及要求 有40个学生被邀请给自助餐厅的食品和服务质量打分(1~10等级),统计调查结果,并用*打印如下形式的统计结果直方图 GradeCountHistogram 15***** 210********** 37******* 2.实验内容 1)流程图 1.定义两个数组,一个数组a[]用来存储学生所打的分数。 另一个数组count[]用来累加每个等级的个数。 2.利用循环,对数组中的每个元素判断,是几就在count[a[i]]中累加1. 3.再次利用循环,打印count[1]-count[10]的值,并根据期的值打印相应个数的*号。 2)源程序 #include #defineN40 voidmain() { inti,j,k,count[11]; inta[N]={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++) count[k]=0; for(i=0;i count[a[i]]++; printf("统计结果如下: \n"); printf("GradeCountHistogram\n"); for(i=0;i<10;i++){ printf("%-8d%d",i+1,count[i+1]); for(j=0;j printf("*"); printf("\n"); } } 4.实验运行结果及分析 5.实验总结 本实验对数组进行了综合的应用,而且还要带点技巧,不然会很麻烦呢。 除了数组,对前面的循环结构也进行了复习。 通过本次实验,对数组有了更深的理解,除了前面那种需要找规律的,这种需要技巧性的数组也很好玩。 需要好好掌握。 实验六: 学生成绩统计 1.实验题目及要求 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单; (3)统计各分数段的学生人数及所占的百分比; 2.实验内容 1)流程图 1.用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。 设置计数器count,当score[i]<60分时,计数器count计数一次,并打印num[i]和score[i]。 2.先计算全班平均分aver,当第i个学生的成绩score[i]>=aver时,打印num[i]和score[i]。 3.将成绩分为六个分数段,60分以下为第0段,60~69为第1段,70~79为第2段,80~89为第3段,90~99为第4段,100分为第5段,因此,成绩与分数段的对应关系为: 4.各分数段的学生人数保存在变量count1-count5中,对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的变量的人数加1,即count++。 2)源程序 #include #defineN10 voidmain() { intnum[N]={2014001,2014002,2014003,2014004, 2014005,2014006,2014007,2014008,2014009,2014010}; intscore[N],i=0; floatsum=0,aver,count=0,count1=0,count2=0, count3=0,count4=0,count5=0,count6=0; for(i=0;i printf("请输入学号为: %d的成绩: \n",num[i]); scanf("%d",&score[i]); sum+=score[i]; if(score[i]<60)count++; elseif(score[i]<70)count1++; elseif(score[i]<80)count2++; elseif(score[i]<90)count3++; elseif(score[i]<100)count4++; elsecount5++; } printf("\n"); printf("不及格人数名单如下: \n"); for(i=0;i if(score[i]<60) { printf("学号: %d成绩: %d\n",num[i],score[i]); } } printf("总计%.0f人\n",count); aver=sum/N; printf("\n平均分为: %.2f\n",aver); printf("\n成绩在平均分以上的学生有: \n"); for(i=0;i if(score[i]>aver) { printf("学号: %d成绩: %d\n",num[i],score[i]); count6++; } } printf("总计%.0f人\n",count6); printf("\n"); printf("不及格人数为: %.0f所占百分比为: %.0f%%\n",count,count/N*100); printf("69-69分人数为: %.0f所占百分比为: %.0f%%\n",count1,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所占百分比为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南华 大学 语言 实验 报告