指针练习-19
2017-12-07 16:49
148 查看
实验十九 指针的使用
实验要求:
1、掌握指针的定义;
2、理解指针的含义;
3、掌握指针的基本使用;
4、能进行程序调试,并修改程序。
特别要求:
在实验中遇到困难时,切忌不要动不动就问老师,而是应该先思考。如果确实不能解决困难,先与坐在旁边的同学讨论,而无论这个同学在以前是否认识。如果有同学问你问题,无论你是否能解决这个问题,都应该和他讨论。如果讨论了仍然不能解决问题,就一起问老师。讨论问题的好处在于能够深刻的理解问题,记住问题。
程序设计
1. 编写程序,从键盘输入一个字符ch,在字符串string中查找是否存在有该字符,若存在,则给出该字符在字符串中第1次出现的位置。要求设计函数char * search(char *str,char c),其功能为:在str所指的字符串中,查找是否有字符变量c的字符,如果有,返回字符串中相同字符的地址,如果没有则返回NULL。
输入描述:
在main函数里面分别输入字符串str和字符c;
输出描述:
如果有则输出yes,没有则输出no.
输入样例:
Ashdaslas
h
输出样例:
yes
2,指出下面常用指针定义的含义
int i;
int *i;
int **i;
int *i[5];
int (*i)[5];
int *i( );
int *(*i)( );
int *(*i[])();
int (*i)();
输入样例:
1
输出样例:
Monday
4、删除大写字母
题目描述
输入一个字符串,将这个字符串中的大写英文字母除去,输出剩余的字符组成的字符串。(要求用指针做)
输入描述
输入一个字符串,包含有大写英文字母
输出描述
输出除去大写英文字母的剩余字符串
样例输入
123YUadfNBweK89
样例输出
123adfwe89
5、报文解密
题目描述
输入一个字符串,将该字符串进行解密。解密规则:大写字母'A', 'B','C', 'D'用'W', 'X', 'Y', 'Z'代替,对于'E'到'Z'的字母,分别用原字母的前4个字符代替,其他字符保持不变。(要求用指针来做)
输入描述
原字符串
输出描述
解密后的字符串
样例输入
ABCDEFGHIJKLMNOPQRSTUVWXYZ
样例输出
WXYZABCDEFGHIJKLMNOPQRSTUV
6、矩阵的加法
题目描述
求两个n*n(n<10)矩阵的加法。矩阵的数据由用户输入,输出矩阵和。
要求:
1.void ADD(int (*pa)[10],int(*pb)[10],const int n);
函数功能:将行指针pa指向的矩阵与行指针pb指向的矩阵相加,结果存放到pa指向的矩阵中。
输入描述
第一行输入n的数值;然后输入矩阵a的n*n个数据和矩阵b的n*n个数据
输出描述
矩阵a和矩阵b相加后得到的矩阵。
样例输入
3
1 2 3
4 5 6
7 8 9
7 8 9
4 5 6
1 2 3
样例输出
8 10 12
8 10 12
8 10 12
7、约瑟夫问题
题目描述
下面是一种变化的约瑟夫问题,有30个人围坐一圈,从1到M按顺序编号,从第1个人开始循环报数,凡报道7的人就退出圈子,请按照顺序输出退出人的编号。
输出样例(5个一组):
7 14 21 28 5
13 22 30 9 18
27 8 19 1 12
25 10 24 11 29
17 6 3 2 4
16 26 15 20 23
总结(本次实验遇到的问题、解决方法,今后要注意的地方)
实验要求:
1、掌握指针的定义;
2、理解指针的含义;
3、掌握指针的基本使用;
4、能进行程序调试,并修改程序。
特别要求:
在实验中遇到困难时,切忌不要动不动就问老师,而是应该先思考。如果确实不能解决困难,先与坐在旁边的同学讨论,而无论这个同学在以前是否认识。如果有同学问你问题,无论你是否能解决这个问题,都应该和他讨论。如果讨论了仍然不能解决问题,就一起问老师。讨论问题的好处在于能够深刻的理解问题,记住问题。
程序设计
1. 编写程序,从键盘输入一个字符ch,在字符串string中查找是否存在有该字符,若存在,则给出该字符在字符串中第1次出现的位置。要求设计函数char * search(char *str,char c),其功能为:在str所指的字符串中,查找是否有字符变量c的字符,如果有,返回字符串中相同字符的地址,如果没有则返回NULL。
输入描述:
在main函数里面分别输入字符串str和字符c;
输出描述:
如果有则输出yes,没有则输出no.
输入样例:
Ashdaslas
h
输出样例:
yes
/*p11_1.c*/ #include <stdio.h> int main() { char * search(char *str,char c); char s[81],c; gets(s); scanf("%c",&c); printf("%s\n",search(s,c)); } char * search(char *str,char c) {int i; for(i=0;str[i]!='\0';i++) if(str[i]==c) return("yes"); return("no"); } |
2,指出下面常用指针定义的含义
int i;
int *i;
int **i;
int *i[5];
int (*i)[5];
int *i( );
int *(*i)( );
int *(*i[])();
int (*i)();
/*p11_2.c*/ int i;整形变量i int *i;i为指向整形数据的指针变量 int **i;i是一个指针变量,它指向一个指向整形数据的指针变量 int *i[5];i为指针数组,它由5个指向整形数据的指针元素组成、 int (*i)[5];i为指向含5个元素的一维数组的指针变量 int *i( );i为返回一个指针的函数,该指针指向整形数据 int *(*i)( );指向函数的指针的值 int *(*i[])();指向返回值为整数指针的函数的指针数组 4000 int (*i)();指向函数的指针,该函数返回一个整形值 |
3、编写一个程序,输入星期,输出该星期的英文名(Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday)。用指针数组处理。
输入样例:
1
输出样例:
Monday
/*p11_3.c*/#include <stdio.h> int main() { char *a[]={"Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday","Sunday"}; int n; scanf("%d",&n); if(n<1 || n>8) printf("Error\n"); else printf("%s\n",a[n-1]); } |
4、删除大写字母
题目描述
输入一个字符串,将这个字符串中的大写英文字母除去,输出剩余的字符组成的字符串。(要求用指针做)
输入描述
输入一个字符串,包含有大写英文字母
输出描述
输出除去大写英文字母的剩余字符串
样例输入
123YUadfNBweK89
样例输出
123adfwe89
/*p11_4.c*/ #include <stdio.h> #include <string.h> int main() { char a[81],*p; int i,j; p=a; gets(a); for(i=0,j=0;i<strlen(a);i++) { if(a[i]<'A' || a[i]>'Z') p[j++]=a[i]; } p[j]='\0'; printf("%s\n",p); return 0; } |
5、报文解密
题目描述
输入一个字符串,将该字符串进行解密。解密规则:大写字母'A', 'B','C', 'D'用'W', 'X', 'Y', 'Z'代替,对于'E'到'Z'的字母,分别用原字母的前4个字符代替,其他字符保持不变。(要求用指针来做)
输入描述
原字符串
输出描述
解密后的字符串
样例输入
ABCDEFGHIJKLMNOPQRSTUVWXYZ
样例输出
WXYZABCDEFGHIJKLMNOPQRSTUV
/*p11_5.c*/ #include <stdio.h> #include <string.h> Int main() { char a[81]; int i; gets(a); for(i=0;i<strlen(a);i++) { if(a[i]>=’E’ && a[i]>=’Z’) a[i]=a[i]-4; else if(a[i]>=’A’ && a[i]>=’D’) a[i]=a[i]+21; else a[i]=a[i]; } puts(a); return 0; } |
6、矩阵的加法
题目描述
求两个n*n(n<10)矩阵的加法。矩阵的数据由用户输入,输出矩阵和。
要求:
1.void ADD(int (*pa)[10],int(*pb)[10],const int n);
函数功能:将行指针pa指向的矩阵与行指针pb指向的矩阵相加,结果存放到pa指向的矩阵中。
输入描述
第一行输入n的数值;然后输入矩阵a的n*n个数据和矩阵b的n*n个数据
输出描述
矩阵a和矩阵b相加后得到的矩阵。
样例输入
3
1 2 3
4 5 6
7 8 9
7 8 9
4 5 6
1 2 3
样例输出
8 10 12
8 10 12
8 10 12
/*p11_6.c*/ #include <stdio.h> void main() { void ADD(int (*pa)[10],int (*pb)[10],const int n); int a[10][10],b[10][10],i,j,n; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d", &a[i][j]); } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d", &b[i][j]); } } ADD(a,b,n); for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n"); } } void ADD(int (*pa)[10],int (*pb)[10],const int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { pa[i][j]=pa[i][j]+pb[i][j]; } } } |
题目描述
下面是一种变化的约瑟夫问题,有30个人围坐一圈,从1到M按顺序编号,从第1个人开始循环报数,凡报道7的人就退出圈子,请按照顺序输出退出人的编号。
输出样例(5个一组):
7 14 21 28 5
13 22 30 9 18
27 8 19 1 12
25 10 24 11 29
17 6 3 2 4
16 26 15 20 23
/*p11_6.c*/ #include <stdio.h> int main() { // 假设k=3为报到计数单位量 int i,k,m,n,num[50],*p; printf("输入人的数量:n="); scanf("%d",&n); p=num; for(i=0;i<n;i++) *(p+i)=i+1;//以1至n为序给每个人编号 i=0;//i为每次循环时计数变量 k=0;//k为按1,2,3报数时的计数变量 m=0;//m为退出人数 while (m<n-1)//当退出人数比n-1少时执行循环体 { if(*(p+i)!=0) k++; if (k==7) { printf("出局人序号:%d\n",*(p+i)); *(p+i)=0;//将退出的人的编号置为0 k=0;//k报到7后,重置为0 m++;//退出的人数+1 } i++; if (i==n) i=0;//报数到尾后,i恢复为0 } while (*p==0) p++;//如果p所指向的值等于0.那么就执行p++让它指向下一个元素,直到不为0. printf("最后留下的人的编号是:%d\n",*p);//经过上面的循环后,*p的指向的编号就是最后留下的人 return 1; } |
总结(本次实验遇到的问题、解决方法,今后要注意的地方)
相关文章推荐
- 郭克华手机编程教学视频----我的练习源码(19)指针事件
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- C++刷题——2736: 指针练习--输出最大值
- c和指针练习
- 算法练习:两指针之三数之和为0
- C和指针第一章编程练习
- 重新开始战斗19-程序员面试宝典-P34_5.4面试题2--数据转换与指针转换
- C和指针之字符串编程练习11(统计一串字符包含the的个数)
- 小练习 - 单链表冒泡排序,交换指针域
- JAVA编程思想第四版-多线程的练习答案之练习19
- 函数的返回值是指针--练习
- 3第一周课后练习·阅读计划(2)-使用指针来访问私有数据成员
- 课堂小练习(指针问题)
- 27-网络编程-19-网络编程(TCP协议-练习-服务端多线程技术)
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- C语言编程(练习3:数组与指针)
- 练习指针