人人范文网 范文大全

C语言实验报告

发布时间:2020-03-03 05:34:47 来源:范文大全 收藏本文 下载本文 手机版

C语言程序设计实验

--------指针应用实验

========================

山东农业大学实验报告

课程名称: c语言程序设计实验 学院: 水利土木工程学院 专业: 道路桥梁与渡河工程 班级: 2013级2班 姓名:

学号: 20133498

C语言与软件技术基础

实 验 报 告

课程名称 指导老师 班

实验名称 实验时间 姓

实验地点 提交时间 座

一、实验目的和要求

1、掌握指针和间接访问的概念,会定义和使用指针变量。

2、能正确使用数组的指针和指向数组的指针变量。

3、能正确使用字符串的执针和指向字符串的指针变量。

二、实验环境和方法

实验方法:

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

(三)根据实验内容,编译程序。

实验环境:Windows xp Visual C++6.0

三、实验内容及过程描述

实验内容:编译以下题目的程序并调试运行。

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。

①先编写一个程序,以处理输入3个整数,按由小到大顺序输出。运行程序,分析结果。 ②把程序改为能处理输入3个字符串,按由小到大的顺序输出。运行此程序,分析结果。 ③比较以上两个程序,分析处理整数与处理字符串有什么不同?例如: (a)怎样得到指向整数(或字符串)的指针。 (b)怎样比较两个整数(或字符串)的指针。 (c)怎样交换两个整数(或字符串)。

2、将一个3×3的整数型二维数组转置,用一个函数实现之。 在主函数中用scanf函数输入以下数组元素:

19

将数组0行0列元素的地址作为函数实参,在执行函数的过程中实现行列互换,函数调用结束后在主函数中输出已转置的二维数组。

请思考: ① 二维数组的指针,某一行的指针、某一元素的指针个代表什么含义?应该怎么表示? ② 怎样表示i行j列元素及其地址。

3、将n个数按输入时顺序的逆序排列,用函数实现。 ①在调用函数时用数组名作函数实参。

②函数实参改为用指向数组首元素的指针,形参不变。 ③分析以上二者的不同。

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ①函数形参用指针变量。 ②函数形参用数组名。 实验步骤: ① 进入Visual C++ 6.0集成环境。 ② 输入自己编好的程序。 ③ 检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。 ④ 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤ 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正确。 以下是各题源代码:

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。 程序①

#include int main() { void swap(int *p1,int *p2); int n1,n2,n3; int *p1,*p2,*p3; printf(\"请输入3个数n1,n2,n3:\"); scanf(\"%d,%d,%d\",&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); printf(\"排序结果为:%d,%d,%d\\n\",n1,n2,n3); return 0; }

void swap(int *p1,int *p2) {int p; p=*p1;*p1=*p2;*p2=p; } 程序②

#include #include int main() { void swap(char *,char *); char str1[20],str2[31],str3[20]; printf(\"请输入3行字符:\\n\");

printf(\"请输入3行字符:\\n\"); 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); printf(\"排序结果为:\\n\"); printf(\"%s\\n%s\\n%s\\n\",str1,str2,str3); return 0; }

void swap(char *p1,char *p2) {char p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); }

2、将一个3×3的整数型二维数组转置,用一个函数实现之。 #include int main() {void move(int * pointer); int a[3][3],*p,i,j; printf(\"请输入一个3×3数组:\\n\"); for(i=0;i

3、将n个数按输入时顺序的逆序排列,用函数实现。

#include int main() {void sort(char * p,int m); int i,n; char * p,num[20]; printf(\"请输入n为:\"); scanf(\"%d\",&n); printf(\"请输入%d个数:\\n\",n); for(i=0;i

printf(\"逆序排列为:\\n\"); for(i=0;i

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 分别在程序中按以下两种情况处理: ① 函数形参用指针变量。

#include int main() {int length(char * p); int len; char str[20]; printf(\"请输入一个字符串:\\n\"); scanf(\"%s\",str); len=length(str); printf(\"该字符串长度为%d.\\n\",len); return 0; } int length(char * p) {int n; n=0; while (* p!=\'\\0\') {n++; p++; } return(n); }

②函数形参用数组名。

#include int main() {int length(char str[]); int len; char str[20]; printf(\"请输入一个字符串:\\n\"); scanf(\"%s\",str); len=length(str); printf(\"该字符串长度为%d.\\n\",len); return 0; } int length(char str[20]) int length(char str[20]) {int n; char * p; p=str; n=0; while (* p!=\'\\0\') {n++; p++; } return(n); }

四、实验结果:

1、输入3个整数,按由大到小的顺序输出,然后将程序改为:输入3个字符串,按由小到大顺序输出。 程序①结果:

结果分析:

本程序应用指针,在swap函数中交换指针p所指向的单元数值,使较小的数放前面从而达到排序的效果。 程序②结果:

结果分析:

利用指针指向字符串数组,在strcmp函数中,将两个字符串自左向右逐个字符比较(按ASCCII码值大小比较),直到出现不同字符或遇到’\\0’为止。

③处理整数只需将指针指向整数的存储地址然后进行比较;处理字符串时,字符串是用数组存储的,在进行

大小比较时用指针指向数组首地址或数组名从而得到字符串指针。比较整数用swap函数,比较字符串用strcmp函数。

2、将一个3×3的整数型二维数组转置,用一个函数实现之。

① 二维数组中,某一行的指针是指指向该数组一行中的所有元素可表示为:*(a+i),i表示第i行;某一元素指针代表任意元素的指针*a[i][j],i表示第i行,j表示第j列。 ② 第i行j列表示为a[i][j],地址表示为&a[i][j]。

3、将n个数按输入时顺序的逆序排列,用函数实现。

结果分析:

用数组名作函数实参与用指向数组首元素的指针作函数实参都是用“值传递”的方法将数值变量的地址传递到函数接收。数组名表示数组首元素的地址,在值传递中把首元素的地址传递到函数接收处,所以函数形参采用指针变量。

4、写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 ①运行结果:

C语言实验报告

C语言实验报告

C语言实验报告

c语言实验报告

C语言实验报告

C语言实验报告

c语言实验报告

c语言 实验报告

c语言实验报告

C语言 实验报告

C语言实验报告
《C语言实验报告.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档