实验五 指针与字符串实验

一、 实验目的和要求
(1)重点掌握一级指针的定义与使用,会利用一级指针进行间接访问等操作。通过调试器观察分析程序的运行情况,理解指针与指针所指向的内容之间的关系,理解指针间接引用的实质。
(2)综合运用函数、数组和指针的知识,理解函数中指针形式参数的意义,数组名形参实质就是指针形参。通过跟踪调试理解传值与传地址的不同,及指针形参如何改变对应的实参变量。
(3)正确使用字符数组及字符指针处理字符串。
(4)进一步熟悉数组中经典算法的实现,并且能运用到字符串的处理中。

二、实验环境(实验设备)
硬件: 微型计算机
软件: Windows 操作系统、Microsoft Visual Studio 2010

三、实验原理及内容
实验题目(1)【见实验教材实验六的题目2】:编程exp6_2.c,现有整型变量x,y,调用交换函数以期实现两个值的交换。下表中4种不同的定义及调用分别进行测试并填写表格。
表1 拟实现交换的四种方法

实验解答:
① 主函数代码如下:

int main()
{int x=1,y=2;swap1(x,y);  /*此处依次换成另外3种调用进行观察,其余代码不变*/printf("x=%d,y=%d\n",x,y);return 0;
}


实验题目(2)【见实验教材实验六的题目4】: 编写程序exp6_4.c,实现数组的逆置。如:int a[6]={1,3,4,5,6,7};逆置后int a[6]={7,6,5,4,3,1}

实验解答:
① 写出完整的源程序代码并做适当注释:

#include<stdio.h>
#include<string.h>
#define N 100
int reverse(int *b,int n);
int main()
{int str[N],i,n;printf("请输入个数:\n");scanf("%d",&n);printf("请输入一个数组:\n");for(i=0;i<n;i++)scanf("%d",&str[i]);reverse(str,n);printf("逆置后:");for(i=0;i<n;i++)printf("%d",str[i]);return 0;
}
int reverse(int *b,int n)//逆置函数
{int t,*p=&b[n-1];while(b<p){t=*b;*b=*p;*p=t;b++;p--;}return *b;
}

②运行一次程序,记录程序运行的结果:

请输入个数:
5
请输入一个数组:
1 2 3 4 5
逆置后:
54321

实验题目(3)【见实验教材实验七的题目3】:编写程序exp7_3.c,从键盘读入一个字符串,去掉其中所有的空格得到一个新串后再输出(只能定义一个字符数组,不可以定义两个字符数组,可以根据编程需要定义字符指针以及其他变量)。

实验解答:
①写出完整的源程序代码并做适当注释:

include<stdio.h>
#include<string.h>
#define N 100
unsigned int strlen(const char *str);
char *strdel(char *str);
int main()
{char str[N];printf("please input a string:\n");gets(str);*str=*strdel(str);puts(str);return 0;
}
char *strdel(char *str)//去空格
{int i,j;for(i=0;i<strlen(str);i++){if(str[i]!=32)continue;else{for(j=i;j<strlen(str);j++)str[j]=str[j+1];}}return str;
}

②按表中所给测试用例输入观察对应输出结果:
测试用例要求 输入的原始串 输出结果串
串中空格每处只有一个 A bcd 12 45 t Abcd1245t
至少有一处有连续多个空格字符 A bc 12 t Abc12t
字符串最前面是4个空格 A b 12 t Ab12t
你自己设计的测试用例 a e r t Aert

实验题目(4)【见实验教材实验七的题目2】:: 编写程序exp7_2.c,帮助小红从小明通过网络发送的两串字符串中,提取用户名和密码。
提取规则:将第一串字符串中所有的大小写字母按原序连起来,再按原序取奇数位就是用户名;将第二串中所有数字按原序连起来,再按原序取偶数位就是密码。例:小明发给小红的第一个字符串为“ag13re5D6s789h0R”,则源串大小字母按序连起来为“agreDshR”,所以用户名为“arDh”;第二个字符串为“UGa4fF6hHt97J89iK5i4L2P3”, 则源串数字按序连起来为“4697895423”,所以密码为“67943”。
实验解答:
① 写出完整的源程序代码并做适当注释:

#include<stdio.h>
#include<string.h>
#define N 100
void get_id(char *str1);
void get_secret(char *str2);
int main()
{char str1[N],str2[N];int i;printf("please input the first string with several abcs:");gets(str1);printf("please input the second string with several numbers:");gets(str2);get_id(str1);printf("The id is:");for(i=0;i<strlen(str1);i+=2)//注意奇数项printf("%c",str1[i]);printf("\n");get_secret(str2);printf("The secret is:");for(i=1;i<strlen(str2);i+=2)//注意偶数项printf("%c",str2[i]);printf("\n");return 0;
}
void get_id(char *str1)//获得用户名
{char str3[N]="0";int i,j=0;for(i=0;i<strlen(str1);i++)if((str1[i]>='a'&&str1[i]<='z')||(str1[i]>='A'&&str1[i]<='Z')){str3[j]=str1[i];j++;}strcpy(str1,str3);
}
void get_secret(char *str2)//获得密码
{char str4[N]="0";int i,j=0;for(i=0;i<strlen(str2);i++)if(str2[i]>='0'&&str2[i]<='9'){str4[j]=str2[i];j++;}strcpy(str2,str4);
}

②记录程序运行结果,观察用户名和密码字符串的具体输出结果:

please input the first string with several abcs:ag13re5D6s789h0R
please input the second string with several numbers:UGa4fF6hHt97J89iK5i4L2P3
The id is:arDh
The secret is:67943

四、实验小结(包括问题和解决方法、心得体会、意见与建议、实验出错信息及解决方案等)
(一)实验中遇到的主要问题及解决方法

1、 字符串未初始化,会出现“烫烫烫”,了解情况后,初始化。
2、 子函数中返回字符串不成功,出现corrupt字眼,用复制函数解决问题,子函数不返回值。

(二)实验心得

1、逆置函数用交换。
2、字符串要初始化。
3、函数不能返回一个自动变量的字符串。

(三)意见与建议(没有可省略)

五、支撑毕业要求指标点
1.2-H掌握计算机软硬件相关工程基础知识,能将其用于分析计算机及应用领域的相关工程问题。
3.1-M掌握设计/开发复杂工程问题解决方案所需要的专业知识和开发工具。

南京邮电大学C语言实验报告5v2(仅供参考)相关推荐

  1. 南京邮电大学c语言实验报告5,南京邮电大学C语言大一上期末复习.pdf

    南京邮电大学C语言大一上期末复习.pdf 高级语言程序设计期末总复习高级语言程序设计期末总复习 课程的全部内容可分为五大模块课程的全部内容可分为五大模块 1 1基础知识基础知识 2 2三种基本结构及流 ...

  2. 南京邮电大学c语言实验报告3v2,南京邮电大学操作系统实验报告

    <南京邮电大学操作系统实验报告>由会员分享,可在线阅读,更多相关<南京邮电大学操作系统实验报告(20页珍藏版)>请在人人文库网上搜索. 1.通信与信息工程学院2015 / 20 ...

  3. 南京邮电大学c语言实验报告4,南京邮电大学算法设计实验报告——动态规划法...

    <南京邮电大学算法设计实验报告--动态规划法>由会员分享,可在线阅读,更多相关<南京邮电大学算法设计实验报告--动态规划法(12页珍藏版)>请在人人文库网上搜索. 1.实 验 ...

  4. 南京邮电大学C语言实验报告4v2(仅供参考)

    实验四 一维与二维数组实验 一. 实验目的和要求 (1)掌握一维数组的定义与初始化,会正确访问数组元素,并利用循环对元素成批访问. (2)掌握二维数组的定义与初始化,会利用双层循环对元素访问,实现一些 ...

  5. 南京邮电大学C语言实验报告一

    实验一:顺序结构编程练习 实验题目(1)[见实验教材实验一的题目1]:正确进入VS2010集成开发环境,建立一个单文件项目,项目名为:exp1_1,然后向该项目中以新建方式添加一个源文件,名为:exp ...

  6. 南京邮电大学C语言实验报告6v2(仅供参考)

    实验六 结构体与文件实验 一. 实验目的和要求 (1)掌握结构体类型以及结构体变量的定义与使用. (2)综合运用结构体.数组.指针等知识,解决相关问题. (3)会正确定义FILE*指针,掌握文件操作从 ...

  7. 南京邮电大学C语言实验报告六

    实验六:结构体与文件实验 实验题目(1)[见实验教材实验八的题目3]:编写程序exp8_3.c,验证用户输入的日期格式是否正确,如果不正确,则提示重新输入,直到重新输入正确为止.(提示:需要定义一个表 ...

  8. 南京邮电大学C语言实验报告三

    实验三: 函数实验 实验题目(1)[见实验教材实验四的题目2]:编程序exp4_2.c,巧用函数调用,打印不同行数和字符构成的等腰三角形.具体要求:定义一个函数原型void DrawTriangle ...

  9. 南京邮电大学C语言实验报告五

    实验五:指针与字符串实验 实验题目(1)[见实验教材实验六的题目2]:编程exp6_2.c,现有整型变量x,y,调用交换函数以期实现两个值的交换.下表中4种不同的定义及调用分别进行测试并填写表格. 表 ...

最新文章

  1. T25健身视频全集+课表
  2. 【三层】无法直接启动带有“类库输出类型”的项目
  3. 卫星影像的AI分类与识别 线上Top1
  4. 看了看几个数据库厂商的发展历史
  5. Netty源码分析第3章(客户端接入流程)----第1节: 初始化NioSockectChannelConfig
  6. L1-049 天梯赛座位分配(模拟)
  7. 《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
  8. matlab深度DoF图像修复,windows10系统运行dnf提示client.exe损坏的图像解决方法
  9. win10专业版安装后没有wifi
  10. drawio二次开发
  11. absolute和relative的区别
  12. EPLAN之设备编号
  13. 软硬件测试策略及方法
  14. JavaSE练习题之不死神兔
  15. 20162307张韵琪 预备作业02
  16. 南京航空航天大学矩阵论答案
  17. 从一名白纸交易者到稳定盈利交易员需要多长时间?
  18. 串口调试助手 Alien V0.238
  19. 新手必看:访问url到加载全过程详解(看完不会我吃shi)
  20. 示波器介绍和使用方法介绍-安泰测试

热门文章

  1. 光荣使命登录显示服务器,光荣使命手游进不去怎么办 游戏进不了解决方法一览...
  2. jquery监听滚动条事件
  3. 简洁美观QQ在线客服漂浮窗口代码
  4. LastPass 开发者系统被黑已窃取源代码
  5. 学习笔记之CentOS启动故障解决方法
  6. Bootstrap 教程第三课:制作有图标的按钮
  7. 如何用console.log输出pornhub图标(误)
  8. 英语和计算机证书,我的英语证书和计算机证书都丢了
  9. spring boot —— Spring-Cloud-Zuul(网关服务getway)
  10. ABAP 固定资产报废的BAPI