实验8.2 指针与字符串
C语言程序设计第8单元
二维数组的地址
【例8.9】使用指针变量输出二维数组元素 #include<stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}},*p;
for(p=a[0];p<a[0]+6;p++) { if((p-a[0])%3==0)printf("\n");
printf("%2d",*p); } }
0x62fe3a
0x62fe3b
0x62fe3c
数组指针的运算
对于指针变量p,可以做以下运算: p++,p--,p+i, p-i, p+=i, p-= i等。
#include <stdio.h> main() { int a[]={1,3,6,7,9,12};
int x,*p=&a[2]; x=(*--p)++; printf("x=%d\n",x); printf("a[1]=%d\n",a[1]); }
0x62fe50
二维数组的地址
#include <stdio.h>
main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,a1是1,1行2指}};针
printf("%x,%x,%x\n",a,a+1,a+2); printf("%x,%x,%x\n",*a,*(a+1),*(a+2)); *a是列指针
二维数组的地址
二维数组名是数组的首地址,二维数组名的基类型不是数组元素类 型,而是一维数组类型,因此,二维数组名a是一个行指针。
实验8 指针与字符串
实验八指针与字符串实验目的掌握处理字符串的两种方法,即用char型数组来处理字符串或用char型指针来处理字符串。
要点提示1.在C语言中,对字符串常量是按字符数组处理的,在内存中开辟一块连续的空间存放字符串常量,理解为字符数组存放。
2.字符数组的每个元素只能存放一个字符。
3.字符数组的定义格式:char 数组名[];例:char str[20];4.字符指针的定义格式:char *指针变量;例:char *str;实验内容1.字符数组的定义、初始化和引用2.字符指针的定义、初始化和引用3.字符串指针作函数参数实验步骤读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入)1. 编程求一个字符串的长度, 用字符数组实现。
#include<iostream>using namespace std;main(){ int len=0;char str[20], *p;cout<<"\nInput a string:";cin>>str;p=str;while (*p!='\0'){ len++;【】; /* 字符串指针自增*/}Cout<<"\nThe length is:"<<【】;}程序运行结果:Input a string: ChinaThe length is: 【】2. 找出字符串s中最大的字符#include<iostream>using namespace std;main(){ char max, *s="I am a student";int n;max=*s;while (*s!='\0'){ if (*s > max) max=*s;【】;}cout<<"\nThe max character is:”<< max;}程序运行结果:The max character is:【】3. 判断输入的字符串是否“回文”。
高树芳C语言程序设计--第八章
30
8.5 知识拓展
案例8-11 指针的高级应用 [案例任务] 阅读下列程序 ,分析运行结果,了解指 针的各种应用。
程序代码
31
8.5 知识拓展
相关知识:
1.有关指针的数据类型小结 2.案例说明 3.main函数的参数
32
12
8.2 指针变量
[课堂训练8-1] void swap(int *p1,int *p2) { int *t; t=p1; p1=p2; p2=t; }
1.分析下面的程序,写出运行结果。 #include <stdio.h> void main() { void swap(int *p1,int *p2); int *p1,*p2,a=6,b=8; p1=&a; p2=&b; printf(" 交换前:*p1=%d,*p2=%d\n",*p1,*p2); swap(p1,p2); printf(" 交换后:*p1=%d,*p2=%d\n",*p1,*p2); }
17
8.3 指针与数组
案例8-6 [案例任务]
冒泡排序
使用指针指向一维整型数组,使用冒泡排 序法对数组元素从小到大排序并输出。
程序代码
18
8.3 指针与数组
相关知识: 1.冒泡排序法 2.指针变量的其他运算
19
8.3 指针与数组
案例8-7 [案例任务]
逆置一维数组
使用数组名或指针变量作为函数形参与实 参,完成一维数组元素的逆置。请分析程 序运行结果,并对两个方法进行比较。
6
8.2 指针变量
案例8-2 用指针交换两整数 案例8-3 用指针比较两数大小 案例8-4 用指针参数交换两整数
C++程序设计实验报告-数组、指针与字符串
for(j=0;j<i;j++) {
t=b[i][j]; b[i]]=t; } } int main() { int (*a)[3]=new int[3][3]; int i,j; cout<<"请输入 3x3 矩阵:"<<endl; for(i=0;i<3;i++) for(j=0;j<3;j++)
cin>>a[i][j]; zhuanzhi(a); cout<<"转置后的矩阵为:"<<endl; for(i=0;i<3;i++) {
for(j=0;j<3;j++) cout<<a[i][j]<<" ";
cout<<endl; } delete[] a; return 0; } 运行结果:
(3)编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用 系统函数。 源程序代码: #include<iostream> using namespace std;
int main() {
char str1[100],str2[100],str[200]; int i,j; cout<<"请输入第一个字符串:"; cin>>str1; cout<<"请输入第二个字符串:"; cin>>str2; for(i=0;str1[i]!='\0';i++)
06-指针与字符串
10
p
10
1.2.2 什么是指针
指针变量是变量,当然也需要先定义后使用
程序需要知道指针所指向的内存,其中的数据类型
这块内存里保存的是一个整数,还是一个双精度浮点数?
指针变量的定义方法:在变量标识符前加*
int *p; //定义了一个整形指针变量p int *p,a; //同时定义了一个整型指针变量p和一个普通变量a
C语言程序设计 ——指针与字符串
林大 经管学院 瞿华
指针与字符串
一.
什么是指针
二.
三. 四. 五. 六.
指针基本运算
指针与数组 字符串简介 指针与字符串处理 C标准库与字符串处理函数
七.
字符串数组
2
指针与字符串
一.
什么是指针
二.
三. 四. 五. 六.
指针基本运算
指针与数组 字符串简介 指针与字符串处理 C标准库与字符串处理函数
符号常量:NULL,表示一个指针未指向任何地址。
将未使用的指针变量赋值为NULL,是一个很好的编程习惯 见pare.c
29
2.3 指针占用空间
sizeof(p)可以得到指针变量p所占用的存储空间大小
思考:int *p1; double *p2;
sizeof(p1)和sizeof(p2)哪个大?为什么?
p1=p1+3; p1++;
35
3.3 指针与数组元素访问
如果希望指针p指向a的第4个元素,怎么办?
方法1:使用&运算符
p=&a[3];
方法2:使用+运算
8.指针
例 p指向int型数,则 p+1 p+12 例 p指向int型数组,且p=&a[0]; 则p+1 指向a[1] 例 int a[10]; int *p=&a[2]; p++; *p=1; 1
p+i
a[3]
a[4] a[5] a[6] a[7] a[8] a[9]
p+9
指针的算术运算: 若指针变量p1与p2都指向同一数组,如执行p2-p1, 结果是两个地址之差除以数组元素的长度。 即 p2-p1(p2-p1)/d 假设p2指向实型数组元素a[5],p2的值为2020;p1指 向a[3] ,其值为2012, 则p2-p1的结果是(2020-2012)/4=2. 这个结果是有意义的,表示p2所指的元素与p1所指的 元素之间差2个元素。 p1+p2 无实际意义
a+9
a[9] *(a+9)
p+9
*(p+9)
下标法 a[i] *(p+i) *(a+i)
指针法
例 输出数组中的全部元素。
假设有一个a数组,整型,有10个元素。要输出 各元素的值有三种方法:
(1)下标法。
(2) 通过数组名计算数组元素地址,找出元素的值。
(3) 用指针变量指向数组元素。
(1)下标法。(8-3(1).c) #include <stdio.h> void main() { int a[10]; int i; for(i=0;i<10;i++) scanf(″%d″,&a[i]); printf(″\n″); for(i=0;i<10;i++) printf(″%d″,a[i]); }
2000 3 a 2002 4 b
指针与字符串
char str1[20],str2[20]; gets(str1); gets(str2); if (strcmp( str1,str2 ) >0) puts(str1); else puts(str2); }
char *str1="hello"; printf("the length of %s is: %d\n", str1, strlen(str1)); printf("the length of %s is: %d\n", “Good morning”, strlen(“Good morning”)); }
C语言程序设计
指针与字符串(续)
❖ 可以用字符串常量对指针变量进行初始化或赋 值。
void main() {
char *hi2="hello"; puts(hi2); }
▪ 字符串常量"hello"是一个字符数组,数组 的首元素地址(即字符串的第一个字符的地 址)被赋值给指针变量hi2。
指针与字符串(续)
❖ 注意下面两种定义的区别: char s1[]="hello"; char *s2="hello";
char *str1="hello", str2[80]; strcpy(str2, str1); puts(str2); }
1.2 常用字符串处理函数(续)
5.连接字符串──strcat函数 ▪ strcat函数原型为: strcat(char *str1, char *str2) ▪ 该函数把str2指向的字符串追加到str1指向的字符串的末尾。 ▪ 使用strcat函数时,要确保str1指向的数组足以容纳连接后的字符串。 【例7-20】使用strcat函数连接字符串
C语言程序设计教程第8章北京邮电大学出版社.
第8章 指针
18
说明: 对于不同基类型的指针,指针变量“加上” 或“减去”一个整数n所移动的字节数(= sizeof( 指针所指对象的数据类型 ) )是不同的。 例如: float a[10], *p=a, *x; x=p+3; /*实际上是p加上3*4个字节赋给x, x依然指向数组的第三个分量*/
C语言程序设计教程
第 8 章 指针
8.1 8.2 8.3 8.4 8.5 8.6 指针与指针变量 指针与函数 指针与数组 指针与字符串 指针数组与命令行参数 程序举例
第8章 指针
2
8.1 指针与指针变量
8.1.1 指针的概念
1.内存与变量地址 内存地址:内存是计算机用于存储数据的存储 器,以一个字节作为存储单元,为了便于访问,给 每个字节单元一个唯一的编号,第一字节单元编号 为0,以后各单元按顺序连续编号,这些单元编号 称为内存单元的地址 。 变量地址:变量所分配存储空间的首字节单元 地址(字节单元编号)。
2018/9/14
C语言程序设计教程
第8章 指针
3
在程序中,对变量的操作实际上是通过地址来完成的。 • 定义时:定义变量→分配内存单元(按类型)→地址 (即内存中的编号) • 存取操作:程序 →变量名 →内存单元 →存取 • 实际上: 程序 →编译 →变量名 →变量的地址
2.访问方式
直接存取:把直接按变量名或地址存取变量值的方式 称为 “直接存取”方式。
2018/9/14
C语言程序设计教程
第8章 指针
10
8.1.3 指针运算
指针运算实际上是地址的计算,包括赋值运算、算术运算、 关系运算三种。
1. 指针的赋值运算 (1)将变量地址值赋给指针变量,使指针指向该变 量。
C程序设计教案322课时——通过指针引用字符串
教案intmain(){charStringII=44I1oveChina!”;printf(w%s∖n w,string);pπntf(ςς%c∖n,,,string∣7]);return0;)例8.17通过字符指针变量输出一个字符串。
>解题思路:可以不定义字符数组,只定义一个字符指针变量,用它指向字符串常量中的字符。
通过字符指针变量输出该字符串。
#inc1ude<stdio.h>intmain(){char*string=fcςI1oveChina!”;printfC t%s∖n w,string);return0;)#inc1ude<stdio.h>intmain(){char*string=ςςI1oveChina!*9;Printf("%s∖n”,string);string=,,Iamastudent.”;printfC t%s∖n w,string);return0;)#inc1ude<stdio.h>intmain(){char*string=tt I1oveChina!99;Printf("%s∖n”,string);string=,,Iamastudent.";printf(w%s∖n w,string);returnO;)例8.18将字符串a复制为字符串b,然后输出字符串bo>解题思路:定义两个字符数组a和b,用“1amastudent.”对a数组初始化。
将a数组中的字符逐个复制到b数组中。
可以用不同的方法引用并输出字符数组元素,今用地址法算出各元素的值。
#inc1ude<stdio.h>intmain(){chara[]=w IamaStUdeI1t∙”,b[20];inti;for(i=θ5*(a+i)!=,∖0';1++)*(b+i)=*(a+i);*(b+i)=ς∖0,;Printf("stringais:%$\n”,a);printf(,,stringbis:");for(i=0;b[i]!='\0';i++)printfC t%c,∖b∣i]);PriiItf("∖n");return0;)例8.19用指针变量来处理例8.18问题。
C++指针与字符串详解
• 不同类型的指针变量间的赋值,需转换成同一类型后方可, 但应有明确的目的和意义 • 对一个未初始化的指针变量所指存储单元赋值是极其危险 的。这类问题在源程序编译时,会有警告提示
指针的算术运算
• 指 针 变 量 执 行 ++或 --操 作 : 使 指 针 变 量 指 向 下 一 个 或 上 一 个 变 量 , 而 指 针 变 量 的 值 实 际 加 或 减 sizeof( 指 针变量类型) • 指 针 变 量 加 或 减 一 个 整 型 值 n, 即 : 指 针 变 量 =指 针 变 量 ± n 使 指 针 变 量 指 向 其 后 或 其 前 的 第 n个 变 量 , 指 针 变 量 的值实际增减为: 指 针 变 量 =指 针 变 量 ± sizeof(该 指 针 变 量 的 类 型 )*n
第 8章 指 针
8.1 指 针 的 运 算 8.2 指 针 与 数 组 8.3 指 针 数 组 和 指 向 指 针的指针变量 8.4 指 针 与 函 数 8.5 new和 delete运 算 符 8.6 指 针 参 数 传 递 与 数 据安全
8.1 指 针 的 运 算
• 指针的运算:赋值、关系、算术和强制类型转换 • 指针的赋值:将一个指针赋给一个指针变量。合法的 指针值是正确使用指针的基础 • 只能将同类型变量的指针赋给指针变量。设: int a=1,*p1,*p2; p1=&a; p2=p1; //将 变 量 a的 指 针 赋 给 p1 //同 类 型 指 针 变 量 之 间 的 赋 值
指 针 和 字 符 串 (续 3)
可以给字符数组直接输入字符串;而在给字符指针变量赋 初值前,不允许将输入的字符串送到指针变量所指向的内 存区域。例如: char s1[50],s2[200],*p; cin>>s1; //正 确 cin>>p; p=s2; cin>>p; //正 确 , 此 时 p指 向 已 分 配 的 内 存 单 元 字符数组名是常量指针,不能改变;而字符指针变量的值 可变。例如: p=s1+5; p=p+5; //正 确 //正 确 //警 告 : p指 向 随 机 内 存 单 元 , 潜 存 危 险
字符串与指针
5· 指针做函数的参数 5
[本段任务] 掌握用指针作为函数参数编程的方法。 在本章第三节3· 函数调用时参数传递方式这一段,我们 2 讨论过函数的参数呈现有传值方式和传址方式两种。并 介绍了使用数组名做实参,用与实参数组同类型的数组 作形参的方法实现传址方式。通过指针一节的学习,我 们明白了,这样的传址方式其实就是用指针作函数的参 数。在程序当中,凡是需要将一个以上的数据从被调函 数传到主调函数里,必须将函数的参数设为指针变量。 这样设计的目的,是使主调函数和被调函数对应的形、实 参都指向同一个变量,当主调函数实参所指的变量发生 任何改变,或者被调函数对应的形参所指的变量发生任 何改变,本质上都是同一个变量发生的改变。
例4_5_7 已知一个不透明的布袋里装有红、蓝、 黄、绿、紫色的、同样大小的圆球各一个,现 从中一次抓出两个,问可能抓到的是什么颜色 的球?用指针数组类型数据解之。 分析:用一重循环从1~5表示抓到的红、蓝、黄、 绿、紫色的一个球,用另一重循环从1~5表示 抓到的红、蓝、黄、绿、紫色的第二个球。由 于每次抓到的球不可能同色,只要判断两重循 环不能取同一个值,所得的结果为所求。只是 所用的数据类型为指针数组,指针数组的元素 为字符串。
5· 2 用字符串指针访问字符串 4·
输出的一般形式是: printf(“%s”,字符串指针变量名); 输 出 还 可 以 使 用 puts, 输 入 可 以 使 用 gets 或 者 scanf。 %s是字符串所用的格式符,它可以对字符串进 行整体输入、输出,而不必采用循环逐个字符 访问。系统首先访问string所指向的那个字符, 然后使指针string自动加1,指向下一个字符, 然后输出下一个字符,……直到遇到字符串结 束标准’\0’为止。
[ 小结 ]
实验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(),用于计算平均分。
指向字符串的指针和二级指针
pp
Li
第8章
指 针
8.2指向字符串的指针变量
1. 让一个字符指针变量指向字符串的方法 1)在指针变量初始化时。格式是: char *<指针变量名>=<字符串常量> 例如:char *ptr=“beijing is a beautiful city” 2)在程序中直接将字符串常量赋给一个字符型指针变 量.格式是: char *<指针变量名> <指针变量名>=<字符串常量> 例如:char *p; p=“it is a very good”;
int week; printf("Enter week No.: "); 利用字符指针数组处理长度不等的字符串,可节省 存储空间。 scanf("%d",&week); if (week>=0 && week<7)
printf("week No.%d —— %s\n",week,weekname[week]);
8.2 指针与数组
8.2.2 指向字符串的指针变量 【例8.1】分析下列程序的两条puts()语句,分别输出 什么?
#include “stdio.h” main() {
char *ptr=“beijing is a beautiful city”; puts(ptr); ptr=“it is very good”; puts(ptr);
}
8.2 指针与数组
8.2.4 多级指针 二级指针变量定义的一般形式: 1. 二级指针变量的定义 数据类型标识符 **指针变量名; 如果一个指针的目标变量是一个指针类型 其中“**指针变量名”相当于*(*指针变量名), 变量,则此指针为指向指针的指针变量,也称 在括号中定义了一个指针变量,括号外的“*”,说明 为多级指针变量。 指针变量(即二级指针)的目标变量是一个指针类型
指针与字符串
字符串可以看作是字符数组,但有一点点的小差别。
有关数组的知识全都可以用在字符串上。
强调一点:字符串以‟\0‟结束。
在求字符串的长度时,碰到第一个空字符就结束。
#include<stdio.h>#include<string.h>int main(void){char s1[81]=”What‟s your name?”;char s2[]=”Y u”; /* 在u后面自动添加‟\0‟ */char s3[]={…D‟,‟o‟,‟r‟,‟i‟,‟s‟}; /* 不好的习惯,最后没有‟\0‟ */char s4[]={…a‟,‟b‟,‟c‟,‟d‟,‟e‟,‟\0‟,‟f‟,‟g‟,‟h‟,‟i',‟j‟,‟k‟,‟\0‟};printf(“%d\t%d\n”,sizeof(s1),strlen(s1)); /* 1 */printf(“%d\t%d\n”,sizeof(s2),strlen(s2)); /* 2 */printf(“%d\n”,sizeof(s3)); /* 3 */printf(“%d\n”,strlen(s3)); /* 4 */printf(“%d\t%d\n”,sizeof(s4),strlen(s4)); /* 5 */return 0;}1 输出:81 172 输出:3 23 输出:54 输出:115 输出:13 5相信你能看懂大部分的输出,除了4,解释一下。
稍微注意一个5 的输出。
要求s3的长度,从‟D‟开始算,一直往后找,就算超出s3数组的边界了也不停下来。
因为这个程序中s4是接在s3之后定义的,所以会找到a b c d e …\0‟才停下来。
本来这么算结果应该是10,于是我调试了程序,发现在‟s‟和‟a‟之间多出了一个字节,不知道是怎么回事。
所以像s3这样定义字符串是很不安全的。
sizeof()是求在内存中占用多大的空间,以实际占用为准。
C 语言程序设计实验答案_数组、指针与字符串解析
实验06 数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的二、实验任务6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。
6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。
6_3 编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
6_4 使用string类声明字符串对象,重新实现上一小题。
6_5(习题6-27)声明一个Employee类。
其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。
6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。
6_7 修改实验4中的people(人员)类。
具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。
其中“出生日期”声明为一个“日期”类内嵌子对象。
用成员函数实现对人员信息的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。
在测试程序中声明people类的对象数组,录入数据并显示。
三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。
使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。
程序名:lab6_1.cpp。
参考运行结果:★程序及运行结果://lab6_1.cpp#include<iostream>using namespace std;void move(int matrix[][3]){int temp;for(int i=0;i<3;i++)for(int j=0;j<i;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}void main(){int i,j,mat[3][3];cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<3;j++) cin>>mat[i][j];}cout<<"\n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<*(*(mat+i)+j)<<" ";//指针形式cout<<endl;}}2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。
C语言指针在二维数组和字符串中应用的程序设计实验
C语言指针在二维数组和字符串中应用的程序设计实验一、实验目的
1.通过C程序的运行,强化掌握C程序在VC++6.0上的开发过程。
2.掌握C 语言指针在二维数组和字符串中应用的程序设计。
二、实验环境
1.WIN XP、WIN7、WIN10等操作系统的PC机;
2.VC++6.0集成开发环境;
三、实验内容
1.输入并运行第5章【例5-7】中方法一的程序,理解指针处理字符串程序设计。
2.输入并运行第5章【例5-8】中的程序,理解用字符数组名引用字符串程序设计。
3.输入并运行第5章【例5-9】中的程序,理解指针处理字符串程序设计。
4.输入并运行第5章【例5-10】中的程序,理解指针处理字符串程序设计。
5.输入并运行第5章【例5-11】中的程序,理解指针数组程序设计。
6.参考如下程序,用指针的方法设计个程序输出:Gold
old
ld
d
G
o
l
d
四、实验数据及处理结果
1.实验内容的源代码以及运行结果的截图;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%s",str);
if(strcmp(max,str)<0)
strcpy(max,str);
}
/*-----程序填空,不要改变与输入输出有关的语句。
输入5个字符串,输出其中最大的字符串。
输入输出示例:括号内为说明
要求定义并调用函数 mirror(p)判断字符串 p 是否为“回文”,如果 p 是回文字符串,返回1,否则,返回0,
函数形参 p 的类型是字符指针,函数类型是 int。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
abcddcba
abcddcb
输出:
YES
NO
----*/
int mirror(char *p)
{
int k;
char *pi,*pj;
k=strlen(p);
pi=p;
pj=p+k-1;
for(;pi<p+k;pi++,pj--){
if(*pi!=*pj)
break;
return 1;
}
return 0;
p=s;
for(;*p!='\0';p++){
if(*p>='A'&&*p<='Z')
upper++;
else if(*p>='a'&&*p<='z')
lower++;
else if(*p>='0'&&*p<='9')
digit++;
else if(*p==' ')
}
6 分类统计字符个数
#include<stdio.h>
void main()
{
char s[80];
char *p;
int blank, digit, lower, other, upper;
gets(s);
upper = lower = blank = digit = other = 0;
result: 2 (字符串"111211"中的字符'1'都被删除)
-----*/
printf("result: ");
puts(str);
}
return 0;
}
/*---------*/
void delchar(char *str, char c)
int main(void)
{
char c;
char str[80];
int repeat, ri;
void delchar(char *str, char c);
scanf("%d", &repeat);
getchar();
for(ri = 1; ri <= repeat; ri++){
-----*/
printf("upper: %d lower: %d blank: %d digit: %d other: %d\n", upper, lower, blank, digit, other);
要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,
函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
happy new year
getchar();
for(ri = 1; ri <= repeat; ri++){
gets(s);
if(mirror(s) != 0)
printf("YES\n");
else
printf("NO\n");
输入输出示例:括号内为说明
输入:
3 (repeat=3)
5 (n=5)
melon peach pear strawberry orange
3 (n=3)
pear berry orange
4 (n=4)
int main(void)
{
char sx[80], longest[80];
int i, n;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
111211 (字符串"111211")
1 (待删除的字符'1')
输出
result: hppy new yer (字符串"happy new year"中的字符'a'都被删除)
result: b (字符串"bee"中的字符'e'都被删除)
1 找最大的字符串(调试示例error08_2)
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[80], max[80];
int i;
scanf("%s", str);
strcpy(max,str);
scanf("%d", &repeat);
getchar();
for(ri = 1; ri <= repeat; ri++){
gets(t);
scanf("%d", &m);
getchar();
if(strlen(t) < m)
}
}
/*-----程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串(长度不超过80),判断该字符串是否为“回文”。“回文”是指顺读和倒读都一样的字符串,如“XYZYX”和“xyzzyx”。
-----*/
puts(s);
}
}
}
/*---------*/
void strmcpy(char *s,char *t, int m)
{
t=t+m-1;
while(*t!='\0'){
*s=*t;
s++;
t++;
7
happy
1
new
4
输出:
new year (从"happy new year"第7个字符开始组成的新字符串为"new year")
happy (从"happy"第1个字符开始组成的新字符串为"happy")
error input ("new"的长度小于4)
printf("error input");
else{
strmcpy(s,t,m);
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。
melon peach pear apple
输出:
The longest is: strawberry
The longest is: orange
The longest is: melon
----*/
return 0;
}
3 使用函数删除字符串中的字符
#include<stdio.h>
实验8.2 指针与字符串
题目信息表
序号 题目名称 题目满分 题目得分 题目编号
1 找最大的字符串(调试示例error08_2)
2 找最长字符串
3 使用函数删除字符串中的字符
4 使用函数实现字符串复制
5 判断回文字符串
6 分类统计字符个数
printf("The longest is: %s\n",longest);
}
/*-----程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),然后输入 n 个字符串,输出其中最长的字符串,如果字符串的长度相同,则输出先输入的字符串。
}
4 使用函数实现字符串复制
#include<stdio.h>
#include<string.h>