南华大学C语言实验报告.docx

上传人:b****8 文档编号:29667617 上传时间:2023-07-26 格式:DOCX 页数:29 大小:103.24KB
下载 相关 举报
南华大学C语言实验报告.docx_第1页
第1页 / 共29页
南华大学C语言实验报告.docx_第2页
第2页 / 共29页
南华大学C语言实验报告.docx_第3页
第3页 / 共29页
南华大学C语言实验报告.docx_第4页
第4页 / 共29页
南华大学C语言实验报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

南华大学C语言实验报告.docx

《南华大学C语言实验报告.docx》由会员分享,可在线阅读,更多相关《南华大学C语言实验报告.docx(29页珍藏版)》请在冰豆网上搜索。

南华大学C语言实验报告.docx

南华大学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所占百分比为:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1