C语言字符数组作业

一、PTA实验作业

题目1:7-1 字符串转换成十进制整数

1. 本题PTA提交列表

2. 设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 1、一开始我没想到怎么判断正负的问题,输出的结果只有正数,与样例不符合
  • 2、第一次做的时候,我没有在a-f和A-F的字符转换后加10,使结果变小,参考了书上的转换后,我才发现漏了加10

题目2:7-16 Left-pad

1. 本题PTA提交列表

2. 设计思路

- 定义n(所要的长度),i,j(循环变量),m(数组长度),op(填充字符),ch[100000](操作数组)
- 输入n,接一个getchar()吸收回车
- 输入填充字符,接一个getchar()吸收回车
- i=0
- while((ch[i]=getchar())!='\n')    i自增    
- m=i(储存数组长度),ch[i]='\0'
- if(n>m)
-              for(j=0;j<n-m;j++)
-                          输出字符
-                          输出数组
-              end for
- else if(n<m)
-             for(j=m-n;j<m;j++)
-                    输出数组后n个数
-            end for
- else(即n=m)    输出数组

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 1、我刚开始做的时候没有注意n可以取到10的4次方,数组长度只定义了1000,结果最大n都错了,后来我把数组长度改成了100000
  • 2、

我一直没搞明白为什么样例2是错的,因为我devc的输出是对的,但是我第二天再测试的时候,样例2在devc的输出就错了,我没搞懂为什么,后来我把n=m和n<m的位置换了一下,就全部正确了

题目3:7-20 指定位置输出字符串

1. 本题PTA提交列表

2. 设计思路

- 定义数组op[1000],i,j,k(三者用于循环),flag1,flag2(查找要求字符的位置),op1,op2(要求的字符)
- 输入数组(过程省略)
- 输入op1
- getchar()吸收回车
- 输入op2
- for(j=0;op[j];j++)
-           如果(op[j]==op1)      flag1=j 
-           end if
- end j
- for(k=flag1;op[k];k++)
-             如果(op[k]==op2)    	flag2=k
-             end if
- end k
- for(i=flag1;i<=flag2;i++)
-                  输出flag1到flag2间的所有字符

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 我一开始第二个循环的k是从0开始的,这样会导致flag2有可能会出现在flag1前面,对某些情况不符合

二、截图本周题目集的PTA最后排名。

三、同学代码结对互评

1.互评同学名称

  • 陈文杰

2.我的代码、互评同学代码截图(此处截图核心代码就好,不一定截图全部代码,图上指明是谁的代码。)

  • 我的代码

  • 文杰同学代码

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

  • 1、文杰同学代码是先把符合16进制的字符找出并转换后储存于新数组中,然后再进行换算;而我是一边找一边进行换算,这一点我觉得我的做法会比较好
  • 2、至于正负的问题上,我觉得文杰同学做法会更好,我花了很大一段代码来判断正负;而文杰同学在输入时就进行判断,效率更高
  • 3、如果判断正负用文杰的方法,换算使用我的方法,那么程序效率会更高

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?

  • 定义指针的一般形式为:类型名 *指针变量名
  • *为指针声明符,不可省去
  • 指针变量的类型是指它所指向的变量的数据类型

1.2指针加法运算运用在哪种情况,2个指针变量能否相加?

  • 定义一个指针p(int p),则(p)++、p=p+1、++*p都表示将指针p所指向的变量的值加1;
  • 定义一个指针p(int p),对指针赋值,则p++不再指向原变量
  • 两个指针不能相加

1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

  • 程序崩溃,无法运行

1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?

  • 1、指针变量做函数形参:void splitfloat(float x,int *intpart,float *fracpart)

  • 2、函数实参:splitfloat(x,&ip,&fp)实参应该是一个地址

  • 3、用处:通过指针改变指针所指向的白能量的值

1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。

void bubble(int *p,int n)
{
	int i,j,t;
	for(i=1;i<n;i++)
	  for(j=0;j<n-i;j++)
	    if(*p>*p+1)
	{
		t=*p;
		*p=*p+1;
		*p+1=*p;
	}
}

1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?

  • 假设有一个数组a[10],有一个指针*p,则p=a或p=&a[0]都能使指针p指向数组a[10]的初始地址,p+1即为下一个变量的地址,以此类推
  • 假设指针p指向数组a[10]第一个变量,则p表示a[0],(p+1)表示a[1],以此类推

1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?

  • 举个例子:char *sp=“string”
  • 指针会指向字符串的首字符

1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?

2.本周你不会内容有什么?

2.1 课堂派错题罗列及如何订正。

  • 1、实现字符串的连接
    我一开始不知道怎么连接,现在明白了怎么连接了

  • 2、
    scanf函数后面的参数应该是一个地址,所以*p的是错的,应该是p

2.2 其他不会的?打算怎么解决

  • 不会的问题,就要课堂多听,多向人请教,可以适当的百度了解自己不会的地方,当然最主要还是自己要理解透彻才能掌握好

3.数组上机考试小结

3.1 那题错了,请罗列?

  • 1、函数题的 jmu-c-二维数组转置并按列排序
  • 2、编程题的 7-4 数组元素的删除

3.2 错题如何订正,为什么错了?

  • 1、函数题的 jmu-c-二维数组转置并按列排序
    错误原因:我试着做了一次,觉得有点麻烦,就先跳过去,结果被后面的题耽搁了,来不及回来思考怎么做
  • 2、编程题的 7-4 数组元素的删除
    错误原因:我一开始的想法是移动数组。然后输出需要的部分,不过我这样做打乱了数组,输出结果不正确,加上时间不够,来不及更改
posted @ 2017-12-10 21:03  网络1711王艺斌  阅读(474)  评论(5编辑  收藏  举报