C语言实验报告16.docx
《C语言实验报告16.docx》由会员分享,可在线阅读,更多相关《C语言实验报告16.docx(47页珍藏版)》请在冰豆网上搜索。
![C语言实验报告16.docx](https://file1.bdocx.com/fileroot1/2023-2/6/65ecc7ac-435a-413e-a1ea-18848f7be0bf/65ecc7ac-435a-413e-a1ea-18848f7be0bf1.gif)
C语言实验报告16
《C语言》实验报告
专业_____________
年级_____________
学号_____________
学生姓名_____________
指导老师_____________
华中师范大学信息管理系编
实习目的和意义
C语言程序设计实验的目的是培养学生具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。
通过实验使学生进一步熟悉并掌握C语言程序的调试运行环境、程序设计过程、程序的基本结构以及程序设计的基本方法。
通过实验,使学生将程序设计的理论知识与实践相结合,为学生学习其他计算机编程语言打下基础。
在每一次的实验过程中,学生要认真复习基本概念,独立编写程序,并上机调试运行,培养自己发现程序中的错误、改正错误以使程序能正确运行的能力。
经验丰富的人,当编译时出现“出错信息”时,能很快地判断出错误所在,并改正之。
而缺乏经验的人即使在系统给出明确出错提示信息下也往往找不出错误而求救于别人。
对于学生来说,不仅要了解和熟悉有关理论和方法,还要求自己动手实现,要求会编写程序并上机调试通过。
因此调试程序本身是程序设计课程的一个重要内容和基本要求,应给予充分的重视。
调试程序的经验固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来积累,而且有些经验是只能“意会”难以“言传”。
调试程序的能力,是学完《C语言程序设计》之后,每个学生应当掌握的一项基本功。
因此,在实习时千万不要在程序通过后就认为完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变输入数据的方法等,甚至于“自设障碍”,即把正确的程序改为有错的,如用scanf函数输入变量时,漏写“&”符号,使数组下标越界,使整数溢出等),观察和分析所出现的情况,并认真、及时总结。
这样的学习是灵活主动的学习而不是呆板被动的学习,才会有真正的收获。
实验要求
1.每次实验中有若干习题,每个学生至少应该完成其中的三道习题。
2.上机之前应作好充分的准备工作,预先编好程序,经过人工检查无误后,才能上机,以提高上机效率,严禁一边上机一边编写。
3.独立上机输入和调试自己所编的程序,切忌抄袭、拷贝他人程序。
4.上机结束后,应整理出实验报告。
书写实验报告时,重点放在调试过程和小结部分,总结出本次实验中的得与失,以达到巩固课堂学习、提高动手能力之目的。
实验内容
实验一VC++6.0开发平台环境及应用
【实验目的】
1.熟悉VC++6.0的运行环境。
2.了解在VC++6.0上如何编辑、编译、连接和运行一个C程序。
3.通过运行简单的C程序,初步了解C源程序的特点,初步掌握查错和排错的技能.
【上机实习指导】
1.通过阅读上机操作指南,在VC中练习输入、编译、运行一个C语言程序的全过程。
以下程序是计算函数y=3x2+2x-4(假设x=2)。
#include“stdio.h”
voidmain()
{
intx=2,y;
y=3*x*x+2*x-4;
printf(“\ny=%d”,y);
}
程序运行正确后,可以尝试改变x的值和输出格式“%d”、“%u”、”%o”、”%x”等,观察运行结果的变化。
2.分析下面的程序输出的结果。
#include
intmain()
{
charc='1';
inti=-1;
longn=2147483647;
floatf=-0.12345;
putchar(c);putchar(';');printf("%3c;%d\n",c,c);
printf("%d%d;%3d%3d;%u\n",i,i,i,i,i);
printf("%-11ld;%9d\n",n,n);
printf("%lx;%012o\n",n,n);
printf("%.2f;%10.4f\n",f,f);
printf("%e;%11.2e\n",f,f);
printf("%s;%.3s\n","student","student");
return0;
}
【自编程序上机】
1.编程实现在屏幕输出下面图形
*
***
*****
***
*
2.编程实现:
从键盘上输入半径,输出园的周长及面积。
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容
程
序
调
试
过
程
实
习
小
结
实验二简单程序设计
【实验目的】
1.进一步熟悉VC++6.0的运行环境。
2.掌握三种标准类型和部分运算符的使用。
3.熟练掌握格式输入与格式输出函数的使用。
【上机实习指导】
1.基本数据类型表示范围练习
假设有如下程序:
#include
voidmain()
{
charch1,ch2,ch;
unsignedcharc;
inta;
ch1=80;
ch2=60;
ch=ch1+ch2;
c=ch1+ch2;
a=ch1+ch2;
printf(“ch1+ch2=%d\n”,ch1+ch2);
printf(“ch=%d\n”,ch);
printf(“c=%d\n”,c);
printf(“a=%d\n”,a);
}
问题1:
运行该程序,写出输出结果。
并说明为什么存在输出结果的差异?
问题2:
如果要求四行输出的结果均为140,在不改变变量的数据类型的基础上,则应修改程序中的哪条语句?
怎样修改?
问题3:
编一程序,要求两个负整数相加,输出的结果为一正整数。
【自编程序上机】
1.键盘输入与屏幕输出练习
用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‘A’,c2=‘a’,问在键盘上如何输入?
要求把下列程序补充完整。
#include
voidmain()
{
inta,b;
floatx,y;
charc1,c2;
scanf(“a=%db=%d”,&a,&b);
scanf(“x=%fy=%e”,&x,&y);
scanf(“c1=%cc2=%c”,&c1,&c2);
}
提示:
在“格式控制”字符串中除了格式说明以外还有其它字符,在输入数据时应输入与这些字符相同的字符。
为了验证输入格式的正确与否,应在程序中补充调用标准的输出函数printf。
2.按输出结果要求编写程序
若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765.c1=‘a’,c2=‘b’,想得到以下输出格式和结果,请写出完整的程序。
要求输出结果如下:
(*表示空格)
a=3***b=4***c=5
x=1.20000,y=2.400000,z=-3.600000
x+y=*3.60**y+z=-1.20**z+x=-2.40
u=51274***n=***128765
c1=‘a’*or*97(ASCII)
c2=‘b’*or*98(ASCII)
提示:
根据题目中变量的值定义合适的变量类型。
正确定义和使用printf函数中的格式控制字符串。
3.计算定期存款本利之和
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,
试编程计算n年后本利之和deposit。
要求定期存款的年利率rate、存款期间n和存款本金capital均由键盘输入。
4.求一个四整数的各位数字之和,并在屏幕上输出结果。
5.编程实现:
用1分、5分、10分、25分的硬币凑成任何给定的钱数x,要求硬币的数目最少。
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容
程
序
调
试
过
程
实
习
小
结
实验三选择结构程序设计
【实验目的】
1.熟练掌握上机运行一个C程序的操作过程。
2.学会正确使用逻辑运算符和逻辑表达式,进一步掌握各种表达式的使用。
3.利用if语句实现选择结构程序设计。
4.利用switch语句实现多分支选择结构程序设计。
5.进一步练习调试与修改程序。
【上机实习指导】
1.输入并运行习题3.10。
即:
#include“stdio.h”
voidmain()
{inti,j,n,m;
i=8;j=10;
m=++i;n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
分别作以下改变并运行:
将程序第四行改为:
m=i++;n=++j;
程序改为:
#include“stdio.h”
voidmain()
{inti,j;
i=8;j=10;
printf(“%d,%d”,i++,j++);
}
在
的基础上,将语句改为:
printf(“%d,%d”,i++,j++);
再将语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
程序改为:
#include“stdio.h”
voidmain()
{inti,j,n=0,m=0;
i=8;j=10;
m+=i++;n-=--j;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
2.计算下列分段函数值:
具体要求如下:
用if语句实现分支。
自变量x与函数值均用单精度类型。
自变量x用scanf函数输入,且输入前要有提示。
结果的输出采用以下形式:
x=具体值,f(x)=具体值
分别输入x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0,运行该程序。
3.先静态分析以下程序的运行结果,然后上机验证。
#include“stdio.h”
voidmain()
{inta=3,b=4,c=5,x,y,z;
x=c>b>a;
y=!
a+b=c);
z=c/b+((float)a/b&&(float)(a/c));
printf(“\nx=%d,y=%d,z=%d”,x,y,z);
x=a||b--;
y=a---3&&b;
printf(“\n%d,%d,%d,%d,%d,%d”,a,b,c,x,y,z);
}
上机运行的结果与你分析的结果是否一致?
不一致的原因何在?
请在程序的最后一个花括号前加上语句:
getchar();后重新运行程序,注意事项加上这一语句后,程序的运行进程有何不同?
getchar()是一个函数调用,其作用是等待接收你从键盘输入的一个字符,在你未按键之前一直处于等待状态。
在这里可以起到暂停的作用。
当你看清结果并按任意键后,立即退出程序并切换回TC主屏幕。
用这一方法可以减少屏幕切换操作。
4.下列C程序的功能是:
计算并输出分段函数值。
其中x由键盘输入。
请通过调试修改程序中的错误(包括语法错误和逻辑错误)。
#include“stdio.h”
main()
{floatx,y;
printf(“inputx=”);
scanf("%f",&x);
if((-5.0<=x<0.0)&&(x!
=-2.0))y=1.0/(x+2.0);
elseif(x<5.O)y=l.0/(x+5.0);
elseif(xelsey=0.0;
printf("x=%e\ny=%e\n",x,y);
}
具体要求如下:
不允许改变计算的精度。
不允许改变原来程序的结构,只能在语句或表达式内部进行修改。
调试正确后,用x=-7.0,-2.0,-1.0,0.0,2.0,5.0,8.0,10.0,11.0运行这个程序。
画出与调试正确后的程序对应的流程图。
【自编程序上机】
1.数据整除判断
编程实现:
输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:
①能
同时被3,5,7整除;②能被其中两数(要指出哪两个)整除;③能被其中一个数(要指出哪一个)整除;④不能被3,5,7任一个整除。
提示:
判断能否被某一个数整除应采用求余运算。
在一个程序中利用选择结构把四种可能的信息全部表示出来。
2.用scanf函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。
其中90-100分为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。
具体要求如下:
用if语句实现分支。
在输入百分制成绩前要有提示。
在输入百分制成绩后,要判断该成绩的合理性,对于不合理的成绩(即大于100分或小于0分)应输出出错信息。
在输出结果中应包括百分制成绩与成绩等级,并要有文字说明。
分别输入百分制成绩:
-90,100,90,85,70,60,45,101,运行该程序。
3.将第2题中的
(1)改为“用switch语句实现”,其余不变,重复实现第2题中的各功能。
4.编程找出5个整数中的最大数和最小数,并输出找到的最大数和最小数。
5.假设一种自动售货机可以为顾客提供3种价格档次的不同饮料。
投入2元钱,可选择康师傅矿泉水、怡宝矿泉水和农夫山泉之一;投入3元钱,可选择可乐、雪碧和果汁之一;投入5元钱,可选择奶茶、咖啡和酸奶之一。
编写程序,模拟用户向自动售货机投入钱币选择一种饮料的过程。
提示:
使用scanf()函数模拟投入钱币,使用getchar()函数模拟选择饮料(输入A、B、C代表选择的饮料)。
。
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容
程
序
调
试
过
程
实
习
小
结
实验四循环结构程序设计
【实验目的】
1.进一步练习选择结构的程序设计。
2.练习并掌握实现循环结构的三种方法。
3.练习并掌握选择结构与循环结构的嵌套。
4.掌握多重循环的应用。
5.学会单步跟踪的操作方法。
【上机实习指导】
1.根据字母判断是星期几
平时我们看到M时就想到星期一,看到W时就想到星期三,请用C语言程序编写当输入星期几的第一个字母就判断出是星期几,如果第一个字母一样,则用第二个字母来判断。
要求输入为字母‘Y’时,结束判断。
提示:
可利用C语言的switch语句实现多路分支:
根据输入的的第一个字母、第二个字母,判断是星期几,如果第一个字母一样,如星期二和星期四(Tuesday和Thursday),则用if语句判断第二个字母,这样就可以解决问题了。
另外为了实现可以多次进行判断,此题还需用循环进行控制。
要求:
当输入字母“Y”时,则结束程序。
当输入的不是星期几的第一个字母时,则可给出出错信息:
printf(“DATAERROR!
”);当输入两个星期几相同的字母时,则可给出提示信息:
printf(“PLEASEINPUTSECONDLETTER\n”)。
【自编程序上机】
1.如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,
例如:
6的因子为1,2,3,且1+2+3=6,因此6是一个“完数”。
计算并输出1000以内的所有“完数”之和。
具体要求如下:
所有循环均用for循环。
输出要有文字说明,并同时输出各“完数”。
输出形式为:
完数1+完数2+…=和值
2.打印如下图所示的数字金字塔(注意观察数字分布的规律)。
3.百钱买百鸡问题。
已知公鸡每只5元,母鸡每只3元,小鸡1元3只,要求100元钱正好买100只鸡,则应买公鸡、母鸡的小鸡各多少只?
4.某班有学生n人,从终端读入n及n个人学生的成绩,试编程实现以下功能:
打印出前3个最好成绩及取得每个最好成绩的人数;
若90分以上计为优,75-89分计为“良”,60-74分计为“中”,60分以下计为“不及格”,试统计各档成绩所占百分率。
5.逆序输出整数的每一位数。
输入每一个正整数x,例如13579,要求输出97531,每一位后有空格。
如输入:
13579,输出:
97531
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容
程
序
调
试
过
程
实
习
小
结
实验五数组程序设计
(1)
【实验目的】
1.掌握一维数组与二维数组的定义及其元素的引用方法。
2.深刻体会数组与循环的关系。
3.掌握利用一维数组和二维数组实现一些常用算法的编程技巧。
4.进一步掌握动态调试的基本技能。
【上机实习指导】
1.用移位法将数组a中的最后一个数移到最前面,其余数依次往后移动一个位置。
#include“stdio.h”
voidmain()
{inti,t,a[10]={0,1,2,3,4,5,6,7,8,9};
t=a[9];
for(i=1;i<10;i++)
a[i]=a[i-1];
a[0]=t;
printf(“\n”);
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
请按以下步骤实习和思考:
分析程序及其特性。
上机运行程序,查看运行结果是否正确?
用动态跟踪查找错误原因,即按如下操作:
首先将光标移至t=a[9]的语句行上,按F4,再用Ctrl-F7操作将a数组的内容显示出来,然后将光标移至a[i]=a[i-1]的语句行上,不断按F4,观察a数组值的变化情况,以此分析并找出错误原因。
改正错误后重新运行程序,直到结果正确为此。
如果要用三次循环移位来实现将最后三个数移到前面,其余数依次往后移三个位置,则程序应该如何修改?
2.输入n个学生的单科成绩,然后从高到低的顺序排序后输出。
以下是用选择法实现的排序。
#include“stdio.h”
voidmain()
{
inti,j,t,n,a[n];
printf(“\nn=?
);
scanf(“%d”,&n);
printf("inputnnumbers:
\n");
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=i+1;jif(a[i]{t=a[i];a[i]=a[j];a[j]=t;}
printf("thesortednumbers:
\n");
for(i=0;iprintf("%4d",a[i]);
}
分析程序及其特性。
上机编译程序,程序是否有语法错误?
应如何修改?
(数组a的长度可比n大些),改正错误后重新编译和运行程序,直到结果正确为此。
你对选择排序算法的实现过程是否清楚了?
若不清楚,请用动态跟踪的方法观察其实现过程,操作如下:
首先将光标移至if语句行上,按F4,接着输入数据,当绿条第停留在if语句行时,用Ctrl-F7操作将a数组的内容显示出来,不断按F4,观察a数组值的变化情况,以此分析和领会算法的实现过程。
输入冒泡排序程序,用动态跟踪观察其实现过程。
如果要用三次循环移位来实现将最后三个数移到前面,其余数依次往后移三个位置,则程序应该如何修改?
【自编程序上机】
1.将矩阵A[4][5]中值(行中所有数的和)为最大的那一行元素与首行元素对换。
具体要求如下:
矩阵A的数值从键盘输入。
以矩阵的形式输出对换后的矩阵。
2.数字检查
通过键盘输入n(n<50)个4位数(输入-1时结束),统计这n个4位数中各位上的数
字均是偶数的数的个数,并把这些4位数按从大到小的顺序进行输出。
提示:
定义两个一维数组a和b,数组a用于存放输入4位数,数组b用于存放满足条件的4位数;判断4位数的各个数是否为偶数的方法可将该数的每一位数拆分出来,然后进行判断即可。
3.输入10个整数,将这10个整数按升序排列输出,并且奇数在前,偶数在后。
比如,如果输入的10个数是12345678910,则输出13579246810。
提示:
将输入的10个整数,按其就行分别放在数组a的左部和右部。
其具体方法就是设置两个整型变量odd和even,分别表示奇数和偶数存放在数组a中元素的下标,odd初始值为0,每存放一个奇数odd就加1,even初始值为9,每存放一个偶数even就减1,然后通过选择排序的方法分别对数组a左部的奇数和右部的偶数进行排序,最后依次进行排序结果的输出。
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容
程
序
调
试
过
程
实
习
小
结
实验六数组程序设计
(2)
【实验目的】
1.进一步掌握一维数组与二维数组的定义及其元素的引用方法。
2.掌握利用一维数组和二维数组实现一些常用算法的编程技巧。
【自编程序上机】
1.成绩排名
假设有五位同学四门功课的成绩如下,现要求得每位同学的总分,并按照总分从高到低的顺序进行排序,输出其名次,如果总分相同,则按语文和数学分数之和高者排前,低者排后,但名次一样。
姓名
语文
数学
英语
综合
张大明
120
130
110
280
李小红
110
120
105
290
王志强
108
128
126
278
汪晓成
112
135
122
286
李丹
100
120
108
276
提示:
用二维数组score存放每个学生各门课程的成绩,二维数组定义时最后多定义一列,用于存放每个学生的总分;用一个字符串数组name存放学生的姓名。
2.17个人围坐一圈,顺序编号为1,2,3,…,17。
现在从第一个人开始数起,每数到7时,这个人就从圈里出来,再从下一个数重新开始数1,2,…,7,数到第7的这个人也从圈里出来,直到全部17个人从圈里出来为此。
例如,前面站出来的4个人是7,14,4和12。
编程输出从圈里出来的人的顺序。
3.通过键盘输入n(n<50)个三位数(输入-1时结束),统计这n个三位数中各位上的数字均为奇数的数的个数,并把满足条件的三位数按从小到大的顺序进行输出。
提示:
定义两个一维数组a和b,数组a用来存放键盘输入的3位数,数组b用来存放满足条件的3位数;判断3位数中各位上的书是否都为奇数的方法可以先将该数的每一位数拆分出来,然后进行判断即可。
【实验报告】
实习时间:
实习地点:
实习机号:
具
体
实
验
内
容