NYISTC实验指导书.docx
《NYISTC实验指导书.docx》由会员分享,可在线阅读,更多相关《NYISTC实验指导书.docx(21页珍藏版)》请在冰豆网上搜索。
![NYISTC实验指导书.docx](https://file1.bdocx.com/fileroot1/2023-7/20/04b43aae-c322-4e89-a2b9-bd0eabfa4c9e/04b43aae-c322-4e89-a2b9-bd0eabfa4c9e1.gif)
NYISTC实验指导书
南阳理工学院
C上机实验指导书
(2011版)
软件学院·软件工程教研室
2011.10
目录
实验1C程序的运行环境1
实验2:
数据类型、运算符与表达式2
实验3:
顺序程序设计4
实验4选择结构程序设计5
实验5循环结构程序设计
(一)6
实验6循环结构程序设计
(二)7
实验7数组
(一)9
实验8数组
(二)10
实验9函数
(一)11
实验10函数
(二)12
实验11指针
(一)13
实验12指针
(二)14
实验13结构体和共用体
(一)15
实验14结构体和共用体
(二)16
实验15文件操作18
实验16综合实验报告19
实验1C程序的运行环境
一、实验目的
1.熟悉开发环境,掌握程序设计的基本步骤;
2.编制简单C程序并运行,熟悉C的编辑、编译、连接和运行过程
3.熟悉C的基本元素、标识符等,掌握C程序的基本结构
二、实验内容及步骤
1.检查所用的计算机系统是否已安装了C编译系统并确定它所在的子目录。
2.进入所用的C编译集成环境。
3.熟悉集成环境的界面和有关菜单的使用方法。
4.输入并运行一个简单的、正确的程序。
①输入下面的程序
#include
intmain()
{
printf(“Thisisacprogram.\n”);
return0;
}
②仔细观察屏幕上的已输入的程序,检查有无错误,对程序进行编译,连接,运行,查看其结果。
5.输入并编辑一个C程序。
#include
intmain()
{
inta,b,sum;
a=123;b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
retrun0;
}
6.编写程序,实现求整数10、20和35的平均值。
三、实验要求
1.实验中仔细观察、记录、比较实验结果,如果不一致应找出原因。
2.编写的程序必须保存在E:
\用户目录中。
注:
用户目录可以用学号或姓名拼音简写。
实验2:
数据类型、运算符与表达式
一、实验目的
1.掌握C语言算术、赋值、自增、自减运算符及相应表达式
2.掌握不同类型数据之间的赋值规律
3.了解强制数据类型转换以及运算符的优先级、结合性
4.学会根据表达式,编写相应程序,验证表达式结果的方法
二、实验内容及步骤
1.已知:
a=2,b=3,x=3.9,y=2.3,计算算术表达式(float)(a+b)/2+(int)x%(int)y的值。
试编程上机验证。
2.已知:
a=7,x=2.5,y=4.7,计算算术表达式x+a%3*(int)(x+y)%2/4的值。
试编程上机验证。
3.已知:
a=12,n=5,计算下面表达式运算后a的值。
试编程上机验证。
(1)a+=a
(2)a-=2(3)a*=2+3(4)a/=a+a(5)a%=(n%=2)(6)a+=a-=a*=a
4.分析下面程序结果,并上机验证。
main()
{
inti,j,m,n;
i=8;j=10;
m=++i;
n=j++;
printf(“i=%d,j=%d,m=%d,n=%d\n”,i,j,m,n);
}
5.输入如下程序,运行该程序,观察运行结果,熟悉C语言中整型数据和字符数据互用的特点。
main()
{
charc1,c2;
intn1,n2;
c1=97;c2=’A’;
n1=c1+1;
n2=c2+1;
printf(“%c%c%c%c\n”,c1,c2,n1,n2);
printf(“%d%d%d%d\n”,c1,c2,n1,n2);
}
6.将k分别设置为127,-128,128,-129,分析下面程序结果,并上机验证。
main()
{
floata=3.7,b;
inti,j=5;
intk=127;/*用127,-128,128,-129测试*/
unsignedU;
longL;
charC;
i=a;printf(“%d\n”,i);/*浮点赋值给整型*/
b=j;printf(“%f\n”,b);/*整型赋值给浮点*/
U=k;printf(“%d,%u\n”,U,U);/*相同长度类型之间赋值*/
L=k;printf(“%ld\n”,L);/*整型赋值给长整型,短的类型赋值给长的类型*/
C=k;printf(“%d\n”,C);/*整型赋值给字符型,长的类型赋值给短的类型*/
}
你分析的表达式结果:
结果行
k=127
k=128
k=-128
k=-129
1
2
3
4
5
三、实验要求
1.1-3题要求实验前手工计算并编制好上机测试用源程序,以便上机实验。
2.4、5题要求实验前分析程序结果,以便上机时对比结果。
3.实验中仔细观察、记录、比较实验结果,如果不一致应找出原因。
4.编写的程序必须保存在E:
\用户目录中。
注:
用户目录可以用学号或姓名拼音简写。
实验3:
顺序程序设计
一、实验目的
1.掌握C语言中使用最多的一种语句------赋值语句的使用方法
2.掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符
3.进一步掌握编写程序和调试程序的方法
二、实验内容及步骤
1.输入x,y,编写程序求z=x+|y|的值。
(1)程序中用scanf函数输入x和y的值,请分析以下两个语句scanf(“%f%f”,x,y);
scanf(“%f%f”,&x,&y);
哪一个是正确的,分别运行之,分析程序运行结果。
如果scanf函数改为scanf(“%f,%f”,&x,&y);应该怎样输入数据。
2.输入一个双精度数,对小数点后第2位进行四舍五入,即保留一位小数,输出四舍五入的结果。
提示:
注意scanf函数和printf函数具有不同的格式字符;
注意数的真正精度与实际显示宽度是不同的。
分清数的精度与显示宽度。
四舍五入算法:
x=(x+0.05)*10;x=(int)x;x=x/10。
3.交换两数,变量a、b中各存有一个整数,交换两数后输出。
提示:
设a=10,b=20,若要交换两数,则需要借一中间变量,首先将a中的数值存入变量t中进行保存,然后将b中的数值存入a中,再将t中的数值存入b中。
(或用其他的方法)
三、实验要求
1.实验中仔细观察、记录、比较实验结果,如果不一致应找出原因。
2.讨论上机各个环节所出现的错误及解决的办法。
实验4选择结构程序设计
一、实验目的
1.了解C语言表示逻辑量的方法(以0表示“假”,以非0代表“真”)
2.学会正确使用逻辑运算符和逻辑表达式
3.熟悉选择结构程序设计
4.熟练使用if语句进行程序设计
5.使用switch语句实现多分枝选择结构
二、实验内容及步骤
1.用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。
(1)有变量定义为整型。
(2)输入前要加提示语句。
(3)输出结果前要有必要的文字说明。
说明:
(1)闰年的条件是:
year能被4整除但不能被100整除,或者year能被400整除。
(2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。
2.编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。
奖金税率
a<5000.00
500≤a<10000.05
1000≤a<20000.08
2000≤a<50000.10
5000≤a0.15
(1)用if语句编程,自变量和函数值均为双精度类型
(2)用scanf函数输入奖金数a,输出结果采用以下形式:
a=具体值rate=税率值tax=应缴税款profit=实得奖金数
(3)分别输入a=280,512,1000,4250,5100,运行该程序
(4)用if-elseif语句和switch语句编程,其它同上。
3.百分制转等级制
输入一个成绩score,要求输出等级A、B、C、D、E,90分以上为A,80-90为B,60-69为D,其它为E。
循环从键盘接收一班学生的某门课的成绩score,并根据成绩所在分数区间给该生评定等级level并输出,直到输入999时结束,求出该班该门课的平均成绩。
实验5循环结构程序设计
(一)
一、实验目的
1.熟悉掌握while语句、do-while语句和for语句实现循环的方法
2.掌握在程序设计中用循环方法实现一些常用算法(如穷举、迭代、递推等)
3.掌握并会分析循环结构程序
二、实验内容及步骤
1.分别用while语句、do-while语句编写程序,计算e≈1+1/1!
+1/2!
+...+1/n!
(1)用单重循环编写程序
(2)使误差小于给定的ε,设ε=10-5
(3)除了输出e以外,同时还要输出总的项数n
2.奇偶对调,对N以内的整数进行奇偶对调,并输出结果
3.如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。
例如6的因子是1,2,3,且6=1+2+3,因此6是完数。
编写程序找出1000之内的所有完数及这些完数的和。
(1)要求使用for循环
(2)输出形式为:
完数1+完数2...=和值
三、实验要求
1.实验中仔细观察、记录、比较实验结果,如果不一致应找出原因。
2.讨论上机各个环节所出现的错误及解决的办法。
3.分析三种循环使用的区别。
实验6循环结构程序设计
(二)
一、实验目的
1.熟练掌握循环结构的嵌套
2.熟练掌握选择与循环结构的嵌套
3.掌握break和continue语句的使用
二、实验内容及步骤
1.下面程序统计字符数组c中0、1、2及其他字符出现的次数,分别存放在变量i0、i1、i2中,统计结束后输出它们的值。
要求:
分析出现结果的原因,如何修改使结果正确。
charc[]="0123456789001112222";
inti0=0,i1=0,i2=0,i3=0;
inti=0;
for(;i<19;i++)
{
switch(c[i])
{
case'0':
i0++;
case'1':
i1++;
case'2':
i2++;
default:
i3++;
}
}
printf("i0=%d\n",i0);
printf("i1=%d\n",i1);
printf("i2=%d\n",i2);
printf("i3=%d\n",i3);
2.判断用户输入的正整数n是否为素数,直到用户输入1为止。
(1)用while循环读入正整数n
(2)对于每个正整数n,采用for循环判断是否为素数。
(3)打印输出判断结果
3.百钱百鸡,中国古代数学家张丘建在他的《算经》中提出了著名的“百钱
买百鸡问题”:
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
提示:
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
实验7数组
(一)
一、实验目的
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法
2.掌握字符数组和字符串函数的使用
3.掌握与数组相关的算法(排序算法)
二、实验内容及步骤
1.编写程序,对n个数从小到大排序。
任选一种排序方法进行编程。
2.编写一个程序,循环从键盘接收一批学生的某门课的成绩,并依次保存在数组score的相应元素中,直到输入的成绩为999时结束。
(1)对成绩按从高到低排序,并按排序后的顺序输出所有学生的成绩,
(2)再输入一个学生的成绩,并插入排序后的成绩表中并保持有序,最后再输出所有学生的成绩
(3)再输入一个成绩,并从数组中删除与该数相同的所有同学成绩,最后输出最终的成绩表
实验8数组
(二)
一、实验目的
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法
2.掌握字符数组和字符串函数的使用
3.掌握与数组相关的算法(排序算法)
二、实验内容及步骤
1.找出一个二维数组中的鞍点,即该位置上的元素在所在行为最大,在所在列为最小。
如果没有这样的元素,请打印出相应的信息。
(1)画出此题的流程图。
(2)编写程序求矩阵中所有的鞍点并上机调试。
(3)输入的数据和输出的结果要详细记录。
2.统计一个班的学生成绩。
要求程序具有如下功能:
(1)每个学生的学号和四门功课的成绩从键盘读入。
(2)计算每个学生的总分和平均分。
(3)按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。
如果分数相同,则名次并列,其他学生名次不变。
提示:
调试程序时,可先输入少量学生的成绩作为实验数据。
如可输入3名学生4门课成绩:
学号成绩
970167,72,65,80
970275,82,94,95
970370,74,80,76
实验9函数
(一)
一、实验目的
1.理解和掌握多模块的程序设计与调试的方法
2.掌握函数的定义和声明函数的方法
3.熟悉调用函数时实参和形参的对应关系,以及“值传递”的方式
二、实验内容及步骤
1.用函数实现两个整数交换,设计一个函数swap,实现两个整数的交换。
要求:
在主函数中定义两个整型变量并初始化,然后调用swap函数对两变量的值进行真正交换,最后输出交换后的两变量的值(分析用值传递和地址传递两种方式的结果,体会引用的作用)。
2.在主函数中输入一个十进制数,调用转换函数把这个十进制数转换成二、八、十六进制数。
2.定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。
1)声明函数judge;
2)实现函数judge,根据输入的三个边长判断是否可以构成一个三角形;
3)在main中调用judge;
4)在main中根据judge的返回值判断是否是三角形,如果构成三角形则判断是否为直角三角形,并给出结论。
实验10函数
(二)
一、实验目的
1.进一步理解和掌握多模块的程序设计与调试的方法
2.熟悉函数的嵌套调用和递归调用的方法
3.练习并掌握数组作为函数参数的用法
二、实验内容及步骤
1.编写程序,对n个数从小到大排序。
(1)任选一种排序方法进行编程。
(2)用sort()函数进行排序。
(3)在主函数中输入数据,调用sort()函数,分别打印出排序前和排序后的结果。
2.两数组对应元素的交换,设计一函数swap,实现对应元素的交换。
要求:
在主函数中定义两个长度相同的整型数组A和B并初始化,然后调用swap函数把两数组的对应元素值进行交换,最后输出交换后的这两个数组的内容。
3.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
实验11指针
(一)
一、实验目的
1.理解指针和地址的概念,了解指针变量类型的含义
2.掌握指针变量的初始化、赋值、运算和移动操作,以及通过指针引用变量的方法
3.掌握取变量的地址、数组元素的地址以及字符串地址的方法
4.理解数组名与地址值的关第。
掌握通过指针或地址引用数组元素的方法
5.能正确使用字符串的指针和指向字符串的指针变量
二、实验内容及步骤
1.编写程序:
定义一个变量,一个指针,建立该变量的引用。
对变量进行初始化,并将指针指向该变量,分别通过指针和引用改变该变量的值,并输出结果进行比较分析。
2.编写程序:
任意输入10个整数放于数组中,利用指针访问数组,求出该数组中的最大数max以及最小数min。
3.编写程序:
定义字符串,删掉字符串中的数字字符。
实验12指针
(二)
一、实验目的
1.进一步掌握指针的应用
2.能正确使用数组的指针和指向数组的指针变量
3.能正确使用字符串的指针和指向字符串的指针变量
4.理解函数指针
二、实验内容及步骤
1.写一函数,求一个字符串的长度。
(1)本部分要求全部用指针完成;
(2)在main函数中输入字符串,并输出其长度;
(3)本题不能使用strlen()函数;
方法说明:
在主函数中定义一个指向字符串的指针变量pstr,并将输入的字符串的首地址赋值给pstr,然后调用求字符串长度的函数strlenth(char*p),得到字符串的长度。
在函数strlenth(char*p)中,判断*p是否为’\0’,如果不为’\0’,则进行len++的操作,直到遇到’\0’为止。
然后返回len值。
2.编写一个函数,将数组中n个数按反序存放。
(1)在主函数中输入10个数,并输出排好序的数。
(2)编写函数invert()将10个数按反序存放。
3.设一个函数,调用它时,每次实现不同的功能:
(1)求两个数之和;
(2)求两个数之差;(3)求两个数之积。
实验步骤与要求:
(1)在主函数中输入2个数a,b,并输出a,b的和、差和乘积。
(2)分别编写函数add()、sub()、mul()计算两个数的和、差、积。
(3)编写函数process(),分别调用函数add()、sub()、mul()。
实验13结构体和共用体
(一)
一、实验目的
1.掌握结构体类型和结构体变量的定义
2.掌握结构类型变量的定义和使用
3.掌握结构体数组的定义和初始化
4.结构体变量和数组的应用
二、实验内容及步骤
1.下面程序是定义一个结构体,并为其定义结构体变量,对其值输入、输出。
#include
structworker
{intnum;
charsex;
floatsalary;
}work1={100,’m’,1034.5};
main()
{charm,n,t;
structworkerwork2,work3;
work2=work1;
work3.num=300;
m=getchar();
work3.sex=m;
work3.salary=1256.4;
printf(“%f,%d,%s\n”,work1,salary,work2,num,work3.sex);
}
该程序的运行结果是:
2.有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五个学生的数据,要求打印出每个学生的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均分数)。
要求:
用一个函数输入五个学生的数据;用一个函数求总平均分;用函数找出最高分学生数据,总平均分和最高分的学生的数据都在主函数中输出。
。
实验14结构体和共用体
(二)
一、实验目的
1.掌握指向结构体类型的指针
2.掌握共用体的概念和使用
3.熟练掌握链表的简单操作
二、实验内容及步骤
1.运行下面程序,写出结果
#include
sructexam
{longnum;
charname[10];
charsex;
floatscore;
};
main()
{structexamstud1,*p=stud1;
charch;
stud1.num=200101;
strcpy(stud1.name,”wang”);
ch=getchar();
stud1.sex=ch;
(*p).score=543;
printf(“%ld,%c,%f,%s”,p->num,p->sex,p->score,p->name);
}
2.运行下面程序,写出结果。
#include
unionlist
{longw;
floatx;
chary;
};
main()
{unionlistdata;
data.w=1234;
scanf(“%f”,&data.x);
data.y=’M’;
printf(“%ld\t%f\t%c\n”,data.w,data.x,data.y);
}
将该程序中的共用体和结构体对比起来理解。
3.定义结点如下形式:
structmenu
{
charname;
intno;
structmenu*next;
};
进行如下操作:
(1)建立一个长度为10的,如上面形式的链表;
(2)在建立的链表中,插入一个新结点(位置自定);
内容如下:
{
name=cc1j
no=2211
next=选定的结点
}
(3)删除第三个结点;
实验15文件操作
一、实验目的
1.掌握文件建立的方法。
2.掌握包含文件操作的程序设计和调试方法。
二、实验内容及步骤
1.从键盘输入一个字符串,,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。
输入的字符串以“!
”结束。
2.建立一个磁盘文件“emploee”,内存放职工的数据。
每个职工的数据包括:
职工姓名、职工号、性别、年龄、住址、工资、文化程度。
要求将职工号、职工名、工资的信息单独抽出来另建一个职工工资文件。
(1)调试程序,输入数据并运行程序。
(2)用type命令显示新建立的文件内容。
三、问题讨论
1.缓冲文件系统和非缓冲文件系统的区别?
2.文件打开和关闭的含义?
为什么要打开和关闭文件
实验16综合实验报告
一、实验目的
能综合运用本课程所学内容进行结构化程序设计
二、实验内容及步骤
一个简单的学生通讯录(包含学号、姓名、电话)
1.运用数据类型(基本、指针、构造)完成程序的数据类型部分的设计;
2.运用基本结构语句(顺序、选择、循环)完成程序的结构部分的设计;
3.运用文件管理方法把数据存储到磁盘文件中。
要求:
学生数据包括:
学号、姓名、电话号码
程序包括的函数有:
主控函数、数据输入函数、数据输出函数、插入数据函数和删除数据函数。