实验4(数组、指针、字符串)

合集下载

c语言实验报告实验

c语言实验报告实验

c语言实验报告实验C 语言实验报告实验一、实验目的本次 C 语言实验的主要目的是通过实际操作和编程实践,加深对 C 语言基本语法、数据类型、控制结构、数组、指针等重要概念的理解和掌握,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程环境为 Visual Studio 2019,操作系统为Windows 10。

三、实验内容1、基本数据类型和运算符的使用定义不同类型的变量,如整数型(int)、浮点型(float、double)、字符型(char)等,并进行赋值和运算操作。

熟悉各种运算符的优先级和结合性,包括算术运算符(+、、、/、%)、关系运算符(>、<、>=、<=、==、!=)、逻辑运算符(&&、||、!)、位运算符(&、|、^、~、<<、>>)等。

2、控制结构的应用使用ifelse 语句实现条件判断,根据不同的条件执行相应的代码块。

运用 switch 语句进行多分支选择,处理不同的情况。

利用 for 循环、while 循环和 dowhile 循环实现重复执行的操作,例如计算数列的和、打印特定的图案等。

3、数组和字符串的操作定义和使用一维数组、二维数组,进行数组元素的访问、赋值和遍历。

掌握字符串的存储和处理方式,使用字符数组和字符串函数(如strlen、strcpy、strcmp 等)进行字符串的操作。

4、指针的应用理解指针的概念和指针变量的定义,通过指针访问变量和数组元素。

实现指针与数组、指针与函数的结合使用,体会指针在程序中的灵活运用。

5、函数的定义和调用编写自定义函数,实现特定的功能,如计算阶乘、判断素数等。

掌握函数的参数传递方式(值传递和地址传递),理解函数的返回值。

6、结构体和共用体的使用定义结构体类型,创建结构体变量,访问结构体成员。

了解共用体的概念和使用场景,比较结构体和共用体的区别。

四、实验步骤1、实验准备打开 Visual Studio 2019 开发环境,创建一个新的 C 语言项目。

C上机实验报告 实验四

C上机实验报告 实验四

精品文档实验四数组、指针与字符串1.实验目的1.学习使用数组2.学习字符串数据的组织和处理3.学习标准C++库的使用4.掌握指针的使用方法5.练习通过Debug观察指针的内容及其所指的对象的内容6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用7.分别使用字符数组和标准C++库练习处理字符串的方法2.实验要求1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。

2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。

3.编程实现两字符串的连接。

要求使用字符数组保存字符串,不要使用系统函数。

4.使用string类定义字符串对象,重新实现上一小题。

5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。

Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。

实现并测试这个类。

6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。

7. (选做)修改实验4中的选做实验中的people(人员)类。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。

其中“出生日期”定义为一个“日期”类内嵌对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

在测试程序中定义people类的对象数组,录入数据并显示。

3.实验内容及实验步骤1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。

程序名:lab6_1.cpp。

2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。

电大在线编程实验报告(3篇)

电大在线编程实验报告(3篇)

第1篇一、实验目的通过本次在线编程实验,旨在提高我的编程能力,加深对编程语言的理解,熟悉编程环境的使用,并培养良好的编程习惯。

同时,通过实际编程练习,解决实际问题,提升我的逻辑思维和问题解决能力。

二、实验内容本次实验选择了电大在线编程平台提供的C语言编程课程,主要包括以下内容:1. C语言基本语法;2. 数据类型、变量和运算符;3. 控制结构(分支和循环);4. 函数的定义和调用;5. 数组、指针和字符串操作;6. 文件操作。

三、实验步骤1. 准备工作:登录电大在线编程平台,选择C语言编程课程,熟悉编程环境和操作界面。

2. 编写代码:根据实验指导书,逐个完成实验任务,编写相应的C语言程序。

3. 调试程序:使用调试工具,检查代码中的错误,修正语法错误和逻辑错误。

4. 运行程序:成功编译并运行程序,观察输出结果,确保程序功能符合预期。

5. 总结与反思:对实验过程中遇到的问题进行总结,分析原因,提出改进措施。

四、实验结果与分析1. C语言基本语法:通过实验,我掌握了C语言的基本语法,包括数据类型、变量、运算符等。

2. 控制结构:实验中,我学会了使用if语句、switch语句进行分支控制,以及for循环、while循环进行循环控制。

3. 函数:通过编写和调用函数,我了解了函数的定义、参数传递和返回值等概念。

4. 数组、指针和字符串操作:实验中,我掌握了数组的定义、初始化、访问和操作方法,了解了指针的概念和用法,以及字符串操作函数。

5. 文件操作:通过实验,我学会了使用文件操作函数,实现文件的读写操作。

五、实验总结通过本次在线编程实验,我收获颇丰。

以下是我对本次实验的总结:1. 编程能力得到提高:通过实际编程练习,我对C语言有了更深入的了解,编程能力得到提升。

2. 问题解决能力增强:在实验过程中,我遇到了各种问题,通过查阅资料、请教同学和老师,我学会了如何分析和解决实际问题。

3. 良好的编程习惯:在实验过程中,我养成了良好的编程习惯,如规范命名、注释代码、代码复用等。

数组字符串和指针

数组字符串和指针
str2";
字符串连接函数strcat
• 将两个字符串连接成一个字符串
–char str1[30]={"Hello"}; –char str2[]={"World!"}; –cout<<strcat(str1,str2);
指针
•指针的定义 •使用简单的指针 •指针和数组 •指针和字符串
•指针数组 •多重间接访问 •指针、数组与函数 •main函数的参数
使用指针访问字符数组,大写字符 和小写字符之间相互转换
指针和字符串
• 在C++中,要访问一个字符串可以采用两种方
法 –使用字符数组; –使用指向字符的指针来指向一个字符串
将一个字符串反向输出
指针数组
• 如果一个数组中所有的元素都是同一种类型
的指针,那么这个数组就是一个指针数组 –int *p[10];
数组中每个元素都有自己的地址,并且这些地址是相连的。 这样,如果可以得到一个数组中某个元素的地址,又知道 这个数组中每个元素的数据类型,那么就可以通过一个指 针和在这个指针上进行的算术运算访问到这个数组中的所 有元素。
• 可以说访问数组元素的方法有两种
–一种是使用下标法访问数组元素, –一种方法是使用指针法访问数组元素 –使用指针法访问数组元素的效率要高于下标法。
字符数组来表示字符串
• C++要求在字符串的末尾增加一个字符的空间
用于保存一个字符串结束标记\0。 –要用字符数组来保存字符串时,要定义一个一维
字符数组,让这个字符数组的长度比要保存的字 符串的字符数目多1个,这样就有足够的空间保存 字符串中的所有有效字符和字符串结束标记\0
字符串输入函数gets

C 上机实验报告 实验四

C 上机实验报告 实验四

实验四数组、指针与字符串1.实验目的1.学习使用数组2.学习字符串数据的组织和处理3.学习标准C++库的使用4.掌握指针的使用方法5.练习通过Debug观察指针的内容及其所指的对象的内容6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用7.分别使用字符数组和标准C++库练习处理字符串的方法2.实验要求1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。

2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。

3.编程实现两字符串的连接。

要求使用字符数组保存字符串,不要使用系统函数。

4.使用string类定义字符串对象,重新实现上一小题。

5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。

Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。

实现并测试这个类。

6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。

7.(选做)修改实验4中的选做实验中的people(人员)类。

具有的属性如下:姓名charname[11]、编号charnumber[7]、性别charsex[3]、生日birthday、身份证号charid[16]。

其中“出生日期”定义为一个“日期”类内嵌对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

在测试程序中定义people类的对象数组,录入数据并显示。

3.实验内容及实验步骤1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。

程序名:lab6_1.cpp。

2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。

C程序设计_指针和字符串_实验报告

C程序设计_指针和字符串_实验报告

贵州大学《C程序设计实验》实验报告实验名称:专业电子信息科学与技术班级2008级1班姓名学号教师贵州大学理学院2010年{t=*p2;*p2=*p3;*p3=t;}printf("the order is:%d,%d,%d\n",*p1,*p2,*p3); }运行情况:程序改为:#include <stdio.h>#include<string.h>void main(){void swap(char *,char *);char str1[2],str2[20],str3[20];puts("in put three array:");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("the order is:%s,%s,%s\n",str1,str2,str3);}void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}运行情况:(2).将一个3X3的矩阵转置,用一函数实现之。

在主函数中用scanf函数输入以下矩阵元素:l 3 57 9 1113 15 19将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。

#include <stdio.h>void main(){t=*(px+3*i+j);*(px+3*i+j)=*(px+3*j+i);*(px+3*j+i)=t;}}}运行情况:(3).有n个人围成一圈,顺序排号。

c++实验报告实验三

c++实验报告实验三

《面向对象程序设计》实验三一、实验项目名称:数组、指针和字符串二、实验目的1.掌握数组的使用方法2.学习字符串数据的组织和处理3.掌握指针的使用方法4.掌握new和delete动态分配内存空间三、实验内容1.回文测试运用所学的字符串、数组和指针的相关知识编写一个程序,测试输入的字符串是不是回文。

所谓回文就是顺读和倒读都一样的字符串。

所编写的回文测试程序要求忽略所有的空格和标点符号,并忽略一个字母的大写和小写形式。

●回文示例:Able was I ere I saw Elba.Madam,I’m Adam.A man,a plan,a canal,PanamaRats live on no evil starradardeedracecar●输入输出要求输入:任意字符串(可包含空格或标点符号)输出:测试结果。

2.任意输入一个N×N的矩阵,将其转置后输出。

●输入输出要求输入:1 2 34 5 67 8 9输出:1 4 72 5 83 6 9实验程序1、#include<iostream>#include<string>using namespace std;void swap(char & v1,char & v2){char temp=v1;v1=v2;v2=temp;}string reverse(const string &s){int start=0;int end=s.length();string temp(s);while(start<end){end--;swap(temp[start],temp[end]);start++;}return temp;}string makelower(const string &s){string temp(s);for(int i=0;i<s.length();i++)temp[i]=tolower(temp[i]);return temp;}string remove_punct_space(const string &s){string no_p_s;for(int i=0;i<s.length();i++){string aChar=s.substr(i,1);if(!ispunct(aChar.at(0))&&!isspace(aChar.at(0)))no_p_s=no_p_s+aChar;}return no_p_s;}bool ispal(const string &s){string str(s);str=makelower(str);string lowerstr=remove_punct_space(str);return (lowerstr==reverse(lowerstr));}int main(void){string str;cout<<"请输入回文测试\n";getline(cin,str);if(ispal(str))cout<<str<<"是回文\n";elsecout<<str<<"不是回文\n" ;return 0;}2、#include<iostream>using namespace std;void su(int*mao,int n){int i,j,k;for(i=0;i<n;i++)for(j=0;j<n;j++){k=*(mao+i*n+j);*(mao+i*n+j)=*(mao+j*n+i);*(mao+j*n+i)=k;}}int main(){int n,i,j;int*p;cout<<"请输入矩阵维数:";cin>>n;p=new int[n*n];cout<<"输入矩阵的元素"<<' ';for(i=0;i<n;i++)for(j=0;j<n;j++){cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";cin>>p[i*n+j];}cout<<"输入的矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<p[i*n+j]<<' ';cout<<endl;}su(p,n);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<p[j*n+i]<<' ';cout<<endl;}}。

实验四 数组和字符串

实验四  数组和字符串

实验四数组和字符串
1.实验目的
理解c语言中数组和字符串的基本概念,能熟练应用数组和字符串进行编程,熟悉VC编译环境提供的String函数,同时也能对字符串类有一定的了解。

2.实验平台 Visual C++
3.实验内容
实验题4.1:编写程序,求字符串的逆(即和原来的存储次序相反)。

要求用递归和非递归两种方法编写。

提示:第一个字符和最后一个交换,直到中间一个为止。

字符串的长度s函数为strlen(s)。

实验题4.2:设有10个学生的成绩分别为89、90、84、78、84、67、88、92、79、73,存放在数组 stu中,输出它们的平均成绩aver(保留两位小数)和低于平均成绩的人数。

(也可以用其它的数据进行程序测试)
实验题4.3:利用数组,输出8行杨辉三角形,然后推广到n 行杨辉三角形的输出。

实验题4.4: 编写一个函数实现字符串拷贝。

思考题:
char a[ ]=”ABCDEF”;
char b[ ]={‘A’,’B’,’C’,’D’,’E’,’F’};
则以下叙述中正确的是( )
A)a数组与b数组完全相同
B)a数组与b数组长度相同
C)a数组与b数组中存放的都是合法的字符串
D)a数组比b数组多占存储空间。

数组指针与字符串

数组指针与字符串

分行给二维数组赋初值
例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
可以对部分元素赋初值
例如:static int a[3][4]={{1},{0,6},{0,0,11}};
数组作为函数参数
数 数组元素作实参,与单个变量一样。
<< " is " << sum << endl; A[i][0]=sum; } }
void main(void) { int Table[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++)
数组元素所属类的构造函数
数 若不声明构造函数,则采用默认构造函数。
各元素对象的初值要求为相同的值时,可
组 以声明具有默认形参值的构造函数。
各元素对象的初值要求为不同的值时,需 要声明带形参的构造函数。
当数组中每一个对象被删除时,系统都要 调用一次析构函数。
例6-3 对象数组应用举例

//Point.h #if !defined(_POINT_H)
{
pv = &i;
pint = (int *)pv;
}
指向常量的指针

不能通过该指针来改变所指对象的值,但指针 本身可以改变,可以指向另外的对象。
例1

char *name1 = "John";
*name1='A';
例2

实验4指针与字符串

实验4指针与字符串

面向对象程序设计实验报告南方医科大学医工学院实验报告四实验名称:指针与字符串学时安排:课内1+课外3实验类别:综合性实验实验要求:3人1组完成人:学号姓名 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄一、实验目的和任务1)掌握数组和指针的概念、字符串的存储方式;2)掌握动态内存分配的方法;3)掌握利用指针实现字符串处理的方法。

二、实验原理介绍综合性实验;通过指针和数组,完成字符串处理。

三、实验设备介绍软件需求: Visual C++ 6.0硬件需求:建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB 的自由硬盘空间、CD-ROM驱动器、24位真彩色显示卡、彩色显示器。

四、实验内容1、分别编写下列字符串处理函数(1)char *strcat1(char *s,const char *ct);将串ct接到串s的后面,形成一个长串。

【例6.7】以数组为参数,现用指针为参数。

(2)int strlen1(const char * s);求字符串长度的函数,返回串长(不包括串结束符)。

(3)char * reverse (char *);反置字符串s,即可将“break”成为“kaerb”。

(4)char * strchr( const char *cs,char c);查找字符c在串cs中第一次出现的位置,返回指向该字符的指针,若没有出现则返回NULL。

#include<iostream>using namespace std;char* strcat1(char* s,const char* ct){char* st=s;while(*s) s++;//*s作为条件,等效*s!=0while(*s++=*ct++);return st;}int strlen1(const char* s){int i=0;while(*s++) i++;return i;}char* reverse (char* s){char temp,* temp1=s,* temp2=s;while(*temp2) temp2++;temp2--; //指针移回串尾while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,重合或交错时停止temp=*temp1;*temp1=*temp2;*temp2=temp;temp1++;temp2--;}return s;}char* strchr( const char*cs,char c){while(*cs!=c&&*cs) cs++;if(*cs==0) cs=NULL; //未找到返回NALLreturn (char*)cs;}int main(){char a[120]="LiMing";char b[80]="is a student of Southern Medical University";char c[40]="Southern Medical";char *cp;cout<<a<<endl;cout<<b<<endl;strcat1(a,b);cout<<"字符串连接后:"<<endl;cout<<a<<endl<<endl; //打印字符数组acout<<"字符串长度为:"<<strlen1(a)<<endl<<endl;cout<<c<<endl<<endl;cp=strchr(c,'u');if(cp==NULL) cout<<"未找到u"<<endl<<endl;else cout<<cp<<endl<<endl; //找到输出由该字符开始的剩余串cp=strchr(c,'a');if(cp==NULL) cout<<"未找到a"<<endl<<endl;else cout<<cp<<endl<<endl;cout<<reverse(c)<<endl<<endl;return 0;}交作业:双号)命名:实验三四13200880200010王浩文.doc内容:P185 5-3,5-13 和下面的2拷贝运行结果,截屏周日之前上交2、在实验报告二的基础上完成:设计一个学生类Stud,数据成员包括:no(学号)、name(姓名)和deg(成绩)和个静态变量sum和num,分别存放总分和人数;成员函数包括:两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,一个静态成员函数avg(),用于计算平均分。

实验-指针与字符串

实验-指针与字符串
C语言程序设计 语言程序设计 实验
指针与字符串
编程序并调试运行程序(要求用指针处理 。 编程序并调试运行程序 要求用指针处理)。 要求用指针处理 (1)将一个输入字符串中的字母删除。 (1)将一个输入字符串中的字母删除。 将一个输入字符串中的字母删除 提示,判断 不是字母 不是字母: 提示,判断*p不是字母: 1、!(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z') 、 2、字符串输入可以用gets()函数 、字符串输入可以用 函数 (2) 将一个字符串中的所有数字字符取出构成 一个整数。 一个整数。
语言程序设计》 《C语言程序设计》教案 语言程序设计 实验11 实验 第2页 页
编程序并调试运行程序(要求用指针处理 。 编程序并调试运行程序 要求用指针处理)。 要求用指针处理 (2) 将一个字符串中的所有数字字符取出构成: 判断是否为数字: (*p>='0'&&*p<='9') 注意构造整数时, 要向前进位( 每次乘10 10) 2 、 注意构造整数时 , 要向前进位 ( 每次乘 10 )
语言程序设计》 《C语言程序设计》教案 语言程序设计
实验11 实验
第3页 页

c 指针实验报告

c  指针实验报告

c 指针实验报告
C指针实验报告
在计算机编程中,指针是一种非常重要的概念。

它可以让程序员直接访问内存中的数据,从而实现更高效的操作。

本次实验旨在通过C语言编程实践,加深对指针的理解和运用。

实验一:指针的基本概念
首先,我们创建了一个简单的C程序,通过指针来访问一个整型变量的地址和数值。

通过这个实验,我们深入了解了指针的概念和基本操作。

实验二:指针的运算
接着,我们进行了指针的运算实验。

我们对指针进行了加法和减法运算,并观察了其结果。

这个实验帮助我们更好地理解了指针的运算规则和原理。

实验三:指针和数组
在这个实验中,我们将指针和数组结合起来使用。

我们通过指针来访问数组的元素,并进行了一些简单的操作。

这个实验让我们更加熟悉了指针和数组之间的关系。

实验四:指针和函数
最后,我们进行了指针和函数的实验。

我们编写了一些函数,其中包括了指针作为参数和返回值。

通过这个实验,我们学会了如何在函数中使用指针,并且理解了指针在函数调用中的作用。

通过这些实验,我们对C指针有了更深入的理解和掌握。

指针作为C语言中的重要概念,对于程序员来说是必须要掌握的。

通过实践,我们不仅加深了对指针的理解,还提高了编程能力和技术水平。

希望通过这次实验,能够对大家有
所帮助,也希望大家能够继续深入学习和探索C语言的奥秘。

C语言实验4 数组和字符串

C语言实验4 数组和字符串

实验4 数组和字符串实验要求:1.掌握一维数组、二维数组及字符数组的定义、赋值和使用;2.掌握一维、二维数据及字符数组的赋值和和输出方法;3.了解字符串的存储及应用;4.掌握“冒泡”排序法的应用;读程序:1.利用循环对数组进行赋值和输出:将任意4个实型数赋给数组a,然后输出数组a。

#include<stdio.h>main(){float a[4];int i;printf(“Please input 4 float number:”);for(i=0;i<4;i++)scanf(“%f”,&a[i]); /*第一个for循环是对数组赋值,i控制数组元素个数*/for(i=0;i<4;i++)printf(“%f ”,a[i]); /*第二个for循环,依次输出每个数组元素*/}如果在对数组元素进行赋值的时候,想在输入每个数之前显示对应的数组名称,第一个for循环可改成如下形式:for(i=0;i<4;i++){printf(“a[%d]=”,i);scanf(“%f”,&a[i]);}输出时要显示数组名称可将第二个for循环中的printf函数改为printf(“a[%d]=%f ”,i,a[i]);2.利用双循环对二维数组进行赋值和输出:将数据3,0,-2,11,-5,10赋给一个2行3列的二维数组,输出这个二维数组。

#include<stdio.h>main(){int i,j,a[2][3]={{3,0,-2},{11,-5,10}};for(i=0;i<2;i++) /*外层循环控制行数*/for(j=0;j<2;j++) /*内循环控制列数*/printf(“a[%d][%d]=%d”,i,j,a[i][j]);}3.将下列矩阵中的第一行和第4行对调。

#include "stdio.h"main(){int a[4][4]={1,2,3,4,15,26,37,48,11,21,31,41,4,3,2,1};int i,j,c;for(j=0;j<4;j++) /*for 循环交换第一行和第4行的数据*/{c=a[0][j];a[0][j]=a[3][j];a[3][j]=c;}for(i=0;i<4;i++) /*for 循环输出新的数组元素*/{printf("\n"); /*按行输出,每输出一行就回车换行*/for(j=0;j<4;j++)printf("%d ",a[i][j]);}}实验:1.编写程序,将1,2,3这三个数赋给数组a ,将5,6,7赋给数组b ,将两数组对应元素相加的和赋给数组c ,输出数组c 。

C语言 实验4指针实验

C语言 实验4指针实验

实验4指针实验一、实验目的(四号黑体)(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;(2)能够正确使用数组的指针和指向数组的指针变量;(3)能够正确使用字符串的指针和指向字符串的指针变量;(4)能正确使用指向函数的指针变量。

二、实验原理(算法分析(包括流程图))1、a是二维数组,p和形参 pointer是指向整型数据的指针变量,P指向数组0行0列元素a[0][0]。

在调用move函数时,将实参p的值&a[0][0]递给形参 pointer,在move函数中将a[i][j]与a门的值互换。

由于a数组的大小是3×3,而数组元素是按行排列的,因此a[j在a数组中是第(3×i+j)个元素,例如,a[2[1是数组中第(3×2+1)个元素,即第7个元素(序号从0算起)。

a[i[j的地址是( pointer+3*i+j),同理,a[j][i]的地址是( poInter+3*j+i)。

将*( pointer+3*i+j)和*( pointer+3*j+i)互换,就是将a[i][j]和[i][j]互换算法如下:2、当p1所指向的字符比p2大时,t为正数(即,p1所指向的字符的ASC II码,减去p2所指向的字符的ASC II码大于0),当p1所指向的字符比p小大时,为负数,当p1所指向的字符与p2一样大时,t=0;所以实现上诉命令的算法如下:三、实验过程原始记录(数据、图表、计算等)1、(1)本题目要求编程实现矩阵的转置,并且在实现这一操作时只能使用指针,因此解决这一问题时,应注意下面几个问题:数组名是一个指针变量,但该指针变量是一个常量;int a[10] 中的a 的类型等同于 int *p 定义的指针变量p;int a[10][5]中定的a的类型等同于 int (*p)[5];(2)程序代码如下:#include <stdio.h>int main(){void move(int * pointer);int a[3][3], * p, i;printf("输入矩阵:\n");for (i = 0; i < 3; i++)scanf_s("%d%d%d", &a[i][0], &a[i][1], &a[i][2]);p = &a[0][0];move(p);printf("转置后:\n");for (i = 0; i < 3; i++)printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);return 0;}void move(int * pointer){int i, j, t;for (i = 0; i < 3; i++)for (j = i; j < 3; j++){t = *(pointer + 3 * i + j);*(pointer + 3 * i + j) = *(pointer + 3 * j + i);*(pointer + 3 * j + i) = t;}}2、程序代码如下:#include "stdio.h"int main(int argc, char* argv[]){int strcmp(char* p1, char* p2);char s[100], a[100];printf_s("输入一串字符1: ");gets_s(a);printf_s("输入一串字符2: ");gets_s(s);printf("%d\n", strcmp(a, s)); return 0; }int strcmp(char* p1, char* p2){int t;t = *p1 - *p2;for (;t == 0 && p1!="0"&&*p2!='0';) {p1++;p2++;t = *p1 - *p2;}return t;}四、实验结果及分析1、输入矩阵结果如下:2、(1))输入第一个字符串比第二个小结果如下:分析:a 的ASCII代码是97,c的是99,所以二者相减t=-2(2)第一个字符串比第二个大(3)输入完全相同的字符串五、附录(自己实现的源代码)1、#include <stdio.h>int main(){void move(int * pointer);int a[3][3], * p, i;printf("输入矩阵:\n");for (i = 0; i < 3; i++)scanf_s("%d%d%d", &a[i][0], &a[i][1], &a[i][2]);p = &a[0][0];move(p);printf("转置后:\n");for (i = 0; i < 3; i++)printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]);return 0;}void move(int * pointer){int i, j, t;for (i = 0; i < 3; i++)for (j = i; j < 3; j++){t = *(pointer + 3 * i + j);*(pointer + 3 * i + j) = *(pointer + 3 * j + i);*(pointer + 3 * j + i) = t;}}2、#include "stdio.h"int main(int argc, char* argv[]){int strcmp(char* p1, char* p2);char s[100], a[100];printf_s("输入一串字符1: ");gets_s(a);printf_s("输入一串字符2: ");gets_s(s);printf("%d\n", strcmp(a, s)); return 0;}int strcmp(char* p1, char* p2){int t;t = *p1 - *p2;for (;t == 0 && p1!="0"&&*p2!='0';){p1++;p2++;t = *p1 - *p2;}return t;}。

数组、字符处理实验报告[五篇范例]

数组、字符处理实验报告[五篇范例]

数组、字符处理实验报告[五篇范例]第一篇:数组、字符处理实验报告验实验 4数组1.实验目的和要求(1)掌握一维数组与二维数组的定义、使用及初始化方法。

(2)学习数组作为函数参数的用法。

(3)掌握字符数组和字符串函数的使用方法。

(4)掌握与数组有关的常用排序算法,进一步理解模块化程序设计的方法。

(5)掌握字符、字符串的输入/输出方法。

(6)掌握字符数组的使用。

(7)学会使用字符串的指针和指向字符串的指针变量。

2.实验内容:实验指导书中的实验六、实验七3.实验步骤实验六数组部分:6-1:解决问题的算法或源程序代码:程序的运行测试结果截图(考虑各种情况下的运行结果):6-2:该程序完整的源程序代码是:程序运行结果截图:6-3 :该程序完整的源程序代码是:程序运行结果截图:6-4.:解决问题的关键算法的源程序代码是:程序运行结果截图:6-5:解决问题的关键算法的源程序代码是:程序运行结果截图:6-6(选作):我使用的算法为:请用文字描述一下程序运行结果截图:6-7(选作):我使用的算法为:程序运行结果截图:7-1 该程序的功能是:去除空格后的字符串程序运行结果截图:7-2:解决问题的关键算法的源程序代码是:程序运行结果截图:7-3:解决问题的关键算法的源程序代码是:程序运行结果截图:7-4:解决问题的关键算法的源程序代码是:程序运行结果截图:7-5:解决问题的关键算法的源程序代码是:程序运行结果截图:7-6:解决问题的关键算法的源程序代码是:程序运行结果截图:、实验小结一维数组与二维数组使用和初始化,数组作为函数参数的用法还是不太熟练。

掌握了与数组有关的常用排序算法,字符、字符串的输入输出方式。

进一步掌握使用字符串的指针和指向字符串的指针变量的方法。

掌握了字符串数组和数字数组的运算。

第二篇:实验:字符数组与字符串实验11:字符数组与字符串一、实验目的1、理解字符数组和字符串的概念。

2、掌握字符数组的定义、初始、数组元素引用、输入输出。

指针的应用实验报告实验总结

指针的应用实验报告实验总结

指针的应用实验报告实验总结
指针是C语言中一个非常重要的概念,它可以使程序更加灵活和高效。

本实验通过实际应用,进一步深入了解了指针的使用方法和作用。

在本次实验中,我们首先学习了指针的基本概念和语法。

指针是一个变量,用来存储其他变量的内存地址。

通过指针,我们可以直接访问和修改其他变量的值,而不需要通过变量名。

在实验中,我们通过定义指针变量并使用取址运算符“&”将其指向其他变量的内存地址。

接着,我们学习了指针与数组之间的关系。

数组名本身就是一个指针,它存储了数组首元素的地址。

我们可以通过指针来遍历数组,并对数组元素进行操作。

同时,我们还学习了指针与字符串的关系。

字符串实际上是一个以空字符结尾的字符数组,通过指针,我们可以对字符串进行读取和修改。

在实验过程中,我们还学习了指针和函数的结合使用。

通过指针参数,我们可以在函数内部直接修改传入的变量,而不需要返回值。

这种方式可以使函数更加高效和灵活。

我们还学习了指针的动态内存分配,通过动态分配内存,我们可以在程序运行时动态地申请和释放内存,提高程序的灵活性。

通过本次实验,我深刻理解了指针的概念和应用。

指针作为C语言中的一项重要特性,能够极大地拓展程序的功能和性能。

掌握指针的使用方法,可以使程序更加高效、灵活和易于维护。

在以后的编程工作中,我将更加深入地学习和应用指针,提高自己的编程能力。

实验四 数组、指针与字符串

实验四  数组、指针与字符串

实验报告课程:面向对象技术学号:1010431079 姓名:郝祥海班级:2010级计算机软件(嵌入式系统)1班教师:周晓计算机科学与技术系实验四数组、指针与字符串一、实验目的及要求1.学习使用数组数据对象;2.掌握字符串数据的组织和处理;3.学习标准C++库的使用;4.掌握指针的使用;5.练习通过Debug观察指针的内容及其所指的对象的内容;6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用;7.学习使用字符数组和标准C++库练习处理字符串的方法。

二、实验环境硬件:计算机软件:Microsoft Visual C++三、实验内容1.编写并测试3×3矩阵转置函数,使用动态内存分配生成动态数组保存3×3矩阵,使用指针实现函数的功能。

2.使用string类声明字符串对象,编成实现两字符串的连接。

四、实验结果(附截图)五、总结通过这次实验,我学会了动态创建多维数组,了解了指针作为函数的形参的三个作用:第一个作用是使实参与形参指针指向共同的内存空间,以达到参数双向传递的目的。

第二个作用,就是减少函数调用时数据传递的开销。

第三个作用,通过指向函数的指针传递函数代码的首地址。

学会了string类的一些方法。

六、附录(源程序清单)//Juzhen.cpp#include<iostream>using namespace std;void move(int (*p)[3]){int i,j,k;for(i=0;i<3;i++)for(j=0;j<i;j++){k=p[i][j];p[i][j]=p[j][i];p[j][i]=k;}}int main(){int (*cp)[3]=new int[3][3];int i,j;cout<<"输入矩阵的元素"<<endl;for(i=0;i<3;i++)for(j=0;j<3;j++){cout<<"第"<<i+1<<"行第"<<j+1<<"个元素为:";cin>>cp[i][j];}cout<<"输入的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<cp[i][j]<<" ";cout<<endl;}move(cp);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<cp[i][j]<<" ";cout<<endl;}delete[] cp;return 0;}//Chuan.cpp#include<string>#include<iostream>using namespace std;string connect(string s1,string s2){string s=s1+s2;return s;}int main(){string s1,s2,s;cout<<"Please input string s1,s2:";getline(cin,s1,',');getline(cin,s2);s=connect(s1,s2);cout<<"s1+s2="<<s<<endl;cout<<endl;return 0;}。

C语言实验课件(指针,数组,字符串)(实验部分)

C语言实验课件(指针,数组,字符串)(实验部分)
void init() { int i; scanf("%d", &n); for (i = 1; i <= n; i++) scanf("%d", &a[i]); a[0] = 50000;
}
void dpwork() { int i, j; f[0] = 0; path[0] = 0; for (i = 1; i <= n; i++) { f[i] = 1; path[i] = i; } for (i = 1; i <= n; i++) { for (j = 0; j < i; j++) { if (a[i] < a[j] && f[i] <= f[j] + 1) { f[i] = f[j] + 1; path[i] = j; } } }
字符全排列
// otherwise, permute string else{
for(pCh = pBegin; *pCh != '\0'; ++ pCh) { // swap pCh and pBegin char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr, pBegin + 1); // restore pCh and pBegin temp = *pCh; *pCh = *pBegin; *pBegin = temp; }
} dfs(k); }
int main() { init(); dpwork(); print(); return 0;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二C++程序设计基础一、实验目的(1)、学习并掌握指针的性质(2)、掌握指针参数的运用,进一步掌握引用的使用方法(3)、学习函数指针的应用和带参数的main函数(4)、学习掌握指针与引用、指针与数组、指针与字符串的用法二、实验内容及步骤1、选择题(1)已知一函数的形参说明为int arr[5][6],在下列说明中,与此等效的形参说明为__________。

A. int arr[][]B. int [5][]C. int *a[6]D. int (* a)[6](2)已知函数f的原型是:int f(char a,char * b=NULL,double c=0.0); 则下列调用中,不能正确地调用f函数的是__________ 。

A. f(99)B. f(‘A’,4.5)C. f(‘A’,”123”)D. f((char)65,”123”)(3)已知函数f的原型为:void f(int &a,char *b); 变量s,t的定义是:int s; char t[]=”ABCD”;把s和t分别作为第一参数和第二参数来调用函数f,正确的调用语句是:__________ 。

A. f(&s,&t);B. f(&s,t);C. f(s,t);D. f(s,&t);(4)若指针p定义为const char *p="Luchy!"; 则[ ]。

A) p所指向的数据不可改变,p在定义时可以不初始化。

B) p所指向的数据不可改变,p在定义时必须初始化。

C) p本身不可改变,p在定义时可以不初始化。

D) p本身不可改变,p在定义时必须初始化。

(5)已知数组A和指针p定义为:int A[20][10],*p;,要使p指向A的首元素,正确的赋值表达式是[ ]。

A) p=&A 或p=A[0][0]B) p=A 或p=&A[0][0]C) p=&A[0] 或p=A[0][0]D) p=A[0] 或p=&A[0][0](6)已知函数func的原形是double func(doouble *pd,int &ri);变量x和y的定义是double x; int y;把x和y分别作为第一参数和第二参数来调用函数func,正确的调用语句是[ ]。

A) func(x,&y); B) func(&x,y);C) func(&x,&y); D) func(x,y);(7)若指针p定义为char * const p="Luchy!"; 则[ ]。

A) p所指向的数据不可改变,p在定义时可以不初始化。

B) p所指向的数据不可改变,p在定义时必须初始化。

C) p本身不可改变,p在定义时可以不初始化。

D) p本身不可改变,p在定义时必须初始化。

(8)在下列表达式中,与下标引用A[i][j]不等效的是[ ]。

A) *(A+i+j) B) *(A[i]+j) C) *(*(A+i)+j) D) (*(A+i))[j](9)执行下列语句序列struct AA{ int ival; char cval;};struct BB{ int ival; AA ra;};struct CC{ int ival; AA *ra; BB rb;};CC rc={66,new AA,{69,{70,71}}};rc.ra->ival=rc.ival+1;rc.ra->cval=rc.ra->ival+1;cout<<rc.ival<<','<<rc.ra->ival<<','<<rc.rb.ra.ival;后,显示在屏幕上的是[ ]。

A) 67,69,70 B) 66,67,70 C) 67,68,69 D) 66,67,682、填空题(1)执行typedef int ABC[10];语句把ABC定义为具有10个整型元素的__________ (2)若p是double型指针变量,其指针值为8080,则p-2的指针值为。

8064(3)已知数组A定义为long A[3][10];,P是一个一维数组;要使下标访问A[i][j]与P[i][j]等效,数组P应定义为:___________。

(4)已知函数reverse的原形是:char *reverse(const char *);,pf是指向reverse的指针,则pf的定义是:_____________________。

(5)p1、p2都是字符指针,p1指向字符串"GOOD_MORNING",p2-p1的值为8,则执行cout<<*p2;时显示在屏幕上的是___________________。

N(6)已知执行语句for(int i=0;i<3;i++)cout<<COLOR[i]<<',';后屏幕上显示的是:Red,Blue,Yello,由此可知,一维数组COLOR的定义是:_____________。

(7)已知指针变量pf的定义是:char *(*pf)(int)=ITOS;,则函数ITOS的原形是:_____________________。

3、分析程序的运行结果(1)#include<iostream.h>#include<string.h>void main(){char a[]="abcdabcabfgacd";int i1=0,i2=0,i=0;while(a[i]){if(a[i]=='a')i1++;if(a[i]='b')i2++;i++;}cout<<i1<<"?"<<i2<<endl;char*p1,*p2;p1=p2=&a[0];for(i=0;i<5;i++){if(strcmp(&a[i],p1)>0)*p1=a[i];if(strcmp(&a[i],p2)<0)*p2=a[i];}cout<<*p1<<"\n"<<*p2<<endl;}(2)# include <iomanip.h>void LE(int * a,int * b) {int x=*a;*a=*b; *b=x;cout <<*a<<" "<<*b<<endl;}void main(){int x=10,y=25;LE(&x,&y); cout <<x<<" "<<y<<endl;}(3)# include <iomanip.h>int LB(int *a,int n) {int s=1;for (int i=0; i<n; i++)s*=*a++;return s;}void main() {int a[]={1,2,3,4,5,6,7,8};int b=LB(a,5)+LB(&a[3],3);cout <<"b="<<b<<endl;}(4)# include <iomanip.h>void LE(int * a,int * b) {int x=*a;*a=*b; *b=x;cout <<*a<<" "<<*b<<endl;}void main(){int x=10,y=25;LE(&x,&y); cout <<x<<" "<<y<<endl;}(3)#include<iostream.h>#include<string.h>void main(){char a[]="abcdabcabfgacd";int i1=0,i2=0,i=0;while(a[i]){if(a[i]=='a')i1++;if(a[i]='b')i2++;i++;}cout<<i1<<"?"<<i2<<endl;char*p1,*p2;p1=p2=&a[0];for(i=0;i<5;i++){if(strcmp(&a[i],p1)>0)*p1=a[i];if(strcmp(&a[i],p2)<0)*p2=a[i];}cout<<*p1<<"\n"<<*p2<<endl;}4、改错题(1) #include<iostream.h>void showArray(int *a){//显示a[0]、a[1]、a[2]...直到遇见数据0为止while(*a) cout<<*a++<<' '; }void main(){ int d[]={1,2,3,4,5,6,0};showArray(&d); }5、编写、输入、检查、调试和运行下列程序。

(1)编写程序,实现复制字符串的自定义版char *strcpy(char *dest,const char *source);//该函数返回dest的值,即字符串首地址(2)编写程序,实现比较字符串的自定义版int strcmp(const char *str1,const char *str2);//str1>str2 返回正数//str1=str2 返回0//str1<str2返回负数(3)函数char *allTrim(char *str); 的功能是去除参数字符串str的前导空格和尾部空格(如果有的话),其返回值就是参数字符串str。

例如,执行下面的语句序列char s[]=" ABCD XYZ ";cout<<s<<'!';cout<<endl<allTrim(s)<<'!';cout<<endl<<s<<'!';后,显示在屏幕上的应当是:ABCD XYZ !ABCD XYZ!ABCD XYZ!请实现函数allTrim。

相关文档
最新文档