指针练习-17
来源:互联网 发布:linux mmap 实例 编辑:程序博客网 时间:2024/06/05 15:49
实验十七 指针的使用
实验要求:
1、掌握指针的定义;
2、理解指针的含义;
3、掌握指针的基本使用;
4、能进行程序调试,并修改程序。
特别要求:
在实验中遇到困难时,切忌不要动不动就问老师,而是应该先思考。如果确实不能解决困难,先与坐在旁边的同学讨论,而无论这个同学在以前是否认识。如果有同学问你问题,无论你是否能解决这个问题,都应该和他讨论。如果讨论了仍然不能解决问题,就一起问老师。讨论问题的好处在于能够深刻的理解问题,记住问题。
程序设计
1. 下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include<stdio.h>
#include<string.h>
void change( ) //1
{int i=0;
for(i=0; ;i++) //2
if(a[i]>='a'&&a[i]<='z')
; //3
}
void main()
{
char p[80];
gets(p) ; //读一行字符,中间可以有空格
change(p);
puts(p);
}
/*p11_1.c*/
char *a
a[i]!= '\0'
a[i]=a[i]-32
2,指向二维数组
阅读下面程序,写出结果,了解指针与二维数组地址的关系。
#include<stdio.h>
voidmain()
{
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p;
p=a[0];
printf("1:-----------------------\n");
printf("a=%lu\n",a);
printf("*a=%lu\n",a);
printf("p=%lu\n",p);
printf("a[0]=%lu\n",a[0]);
printf("&a[0][0]=%lu\n",&a[0][0]);
printf("2:--------------------------\n");
printf("a+1=%lu\n",a+1);
printf("*a+1=%lu\n",*a+1);
printf("p+1=%lu\n",p+1);
printf("a[0]+1=%lu\n",a[0]+1);
printf("&a[0][0]+1=%lu\n",&a[0][0]+1);
printf("3:-----------------------\n");
printf("*a+1*4+2=%lu\n",*a+1*4+2);
printf("p+1*4+2=%lu\n",p+1*4+2);
printf("a[0]+1*4+2=%lu\n",a[0]+1*4+2);
printf("&a[0][0]+1*4+2=%lu\n",&a[0][0]+1*4+2);
}
在上面的程序中,请回答以下问题:
(1)二维数组名a、*a分别代表什么含义?
(2)表达式a+1、*a+1分别代表什么含义?
(3)指针p与二维数组a的关联使用了这样的语句:p=a[0],是否还有其他的语句能将指针p与二维数组a相关联?能否使用这样的语句:p=a;相关联。
/*p11_2.c*/
1 a表示二维数组a的首地址,而*a表示二维数组a第一行a[0]的首地址。
2 a+1 第一行首地址,*a+1 第0行第一列元素地址 。
3 p=a[0][0], 不能 a代表a数组的首行首元素的地址。
3、题目标题
回文
题目描述
回文指的是一个字符串顺过来读和倒过来读是一样的,比如”civic”。写一个函数,判断某个字符串是不是回文,并在主函数中输入字符串,调用此函数进行判断。函数原型如下:int is_huiwen(char* s);
输入描述
一个字符串
输出描述
如果此字符串为回文,输出yes,否则输入no
样例输入
civic
bonjour
样例输出
yes
no
/*p11_3.c*/
#include<stdio.h>
#include<string.h>
int main()
{
int is_huiwen(char* s);
int a[81],f=1;
gets(a);
f=is_huiwen(a);
if(f==1)
printf("yes\n");
else
printf("no\n");
return 0;
}
int is_huiwen(char *s)
{
int i,j,f=1;
i=0;j=strlen(s)-1;
while(i<j)
{
if(s[i]==s[j])
{
i++;j--;
}
else
{
f=0;
break;
}
}
return f;
}
4、下面程序的功能是将字符串a分段传送到字符串b中。要求在每五个字符后插入一个逗号,以示分段。例如字符串a为"abcdefg12345",则字符串b为"abcde,fg123,45",请选择填空。
# include <stdio.h>
main()
{ int i,k=0;
char a[80],b[80],*p;
p=a;
gets(p);
while(*p)
{for(i=1;__①__;p++,k++,i++)
b[k]=*p;
if(__②__)
{ b[k]=',' ; k++;}
}
b[k]='\0';
puts(b);
}
① A、i<5 B、i<=5
C、i<5&&*p!='\0' D、i<=5&&*p!=’\0’
② A、i= =6 B、*P= ='\0'
C、!*p D、i!=6
/*p11_4.c*/
D
A
5、空格删除
题目描述
完成函数 int strdel (char *s)的定义,它实现将指针s指向的字符串中所有空格字符删除,并统计所删除的空格字符的个数返回给主函数。编写主程序,验证strdel ()的有效性。
输入描述
输入一个带空格字符的字符串。
输出描述
对于每个测试实例,输出分两行:
第一行输出删除所有空格之后的字符串;
第二行输出被删除空格的总数。
样例输入
ab c de
样例输出
abcde
4
/*p11_5.c*/
#include <stdio.h>
#include <string.h>
int main()
{ int strdel (char *s);
char a[81],*q;
int i,sum=0;
gets(a);
for(i=0;a[i]!='\0';i++)
{ if(a[i]==' ')
sum++;
}
q=strdel(a);
printf("%s\n",q);
printf("%d\n",sum);
}
int strdel(char *s)
{ int i=0,j=0;
for(;i<strlen(s);i++)
{if(s[i]!=' ')
{
s[j++]=s[i];
}
}
s[j]='\0';
return s;
}
6、编写程序,对一组英文单词字符串进行按字典排序方式(从小到大)进行排序。请设计一个排序函数void sort(char *words [], int n),可以对words中的n个字符串进行排序。
主函数已经给出如下:
#include<stdio.h>
#include<string.h>
void sort(char *words[], int n);
void main()
{
char *wString[]={"implementation","language","design","fortran","computer "};
int i, n=5;
printf("The words are :\n");
for (i=0; i<n; i++)
printf ("\twString[%d]=%s\n",i, wString[i]);
printf("After sort,The wordsare:\n");
sort(wString,n); /* 调用函数,对指针数组wString中的n个字符串排序 */
for (i=0; i<n; i++)
printf ("\twString[%d]=%s\n",i, wString[i]);
}
void sort(char *words[], int n)
{
}
请完成void sort(char *words[], int n)函数的功能。
/*p11_6.c*/
void sort(char *words [], int n)
{ char *s;
int i,j,t;
for(i=0;i<4;i++)
{ t=1;
for(j=i+1;j<5;j++)
if(strcmp(words[t],words[j])>0)
{ t=j;
}
s=words[t];
words[t]=words[i];
words[i]=s;
}
}
总结(本次实验遇到的问题、解决方法,今后要注意的地方)
1 把=和==搞混了。
2 忘记;
3 把实参字符在函数定义中使用
- 指针练习-17
- 指针练习
- 指针练习
- 练习指针
- 练习指针
- 练习指针
- 指针练习
- 指针练习
- 指针练习
- 指针 练习
- 指针 练习
- 指针练习
- 指针练习
- 指针练习
- 指针练习
- 指针练习
- 指针练习
- 指针练习
- ios runtime 汇总
- Java最常用的英语单词
- c++ 对象坐标相加重载
- 【Scikit-Learn 中文文档】大规模计算的策略: 更大量的数据
- 将c风格的注释转换成cpp风格
- 指针练习-17
- VS进行性能分析
- CORS 跨域 实现思路及相关解决方案
- 值得奋斗的
- 关于google chrome源码了解
- iptables NAT 做端口映射
- Python 小技巧:任意属性值可在构造函数中设置的 Bunch Pattern
- oracle 执行动态sql,using动态参数
- Qt5.7 + VS2015 环境搭建以及后续问题总结