C博客作业--指针

一、PTA实验作业

题目1: 判断回文字符串

1. 本题PTA提交列表

2. 设计思路

3.代码截图

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

一开始我用在循环里面找出不符合回文数的方法,发现答案不能全对,我就用了教科书式的来做。

题目2:过滤字符串只保留串中的字母字符

1. 本题PTA提交列表

2. 设计思路

定义一个数组ch[80]来储存字母串
int i=0,k=0;
for(i=0;*(ptr+i)!='\0';i++){//遍历字符串,找出字母
    if(*(prt+i)是字母) {则ch[k]= *(prt+i);
	k++等待下一个字母 }
	将ch[]还给*prt
	for(i=0;i<k;i++){
	*(ptr+i)=ch[i];}
	以*(prt+k)='\0'结束

3.代码截图

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

一开始忘记用了结束符,做好运行是对的,但是总是感觉怪怪的,就是忘记了结束符。

题目3:字符串串动变化

1. 本题PTA提交列表

2. 设计思路

定义一个字符变量 char ch=*p;
for(i=0;*(p+i)!='\0';i++){//遍历字符串,找出数值最大的字符
 if(ch<*p+i) ch=*p+i;并记下最大值的下标值k=i;
 将在最大字符前的字符往后移动一位,
 for(i=k;i>=0;i--){//将在最大字符前的字符都往后退一位
	*(p+i)=*(p+i-1);
 并将ch赋给第一个 *p=ch; 

3.代码截图

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

一开始一直往后移动不会移动,我写成
for(i=0;i<k;i++) * p+i= * p;
导致所有的都是原始第一字符,后面想起要从后面复制上来就对了。

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

三、阅读代码

1.

#include<stdio.h>
int main()
{
	char s[111111];
	int count_1=0,count_2=0,n,flag=1;
	
	scanf("%d ",&n);
	gets(s);
	
	for(int i=0;s[i]&&flag;i++){
		if(  s[i]=='('  ) count_1++;
		else if(  s[i]=='{'  ) count_2++;
		else if(  s[i]==')'  ) count_1--;
		else if(  s[i]=='}'  ) count_2--;
		if(count_1<0||count_2<0) flag=0;
		if((s[i]=='('&&s[i+1]=='}')||s[i]=='{'&&s[i+1]==')') flag=0;
	}
	
	if(flag) printf("True\n");
	else printf("False\n");
	return 0;
}

这个是那一题括号的问题,这个代码代码是记录了左括号和右括号的个数,只有相同的种类左右括号相等时才会符合条件,
且还有‘(’不能接‘}’,‘{’不能接‘)’,这个就是我没想到的了,导致我在这一题一直卡住,不能满分,在看完这个代码之后就
知道了这一题到底是怎么一回事,这个代码简洁明了,可读性很高,思路很清晰,并且简洁,我要多多学习这种写代码方
式,大大减少了代码量。

2.

#include<stdio.h>
#include<string.h> 
int main (void)
{
	int N,k,i,j,temp,n;
	scanf("%d",&N);
	scanf("%d\n",&k);
	if(k>=1&&N>k&&N<=100){
	if(N==100) {
	n=0;
	}
	else {
	n=1;
	}
	char a[N][101],buff[101];
	int b[N];
	for(i=0;i<N;i++){
	gets(a[i]);
	}
	for(j=0;j<N;j++){/*每个字符串的长度记录在数组b中,同时数组b的下标代表二维字符数组的行标*/ 
	b[j]=strlen(a[j]);
	}
	for(i=1;i<=k;i++){
		for(j=n;j<N-i;j++){/*用数组b的冒泡排序的下标让二维字符数组a完成冒泡排序*/ 
			if(b[j]>b[j+1]){
				temp=b[j];
				b[j]=b[j+1];
				b[j+1]=temp;/*二维字符数组冒泡排序*/ 
    			strcpy(buff,a[j]);
    			strcpy(a[j],a[j+1]);
    			strcpy(a[j+1],buff);
    		}
    	}
    }
    for(i=0;i<N;i++) {
	puts(a[i]);
	}
	}
return 0;	
}

本题是字符冒泡排序法,主要是比较字符长度,而不是大小的题目,
他用了b[]来储存了多个字母串的长度,我之前都不会使用二维字符
组导致我遇到这一些问题的是后就无从下手,在看了同学的代码之
后,他的代码可读性挺高的,思路很清晰,我知道他要表达什么东
西,什么意思,虽然代码量大,但基础知识扎实。

四、本周学习总结

1.自己总结本周学习内容。

在本周我们学习了指针这一个这一个定义量,指针的使用大大减少了
代码的使用量,指针就是一个地址,指针变量本身就是一个变量,
*p+1是跳往下一个地址,而不是地址+1,指针最重要的是一定要初始
化。这一周还初学了结构这一个数据类型,结构可以储存多个变量,
与数组不同的是数组需要数组中的所有元素的结构类型必须是相同的
而结构就不用了,可以用不同数据类型。

2.罗列本周一些错题。

在初学结构这个数据类型时,感觉还是不懂,不熟悉,现在做一些数组题时,还是有的做不对。

posted on 2017-12-15 23:38  ifcan  阅读(345)  评论(6编辑  收藏  举报

导航