9512.net
甜梦文库
当前位置:首页 >> >>

第十章指针



第十章 第十章

指针

通过本章实验作业应达目标
1.掌握使用指针变量的方法。 2.掌握带有指针形参的函数的定义及调用方法。 3.正确使用指针操作数组元素。 4.正确使用指针数组操作字符串。

本章上交作业
程序 10_1_1.c,10_2_1.c,10_3_1.c,10_4_1.c 上传至 211

.64.135.121/casp。

实验一
【实验目的】 实验目的】 1.掌握指针概念及定义方法。 2.学会利用指针来求解实际问题。 【实验内容】 实验内容】

指针作函数参数

,其中的 x,y 都是指向 int 的指针,功 作业 1.编写一个函数 void swap(int *x,int *y) 能是实现 x,y 所指向的两个 int 变量的值的交换。并写出函数调用过程。请以 10_1_1.c 命 名本程序。 主函数如下: main( ) { void swap(int *x,int *y); int a,b; scanf("%d,%d",&a,&b); printf("before swap: a=%d,b=%d\n",a,b); 此处请写出函数调用过程; printf("after swap: a=%d,b=%d\n",a,b); } 【实验提示】 实验提示】 注意指针作为函数参数的写法。

实验二
【实验目的】 实验目的】

用指针对元素排序

1.掌握指针概念及定义方法。 2.学会利用指针和数组来求解实际问题。 【实验内容】 实验内容】 作业 1.给定主函数,编写三个函数 input()、sort()、output(),分别实现数组元素的输入, 数组元素的排序(升序)和数组元素的输出。请以 10_2_1.c 命名本程序。 #include "stdio.h" int i;

main( ) { void input(int *a,int n); void sort(int *a,int n); void output(int *a,int n); int a[10]; input(a,10); sort(a,10); output(a,10); } 【实验提示】 实验提示】 1.可以使用数组那一章讲到的任何一种排序算法。 2.本题关键是指向数组的指针变量的应用。由于将数组的首地址赋给了形参指针变量,所 以可以在被调函数对指针变量所指向的地址处值的修改可以实现对主函数中数组元素值的 修改。 【思考 思考】 思考 1. 如果只想对 a 数组的前 5 个数排序,该如何调用 sort 函数? 2. 如果只想对 a 数组的后 5 个数排序,该如何调用 sort 函数?

实验三
【实验目的】 实验目的】

测试是否子串函数

1.掌握指针概念及定义方法。 2.学会利用指针和数组来求解实际问题。 【实验内容】 实验内容】 作业 1.编写一个函数 int delnum(int *a , int num , int n),用于在长度是 n 的数组 a 中,删除 一个指定的元素 num。并把删除后数组的长度作为函数的返回值。 请以 10_3_1.c 命名本程序。 主函数如下: # define N 10 main( ) { int a[N] , num; scanf(“%d”,&num); 输入 N 个数到数组 a 中; 调用 delnum 函数在数组 a 中删除指定的数 num; 输出删除了 num 后的数组 a; }

实验四
【实验目的】 实验目的】

字符串的交叉连接

学会利用多个指针和字符数组来解决实际问题。

【实验内容】 实验内容】 作业 1.编写一个函数 char *link(char *s1,char *s2),实现字符串 s1 与 s2 的交叉连接,连接 后得到的新字符串放在 s1 中, 函数返回值为字符数组 s1 的首地址。 请以 10_4_1.c 命名本程 序。 #include<stdio.h> #include<string.h> main( ) { char a[100],b[100]; char *link(char *,char *); gets(a); gets(b); 此处请写出 link 函数的调用过程; puts(a); } 例如: 输入 abc<CR>12345<CR>,输出 a1b2c345。 输入 abcde<CR>123<CR>,则输出 a1b2c3de。

实验五
【实验目的】 实验目的】

指针数组对多个字符串排序

1.掌握指针数组的概念及定义方法。 2.学会利用指针数组来解决实际问题。 【实验内容】 实验内容】 作业 1.从键盘上输入 10 个字符串,排序后输出。要求在 main( )中输入与输出,用另一函 数 void strsort(char **p, int n)对它们按字母顺序实行排序,n 是指针数组中元素的个数。请 以 10_5_1.c 命名本程序。 主函数如下: #include<string.h> main( ) { int a[10][100],*pa[10],i; void strsort(char **p,int n); for(i=0;i<10;i++) { pa[i]=a[i]; gets(p[i]); } strsort(pa,10); for(i=0;i<10;i++) puts(a[i]); } 【讨论与思考】 讨论与思考】

1.比较一下使用指针数组和使用二维数组各自的优缺点。 2.本题是采用交换指针的指向,还是采用交换字符串的位置?哪一种更好?

实验六
【实验目的】 实验目的】 掌握指针作函数参数的应用。 【实验内容】 实验内容】

从母串中删除子串(综合类)

作业 1.函数 delstr 的功能是从字符数组 a(母串)中删除的所有子串 b,并返回数组 a 的起 始地址。 (子串有可能出现多次) 。请以 10_6_1.c 命名本程序。 如在"abaaabaacbaababab"中删除"ab",输出为"aaaacba"。 主函数如下: #include <stdio.h> main( ) { void delstr(char *a, char * b); int strss(char *s1,char *s2); char a[200],b[20]; puts("请输入一个字符串:"); gets(a); puts("请输入被删的子串:"); gets(b); delstr(a,b); puts(a); } 【实验提示】 实验提示】 本题方法有很多,下面介绍一种逐个字符比较的方法: 1)首先要做的是查找子串在母串中的位置。若母串中字符 a[ i ]与子串的第一个字符 b[0]相 等,则从当前位置开始,比较此后的长度为 strlen(b)个字符相等,置标记 k=1,则表示 b 是 a 的子串,从 a[i]开始。 if(a[i]==b[0]) { for(j=0;b[j]!='\0';j++) if(a[i+j]!=b[j]) break; if(b[j]=='\0') k=1; } 2)找到后开始删除子串。可以使用 strcpy 函数,也可以自己使用循环来完成。 for (m=0;a[m]!='\0';m++) a[i+m]=a[i+x+m]; 3)要注意每一次删除之后,要对 i 的值减一。对 k 的值重新赋值为 0。为什么?

习题
一、选择题 1. 变量的指针,其含义是指该变量的________. a)值 b)地址 c)名 d)一个标志 2. 若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 3. 若有以下定义,则对 a 数组元素的正确引用是_________. int a[5],*p=a; a) *&a[5] b) a+2 c) *(p+5) d) *(a+2) 4. 若有定义:int a[2][3],则对 a 数组的第 i 行 j 列元素地址的正确引用为______. a) *(a[i]+j) b) (a+i) c) *(a+j) d) a[i]+j 5. 下面程序段的运行结果是_________. char *s="abcde"; s+=2;printf("%d",s); a)cde b)字符'c' c)字符'c'的地址 6. 以下正确的程序段是_________. a)char str[20]; scanf("%s",&str); c)char str[20]; scanf("%s",&str[2]);

d)无确定的输出结果

b)char *p; scanf("%s",p); d)char str[20],*p=str; scanf("%s",p[2]);

7. 若有说明语句 char a[]="It is mine"; char *p="It is mine"; 则以下不正确的叙述是________. a)a+1 表示的是字符 t 的地址 b)p 指向另外的字符串时,字符串的长度不受限制 c)p 变量中存放的地址值可以改变 d)a 中只能存放 10 个字符 8. 下面程序的运行结果是_______. #include <stdio.h> #include <string.h> main() {

char *s1="AbDeG"; char *s2="AbdEg"; s1+=2;s2+=2; printf("%d\n",strcmp(s1,s2)); } a)正数 b)负数 c)零 d)不确定的值

9. 下面程序的运行结果是_______. #include <stdio.h> #include <string.h> fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1; while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;} } main() {char *p; p="1234567"; fun(p,strlen(p)); puts(p); } a) 7654321 b) 1714171 c) 1711717 d) 7177171 10. 已知说明语句 int (*p)[ ]; ,则下列叙述正确的是:______。 A) p 是一个指针变量,它指向一个整型一维数组 B) 是一个指针变量,它指向一个整型数据 C) p 是一个指针变量,它指向一个返回值是整数的函数 D) 以上都不对 11. 若数组名作实参而指针变量作形参,函数调用实参传给形参的是: A)数组的长度 B)数组第一个元素的值 C)数组所有元素的值 D)数组第一个元素的地址 。

12. 已知有声明语句 char s1[10]= "abcde",s3[10];以下语句中能将 s1 中存储的字符 串和 s2 中存储的字符串正确交换的是:______。 A)s3=s1,s1=s2,s2=s3; B)s3[0]=s1[0],s1[0]=s2[0],s2[0]=3[0]; C)strcpy(s3[0],s1[0]),strcpy(s1[0],s2[0]),strcpy(s2[0],s3[0]); D)strcpy(s3,s1),strcpy(s1,s2),strcpy(s2,s3); 13. 设 int b[ ]={1,2,3,4},y,*p=b; 则执行语句 y=*p++;之后,变量 y 的值为( A)1 B)2 C)3 D)4 )

二、填空题: 1. 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。 请填空。 #include "stdlib.h" main() {int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z; printf("输入 3 个整数:"); scanf("%d%d%d",a,b,c); printf("%d,%d,%d\n",*a,*b,*c); num=*a; if(*a>*b)______; if(num>*c)______; printf("输出最小整数:%d\n",num); } 2. 下面程序段的运行结果是________. char s[80],*sp="HELLO!"; sp=strcpy(s,sp); s[0]='h'; puts(sp); 3. 下面程序段的运行结果是________. char str[]="abc\0def\0ghi",*p=str; printf("%s",p+5); 若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______. *(a+5)的值是 _________. 4. 若 有 以 下 定 义 :int a[2][3]={2,4,6,8,10,12}; 则 a[1][0] 的 值 是 _____. *(*(a+1)+0))的值是________. 5. 以下程序将数组 a 中的数据按逆序存放,请填空。 #define M 8 main() {int a[M],i,j,t; for(i=0;i<M;i++)scanf("%d",a+i); i=0;j=M-1; while(i<j) { t=*(a+i);________;*(_______)=t; i++;j--; } for(i=0;i<M;i++)printf("%3d",*(a+i));

} 6. 若有定义:int a[3][5],i,j;(且 0<=i<3,0<=j<5),则 a 数组中任一元素可用 五种形式引用。它们是: (1)a[i][j] (2)*(a[i]+j) (3)*(*______); (4)(*(a+i))[j] (5)*(____+5*i+j) 7. 下面程序的运行结果是_________. main() {char *a[]={"Pascal","C language","dBase","Coble"}; char (**p)[]; int j; p=a+3; for(j=3;j>=0;j--)printf("%s\n",*(p--)); } 8. char (*pa)[10];则 pa 的类型是:___ ___。 9. 设 int a[10],b[3][3];数组元素 a[5]和 b[1][2]分别用指针表示的形式是 _____________和_____________。 10. 下列程序的功能是在数组中同时查找最大元素下标和最小元素下 标,分别存放在 main 函数的变量 max 和 min 中,请填空 #include "stdio.h" void find(int *a ,int n ,int *max ,int *min) { int i; *max=*min=0; for(i=1;i<n;i++) if(a[i]>a[*max]) ________; else if(a[i]<a[*min]) ________; } void main( ) { int a[]={5,8,7,6,2,7,3},max,min; find(________); printf("\n%d, %d\n",max,min); }。 11. 36.下面程序的功能是统计字串 sub 在母串 s 中出现的次数。请选择填空。 #include "stdio.h" #include "string.h"

main() { char s[80], sub[80]; int n; gets(s); gets(sub); printf("%d\n", count(s,sub)); } int count( char *p, char *q) { int m, n, k, num=0; for (m=0; p[m]; m++) for (【1】, k=0; q[k]==p[n]; k++, n++) if(q[【2】]=='\0') { num++; break;} return (num); } 12. 下面程序的运行结果是________。 void swap(int *a, int *b) { int *t; t=a; a=b; b=t; } main() { int x=3, y=5, *p=&x, *q=&y; swap(p,q); printf("%d %d\n", *p, *q); } 13. 下面程序的功能是将字符串中的数字字符删除后输出。请填空。 #include "stdio.h" #include "malloc.h" void delnum( char *t) { int m, n; for (m=0,n=0; t[m]!='\0';m++) if (t[m]<'0' 【1】t[m]>'9') { t[n]=t[m]; n++;} 【2】; }

main() { char s[100]; printf("\n input the original string:"); gets(s); delnum(s); puts(【3】); }



更多相关文章:
第十章 指针
第十章 指针指针是C语言中功能最强大,使用最广泛的一种数据类型。指针用于描述存储单元的地 址。通过使用指针,可以在函数中进行传址调用,能够建立和操作动态数据结...
第十章指针结构程序设计(二)
第十章:指针结构程序设计( 第十章 指针结构程序设计(二) 指针结构程序设计实验时间:2009 年 5 月 25 日 实验地点: 实验时间 实验地点 实验人: 专业: 班级:...
谭浩强版C语言的第十章指针》答案
谭浩强版C语言的第十章指针》答案_工学_高等教育_教育专区。谭浩强版C语言的第十章指针》答案谭浩强版 C 语言的第十章指针》答案 第十章指针》答案如...
第10讲_第十章指针
第10讲_第十章指针 隐藏>> 第10 讲 指针 一、授课内容 1、科目:C 语言程序设计 2、授课内容:第 10 章 指针 3、授课类型:讲授 4、授课时间:10 学时 5...
第十章 指针练习题
第十章 指针练习题 隐藏>> 第10 章 指针同步练习一 一、选择题(在下列各题的 A) 、C) 、B) 、D)四个选项中,只有一个选项是正确 的,请将正确选项填涂...
第10章指针类型习题及答案
第10章指针类型习题及答案_理学_高等教育_教育专区。最后两章第十章指针类型习题及其答案 10-2 定义指针变量 p,q,r,让它们指向变量 a,b,c,在指向 d,e,f,...
第10章指针
2页 5财富值 C语言第十章指针的课件 128页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
C语言第十章习题答案
C语言第十章习题答案_IT/计算机_专业资料。C 程序设计[谭浩强](第三版)课后答案 第十章指针 2010-06-25 14:04 第十章 指针 10.1 main() {int n1,n2,...
第10章 指针
数组和指针 字符串和指针 函数名和指针 返回指针的函数 指针数组和指向指针的指针 第十章 指针 §10.1 指针的概念、指针变量的定义和使用一、指针和指针变量的...
C程序设计第三版第十章题解
C程序设计第三版第十章题解_工学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 C程序设计第三版第十章题解_工学_高等教育_教育专区。第十章指针 ...
更多相关标签:
放置江湖第十章    夏微微邵慕琛第十章    阴阳师第十章    阴阳师第十章怪物分布    奇迹暖暖第十章    阴阳师手游第十章    纪念碑谷第十章    丑时之女第十章有几个    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图