第三部分,第三部分上

边框 1
机实验 实验1顺序结构程序设计 1.1实验目的
1.熟悉C编译系统集成环境及基本操作方法,掌握在该系统上如何编辑、编译、连接和运行一个C程序。

2.掌握表达式的运算以及表达式语句的用法。

3.掌握各种类型数据的输入、输出方法,正确使用各种格式说明。

4.掌握顺序结构程序设计方法及程序调试方法。

5.掌握数学函数的使用。
1.2实验内容
1.进入C编译系统集成环境,熟悉集成环境界面和有关菜单的使用方法。

2.运行下面程序,并分析输出结果。

(1)请将以下程序段补充完整。
charc; inta; longm; floatf; doubled; c='a'; //e1 a=61; m=50000; f=333.3456789; d=123456789.123456789; //e2 printf("c=%c\na=%d\nm=%ld\n",c,a,m); printf("f=%f\nd=%15.6lf\n",f,d);
(2)编译、连接、运行此程序,记录并分析结果。


(3)完成以下修改。
①请用/*…*/将e1行至e2行之间的赋值语句注释起来,改用scanf函数输入数据,添加scanf函数如下: scanf("%c,%d,%ld,%f,%lf",&c,&a,&m,&f,&d); C语言程序设计学习指导 编译、连接、运行此程序。
数据应按照如下方式输入: 140 a,61,50000,333.3456789,123456789.123456789↙ 记录并分析结果。
②若要求输入数据之间用空格分隔,请用//将上述scanf函数注释起来,重写scanf函数。
③若取消输入项表列中的&,运行程序,观察并分析运行结果。

(4)请将上一步scanf函数中的%lf和%ld分别改为%f和%d,运行程序,观察并分析运行结果。

(5)思考,对照程序和运行结果,回答如下问题:①若漏写scanf函数输入项表列中的取地址运算符&,会出现什么情况?②举例说明调用scanf函数输入数据时,数据间应该怎样分隔?
3.编写程序,上机编译、连接、运行程序并分析结果。

(1)从键盘输入一个小写英文字母,将其转换为大写字母后,输出转换后的大写字母及其十进制的ASCII码值。

(2)从键盘输入圆的半径,计算并输出圆周长、圆面积和圆球的体积(保留2位小数)。
(提示:圆的周长l=2πr,面积s=πr2,球体积v=4πr3) 3
(3)定义两个整数,通过键盘输入两个整数,计算它们的和、差、积、商,并输出。
(4)2016年奥运会共设306枚金牌,请按照下表数据及格式编程计算金牌占比(保留2位小数)并输出表格。
要求:每列10位域宽、数字右对齐,字符左对齐。
排名12345 国家美国英国中国俄罗斯德国 金牌数4627261917 金牌占比(%)15.038.828.506.215.56 实验2选择结构程序设计 2.1实验目的
1.利用if语句及if语句的嵌套实现选择结构程序设计;
2.利用switch语句实现选择结构程序设计;
3.能够编写选择结构的程序解决实际问题;
4.学会调试程序的方法。
2.2实验内容
1.运行实现以下分段函数的程序,并分析输出结果。
⎧x4+
1 y = ⎪⎨
0 ⎪⎩ x +
4 (0#includeintmian(void){ intx,y;scanf("%d",&x);if(0(1)对源代码进行编译,解读相关的编译信息;修改程序的语法错误与逻辑错误;分析数学表达式与C语言表达式之间的联系与不同。

(2)分别测试当x为2.2,
0,−3.2时程序的运行结果。

(3)单步调试程序,分析if语句的执行过程。

2.按照规定,在高速公路上行驶的机动车,超出本车道限速10%处200元罚款;若超速50%,就要吊销驾驶证。
输入高速公路上机动车车速与车道限速值,根据情况输出“罚款200”、“吊销驾照”或“正常车速”。

(1)问题分析:根据输入的车速值和限速值,求出超速百分比,利用分支判断得出超速处理结果。

(2)实现要点如下:①输入:输入车速与限速。
②求超速百分比:超速百分比=[(车速–限速)/限速]×100。
③判别与输出结果:通过比较超速百分比值与50或10的结果来确定输出超速处理 结果。
测试用例数据如表3-1所示。
序号123 表3-
1 输入65、60115、100125、80 测试用例 输出正常车速罚款200元吊销驾照 141第三部分上机实验 C语言程序设计学习指导
3.从键盘输入平面上三个点的坐标A(x1,y1)、B(x2,y2)、C(x3,y3),检验它们能否构成三角形。
若不能,则输出相应的信息;若能,则输出三角形的面积和周长。

(1)程序分析:已知两点的坐标,可以使用两点间距离公式计算两点间距离。
组成三142角形的条件是三角形两边之和大于第三边。
已知三条边的长度,可以根据海伦公式求面积。
注意表达式的书写,分支条件的设定。

(2)对源代码进行编译,若存在编译错误,根据提示修改源代码。
运行测试用例数据, 如表3-2所示,若结果有误,设置断点,利用断点调试运行。
序号12 表3-
2 输入点A坐标:4,5点B坐标:6,9点C坐标:7,8点A坐标:4,6点B坐标:8,12点C坐标:12,18 测试用例 输出周长=10.13,面积=3.00 这3个点不能组成三角形
4.输入任意一个字母作为中间字母,输出三个相邻的字母。
假设字母z与字母a是相邻的。
若输入z,则输出yza,若输入a,则输出zab,若输入c,则输出bcd。
实验3循环结构程序设计 3.1实验目的
1.熟练使用for、while和do-while语句实现循环程序设计;
2.理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处;
3.掌握循环嵌套结构的使用;掌握分支结构、循环结构的综合应用;
4.掌握break和continue语句的使用。
3.2实验内容 ∑n
1.编程求n!
的值。
i=
1
(1)用二重循环实现求和;
(2)用一重循环实现求和;
(3)分析结果: ①输入一个较小的正整数,分析程序执行结果;②输入0或一个负数,分析程序执行结果;③输入一个较大的正整数,分析程序执行结果。
思考:存放阶乘、阶乘和的变量应该用什么类型的数据?④修改程序,当输入数据非法时,给出一个恰当提示。

2.找出1000以内的所有“完数”。
“完数”就是这样一个整数,它恰好等于它的因子之和。
例如6的因子为1、2、
3,而6=1+2+
3,则6是完数。
#includeintmain(void){ intn,m,k;for(n=1;n<=1000;n++){k=0;for(m=1;m(1)请填空,使程序完整,分析其执行过程。

(2)还能再修改“for(m=1;m(3)思考:语句“k=0;”能在变量赋初值部分给出吗?(多重循环要注意变量赋初值的位置。

(4)若不仅输出完数,还输出其各个因子,如输出“6的因子有1,2,3”。
如何修改程序?
3.思考以下程序的运行结果,并上机验证,体会break与continue的区别。
#includeintmain(void){ intn,m;for(n=1;n<=10;n++){ if(n==5)break; printf("%d",n);}printf("\n"); for(m=1;m<=10;m++){ if(m==5)continue; printf("%d",m); 143第三部分上机实验 C语言程序设计学习指导 } return0; } 144
4.给定1、2、3、4四个数字,请输出所有由它们组成的无重复数字的三位数。
输出 整数的顺序要求从小到大排列,每行6个整数。
问题分析:这个问题可以通过穷举每一位和每个允许的数字的排列来解决。
可以采用 三重循环,每重循环对应三位数的一位,每重循环循环4次(1、2、3、4)。
1
5.用公式π/4≈1–1/3+1/5–1/7+…(−1)n−12n−1求π的值。
当最后一项的绝对值小于 10–4时认为达到了精度要求。
实验4数组 4.1实验目的
1.掌握一维数组的定义及使用;
2.掌握二维数组的定义及使用;
3.掌握字符数组的定义及使用。
4.2实验内容
1.运行以下程序: #includeintmain(void){ chars[20];gets(s);puts(s);return0;}
(1)从键盘输入Howareyou,观察输出结果。

(2)将gets(s)改为scanf("%s",s),重新运行程序,观察输出结果有什么不同,分析原因。

(3)如果用%c格式符输入/输出字符串,程序该如何修改?
2.以下程序的功能是从键盘输入10个数,检查数字3是否包含在这些数据中。
若包含,则输出第一个3出现的位置。
程序是否正确?若有错误,请找出并改正。
#includeintmain(void){ inta[10]; i=0;while(i<10) scanf("%d",a[i]);i++;for(i=0;i<10;i++);if(a[i]=3)printf("%d\n",i);continue;if(i=10)printf("notfound!
\n");return0;}
3.以下程序的功能是将字符串中的数字字符删除。
程序是否正确?若有错误,请找出并改正。
#includeintmain(void){ chara[10];inti,j;gets(a);for(i=0,j=0;a[i]!
='\0';i++,j++) if(a[i]>0&&a[i]<9)a[j]=a[i];puts(a);return0;}
4.编写程序,将某数插入到一维数组中某处,如将8插入到数组2,3,5,0,9,6的第3个位置,插入后数组为2,3,8,5,0,9,
6。
要插入的数及其插入位置由键盘输入。

5.编写程序,将4行5列的二维数组的第0行与第2行对调。
实验5函数 5.1实验目的
1.掌握函数的定义方法;
2.掌握函数的调用方法;
3.掌握函数的实参与形参的对应关系。
5.2实验内容
1.写出以下程序的运行结果,然后上机验证。

(1) #includeintx=20; 145第三部分上机实验 C语言程序设计学习指导 voidf1(intx) { x+=10; 146 printf("f1:%d\n",x); } voidf2() { x+=10; printf("f2:%d\n",x); } intmain(void) { intx=10; f1(x); f2(); printf("main:%d\n",x); return0; }
(2) #includeintfun(inta){ intb=0;staticintc=0;b++;c++;returna+b+c;}intmain(void){inti;for(i=0;i<3;i++) printf("%d\n",fun(i));return0;} 思考:如果将程序中的static删除,运行结果有什么不同?为什么?
2.下面add函数的功能是求两个参数之和并将其作为函数返回值。
请查验函数是否正确,若有错误,请改正并将主函数补充完整。
#includevoidadd(inta,intb);{ intc; c=a+b; } intmain(void) { intx,y,z; scanf("%d%d",&x,&y); z= ① ; printf( ② ); return0; } //调用函数,计算x,y之和//输出x,y之和
3.下面程序的功能是统计一维数组中负数的个数。
程序是否正确?若有错误,请找出并改正。
#includeintmain(void){ intx[6],i,y;for(i=0;i<6;i++)scanf("%d",&x[i]);sum(intx[],6);printf("%d\n",y);return0;}voidsum(inta[],intn){inti,m;for(i=0;i4.编写一个函数,功能是求两个正整数的最大公约数。
数据的输入与输出在主函数 中完成。

5.素数是只能被1和自身整除的正整数。
试实现一个判断素数的函数,并利用该函 数验证哥德巴赫猜想,即任何一个大于6的偶数均可表示为两个奇素数之和。

6.用一维数组做函数参数实现学生成绩管理系统。

(1)录入每个学生的学号和一门课的成绩;
(2)计算平均成绩及高于平均分的人数;
(3)按成绩由小到大排出名次表; 147
(4)按学号查询学生成绩; 第

(5)输出每个学生的学号、成绩。
部 分 上机实验 C
语言程序设计学习指导 实验6指针 148 6.1实验目的
1.掌握指针的概念、定义方法及基本操作。

2.掌握通过指针操作数组元素的方法。

3.掌握通过指针操作字符串的方法。

4.掌握指针数组及指向指针的指针的概念、定义方法及使用方法。
6.2实验内容
1.程序改错。
#includeintmain(void){ float*p;scanf("%f",p);printf("%f\n",*p);return0;} 运行该程序,找出程序出错原因。
改正错误,运行程序得到正确结果。

2.输出数组a的10个元素,以下程序正确吗?若有错,请改正并上机验证。
#includeintmain(void){ inta[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=0;i<10;i++){ printf("%d",*a);a++;}return0;}
3.分析以下程序运行后输出结果是什么,并上机验证。
#include intmain(void) { inta[]={1,2,3},*p=a,b; char*q="abcde"; b=*++p; printf("\n%d",b); printf("\n%d%d%d%d",*a,*(a+2),*(p+1),p[1]);printf("\n%d%c%s%s",*q,q[3],q+3,q);return0;}
4.输入3个整数,按由小到大的顺序输出。
请补充并且修改程序,运行该程序,得到正确的结果。
#includeintmain(void){ inta,b,c; int*pa=&a,*pb=&b,*pc=&c; printf("input3integera,b,c:"); scanf("%d,%d,%d",&a,&b,&c); //e1 if(a>b) //e2 {pt=pa;pa=pb;pb=pt;} if(*pa>*pc){① ;pa=pc;pc=pt;} if(*pb>*pc){pt=pb;② ;pc=pt;} printf("%d,%d,%d\n",a,b,c); //e3 return0; } 解决以下问题:
(1)程序e1行输入语句是否可以改为“scanf("%d,%d,%d",pa,pb,pc);”?
(2)程序e2行的if语句中的条件是否可以改为“*pa>*pb”?
(3)程序e3行输出语句是否正确,怎么修改?
(4)仿照上面程序,编写输入3个字符串并按由小到大的顺序输出的程序。

(5)比较分析这两个程序用指针处理整数与字符串有什么不同?例如: ①如何得到指向整数或字符串的指针?②如何比较两个整数或字符串大小?③如何交换两个整数或字符串?
5.输入10个数,按与输入时相反的顺序将其输出。
实验7指针与函数 7.1实验目的
1.掌握指针变量作函数参数的使用方法。

2.掌握返回值为指针的函数的概念、定义方法及使用方法。

3.掌握指向函数的指针的概念、定义方法及使用方法。

4.掌握指针数组作main()函数参数的使用方法。
149第三部分上机实验 C语言程序设计学习指导 7.2实验内容
1.输入3个整数,按由小到大的顺序输出。
请补充并运行该程序,得到正确的结果。
150 #include intmain(void) { inta,b,c; int*pa=&a,*pb=&b,*pc=&c; voidswap(int,int); //e1 printf("input3integera,b,c:"); scanf("%d,%d,%d",&a,&b,&c); if(a>b)swap(pa,pb); if(a>c)swap(pa,pc); if(b>c)① ; printf("%d,%d,%d\n",a,b,c); return0; } voidswap( ② ) {intz; z=*px;*px=*py;*py=z;} 解决以下问题:
(1)程序e1行起什么作用?有没有问题?若有,请改正。

(2)仿照上面程序,编写输入3个字符串并按由小到大的顺序输出的程序。

2.分析以下程序的运行结果是什么,并上机验证。
#includechar*a[]={"BASIC","FORTRAN","COBOL"};intmain(void){ char**m,*p;char*f(char**n);m=a;p=f(m);printf("\n%s",p);return0;}char*f(char**n){++n;return*n;}
3.用函数求10个学生的最高分、最低分和平均成绩。

4.输入一个字符串和一个字符,编写函数查找该字符在字符串中出现的位置,并从该字符首次出现的位置开始输出字符串。
实验8构造数据类型 8.1实验目的
1.掌握结构体类型声明及结构体变量的定义和应用。

2.掌握结构体类型数组的概念和应用。

3.掌握结构体类型指针的概念和应用。

4.掌握链表的概念和基本操作方法。
8.2实验内容
1.已知一个通讯录是由姓名、QQ号和电话号码这三个数据项组成,利用结构体数组编写通讯录管理(n个通讯记录)的程序,要求用函数实现添加、删除、查找和输出通讯记录的功能。

2.已知一个通讯录是由姓名、QQ号和电话号码这三个数据项组成,利用单链表编写通讯录管理(n个通讯记录)的程序,要求用函数实现添加、删除、查找和输出通讯记录的功能。
实验9文件 9.1实验目的
1.掌握文件和文件指针的概念。

2.掌握文件操作的基本过程,掌握文件操作函数的使用方法。
9.2实验内容
1.以下程序的功能是从键盘输入一行字符,写到文件a.txt中。
请改正程序中的错误。
#include#includeintmain(void){ charch;FILEfp;if((fp=fopen("a.txt","w"))!
=NULL){ printf("Can'topenfile!
");exit
(1); 151第三部分上机实验 C语言程序设计学习指导 } while((ch=getchar())!
='\n') fputc(ch,fp); 152 fclose(fp); return0; }
2.从键盘输入姓名,存入文件data.txt中。
如果文件中该姓名已存在,则显示文件已存在的相应信息;再次输入其他姓名,若文件中没有该姓名,则将其存入文件中,请填空。
#include #include #include int
main(void) { FILE*fp; intflag=0; charname[20],data[20];if((fp=fopen("data.txt", ①))==NULL) {printf("Cannotopenfile.\n"); exit
(1); } do { printf("Pleaseinputname:"); ②;if(strlen(name)==0) break;elsestrcat(name,"\n");rewind(fp);flag=1;while(flag&&((fgets(data,20,fp)!
=NULL))) if(strcmp(data,name)==0)flag=0; if(flag)③; elseprintf("\tThisnameexisted!
\n"); }while(ferror(fp)==0);fclose(fp);return0;}
3.阅读下面程序。
先写出程序运行后文件file1.txt中的内容,再上机运行,验证结果。
#include #includeintmain(void){ FILE*fp;inti,j,k;if((fp=fopen("file1.txt","w"))==NULL){printf("Cannotopenthisfile!
\n"); exit
(1);}for(i=1;i<=9;i++){ for(j=1;j<=i;j++){k=i*j;fprintf(fp,"%d*%d=%-3d",j,i,k);}fprintf(fp,"\n");}fclose(fp);return0;}
4.建立一个文本文件intdata.txt,在其中存放若干个整数,以空格符隔开。
编写程序,将文件中所有整数相加,并把累加和写入该文件。
程序分析:先定义文件指针fp,用fopen()以读方式打开文本文件intdata.txt,遍历文件中的每个数,求累加和,最后用fprintf()将和写入文件,关闭文件。
其测试用例如表3-3所示。
输入(文件intdata中的数据)10152050100200220280300 表3-
3 测试用例输出(文件intdata中的数据) 101520501002002202803001195 实验10综合实验 10.1实验目的
1.加强算法设计与分析能力。

2.灵活运用数组、指针、结构体等知识解决问题,加深对C语言程序设计所学知识的理解,学会编写结构清晰、风格良好、数据结构适当的C语言程序。
10.2实验内容 153
1.八皇后问题。
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意第 两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

部 分 上机实验 C语言程序设计学习指导 2.0-1背包问题。
有N件物品和一个容量为V的背包。
第i件物品的重量是w[i],价值是v[i]。
求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总154和最大。

3.高精度计算。
求两个不超过200位的非负整数的和、差、积、商。

4.通讯录管理。
已知一个通讯录是由姓名、QQ号和电话号码这三个数据项组成,编写一个菜单驱动的通讯录管理程序,要求实现添加、删除、查找和显示通讯记录,并建立通讯录文件。

5.五子棋游戏。
五子棋是一种双人棋类游戏,棋具与围棋相同,纵横各十七条线。
黑白双方轮流落子,直到某一方首先在棋盘的横线、纵线或斜线上形成连续五子,则该方就算获胜。

标签: #蓝屏 #测试 #英语 #排位 #战绩 #不上 #潜龙 #变速箱