C上机实验.docx
- 文档编号:28454193
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:57
- 大小:316.55KB
C上机实验.docx
《C上机实验.docx》由会员分享,可在线阅读,更多相关《C上机实验.docx(57页珍藏版)》请在冰豆网上搜索。
C上机实验
实验一顺序结构程序设计
一、目的与要求
1.掌握VisualC++(简称VC)的基本操作,学会如何在VC环境下编辑、编译、链接和运行程序。
2.通过上机练习,掌握C语言的数据类型,熟悉如何定义基本类型char、int、float、double的变量,如何赋值等操作。
3.学会在程序中使用C语言各类运算符和表达式。
4.掌握scanf函数与printf函数的使用方法。
二、实验内容
1.VC的使用
⑴启动VC,进入VC屏幕编辑状态
⑵C程序的编辑、编译、链接和运行
⑶VC常用功能键的使用:
Ctrl+F7、Ctrl+F5等
注:
VC的使用请参阅本资料后的附:
如何在VisualC++下调试运行C程序
2.格式输入输出函数scanf和printf的使用。
给出源程序如下,请按程序后给出的步骤逐一修改源程序,并随时运行修改后的程序,查看运行结果,加深对相关内容的熟悉和理解。
步骤一:
输入以下源程序
#include
main()
{
charc1,c2;
inti1,i2;
longl1;
floatf1,f2;
doubled1,d2;
c1=‘A’;c2=‘a’;
i1=-1;i2=32768;
l1=65539;
f1=925.31567;f2=15.628396;
d1=925.31567;d2=15.628396;
printf(“c1=%c,c2=%c\n”,c1,c2);
printf(“i1=%d,i2=%d\n”,i1,i2);
printf(“l1=%ld,l1=%lx\n”,l1,l1);
printf(“f1=%f,f2=%e\n”,f1,f2);
printf(“d1=%f,d2=%e\n”,d1,d2);
}
步骤二:
使用功能键Ctrl+F9执行程序,用功能键Alt+F5查看结果。
步骤三:
将最后五行printf函数调用语句改写成以下形式,熟悉指定宽度与小数位数的用法。
printf(“c1=%3c,c2=%3c\n”,c1,c2);
printf(“i1=%5d,i2=%5d\n”,i1,i2);
printf(“l1=%8ld,l1=%8lx\n”,l1,l1);
printf(“f1=%10.3f,f2=%10.5e\n”,f1,f2);
printf(“d1=%10.3f,d2=%10.5e\n”,d1,d2);
步骤四:
将前三个printf函数调用语句改写成以下形式,熟悉当一变量值以不同的格式符说明时,输出结果的变化(注意:
记录输出结果,并说明其原因)。
printf(“c1=%c,%d,c2=%c,%d\n”,c1,c1,c2,c2);
printf(“i1=%d,%o,%x,%u,i2=%d,%o,%x,%u\n”,i1,i1,i1,i1,i2,i2,i2,i2);
printf(“l1=%ld,%lo,%lx,%lu\n”,l1,l1,l1,l1);
步骤五:
将以上程序压缩如下,用紧凑格式(格式符之间无任何字符)的scanf函数调用语句代替赋值语句:
#include
main()
{
charc1,c2;
inti1,i2;
printf(“Inputi1,c1,i2,c2:
”);
scanf(“%d%c%d%c”,&i1,&c1,&i2,&c2);
printf(“c1=%c,c2=%c\n”,c1,c2);
printf(“i1=%d,i2=%d\n”,i1,i2);
}
执行程序,在屏幕提示“Inputi1,c1,i2,c2:
”的后面按格式10A20B输入,查看结果;将输入格式改成10A20a和10A20a,查看结果并阐述你对这一结果的看法。
步骤六:
再将步骤五中用紧凑格式的scanf函数调用语句改写成以下形式:
scanf(“%d,%c,%d,%c”,&i1,&c1,&i2,&c2);
再按步骤五的形式输入,查看结果并解释这一现象。
思考:
在步骤六,要想得到输出结果i1=10,i2=20,c1=A,c2=a(注意:
赋值号左右有空格),正确的输入格式是什么?
输出函数printf应如何书写?
3.编写程序,输入华氏温度(F),按下列公式计算并输出对应的摄氏温度(C)。
C=5/9(F–32)
4.编写程序,从键盘输入一个三角形的三条边长a、b、c(要求任何两条边的边长之和均大于第三条边的边长),求该三角形的面积。
求三角形的面积公式是:
其中:
在输入函数调用语句中,格式控制字符串中的格式字符分别用空格、逗号和分号分隔,用同一组数据但不同的分隔符分别执行程序,观察程序运行结果。
5.编写程序,将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。
例如,当a=45,b=12,运行结果为:
c=5241。
6.编写程序,用若干条printf函数调用语句输出以下图形:
A
AA
A A
AAAAA
A A
A A
实验二选择结构程序设计
一、目的与要求
1.熟悉C语言的逻辑运算,了解逻辑值在C程序的表达形式。
2.掌握if语句的三种结构形式,学会使用这三种形式编写程序。
3.了解switch语句使用格式和特点,会使用switch语句进行程序设计。
4.了解嵌套的if形式与switch语句之间的差异,能有条件地将嵌套的if形式转换成switch语句形式。
二、实验内容
1.编一程序,使用单分支的if语句形式,求a,b,c三个整数的中间值。
例如:
a、b、c的值分别为3、4、5,则输出4。
2.有一函数
x(x<1)
y=2x–1(1≤x<10)
3x–11(x≥10)
用 scanf函数输入x的值(分别取x<1、1~10、≥10三种情况),求y值。
3.编写程序,输入一位学生的生日(年:
y0、月:
m0、日:
d0)数据,再输入当前的日期(年:
y1、月:
m1、日:
d1)数据,计算并输出该学生的实足年龄。
4.编写程序,定义四个字符变量c1,c2,c3和c4,分别用getchar()函数任意输入四个字母,分别输出其中的最大值和最小值。
5.设整型变量a的值为正数,请将以下C源程序中的if语句形式改写成switch语句形式。
#include
main()
{inta,m;
printf(”a=”);
scanf(”%d”,&a);
if(a<30)m=1;
elseif(a<40)m=2;
elseif(a<50)m=3;
elseif(a<60)m=4;
elsem=6;
printf(”m=%d\n”,m);
}
思考:
如果将a为正数的条件去掉,则如何修改程序才能保证程序功能不变?
实验三循环结构程序设计
一、目的与要求
1.熟悉C语言的循环结构,学会用while语句、do-while语句和for语句编写循环程序的方法。
2.初步掌握在程序设计中使用循环的方法实现各种基本算法。
3.学会使用循环嵌套的形式编写程序。
4.初步掌握调试循环程序的方法和技巧。
二、实验内容
(一)必做题
1.编写程序,计算并输出正整数n的所有因子(1和n除外)之和。
2.编写程序,利用以下所示的简单迭代方法求方程:
cos(x)-x=0的一个实根。
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,把x1的值赋给x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根。
3.编写程序,输入一行字符,分别统计出其中的大写字母、小写字母、空格和数字的个数。
提示:
用以下循环格式处理输入的一行字符。
while((c=getchar())!
=’\n’)/*若输入的c不是回车符时继续*/
循环体
或者:
c=getchar();
while(c!
=’\n’)/*若c不是回车符时继续*/
{
循环体
c=getchar();
}
(二)选做题
1.编写程序,计算
直到<10-6。
若x=2.5,则程序最后输出为1.917915。
2.编写程序,输出正整数m和n(不包括m、n)之间的所有素数,要求每行输出8个数。
3.求以下数列的前n项之和。
4.一物体从100米的高空自由落下,每次落地后反弹回原高度的一半,再落下。
求物体在第10次落地时,共经过多少米?
第10次反弹多高?
实验四数组
一、目的与要求
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2.掌握字符数组和字符串函数的使用。
3.掌握与数组有关的算法,至少掌握一种排序算法。
二、实验内容
(一)必做题
1.编写程序,将3~n之间的所有非素数存入数组array中,然后输出该数组元素。
例如,若n=20,则输出4,6,8,9,10,12,14,15,16,18,19,20。
2.编写程序,将字符数组str中的字符串逆置后输出。
例如,若str字符串为“ThisisaCprograme.”,则输出为“.emargorpCasisihT”。
3.从键盘输入10个整数,选择一种排序算法,将这些数按从大到小的顺序排列输出。
4.计算5x5矩阵的主对角线元素和次对角线元素之和。
若有下列矩阵,则输出的值应该是130。
12345
678910
1112131415
1617181920
2122232425
(二)选做题
1.输入m个长度不同的字符串,要求按长度由长到短进行排序。
2.将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。
例如,s所指的字符串为:
def35adh3kjsdf7,则执行结果为:
defadhkjsdf3537。
提示:
设置三个字符数组s、t和w,将s串中的非数字字符存入t中,数字字符存入w中,构成两个新的字符串,最后将字符串t和w连接后输出。
3.将整型数组中的n个数据元素一分为二,左边部分与右边部分对换。
如果元素的个数为奇数,则中间元素不参加交换。
例如,数组中元素为1,2,3,4,5,6,7,8,9,则交换后的元素顺序为:
6,7,8,9,5,1,2,3,4。
4.编写程序,输入一个4x4的整数矩阵,将矩阵左边的前2列移到矩阵的右边,然后输出移动后的矩阵。
例如,已有下列矩阵:
21121324
25164738
29113254
42213310
则移动后的矩阵为:
13242112
47382516
32542911
33104221
5.编写程序,在屏幕上输出杨辉三角形。
1
11
121
1331
14641
15101051
……………
实验五函数
一、目的与要求
1.掌握定义函数的方法。
2.掌握函数实参与形参的对应关系,熟悉“值传递”的程序特点。
3.了解数组名作函数的实参的特点,掌握“地址传递”的程序设计方法。
4.掌握全局变量与局部变量的概念,学会在程序中的使用全局变量。
二、实验内容
(一)必做题
1.编写一个判素数的函数intIsprime(intm)。
在主函数中输入一个整数n,然后调用Isprime,如果n是素数,则输出:
nisprime!
否则输出:
nisn’tprime!
(注:
输出格式中用输入的具体值代替字母n)
2.编写两个函数,分别求两个整数的最小公倍数和最大公约数并返回给主函数,两个整数由主函数输入。
源程序结构如下:
#include
intLowest_common_multiple(intx,inty)
{
/*此处填充最小公倍数函数的函数体*/
}
intGreatest_commom_divisor(intx,inty)
{
/*此处填充最大公约数函数的函数体*/
}
main()
{
intm,n,s;
printf(“Pleaseinputm,n:
“);
scanf(“%d%d”,&m,&n);
/*此处填充函数调用及输出语句的程序段*/
}
3.编一个函数fun(chars[]),其功能是把字符串s中的小写字母转换成大写字母,其它字符则不变。
4.编一函数voidconvert(inta[][3]),求3X3矩阵的转置矩阵。
例如,原矩阵是:
则转置后的矩阵是:
123147
456258
789369
(二)选做题
1.编写函数intfun(intt),其功能是:
求Fibonacci数列中大于t的最小的一个数,结果由函数值返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F
(1)=1
F(n)=F(n-1)+F(n-2)
例如,当t=1000时,函数值为1597。
2.编一函数floataverf(floatx[],intn),其功能是:
计算形参x所指数组中n个数的平均值,并将平均值返回主函数。
3.编一函数voidfun(intxx[M][N],intpp[]),其功能是:
将二维数组xx中的数据元素按列依次存放到一维数组pp中。
(M和N是符号常量)
例如,xx数组存放如下数据:
1234
5678
9101112
13141516
则pp数组中的内容为:
15913261014371115481216。
4.编一函数voiddeletechar(charstr[],charch),其功能是:
从字符串str中删除所有的ch字符。
例如,若字符串str的内容为:
“ThisisaCprogram!
”,ch=‘a’,删除后str变成:
“ThisisCprogrm!
”。
实验六指针
一、实验目的
1.掌握指针的概念,学会定义和使用指针变量;
2.学会使用数组的指针和指向数组的指针变量;
3.学会使用字符串的指针和指向字符串的指针变量;
4.了解指向函数的指针和返回指针的函数
5.了解指向指针的指针的概念和使用方法。
二、实验内容
(一)必做题
1.编写程序,将三个整数按从小到大的顺序输出。
要求:
所有的比较运算和赋值运算均使用指针变量。
2.编一函数,将一字符串中的所有字符逆置,主函数实现字符串的输入输出。
3.编写程序,从字符串s中删除指定位置n上的字符。
删除操作用函数实现,函数首部为voiddelechar(char*s,intn)。
4.编一函数,用指针形式将两个字符串连接成一个字符串。
(要求:
不能使用库函数)
5.编写函数floataverf(intx[],intn,int*max,int*min),其功能是:
在具有n个数据元素的整型数组x中,求其中的最大值,最小值和平均值。
最大值与最小值由形参max和min返回主函数,平均值通过返回语句返回主函数。
(二)选做题
1.判断字符串substr是否为字符串str的子串,如果是子串,则返回1,否则返回0。
2.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:
将大于整数m且紧靠m的k个素数存入数组xx中。
(提示:
另外再编写一个求素数的函数)
3.请编写函数voidfun(char*s),其功能是:
将字符串首部连续的*号全部删除,后面和中间的*号不删除。
(规定输入的字符串中只包含字母和*号,且不得使用C语言提供的字符串函数)
例如,字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当A*BC*DEF*G*******。
4.将二维字符数组中的字符按行合并成一个字符串。
例如,二维数组中的数据为:
WWWW
SSSS
HHHH
则字符串中的内容应是:
WSHWSHWSH。
实验七结构体与共用体
一、实验目的
1.掌握结构体类型说明的几种方法,掌握结构体变量的定义、使用和赋值等操作;
2.学会基本的结构体程序设计方法
3.掌握结构体类型数组、结构体指针的概念和应用,学会引用结构体数组元素中的成员项及通过结构体指针引用成员项的方法;
4.掌握链表的概念,初步学会对链表的操作
5.能模仿现有例子编写插入、删除函数的算法
6.掌握共用体的基本概念与简单的使用。
二、实验内容
(一)必做题
1.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形式参数传回,平均分通过函数值返回。
#include
#defineN12
typedefstruct
{charnum[10];
doubles;
}STREC;
doublefun(STREC*a,STREC*b,int*n)
{
/*在此处填充函数内容*/
}
main()
{STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};
STRECh[N];FILE*out;
inti,n;
doubleave;
ave=fun(s,h,&n);
printf("The%dstudentdatawhichishigherthan%7.3f\n",n,ave);
for(i=0;i printf("%s%4.1f\n",h[i].num,h[i].s); } 2.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是: 把分数最高的学生数据放在h所指的数组中。 注意: 分数最高的学生可能不止一个,函数返回分数最高的学生的人数。 部分程序参考第1题的内容,修改它,使其实现本题的功能。 3.N名学生的成绩已在主函数中放入一外带有头结点的链表结构中,h指向链表的头结点。 请编写函数fun,它的功能是: 找出学生的最高分,由函数值返回。 #include #include #defineN8 structslist {doubles; structslist*next; }; typedefstructslistSTREC; doublefun(STREC*h) { /*在此处填充函数内容*/ } STREC*creat(double*s) {STREC*h,*p,*q;inti=0; h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(i {q=(STREC*)malloc(sizeof(STREC)); q->s=s[i];i++; p->next=q;p=q; } p->next=0; returnh; } outlist(STREC*h) {STREC*p; p=h->next;printf("head"); do {printf("->%2.0f",p->s); p=p->next; }while(p! =0); printf("\n\n"); } main() {doubles[N]={85,76,69,85,91,72,64,87},max; STREC*h; h=creat(s);outlist(h); max=fun(h); printf("max=%6.3f\n",max); } 4.N名学生的成绩已在主函数中放入一外带有头结点的链表结构中,h指向链表的头结点。 请编写函数fun,它的功能是: 求出平均分,由函数值返回。 部分程序参考第3题的内容,请修改此程序中的main函数,以实现其功能要求。 (二)选做题 1.有10个产品的销售记录数据,每条记录由产品号cno,产品名cname,单价dj,数量sl和金额je构成,其中金额数据由单价和数量计算得到。 要求: 从键盘输入这10条记录的数据,并计算出金额,然后,在屏幕上按一定的格式输出这10条记录的数据。 2.在第1题的基础上,编写一个函数,功能是: 将10条数据记录按金额从小到大排列输出。 3.已有两个结构相同的链表list1和list2,链表中的结点由学号和成绩组成。 编程将两个链表交叉链接并输出。 4.用链表处理以下问题: 13个人围成一圈,从第1个人开始顺序报数1、2、3,凡报到3者退出圈子,退出圈子的人按出圈顺序进入另一个结构相同的链表中,最后,输出出圈序列号。 实验八文件 一、实验目的 1.掌握文件以及缓冲文件系统、文件指针的概念; 2.学会文件的打开、关闭、读写等基本操作; 3.掌握fgetc、fputc、fgets、fputs、feof函数的使用;了解fread、fwrite、fseek、rewind和ftell函数的功能及简单使用; 4.学会模仿教材中的例子,编写简单的文件处理程序。 二、实验内容 (一)必做题 1.将从键盘输入的5行字符数据存入名为“myfile1.txt”的文件中。 2.将第1题输入到myfile1.txt文件中的字符数据的第二行输出到屏幕上。 3.将“myfile1.txt”的文件复制到一个文件名为“myf1.txt”中。 4.从键盘输入5个实数,存入文件“myd1.dat”中,每个实数用逗号分隔;然后,再将这5个数据输入到屏幕上。 (二)选做题 1.从键盘输入一行英文句子存入“engline.txt”文件中,将其关闭,然后再打开,并从文件的尾部开始,将这一行英文句子倒序显示在屏幕上。 实现倒序的方法是: 将文件指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 实验