实验指导带答案(上)
更新时间:2023-10-06 16:11:01 阅读量: 综合文库 文档下载
实验8 数组(二)
一、实验目的
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法 2.掌握字符数组和字符串函数的使用 3.掌握与数组相关的算法(排序算法)
二、实验内容及步骤
1. 找出一个二维数组中的鞍点,即该位置上的元素在所在行为最大,在所在列为
最小。如果没有这样的元素,请打印出相应的信息。
(1) 画出此题的流程图。
(2) 编写程序求矩阵中所有的鞍点并上机调试。 (3) 输入的数据和输出的结果要详细记录。 参考程序: #include\void main()
{
int a[4][4],i,j,min,m,n,max; for(i=0;i<4;i++) for(j=0;j<4;j++)
scanf(\ for(i=0;i<4;i++) {
max=a[i][0];
for(j=i+1;j<4;j++) if(a[i][j]>max) {
max=a[i][j]; n=j;
}
min=a[0][i]; for(j=i+1;j<4;j++) if(a[j][i] min=a[j][i]; m=j; } } if(max==min) printf(\ else printf(\没有鞍点\} 2.统计一个班的学生成绩。要求程序具有如下功能: (1) 每个学生的学号和四门功课的成绩从键盘读入。 (2) 计算每个学生的总分和平均分。 (3) 按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。如果分数相同,则名次并列,其他学生名次不变。 提示: 调试程序时,可先输入少量学生的成绩作为实验数据。如可输入3名学生4门课成绩: 学号 成绩 9701 67,72,65,80 9702 75,82,94,95 9703 70,74,80,76 参考程序: main() { int i,j,k,n; static int score[1000][7],temp; printf(\请输入第%d个学生的学号和成绩并按回车(学号和成绩之间用空格隔开,成绩之间用逗号隔开,输完后按回车: printf(\请输入学生的人数:\scanf(\for(i=1;i<=n;i++) { \ scanf(\re[i][1],&score[i][2],&score[i][3],&score[i][4]); score[i][5]=(score[i][1]+score[i][2]+score[i][3]+score[i][4])/4; } for(i=1;i<=n-1;i++) for(j=i+1;j<=n;j++) if(score[i][5] for(k=0;k<6;k++) { temp=score[i][k]; } for(i=1;i<=n;) { score[i][6]=i; j=1; } while(score[i][5]==score[i+j][5]) { } i=i+j; score[i+j][6]=i; j++; for(i=1;i<=n;i++) printf(\第%d名的学生学号为%d, score[i][k]=score[j][k]; 平均成绩为%d\\n\ score[j][k]=temp; } 实验9 函数(一) 一、实验目的 1. 理解和掌握多模块的程序设计与调试的方法 2. 掌握函数的定义和声明函数的方法 3. 熟悉调用函数时实参和形参的对应关系,以及“值传递”的方式 二、实验内容及步骤 1. 用函数实现两个整数交换,设计一个函数swap,实现两个整数的交换。要求:在主函数中定义两个整型变量并初始化,然后调用swap函数对两变量的值进行真正交换, 最后输出交换后的两变量的值(分析用值传递和地址传递两种方式的结果,体会引用的作用)。 参考程序1(采用值传递) swap(int m,int n) { int temp; temp=m; m=n; n=temp; printf(\请输入两个数分别负值给x和y,用逗号隔开:\ scanf(\ printf(\交换之前x=%d, y=%d\\n\ swap(x,y); printf(\交换之后y=%d\\n\} x=%d, } main() { int x,y; 注意:在这里,采用值传递,只是把形式参数m和n的值交换了,而实参x和y的值并没有交换。 参考程序2(采用地址传递) swap(int *m,int *n) { int temp; temp=*m; *m=*n; *n=temp; } main() { int x,y; printf(\请输入两个数分别负值给x和y,用逗号隔开:\ scanf(\ printf(\交换之前x=%d,y=%d\\n\swap(&x,&y); printf(\交换之后x=%d,y=%d\\n\} 2.在主函数中输入一个十进制数,调用转换函数把这个十进制数转换成二、八、十六 进制数。 参考程序(该程序仅限于转换十进制整数): erjinzhi(int n) { int i,k; int a[50]; for(i=0;i<20;i++) { if(n==0)break; a[i]=n%2; n=n/2; shiliujinzhi(int n) { printf(\} main() { int n; printf(\请输入一个十进制整数:\ scanf(\ printf(\转换为二进制为:\erjinzhi(n); printf(\转换为八进制为:\ } for(k=i-1;k>=0;k--) printf(\printf(\ } bajinzhi(int n) { printf(\} bajinzhi(n); printf(\转换为十六进制为:\ shiliujinzhi(n); } 3. 定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。 1) 声明函数judge; 2) 实现函数judge,根据输入的三个边长判断是否可以构成一个三角形; 3) 在main中调用judge; 4) 在main中根据judge的返回值判断是否是三角形,如果构成三角形则判断是 否为直角三角形,并给出结论。 参考程序: judge(int m,int n,int k) { if(m+n>k && m+k>n && n+k>m) { printf(\输入的三条边可以构成三角形,\ if(m*m+n*n==k*k || m*m+k*k==n*n || k*k+n*n==m*m) printf(\并且可以构成直角三角形!\\n\ else printf(\但是不能构成直角三角形!\\n\ } else printf(\输入的三条边不能构成三角形!\\n\} main() { int x,y,z; 实验10 函数(二) 一、实验目的 1.进一步理解和掌握多模块的程序设计与调试的方法 2.熟悉函数的嵌套调用和递归调用的方法 3.练习并掌握数组作为函数参数的用法 二、实验内容及步骤 1. 编写程序,对n个数从小到大排序。 (1) 任选一种排序方法进行编程。 (2) 用sort()函数进行排序。 (3) 在主函数中输入数据,调用sort()函数,分别打印出排序前和排序后的结果。 参考程序: #include void sort() { int i,j,tmp; for(i=0;i for(j=i+1;j tmp=a[i]; a[i]=a[j]; } } main() { int i; printf(\请输入%d数:\\n\ for(i=0;i printf(\ printf(\} printf(\请输入三条边长,并用逗号隔开,按回车结束:\ scanf(\); judge(x,y,z); } 个整 for(i=0;i printf(\ sort(); printf(\排序之后:\ 2.两数组对应元素的交换,设计一函数swap,实现对应元素的交换。 要求:在主函数中定义两个长度相同的整型数组A和B并初始化,然后调用swap函数 把两数组的对应元素值进行交换,最后输出交换后的这两个数组的内容。 参考程序: swap(int aa[],int bb[],int n) { int i,temp; for(i=0;i { temp=aa[i]; } } aa[i]=bb[i]; bb[i]=temp; main() { int A[10]={1,2,3,4,5,6,7,8,9,10},B[10]={11,12,13,14,15,16,17,18,19,20}; int i; printf(\交换之前:\\n数组A的值为:\ for(i=0;i<10;i++) printf(\printf(\数组B的值为:\for(i=0;i<10;i++) printf(\swap(A,B,10); printf(\交换之后:\\n数组A的值为:\for(i=0;i<10;i++) printf(\printf(\数组B的值为:\for(i=0;i<10;i++) printf(\ printf(\} 3.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 参考程序: #include if(n==1) a=1; else if(n==2) a=1; else a=fib(n-1)+fib(n-2); return a; } main() { int h; printf(\请输入级数h:\scanf(\ fib(h); printf(\级数%d的Fibonacci数为%d\\n\ } 实验11 指针(一) 一、实验目的 1. 理解指针和地址的概念,了解指针变量类型的含义 2. 掌握指针变量的初始化、赋值、运算和移动操作,以及通过指针引用变量的方法 3. 掌握取变量的地址、数组元素的地址以及字符串地址的方法 4. 理解数组名与地址值的关第。掌握通过指针或地址引用数组元素的方法 5. 能正确使用字符串的指针和指向字符串的指针变量 二、实验内容及步骤 1. 编写程序:定义一个变量,一个指针,建立该变量的引用。对变量进行初始化,并 将指针指向该变量,分别通过指针和引用改变该变量的值,并输出结果进行比较分析。 参考程序: #include a = 10; printf(“a的值为:%d\\n”, a); *ptr = 20; printf(“通过指针修改后,a的值为:%d\\n”, a); ptr = &a; } 2. 编写程序:任意输入10个整数放于数组中,利用指针访问数组,求出该数组中的最大数max以及最小数min。 参考程序: #include int a[10]; int *p; int i,min,max; p=a; printf(“请输入10个数:”); for(i=0;i<10;i++) scanf(“%d”,p+i); p = a ; min=max=*p ; if(*p>max) { max=*p ; } else if(*p min=*p ; } p++ ; } printf(“最小值为%d,最大值为%d\\n”,min,max); for(i=0;i<10;i++) } { 3. 编写程序:定义字符串,删掉字符串中的数字字符。 参考程序: #include void delchar (char *p) { char *q=p; } 实验12 指针(二) 一、实验目的 1. 进一步掌握指针的应用 2. 能正确使用数组的指针和指向数组的指针变量 3. 能正确使用字符串的指针和指向字符串的指针变量 4. 理解函数指针 二、实验内容及步骤 1. 写一函数,求一个字符串的长度。 (1) 本部分要求全部用指针完成; for (;*p!=NULL;p++) if((*p<'0')||(*p>'9')) *q++=*p; *q='\\0'; int main(void) { char c[N]={NULL},*pt=c; printf(\输入一个字符串:\gets(pt); delchar (pt); printf (\删除数字以 后:%s\\n\} (2) 在main函数中输入字符串,并输出其长度; (3) 本题不能使用strlen()函数; 方法说明: 在主函数中定义一个指向字符串的指针变量pstr,并将输入的字符串的首地址赋值 给pstr,然后调用求字符串长度的函数strlenth(char *p),得到字符串的长度。在函数strlenth(char *p)中,判断*p是否为’\\0’,如果不为’\\0’,则进行len++的操作,直到遇到’\\0’为止。然后返回len值。 参考程序: #include int len=0; while(1) { if (p[len]=='\\0') break; len++; } return len; } { char str[100]; char *pstr=str; printf(\ gets(str); // 这样输入允许字符串中夹带空白 //scanf(\ //这样输入不能 夹带空白 printf(\%d\\n\(pstr)); } int main() 2. 编写一个函数,将数组中n个数按反序存放。 (1) 在主函数中输入10个数,并输出排好序的数。 (2) 编写函数invert()将10个数按反序存放。 参考程序: #include \ void invert(int *p,int n) { int i,temp; int *q; q=p+n-1; for(i=1;i<=n/2;i++) { temp=*p; *p=*q; *q=temp; p++; q--; int a[10]; int i; int *p=a; printf(\请输入10个数字:\ for(i=0;i<10;i++) { scanf(\ } invert(p,10); printf(\反序以后:\ for(i=0;i<10;i++) { } printf(\ } } int main() { printf(\} 3. 设一个函数,调用它时,每次实现不同的功能:(1)求两个数之和;(2)求两个数之差;(3)求两个数之积。实验步骤与要求: (1)在主函数中输入2个数a,b,并输出a,b的和、差和乘积。 (2)分别编写函数add()、sub()、mul()计算两个数的和、差、积。 (3) 编写函数process(),分别调用函数add()、sub()、mul()。 参考答案: #include int c = a + b; printf(\} void sub(int a, int b) { int c = a - b; printf(\} void mul(int a, int b) { int c = a * b; printf(\} } 实验13 结构体和共用体(一) 一、实验目的 1. 掌握结构体类型和结构体变量的定义 2. 掌握结构类型变量的定义和使用 3. 掌握结构体数组的定义和初始化 4. 结构体变量和数组的应用 二、实验内容及步骤 1.下面程序是定义一个结构体,并为其定义结构体变量,对其值输入、输出。(原来给出的程序有错误,改正之后的程序如下) #include float salary; }work1={100,'m',1034.5}; main() { char m,n,t; 该程序的运行结果是: 如果输入的是m,则输出结果为: 1034.500000,100,m 2.有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五个学生的数据,要求打印出每个学生的平均成绩,以及最高分的学生的数据(包括学号, work2=work1; work3.num=300; m=getchar(); work3.sex=m; work3.salary=1256.4; printf(\ ary,work2.num,work3.sex); } void process(int a, int b) { add(a, b); sub(a, b); mul(a, b); } int main() { int a, b; printf(\请输入两个数: \ scanf(\ printf(\他们的和是: %d\\n\ printf(\他们的差是: %d\\n\ printf(\他们的积是: %d\\n\ process(a,b); 姓名,三门课的成绩,平均分数)。 要求:用一个函数输入五个学生的数据;用一个函数求总平均分;用函数找出最高分学生数据,总平均分和最高分的学生的数据都在主函数中输出。 参考程序: #include float sum,max,average; struct student { char num[6]; char name[8]; float score[3]; float avr; }stu[N]; void shuruchengji() //通过该函数输入学号,姓名和成绩 { for(i=0;i printf(\请输入第%d个学生的学号:\ scanf(\ printf(\请输入第%d个学生的姓名:\ scanf(\ for(j=0;j<3;j++) { printf(\请输入 第%d个学生的学号第%d门成绩:\ scanf(\ } } } void ave() { average=0; max=0; maxi=0; for(i=0;i { sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3; average=average+stu[i].avr; if(sum>max) { max=sum; maxi=i; } } average/=N; } int main() { shuruchengji(); ave(); printf(\学号 姓名 成绩1 成绩2 成绩3 平均成绩\\n\ for(i=0;i printf(\tu[i].name); for(j=0;j<3;j++) printf(\]); printf(\ } printf(\平均成绩=%5.2f\\n\ printf(\最高分:学生学号:%s,学生姓名%s\\n\].name); printf(\成绩:科目1:%6.2f,科目2:%6.2f,科目3:%6.2f,平均成绩:%5.2f.\\n%u[maxi].avr); } 实验14 结构体和共用体(二) 一、实验目的 1. 掌握指向结构体类型的指针 2. 掌握共用体的概念和使用 3. 熟练掌握链表的简单操作 二、实验内容及步骤 1.运行下面程序,写出结果 #include main() { stud1,*p=&stud1; struct exam stud1.num=200101; strcpy(stud1.name,\ch=getchar(); stud1.sex=ch; (*p).score=543; printf(\ ,p->sex,p->score,p->name); } 假设输入m,运行结果为: 200101,m,543.000000,wang char ch; 2.运行下面程序,写出结果。 #include { long w; float x; char y; }; main() { union list data; data.w=1234; scanf(“%f”,&data.x); data.y=’M’; printf(“%ld\\t%f\\t%c\\n”, data.w,data.x,data.y); } 将该程序中的共用体和结构体对比起来理解。 3.定义结点如下形式:(不要) struct menu { char name; int no; struct menu *next; }; 进行如下操作: (1) 建立一个长度为10的,如上面形式的链表; (2)在建立的链表中,插入一个新结点(位置自定);内容如下: { name=cc1j no=2211 (3)删除第三个结点; next=选定的结点 } 实验15 文件操作 一、实验目的 1.掌握文件建立的方法。 2. 掌握包含文件操作的程序设计和调试方法。 二、实验内容及步骤 1.从键盘输入一个字符串,,将其中的小写字母全部转换成大写字母,然后输出到一 个磁盘文件“test”中保存。输入的字符串以“!”结束。 参考程序: #include while (*str!='\\0') { if (*str>='a' && *str<='z') { *str-=32; } main() { } FILE *fp; char str[100]; fp = fopen(\gets(str); convert(str); fputs(str,fp); fclose(fp); } *str++; } 2.建立一个磁盘文件“emploee”,内存放职工的数据。每个职工的数据包括:职工 姓名、职工号、性别、年龄、住址、工资、文化程度。要求将职工号、职工名、 工资的信息单独抽出来另建一个职工工资文件。 (1)调试程序,输入数据并运行程序。 (2)用type命令显示新建立的文件内容。 三、问题讨论 1.缓冲文件系统和非缓冲文件系统的区别? 2.文件打开和关闭的含义?为什么要打开和关闭文件 实验16 综合实验报告 一、实验目的 能综合运用本课程所学内容进行结构化程序设计 二、 实验内容及步骤 一个简单的学生通讯录(包含学号、姓名、电话) 1. 运用数据类型(基本、指针、构造)完成程序的数据类型部分的设计; 2. 运用基本结构语句(顺序、选择、循环)完成程序的结构部分的设计; 3. 运用文件管理方法把数据存储到磁盘文件中。 要求: 学生数据包括:学号、姓名、电话号码 程序包括的函数有:主控函数、数据输入函数、数据输出函数、插入数据函数和删除数据函数。 12
正在阅读:
实验指导带答案(上)10-06
(新课标)2016高考英语短文语法填空和阅读一轮选练(1)07-03
开学第一周新教师教学反思04-14
三年级数学下册测试卷04-07
浙江省建筑施工特种作业人员考核大纲05-21
七上单复数句子互相转化08-29
13数学分析期末复习题0103-15
市地震局年度地震应对工作总结评估工作总结08-05
浅析计算机取证技术08-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 答案
- 指导
- 实验
- 初三总复习5锐角三角函数
- 2018最新2018大一入党申请书3000字-优秀word范文(11页)
- 26系统精讲-基础护理知识和技能-第十六节 医疗和护理文件的书写
- 2020年新编测绘专业工作总结(1)名师精品资料
- 上海交通大学附属中学高二第二学期期末考试数学试卷(含参考答案)
- 6、卫生居民小区、卫生先进单位的通知
- 经济法里的一些内容口诀记忆法关于票据提示承兑及付款的期限问题
- 交通事故中的痕迹检验
- 管理信息系统作业题
- 人力资源管理复习资料
- 2012-2013学年影视文学期末考试试题及答案
- 对比中的童年怀旧 - 解读《社戏》
- 初三化学第一章单元检测
- 生物化学(名词解释及简答题)
- 第一单元小学三年级下册数学第一单元位置与方向的教案
- 2016高三高考化学方程式之元素及其化合物性质部分
- 河南电大2017行政管理专科《法学概论》(教考一体化)网上考试题库完整
- 2016女子礼仪期末考试满分答案讲解
- 2013北京各区中考数学一模综合压轴题汇报(全)及答案
- 六年级科学下册检测题