当前位置:文档之家› 实验七 指针与数组 参考答案

实验七 指针与数组 参考答案

实验七 指针与数组 参考答案
实验七 指针与数组 参考答案

1、设计程序sy6-1.c,有三个整形变量i,j,k。设置三个指针变量p1,p2,p3,分别指向i,j,k。然后通过指针变量使i,j,k三个变量的值顺序交换,即原来i的值赋给j,把j的原值赋给k,把k的原值赋给i。i,j,k的原值由键盘输入,要求输出i,j,k的原值和新值。

参考答案:

#include

void main()

{

int i,j,k,*p1,*p2,*p3,t;

printf("请输入i,j,k:");

scanf("%d%d%d",&i,&j,&k);

printf("交换前:i=%d j=%d,k=%d\n",i,j,k);

p1=&i;p2=&j;p3=&k; //p1指向i,p2指向j,p3指向k

t=*p3;*p3=*p2;*p2=*p1,*p1=t; //通过指针间接访问i,j,k并实现交换

printf("交换后:i=%d j=%d k=%d\n",i,j,k);

}

2、设计程序sy6-2.c,已知数组{1,3,5,7,9},在其中分别用下标法、地址法和指针法访问数组元素,将它们输出。

参考答案:

#include

void main()

{

int a[5]={1,3,5,7,9},i,*p;

printf("下标法a[i]:");

for(i=0;i<5;i++)

printf("%3d",a[i]);

printf("\n地址法*(a+i):*(a+i):");

for(i=0;i<5;i++)

printf("%3d",*(a+i));

printf("\n指针法*p:");

for(p=a;p

printf("%3d",*p);

printf("\n");

}

3、设计程序sy6-3.c,利用字符指针编程,要求在一行文字:“I have50Yuan.”中,删去字符‘0’,使其变成:“I have5Yuan.”,并输出结果。

参考答案:

#include

void main()

{

char str[]="I have50Yuan.";

char*p,*q; //定义两个字符指针

p=q=str; //两个字符指针都指向字符串str

while(*p!='\0')//p的目标单元等于'\0'循环结束

{if(*p!='0')//如果p的目标单元不为要被删除的字符'0'

{*q=*p;q++;}//就把它赋值给q的目标单位

p++;//赋值一次,p后移一个存储单元

}

*q='\0'; //给新的字符串添加结束标志'\0'

printf("删除0字符后的字符串:%s\n",str);

}

运行结果

4、设计程序sy6-4.c,要求输入三行字符(每行不超过80

个字符)存于二维字符数组中,统计出其中大写字母、小写字母、空格及其它字符的个数。(要求使用指向一维数组的指针变量)

参考答案:

#include

void main()

{

char ch,s[3][80],(*p)[80];//p为指向一维数组的行指针变量

int i,j,lower=0,uppr=0,space=0,other=0;

printf("请输入3个字符串:\n");

for(i=0;i<3;i++)//等待从键盘接收3个可以带空格的字符串

gets(s[i]);//分别赋给s[i],s[i]-第i行的首地址

p=s;

for(i=0;i<3;i++) //分别从0行到第2行

for(j=0(ch=*(*(p+i)+j))!='\0'j++) //*(*(p+i)+j))等同于p[i][j]和a[i][j]

//每行访问到当前行的结束标志即'\0'结束

if(ch>='A'&&ch<='Z')

uppr++;//当前字符为大写字母,uppr++;

else if(ch>='a'&&ch<='z')lower++;

//当前字符为小写字母,lower++;

else if(ch=='')

space++;//当前字符为空格,space++;

else

other++; //否则,other++;

printf("小写字母个数:%d\n",lower);

printf("大写字母个数:%d\n",uppr);

printf("空格的个数:%d\n",space);

printf("其它字符个数:%d\n",other);

}

运行结果

5、设计程序sy6-5.c,请用指向一维数组的指针变量实现二维矩阵的转置,二维矩阵为int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};转置后的结果存在int b[4][3]里面。

参考答案:

#include

void main()

{

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

int i,j,(*p)[4],(*q)[3]; //p为行指针,即可以指向一行包含4个整形数的一行

int b[4][3];//数组b用来存放转置后的结果

p=a;q=b; //p为行指针,将行指针常量a赋给它,q指向转置后的数组b

printf("转置以前a:\n");

for(i=0;i<3;i++)

{for(j=0;j<4;j++)

{printf("%6d",*(*(p+i)+j));

//*(*(p+i)+j)等同于p[i][j],a[i][j]

q[j][i]=p[i][j];//转置

}

printf("\n"); //输出一行4个数换行

}

printf("转置后b:\n");

for(i=0;i<4;i++)

{for(j=0;j<3;j++)

printf("%6d",*(*(q+i)+j));

//*(*(q+i)+j)等同于q[i][j],b[i][j]

printf("\n");//输出一行3个数换行

}

}

运行结果

指针数组及指向一维数组的指针讲解

一、指针数组及指向一维数组的指针(数组指针)讲解 1、数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 2、指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int *说明这是一个整型指针数组,它有n个指针类型的数组元素。这样赋值是错误的:p=a;只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; for(i=0;i<3;i++) p[i]=a[i]; 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p [1]、p[2]所以要分别赋值。 这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还需要说明的一点就是,同时用来指向二维数组时,其引用和用数组名引用都是一样的。 比如要表示数组中i行j列一个元素: *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j] 优先级:()>[]>* 例1、下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 #include #include #define N 4

实验六 指针.

实验六指针 ●实验目的 1、进一步掌握指针的概念,会定义和使用指针变量。 2、能正确使用数组的指针和指向数组的指针变量。 3、能正确使用字符串的指针和指向宇符串的指针变量。 4、了解指向指针的指针的概念及其使用方法。 5、通过实验进一步理解指针和函数的几种关系。 ● 实验内容 1、输入两个整数,按由大到小的顺序输出。 输入以下程序并调试运行。 #include int main() { int a,b; int *p=&a,*q=&b,*t; cout<<"请输入a和b:"; cin>>a>>b; if(a

char *temp; int i,j,n=4; for(i=0;i0) { temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } //排序 for(i=0;i

C++程序设计实验七_参考答案

广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005

三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。

【实验指导书】实验7:指针 (1)

(2014~2015学年-第1学期) 1. 理解指针、地址和数组间的关系。 2. 掌握通过指针操作数组元素的方法; 3. 掌握数组名作为函数参数的编程方式。 4. 掌握通过指针操作字符串的方法。 5. 了解掌握使用断点调试程序的方法。 二、实验环境: 操作系统:Window 8 编译环境:CodeBlock 13.02 三、实验要求及内容(根据实验要求,将整个实验过程需要的数据和截屏记录于此,并整理成实验步骤。): 1.设计一个程序计算输入的两个数的和与差,要求自定义一个函数sum_diff(float op1,float op2,float *psum,float *pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。 解: (1)流程图如图1所示: 图1 程序7-1的流程图

图2 实验7-1实验源代码 (3)运行结果(测试用例) 实验7-1运行结果如图3所示 图3 实验7-1运行结果 2. 输入n 个正整数,使用选择法将它们从小到大排序后输出。要求:利用所学指针的内容实现。 提示:在指针这一章所学的冒泡排序算法基础上改写。 解: (1)流程图如图1所示: 图1 程序7-2的流程图

图2 实验7-2实验源代码(3)运行结果(测试用例)实验7-2运行结果如图3所示 图3 实验7-2运行结果

3. 输入10个整数存入数组a ,再输入一个整数x ,在数组a 中查找x ,若找到则输出相应的下标,否则显示“Not found ”。要求定义和调用函数seach(int list[],int n ,int x),在数组list 中查找元素x ,若找到则返回相应的下标,否则返回-1,参数n 代表数组list 中元素的数量。试编写相应程序。 解:(1)流程图如图1 7-3的流程图 (2)源代码 源代码如图2所示

数组名和指针的区别(小结)

在Win 32 中: 1. (1) 对数组名进行sizeof运算时,结果是整个数组占用空间的大小; (2) 但是数组作为函数参数时,对数组名进sizeof 运算,结果为4; (2) 对指针进行sizeof运算得到的值是编译器分配给指针(也就是一个地址)的内存空间,即为4。 2. (1) 对数组名作&运算,得到的还是数组第一个元素的地址; (2) 对指针取地址时得到的结果是指针所在的地址,也就是指向这个指针的指针,与指针的值不同。 BOOL mytest(char param[100]) { //参数数组名:paramBytes int paramBytes = sizeof(param); printf("paramBytes \t%d\n",paramBytes); //数组:mych1[] char mych1[] = "abcdefg123"; //若定义为mych1[100] int mych1Bytes = sizeof(mych1); printf("mych1Bytes \t%d\n",mych1Bytes);//输出:100 //数组:mych[200] char mych[200] = {0}; int myBytes = sizeof(mych); printf("myBytes \t%d\n",myBytes); printf("---addr \t%d\n",mych); printf("---addr \t%d\n",&mych); //指针:pch char* pch = "12345abc"; int pchBytes = sizeof(pch); printf("pchBytes \t%d\n",pchBytes); //pch = mych; printf("---addr \t%d\n",pch); printf("---addr \t%d\n",&pch); return TRUE; } 运行:

指针与数组练习题

指针与数组练习题 1、下面程序实现如下功能:输入一个整数字符串转换为一个整数值,如”1234”转换为1234,”-1234”转换为-1234。读懂main函数,编写转换函数chnum #include #include void main() { char s[6]; int n; int chnum(char *p); gets(s); if (*s=='-') n=-chnum(s+1); else n=chnum(s); printf("%d\n",n); } int chnum(char*p) { int sum=0; while(*p!='\0') { if(*p>='0'&&*p<='9') sum=sum*10+*p-'0'; p++; } return sum; } 2、从键盘输入一个字符串,去掉所有非十六进制字符后转换成十进制数输出。读懂以下main函数,编写相应的函数del16和htod。 #include #include void main() { char s1[10],s2[10]; void del16(char*,char*); int htod(char*); gets(s1); //读入一字符串 del16(s1,s2); //去掉所有非十六进制字符到s2 printf("%d\n",htod(s2)); //把s2转换为10进制 }

void del16(char*s1,char*s2){ for(;*s1!='\0';s1++) if(*s1>='0'&&*s1<='9'||*s1>='a'&&*s1<='f'||*s1>='A'&&*s1<='F'){ *s2 = *s1; s2++;} *s2='\0'; } int htod(char*s2){ int sum=0; for(;*s2!='\0';s2++){ if(*s2>='0'&&*s2<='9') sum=sum*16+*s2-'0'; else if(*s2>='a'&&*s2<='f') sum=sum*16+*s2-'a'+10; else if(*s2>='A'&&*s2<='F') sum=sum*16+*s2-'A'+10; } return sum; } 3、编写函数insert(char *s1,char *s2,int pos),实现在字符串s1中的指定位置pos处插入字符串s2。 Happy Year New 7 Happy New Year #include #include int main(void) { void insert(char *s1,char *s2,int pos); char s1[80],s2[80]; int pos; gets(s1); gets(s2); scanf("%d",&pos); insert(s1,s2,pos); puts(s1); return 0; } void insert(char *s1,char *s2,int pos) {

c语言实验报告6 指针

实验6 指针1.实验目的和要求 (1)掌握指针的概念、指针变量定义格式和引用。 (2)掌握指针的运算方法。 (3)掌握数组的指针和指向数组的指针变量。 (4)掌握指针与函数的关系。 (5)能正确使用字符串的指针和指向字符串的指针变量。(6)了解指向函数的指针。 (7)了解指向指针变量的指针。 2.实验内容:实验指导书中的实验九。 3.实验步骤 9.1 调试程序,找出程序的错误。 改正后的程序代码(贴图): 运行结果(帖图): 9.2 运行程序:

运行结果:; 9.3 修改程序错误,并运行。 改正后程序代码: 运行结果(帖图): 9.4. 程序填空:

运行结果(请帖图):9.5. 程序填空:

程序填空: #include main() { int a[5][5]={0},*p[5],i,j; for(i=0; i<5; i++) p[i]= &a[i][0] ; for(i=0; i<5; i++) { *(p[i]+ i )=1; *(p[i]+5- (i+1) )=1; } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%2d", p[i][j]); Printf("\n") ; } } 运行结果(请帖图):

9.6 编程(选作) #include main() { int *p,a[20],i,k,m,n; p=a; printf("请输入人数n:"); scanf("%d",&n); for(i=0;i

C语言实验习题

实验七:指针程序设计 实验内容 以下均用指针方法编程: 1. 调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 main() { int j,k,a[12],*p; for(j=0;j<12;j++) scanf("%d",p++); for(j=0;j<12;j++) { printf("%d",*p++); if(j%4 == 0) printf("\n"); } } 调试此程序时将a设置为一个"watch",数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。 2. 在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。 3. 自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t 时返回-1,s等于t?时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。 4.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值。 要求用函数指针调用这两个函数,结果在主函数中输出。 main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b); p=sum; *p(a,b,c); p=swap;

*p(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } sum(int a,int b,int c) { c=a+b; } swap(int a;int b) { int t; t=a; a=b; b=t; } 调试程序时注意参数传递的是数值还是地址。 5.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。 例如:输入:123 输出:1+2+3=6→ June 输入:139 输出:1+3+9=13→ *** 用指针数组记录各月份英文单词的首地址。 6.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。

语言程序设计实验答案数组指针与字符串

实验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()函数实现输入输出。程序名:。 参考运行结果:

C语言实验六实验报告——指针

一、实验项目名称 指针 二、实验目的 1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等; 2.掌握数组与指针的关系并能够利用指针解决数组的相关问题; 3.掌握字符串与指针的关系并能够利用指针处理字符串的问题; 4.掌握指针与函数的关系并能够利用指针处理函数问题; 5.了解指向指针的指针的概念及其使用方法; 6.能够使用指针进行程序设计。 三、实验内容 有关指针的程序设计 1.编程实现:任意输入的10个数,求其平均值。 要求: (1)10个数采用scanf语句读入。 (2)利用指针实现对这10个数的访问。 (3)要求平均值的精度为小数后面2位。 2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。 要求: (1)整数数组由初始化方式输入。任意整数由scanf函数输入; (2)实现过程采用指针处理; (3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。 3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。 要求: (1)在主函数中以初始化方式输入一个字符串; (2)调用newcopy()函数; (3)在主函数中输出处理后的结果。 4.编程实现:输入三个整数,按由大到小的顺序输出。

要求: (1)通过scanf函数输入三个数据并存入三个变量中; (2)利用指针实现从大到小输出; (3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出; (4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出; (5)体会指针对不同数据处理的特点。 四、实验步骤及结果 一、 #include <> void main() { int a[10],n,sum=0; float aver;/* 定义平均数为浮点型*/ int *p=a;/*初始化*/ printf("Please input 10 numbers:\n"); for (n=0;n<10;++n) scanf("%d",&a[n]);/*输入十个数*/ for (n=0;n<10;++n) sum=sum+*(p+n);/*使用指针访问数据*/ aver=(float)sum/n; printf("Average is %.2f",aver);/*精确到小数点后两位*/ } 二、 #include <> void arr(int *a,int n);/*定义排序函数*/ void insert(int *a,int num);/*插入并排序函数*/ int n=10;/*定义数据个数,可修改*/ void main()

实验7 指针及其运算

实验七指针及其运算 实验目的 理解指针的概念,会定义和使用指针变量,掌握指针的运算规则,学会使用数组的指针和指向数组的指针变量。 要点提示 1.变量在内存单元的地址称为该变量的“指针”。 2.指针变量是用来存放其它变量地址的变量。 3.指针变量定义的一般形式: 类型标识符*指针变量名; 4.指针运算符 &(取变量地址运算符)和*(取值运算符)是互逆的运算符,右结合。 ++,--,+,- 运算符是按地址计算规则进行的。 5.用指针作为函数参数,可以实现“调用函数改变变量的值,在主调函数中使用这些改变的值。 6.数组的指针是指数组的起始地址(首地址),数组元素的指针是指数组元素的地址。数组名代表数组的首地址,是地址常量。 实验内容 1.指针变量的说明,初始化和使用。 2.指针作为函数参数。 3.数组的指针和指针数组的指针变量的说明和使用 4. 数组名作为函数参数 实验步骤 读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入) 1. 输入a和b两个整数,按先大后小的顺序输出。 算法提示:不交换变量的值,而是交换两个指针变量的值,使p1指向较大的数,p2指向较小的数。 #include using namespace std; main() { int *p1,*p2, 【】;/* 变量说明语句*/ int a, b; cout<<"\n Please input a and b:"; cin>>a>>b; p1=&a; p2=&b; if (a

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A)for(i=0;i<6;i++) printf("%2d",*(p++)); B)for(i=0;i<6;i++) printf("%2d",*(p+i)); C)for(i=0;i<6;i++) printf("%2d",*p++); D)for(i=0;i<6;i++) printf("%2d",(*p)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

C语言中指针、数组和引用例子实例

一、指针:内容是指示一个内存地址的变量;类型是指示编译器怎么解释指针内容指向地址中的内容,以及该内存区域有多大; 例子: [cpp] int i = 0; int * pi = &i; printf(“pi = %x \n”, pi); // 打印pi的内容: 0x2000 printf(“*pi= %d \n” , *pi); // 打印pi指向地址中的值: 5 printf(“&pi= %x \n”, &pi); // 打印pi的地址: 0x100 从汇编的角度来看,指针是这样的: int i = 0; 010E139E mov dword ptr [i],0 int * pi = &i; 010E13A5 lea eax,[i] 010E13A8 mov dword ptr [pi],eax 二、数组:是一个单一数据类型对象的集合。其中单个对象没有被命名,通过索引访问。 数组名和指针的区别:数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组。数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量。指向数组的指针则是另外一种变量类型,仅仅意味着数组的存放地址 注意:虽然数组名可以转换为指向其指代实体的指针,但是它只能被看作一个指针常量,不能被修改,如下:天骄无双:https://www.doczj.com/doc/a2414756.html, [cpp] int intArray[10]; intArray++; // 错误 “指针和数组等价”说的是什么?索引操作相同,例如:p[2]; a[2]; 三、引用(reference)是一个对象的别名。用对象初始化引用后,对象的名字和引用都指向该对象; 引用是如何实现的?从汇编语言的角度来看,指针和引用是一样的: [cpp] int i = 0; 00E9139E mov dword ptr [i],0 int & ref = i; 00E913A5 lea eax,[i] 00E913A8 mov dword ptr [ref],eax int * pi = &i; 00E913AB lea eax,[i] 00E913AE mov dword ptr [pi],eax 指针和引用的区别(从C++使用角度来看): 不存在空引用 引用要初始化 引用初始化后,不能指向另一个对象 这是由编译阶段保证的。 备注:一个指向非常量的引用不能用字面值或者临时值初始化;但是一个指向常量的引用可以。天骄无双:https://www.doczj.com/doc/a2414756.html,

实验六 指针(题目)

实验六指针 一、实验目的及要求 1.通用实验进一步掌握指针的概念,会定义和使用指针变量; 2.能正确使用数组的指针和指向数组的指针变量; 3.能正确使用字符串的指针和指向字符串的指针变量; 4.能正确使用指向函数的指针变量; 5.了解指向指针的指针的概念及其使用方法。 二、实验学时 4学时 三、实验任务 编程序并上机调试运行程序(都要求用指针处理)。 1.上机验证以下c70101.c程序的运行结果 #include void main() { inti,j,*pi,*pj; pi=&i; pj=&j; i=5; j=7; printf("\n%d\t%d\t%d\t%d",i,j,pi,pj); printf("\n%d\t%d\t%d\t%d",&i,*&i,&j,*&j); } 运行结果: 5 7 -34 -32 -34 5 -32 7 相关知识:指针的值与指针指向的变量值的区别。在VC环境下,以上运行结果中的负数是另一个值。 2.上机验证以下c70102.c程序的运行结果 #include void main() { inti,a[]={1,2,3},*p; p=a;/*将数组a首地址赋给指针p*/ for (i=0;i<3;i++) printf("%d,%d,%d,%d\n",a[i],p[i],*(p+i),*(a+i)); } 运行结果: 1,1,1,1 2,2,2,2

3,3,3,3 相关知识:①指针指向数组的方法;②指针表示数组元素的方法。③数组元素的多种表示方法。 3.调试下列c70103.c程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。 #include void main() { intj,a[12],*p=a; for(j=0;j<12;j++) scanf("%d",p++); p=a; for(j=1;j<=12;j++) { printf("%4d",*p++); if(j%4 == 0) printf("\n"); } } 相关知识:①调试时指针变量指向哪个目标变量;②区分指针的值和指针指向变量的值; ③通过指针操作数组元素。 4.调试下列c70104.c程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:⑴2个数的和,⑵2个数交换值。 #include void main( ) { inta,b,c,*p=&c; void sum(int ,int ,int *); void swap(int * ,int * ); scanf("%d,%d",&a,&b); sum(a,b,p); swap(&a,&b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } void sum(inta,intb,int *c) { *c=a+b; } void swap(int *a,int *b) { int *t; t=a; a=b; b=t; } 相关知识:①调试程序时注意参数传递的是数值还是地址。②指针作为参数;③利用指针得到多个返回值。

实验7-指针

《C语言程序设计》实验报告实验序号:7 实验项目:指针 一、实验目的及要求 1、通过实验掌握指针的定义和使用指针变量; 2、掌握使用指针对数组和字符串进行操作; 3、掌握函数中指针类型参数的使用; 4、要求采用指针方法完成。 二、实验设备(环境)及要求 使用Turbo C 或Visual C++ 6.0;windows系列操作系统的环境。 三、实验内容与步骤 1.输入运行下面这个程序,观察并分析结果: #include "stdio.h" void main() { int a[]={2,3,4,5,6}; int *p1; char *p2="computer\n"; p1=a; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); p1=a+2; printf("%d\n",p1+2); printf("%d\n",*(p1+2)); printf(p2+2); printf("%s",p2+2); } 运行结果截图:

2.以下程序调用invert 函数按逆序重新放置a 数组中的值,a 数组中的值在main 函数中读入,请填空。 #include "stdio.h" void invert(int *s,int i,int j) { int t; if(i

C语言指针数组函数练习(含参考答案)

作业(使用指针、数组、函数完成) 1. 编写一个通用函数,该函数可以实现判断:一个含有五位数字的整数是否是回文数。回文数的含义是从左向右与从右向左看,数是相同的。如:23732是回文数,而23564则不是。编写主程序调用该函数实现求所有5位数字中满足条件的数的个数。 #include int Judge(int num) { int w,q,b,s,g; w=num/10000; q=num%10000/1000; s=(num%100)/10; g=num%10; if((w==g)&&(q==s)) return 1; else return 0; } void main() { int count=0; int i; for(i=10000;i<=99999;i++) if(Judge(i)) count++; printf("%d\n",count); } 2.编写一个通用函数,该函数可以实现对数值型数组的倒序。倒序的含义是把数组的元素值前后颠倒。例数组:20,19,18,15,13,10倒序的结果为:10,13,15,18,19,20。编写主程序,数组初始化方式不限,并输出,然后调用该函数实现倒序后再输出倒序的结果。#include #define N 6 void Transfer(double *b,int n) { double temp; double *i=b; double *j=b+n-1; while(j>i) { temp=*i; *i=*j; *j=temp; i++;

j--; } } void main() { double array[N]={20,19,18,15,13,10}; int i; for(i=0;i #include double Cal(double *p,int n) { int i,j; double sum=0; for(i=0;i

实验7 指针习题及参考答案

上机实验十指针 一.目的要求 1.掌握指针的基本概念; 2.掌握指针变量的定义和初始化; 3.掌握用下标、数组名或指针等不同方式引用数组元素; 4.掌握数组名作函数参数的方法; 5.请添加签名,本实验均用指针方法处理。 二.实验内容 【实验题1】 1)程序填空,交换指针p1,p2所指向的变量。(10 分) # include void main ( ) { int a=1,b=2, *p1, *p2, pt; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); pt=p1 ; p1=p2 ; p2=pt ;//交换指针变量p1,p2所指向的变量printf(“*p1=%d, *p2=%d \n”,*p1,*p2); } 运行结果: 2)程序填空,交换指针p1,p2所指变量的值。 # include void main ( ) { int a=1,b=2, *p1, *p2, temp; p1=&a; p2=&b; printf(“*p1=%d, *p2=%d \n”, *p1,*p2); temp=*p1 ; *p1=*p2 ; *p2=temp ;///交换指针p1,p2所指变量的值 printf(“*p1=%d, *p2=%d \n”, *p1,*p2); } 运行结果: 【实验题2】程序填空:输入三个整型变量i,j,k的值。请设置三个指针变量p1,p2,p3,分别指向i,j,k。

然后通过p1,p2,p3使i,j,k三个变量的值依次交换,即原来i的值赋给j, 原来j的值赋给k, 原来k的值赋给i。输出交换后i,j,k的值。(10 分) i j k 分析:三个值轮换跟两个值互换是一样的原理,在变量被赋新值之前必须保证原值已经被保存。设temp 为临时变量,则temp=i; i=k; k=j; j=temp ,参考以上做法,轮换时要求用指针p1,p2,p3来替代i,j,k. 源程序: #include void main ( ) { int i,j,k,temp, *p1=&i ,*p2=&j,*p3= &k ; printf("Input i j k: "); scanf("%d%d%d",&i,&j,&k); //输入i j k //i-->j-->k-->i temp=*p1 ; *p1=*p3 ; *p3=*p2 ; *p2= temp; printf("%d %d %d \n", *p1,*p2, *p3);//输出轮换后的i j k } 输入:1 2 3 输出: 【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。(10 分) # include void main ( ) { int a,b,c, *p1, *p2, *p3; scanf(“%d%d%d”,&a,&b,&c); // 令p1指向最大值 p1=(a>b)?&a:&b ; //p1指向a,b中较大者 if(*p1c ) p2=&c; printf(“max=%d, min=%d”, *p1,*p2 ); printf("Hello,c\n" ); }

相关主题
文本预览
相关文档 最新文档