实验报告一(指针)
- 格式:doc
- 大小:23.00 KB
- 文档页数:5
第1篇一、实验目的1. 理解指针在排序算法中的应用。
2. 掌握几种常见的排序算法(如冒泡排序、选择排序、插入排序等)的指针实现方式。
3. 比较不同排序算法的效率,分析其优缺点。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容本次实验主要实现了以下排序算法:1. 冒泡排序2. 选择排序3. 插入排序以下是对每种排序算法的具体实现和性能分析。
1. 冒泡排序(1)算法原理冒泡排序是一种简单的排序算法。
它重复地遍历待排序的序列,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。
遍历序列的工作是重复地进行,直到没有再需要交换的元素为止。
(2)指针实现```cppvoid bubbleSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {if ((arr + j) > (arr + j + 1)) {int temp = (arr + j);(arr + j) = (arr + j + 1);(arr + j + 1) = temp;}}}}```(3)性能分析冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。
当待排序序列基本有序时,冒泡排序的性能较好。
2. 选择排序(1)算法原理选择排序是一种简单直观的排序算法。
它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
(2)指针实现```cppvoid selectionSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if ((arr + j) < (arr + minIndex)) {minIndex = j;}}int temp = (arr + i);(arr + i) = (arr + minIndex);(arr + minIndex) = temp;}}```(3)性能分析选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。
云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:C程序的运行环境和运行C程序的方法实验编号:1 实验日期:2012- 3-21 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的掌握C语言数据类型、运算符和表达式的运算规律二、实验内容例3.1—3.7三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:数据类型、运算符和简单的输入输出实验编号:2 实验日期:2012- 3-28 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:最简单的C程序设计——顺序结构程序设计、数据类型、运算符和表达式选择结构(if语句)程序设计实验实验编号:3 实验日期: 2012-4-11 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:选择结构程序设计实验实验编号:4 实验日期: 2012-4-18 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:循环控制程序设计实验(1)实验编号:5 实验日期: 2012-4-25 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:循环控制程序设计实验(2)实验编号:6 实验日期: 2012-5-2 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:一维数组数组程序设计实验实验编号:8 实验日期: 2012-5-9 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:二维数组、字符数组程序设计实验实验编号:9 实验日期: 2012-5-16 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(1)实验编号:9 实验日期: 2012-5-23 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(2)实验编号:10 实验日期: 2012-5-30 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:函数程序设计实验(3)实验编号:11 实验日期: 2012-6-6 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:指针程序设计实验(1)实验编号:12 实验日期: 2012-6-13 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:用户自己建立数据类型实验实验编号:13 实验日期: 2012-6-20 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结云南大学数学与统计学实验教学中心实验报告课程名称:计算机基础(二)学期: 2012春上机实践成绩:指导教师:杨宗文学生姓名:学生学号:实验名称:文件操作实验实验编号:14 实验日期:2012-6-27 实验学时:2学时学院:物理科学与技术学院专业:数理基础科学年级: 2011级一、实验目的二、实验内容三、使用环境VISUAL C++ 6.0四、调试过程五、总结。
C++上机实验报告实验名称:指针专业班级:姓名:学号:实验日期:目录1.实验目的2.实验内容3.程序代码4.调试结果5.实验心得1.实验目的(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针和指向数组的指针变量;(3)能正确使用字符串的指针和指向字符串的指针变量;(4)能正确使用引用型变量。
2.实验内容编程序并上机调试运行程序(要求用指针或引用处理)。
(1)输入3个整数,按由小到大的顺序输出。
编译一个程序,用指针变量作为参数。
(2)在上题的基础上将程序改为:输入3个字符串,按由小到大的顺序输出。
(3)用引用指针变量作为形参,实现3个整数由小到大输出。
(4)有n个人围成一圈,顺序排号。
从第1个人开始报数(从1~3报数),凡是到3的人退出圈子,问最后留下的人原来排在第几号。
(5)在主函数中输入10个字符串。
用另一个函数最它们排序。
然后在主函数输出这10个已排好的字符串。
要求用以下方法编程:Ⅰ.指向一维数组的指针座函数参数;Ⅱ.用string数组方法。
3.程序代码(1)#include<iostream>using namespace std;int main(){void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;cout<<"input three integers n1,n2,n3:";cin>>n1>>n2>>n3;p1=&n1;p2=&n2;p3=&n3;if(n1>n2) swap(p1,p2);if(n1>n3) swap(p1,p3);if(n2>n3) swap(p2,p3);cout<<"Now,the order is:"<<n1<<" "<<n2<<" "<<n3<<endl; return 0;}void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;}(2)Ⅰ.用字符数组方法的源程序#include<iostream>using namespace std;int main(){void swap(char *,char *);char str1[20],str2[20],str3[30];cout<<"input three line:"<<endl;gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); cout<<endl<<"Now,the order is:"<<endl; cout<<str1<<endl<<str2<<endl<<str3<<endl; return 0;}void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}Ⅱ.用string方法的源程序(程序中使用了指针和引用)#include<iostream>#include<string>using namespace std;int main(){void change(string &,string &);string str1=" ",str2=" ",str3=" ";char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];cout<<"input three line:"<<endl;gets(p1);gets(p2);gets(p3);if(str1>str2) change(str1,str2);if(str1>str3) change(str1,str3);if(str2>str3) change(str2,str3);cout<<endl<<"Now,the order is:"<<endl;cout<<str1<<endl<<str2<<endl<<str3<<endl; return 0;}void change(string &st1,string &st2) {string st;st=st1;st1=st2;st2=st;}(3)#include<iostream>using namespace std;int main(){void exchange(int *,int *,int *);int a,b,c,*p1,*p2,*p3;cin>>a>>b>>c;p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);cout<<a<<" "<<b<<" "<<c<<endl;return 0;}void exchange(int *q1,int *q2,int *q3){void swap(int *,int *);if( *q1> *q2) swap(q1,q2);if( *q1> *q3) swap(q1,q3);if( *q2> *q3) swap(q2,q3);}void swap(int *pt1,int *pt2){int temp;temp=*pt1;*pt1=*pt2;*pt2=temp;}(4)#include<iostream>using namespace std;int main(){int i,k,m,n,num[50],*p;cout<<"input number of person:n="; cin>>n;p=num;for(i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m<n-1){if(*(p+i)!=0) k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n) i=0;}while(*p==0)p++;cout<<"The last one is NO."<<*p<<endl; return 0;}(5)Ⅰ.指向一维数组的指针最函数参数的源程序#include<iostream>using namespace std;int main(){void sort(char (*p)[6]);int i;char str[10][6];char (*p)[6];cout<<"input 10 strings:"<<endl;for(i=0;i<10;i++)cin>>str[i];p=str;sort(p);cout<<"Now,the sequence is:"<<endl; for(i=0;i<10;i++)cout<<str[i]<<endl;return 0;}void sort(char (*s)[6]){int i,j;char temp[6],*t=temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[+j+1]);strcpy(s[j+1],t);}}Ⅱ.用string数组方法的源程序#include<iostream>#include<string>using namespace std;int main(){void sort(string*);int i;string str[10],*p=str;cout<<"input 10 strings:"<<endl;for(i=0;i<10;i++)cin>>str[i];sort(p);cout<<"Now,the sequence is:"<<endl; for(i=0;i<10;i++)cout<<str[i]<<endl;return 0;}void sort(string *s){int i,j;string temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(s[j]>s[j+1]){temp=s[j];s[j]=s[+j+1];s[j+1]=temp;}}4.调试结果(1)input three integers n1,n2,n3:54 -12 2 Now,the order is:-12 2 54(2)input three lines:I study very hard.C language is very interesting.He is a professor.Now,the order is:C language is very interesting.He is a professor.I study very hard.(3)12 6 876 12 87(4)input number of person:n=8The last one is No.7(5)input 10 strings: Now,the sequence is:China BurmaJapan ChinaKorea EgyptEgypt GhanaNepal ItalyBurma JapanGhana KoreaSudan LibyaItaly NepalLibya Sudan5.实验心得指针同数组一样,是C++中一个重要的概念,一个重要的知识点。
指针万用表实验报告指针万用表实验报告引言:指针万用表是一种常见的电子测量仪器,用于测量电压、电流、电阻等电学量。
本实验旨在通过使用指针万用表,对不同电路中的电压、电流和电阻进行测量,掌握其使用方法和注意事项。
实验一:电压测量在实验一中,我们将使用指针万用表测量直流电源的电压。
首先,将电源的正极与指针万用表的红色测试笔连接,将电源的负极与指针万用表的黑色测试笔连接。
然后,将指针万用表的旋钮调整至适当的量程,观察指针的偏转情况,并读取相应的电压数值。
实验结果表明,指针万用表能够准确测量直流电源的电压。
然而,需要注意的是,在测量过程中应避免过大的电压,以免损坏仪器或导致人身伤害。
实验二:电流测量在实验二中,我们将使用指针万用表测量电路中的电流。
首先,将电路中的一段导线与指针万用表的黑色测试笔连接,将另一段导线与指针万用表的红色测试笔连接。
然后,将指针万用表的旋钮调整至适当的量程,观察指针的偏转情况,并读取相应的电流数值。
实验结果表明,指针万用表能够准确测量电路中的电流。
然而,需要注意的是,在测量过程中应避免过大的电流,以免损坏仪器或导致人身伤害。
实验三:电阻测量在实验三中,我们将使用指针万用表测量电路中的电阻。
首先,将指针万用表的旋钮调整至适当的量程。
然后,将指针万用表的两个测试笔分别与电阻器的两个引脚相连接。
观察指针的偏转情况,并读取相应的电阻数值。
实验结果表明,指针万用表能够准确测量电路中的电阻。
然而,需要注意的是,在测量过程中应避免过大的电阻,以免损坏仪器或导致测量误差。
实验四:其他功能除了上述实验外,指针万用表还具有其他功能,如测量交流电压、测试二极管和晶体管等。
这些功能的使用方法与前述实验类似,只需要根据具体情况调整指针万用表的量程和测试笔的连接方式。
总结:通过本次实验,我们掌握了指针万用表的基本使用方法和注意事项。
指针万用表作为一种常见的电子测量仪器,具有准确、实用的特点。
然而,在使用过程中仍需谨慎操作,避免超出仪器的测量范围,以确保测量结果的准确性和仪器的安全性。
一、实验目的1. 理解指针在C语言中的作用,掌握指针的使用方法。
2. 学习矩阵相乘的基本原理,并利用指针实现矩阵相乘。
3. 提高编程能力和问题解决能力。
二、实验内容本次实验主要实现了两个矩阵的相乘,要求使用指针操作完成。
假设两个矩阵分别为A和B,其中A为m×k矩阵,B为k×n矩阵,乘积矩阵C为m×n矩阵。
三、实验原理矩阵相乘的原理如下:C[i][j] = Σ(A[i][k] B[k][j]) (k从0到k-1)其中,C[i][j]表示乘积矩阵C的第i行第j列的元素,A[i][k]表示矩阵A的第i 行第k列的元素,B[k][j]表示矩阵B的第k行第j列的元素。
四、实验步骤1. 定义两个二维数组A和B,分别代表两个矩阵。
2. 定义一个二维数组C,用于存储乘积矩阵。
3. 使用指针遍历两个矩阵,并计算乘积矩阵C的元素。
4. 输出乘积矩阵C。
五、实验代码```c#include <stdio.h>#define M 3 // 矩阵A的行数#define N 3 // 矩阵B的列数#define K 3 // 矩阵A的列数和矩阵B的行数int main() {int A[M][K] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int B[K][N] = {{9, 8, 7},{6, 5, 4},{3, 2, 1}};int C[M][N];// 计算乘积矩阵Cfor (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {for (int k = 0; k < K; k++) {(C + i N + j) += (A + i K + k) (B + k N + j); }}}// 输出乘积矩阵Cfor (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {printf("%d ", (C + i N + j));}printf("\n");}return 0;}```六、实验结果执行上述代码,输出乘积矩阵C为:```30 24 1884 69 54138 114 90```七、实验总结通过本次实验,我们掌握了指针在C语言中的使用方法,并成功实现了矩阵相乘。
贵州大学实验报告学院:计算机科学与信息专业:通信工程班级:实验内容1. 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。
2.编写函数reverse(char *s)的倒序递归程序,使字符串s倒序。
实验数据1、代码如下:#include<iostream>#include <string>using namespace std ;int main(){string Str;char ch ;int i=0,j=0;cout << "input str:" <<endl;getline(cin , Str );for ( i=0;i<Str.length();i++ ){if ( Str[i] >='a' && Str[i]<='z' || Str[i] >='A' && Str[i]<='Z' ) j++;}cout << "str="<<Str<<endl ;cout << "The number is:" << j <<endl ;system("pause");return 0;}运行结果:2、代码和运行结果:实验总结1、这次试验让我了解了在C++程序中的输入输出和字符串的统计。
2、掌握了一点点递归的方法。
3、通过这次试验觉得自己还是有很多不足,对基础知识掌握不牢。
指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。
表格内容可根据内容扩充。
《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:教材《C语言程序设计教程》第1章。
三、实验内容:1. 在Visual C++ 6.0环境下输入并运行下面的程序:#include <stdio.h>int main( ){printf("This is a C program.\n");return 0;}2. 在Visual C++ 6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。
#include <stdio.h>int main( ){int a,b,suma=3;b=4;sun=a+b;print(“%d+%d=%d\n”,a,b,sum);return 0;}四、实验结果:1. 运行结果(或截图):2. (1) 改正后的源程序:(2) 运行结果(或截图):五、思考题:1. 一个C程序上机的步骤有哪些?答:2. 组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3. 掌握基本算术运算符及其表达式的使用方法;4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。
二、预习内容:教材《C语言程序设计教程》第2章。
三、实验内容:1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。
实验6 指针一、实验目的1.掌握指针的基本概念和基本用法。
包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;2.掌握数组与指针的关系并能够利用指针解决数组的相关问题;3.掌握字符串与指针的关系并能够利用指针处理字符串的问题;4.掌握指针与函数的关系并能够利用指针处理函数问题;5.了解指向指针的指针的概念及其使用方法;6.能够使用指针进行程序设计。
二、实验环境PC微机Windows 操作系统Visual studio 2019三、实验内容与步骤1.实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。
要求:(1)整数数组由初始化方式输入。
任意整数由scanf函数输入;(2)实现过程采用指针处理;(3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。
代码实现:#include<stdio.h>int main(){int num[11], * p = &num[10];//预先指向末尾for (int i = 0; i < 10; i++) {scanf("%d", &num[i]);}//输入已排序的数据printf("原始数组:");for (int i = 0; i < 10; i++) printf("%d ", num[i]);printf("\n");int newnum;scanf("%d", &newnum);//输入待插入的数bool flag = true;//判断是否是插入末尾for (int i = 0; i < 10; i++) {if (newnum <= num[i]) {//找到插入位置flag = false;for (int j = 9; j >= i; j--) {//插入数据并将其他数据后移*p = num[j];p--;if (j == i) {num[j] = newnum;}}break;}}if (flag) *p = newnum;printf("插入后的数组:");for (int i = 0; i < 11; i++) printf("%d ", num[i]);return 0;}实验结果:①插入最左边②插入最右边:③插入中间:④插入相同的数:实验分析:结果和预期一致。
实验报告_实验1 复习、指针(1)(学号_姓名)一、实验目的:1、复习C语言的基本概念和基础知识;2、通过查看变量地址,了解不同类型数据在内存存储情况;理解用指针获取内存数据的两个关键点:首地址、数据类型(决定占用的存储单元的个数、数据存储方式);3、掌握指针变量的定义方法、=(赋值)、&(取地址)、*(取内容,间接访问);4、能够用指针变量作函数参数,实现通过函数调用得到n个要改变的值;5、注意避免使用悬空指针及swap函数的不正确写法。
二、实验内容1、(基础题)程序代码:# include <stdio.h># include <string.h>int main(void){char str[50];int k;int a,e,i,o,u;a=e=i=o=u=0;printf("请输入一个长度不超过50的字符串\n");gets(str);for(k=0;str[k];k++){if(str[k] == 'A' || str[k] == 'a')a++;if(str[k] == 'E' || str[k] == 'e')e++;if(str[k] == 'I' || str[k] == 'i')i++;if(str[k] == 'O' || str[k] == 'o')o++;if(str[k] == 'U' || str[k] == 'u')u++;}printf("\n");printf("该字符串中出现:\n");printf("A或a出现的次数:%d\n", a);printf("E或e出现的次数:%d\n", e);printf("I或i出现的次数:%d\n", i);printf("O或o出现的次数:%d\n", o);printf("U或u出现的次数:%d\n", u);return 0;}2、(基础题)#include<stdio.h>//定义结构体Student,学生姓名不超过10个字符//三门课程成绩均为百分制,只取整数struct Student{//代码段1char name[10];int chinese;int english;int math;int total;};int main(){//定义结构体数组stud[3]//对input()、sum()、print()三个函数进行声明//调用input()、sum()、print()三个函数//代码段2struct Student stud[3];void input(struct Student s[], int n);void print(struct Student s[], int n);void sum(struct Student s[], int n);input(stud, 3);sum(stud, 3);print(stud, 3);return 0;}//定义输入n名学生的姓名、三门课程成绩的函数。
C语⾔实验报告答案南京信息⼯程⼤学实验(实习)报告实验(实习)名称:指针及其应⽤⽇期:得分:指导⽼师:院系:应⽤⽓象学院专业:班次:姓名:学号:实验⽬的(1)掌握变量的指针及其基本⽤法。
(2)掌握⼀维数组的指针及其基本⽤法。
(3)掌握指针变量作为函数的参数时,参数的传递过程及其⽤法。
⼀.实验内容(1)运⾏以下程序,并从中了解变量的指针和指针变量的概念。
(2)运⾏以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题:1.程序的功能是什么?2.在开始进⼊循环体之前,p指向谁?3.循环每增加⼀次,p的值(地址)增加多少?它指向谁?4.退出循环后,p指向谁?5.你是否初步掌握了通过指针变量引⽤数组元素的⽅法?(3)先分析以下程序的运⾏结果,然后上机验证,并通过此例掌握通过指针变量引⽤数组元素的各种⽅法。
(4)编写函数,将n个数按原来的顺序的逆序排列(要求⽤指针实现),然后编写主函数完成:①输⼊10个数;②调⽤此函数进⾏重排;③输出重排后的结果。
⼆.分析与讨论(1)指针的定义⽅法,指针和变量的关系。
定义⽅法:数据类型 *指针变量名;如定义⼀个指向int型变量的指针——int *p;则我们可以继续写如下代码——int a = 4;p = &aprintf("%d", *p);在这⾥,我们定义了⼀个变量a,我们把它理解为内存空间连续的4个字节(int型占⽤4字节),则这4个字节的空间保存着⼀个数4。
&是取地址符号,即把变量a的地址(即这4个字节的⾸地址)赋给指针p (记住指针p的类型和变量a的类型要保持⼀致,否则的话,要进⾏类型转换)。
这样⼦,指针p就保存着变量a的地址。
我们如果把指针p当做内存空间⾥⾯另外⼀个连续的4个字节,那么这4个字节保存的数就是变量a的地址。
printf("%d",*p)和printf("%d",a)的结果是⼀样的。
指针
实验一指向变量得指针变量编程
一.实验目得与要求
1、理解指针得概念。
2、掌握指针变量得定义与使用。
3、掌握指针变量作为函数参数得使用方法。
二.实验题目
1、用指针变量编程,求数组中得最大元素与最小元素.
#include"stdio、h”
#defineN10
voidmain()
{
ﻩvoidmaxmin(int arr[],int *pt1,int *pt2,intn);
int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;ﻩp1=&a; p2=&b;
ﻩmaxmin(array,p1,p2,N);
printf("max=%d,min=%d\n",a,b);
}
void maxmin(int arr[],int *pt1,int *pt2,int n)
{
int i;
ﻩ*pt1=*pt2=arr[0];
for(i=1;i<N;i++)
{
ﻩif(arr[i]>*pt1) *pt1=arr[i];
if(arr[i]〈*pt2) *pt2=arr[i];
ﻩ}
}
实验二字符指针编程
一.实验目得与要求
1、理解字符指针得概念。
2、掌握字符指针得定义与使用。
二.实验题目
2、用字符指针编程求出字符串中指定字符得个数。
例如:假设字符串为:“abcdaghckpamn”,指定字符为‘a’,则结果为3.
要求:从main函数输入字符串与指定字符,输出结果。
#include<stdio、h>
#defineMAXLEN 20
int CountLetter(char*str, char ch)
{
ﻩint time = 0;
while(*str)
ﻩif(*str++ ==ch)
ﻩtime++ ;
return time;
}
int main()
{
ﻩchar str[MAXLEN] ;
char ch;
ﻩprintf("Please input a string:\n");
scanf(”%s”,str);
getchar();//get enter
printf("Input the a letter to count:");
scanf("%c", &ch);
ﻩprintf("%d\n",CountLetter(str, ch)) ;
}
实验三指向一维数组得指针变量编程
一.实验目得与要求
1、理解指针与数组之间得关系。
2、掌握用指针变量引用数组元素得方法。
3、掌握用指向一维数组得指针变量编程。
二.实验题目
3、已知一个整型数组,编程将其数组元素得值改为当前元素与相邻得下一个元素得乘积,数组得最后一个元素改为它与第0个元素得乘积,要求用指针变量实现。
例如:已知a[5]={1,2,3,4,5}; 计算后a[5]={2,6, 12, 20,10}。
#define N 5
#include”stdio、h”
voidf(int *p,intn)
{
int i;
ﻩfor(i=0;i〈n;i++)
*(p+i)=(*(p+i))*(*(p+(i+1)%n));
}
int main()
{
ﻩinta[N],i;
ﻩfor(i=0;i〈N;i++)
ﻩscanf("%d”,&a[i]);
ﻩf(a,N);
for(int j=0;j<N;j++)
ﻩﻩprintf("%d ",a[j]);
ﻩreturn 1;
}
实验四指向二维数组得指针变量编程
一.实验目得与要求
1、理解二维数组得地址表示方法。
2、掌握用指针变量表示二维数组得元素与元素得地址。
3、掌握用指向二维数组得指针变量得使用。
二。
实验题目
4、用一个二维数组score[4][3]来存放4个学生3门课得成绩,编程实现:
(1) 输入学生成绩;
(2)求出每个学生得平均分,将其保存在数组a[4]中;
(3) 求出每门课程得平均成绩,将其保存在数组b[3]中;
(4)输出数组a、b中成绩。
要求:用指向二维数组元素得指针变量实现。
#include "stdio、h"
void inputScore(float (*p)[3])//输入学生成绩
{
int i,j;
ﻩprintf("请输入学生成绩,每个学生3门课程成绩,共4名学生\n");
for (i = 0;i<4;i++)
{
printf(”请输入学生%d得3门课得成绩\n”,i+1);
ﻩﻩfor(j =0;j<3;j++)
ﻩscanf(”%f”,p[i]+j);
}
}
voidavstu(float*psco,float*pa)//求每个学生得平均成绩
{
ﻩint i,j;
ﻩfloatave;
for(i=0; i〈4;i++)
{
ﻩave=0;
for(j=0;j〈3;j++)
{
ave+=(*(psco+3*i+j));//累计每门课得成绩
ﻩﻩﻩ*(pa+i)=ave/3;
}
ﻩ}
}
voidavsco(float(*psco)[3],float *pb)//求每门课得平均成绩
{
ﻩint i,j;
ﻩfloatave;
for(j= 0;j<3;j++)//j表示列
{
ave=0;
for(i= 0;i<4;i++)// i表示行
{
ave+=(*(*(psco+i)+j));//累计每个学生得各科成绩ﻩﻩ*(pb+i)=ave/4;
}
}
}
voidoutputScore(float *pa,float *pb)//输出a,b中成绩
{
int i;
ﻩprintf(”每个学生得平均成绩为:\n”);
for (i =0;i<4; i++,pa++)
ﻩﻩprintf("%6、2f",*pa);
printf(”\n");
printf("每门课得平均成绩为:\n");
ﻩfor (i= 0;i<3; i++,pb++)
ﻩprintf("%6、2f",*pb);
printf("\n”);
}
void main()
{
float score[4][3],a[4],b[3];
ﻩinputScore(score);
avstu(*score,a);//或avstu(&score[0][0],a);或;avstu(score[0],a);
avsco(score,b);//行指针
ﻩoutputScore(a,b);
}。