邓吃鱼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第一次作业(2)

6-1 在数组中查找指定元素

1.设计思路

(1)题目算法

第一步:阅读题目,明确题目所需要的目标结果
第二步:阅读样例找到对应的形参和实参
第三步:回忆之前数组的学习中,用循环找到数组中相应数下标的过程
第四步:将上一步与所学的指针相结合,具体看书P232-234例10.6,学习将指针变量指向数组元素的几种不同的表达形式
第五步:进行调试,验证结果,并针对个别问题进行修改

(2)流程图

2.实验代码

int search( int list[], int n, int x )
{
	int *p=list , i ,idx;
	for(i=0;i<n;i++,p++){
		if(*p==x){
			idx=i;break;
		}
		if(i==(n-1)&&*p!=x){
			idx=-1;break;
		}
	}
	return idx;
}

3.调试问题及解决方法

错误信息:调试结果没有错误,但是提交到PTA后,有一项出现答案错误


6-2 找最大值及其下标

1.设计思路

(1)题目算法

第一步;阅读题目,明确题目所需要的目标结果
第二步;阅读样例找到对应的形参和实参
第三步:回忆如何在数组中找最大值并且取其下标的方法
第四步:将数组与指针相结合,这次主要看书P238例10.7,了解指针变量之间如何进行交换
第五步;进行调试,验证结果,并针对个别问题进行修改

(2)流程图

2.实验代码

int fun(int *a,int *b,int n)
{
	int i,m=0;
	for(i=0;i<n;i++,a++){
		if(*a>m){
			m=*a;
			*b=i;
		}
	}
	return m;
}

3.调试问题及解决办法

错误信息1:max的最终值不正确

错误原因:被调用函数中m的值没有返回,导致最终max不能准确地取到值
改正方法:在被调用函数最后加 return m; 使函数最终取值回归到m

第一次作业(3)

6-1 最小数放前最大数放后

1.设计思路

(1)题目算法

第一步:看题,目的是求最大值和最小值,以及利用指针进行数组间数字的交换
第二步:回忆数组找到最大值和最小值的方法,联系指针
第三步:利用指针进行数组间数字的交换
第四步:进行调试,验证结果,针对个别问题进行修改

(2)流程图

2.实验代码

void input(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		scanf("%d",*arr);
	}
}
void max_min(int *arr,int n)
{
	int i,max=0,min=*arr,p,q,temp;
	for(i=0;i<n;i++,arr++){
		if(*(arr+i)>max){
			max=*(arr+i);
			p=i;
		}
		if(*(arr+i)<min){
			min=*(arr+i);
			q=i;
		}
	}
	temp=*(arr+p); *arr=temp; *(arr+p)=*arr;
	temp=*(arr+q); *(arr+n-1)=temp; *(arr+q)=*(arr+n-1);
}
void output(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		printf("%3d",*arr);
	}
}

第一次作业(4)

6-1 判断回文字符串

1.设计思路

(1)题目算法

第一步:了解如何用数组判断字符串是否为回文
第二步:将数组与指针相结合
第三步:进行调试与修改

(2)流程图

2.实验代码

bool palindrome( char *s )
{
	int i;
	int n=strlen(s);
	for(i=0;i<=n;i++,n--){
		if(*(s+i)!=*(s+n-1)){
			return false;
	    }	    
	}
	return true;
}

3.调试问题及解决办法

错误信息1:无论输入什么,输出结果总是NO
错误原因:没有调用strlen函数,用的for循环求字符串数组的实际长度
改正方法:使用strlen函数求字符串数组实际长度,让代码更简洁
错误信息2:输出结果是NO
错误原因:在比较第一个字符和最后一个字符时,没有将n-1,导致输出错误
改正方法:举一些实际数据,用实例明白为什么要n-1

6-2 使用函数实现字符串部分复制

1.设计思路

(1)题目算法

第一步:明确题意,目标是将字符串进行复制,并且从特定位置开始
第二步:参考课本P253例10.18,明白字符串复制过程及注意事项
第三步:根据题意进行修改,进行调试

(2)流程图

2.实验代码

void strmcpy( char *t, int m, char *s )
{
	int i,n;
	for(i=0;*(t+i)!='\0';i++){
		n=i;
	}
	if(m>n){
		*s='\0';
	}else{
		for(i=0;*(t+m-1)!='\0';i++,m++){
		*(s+i)=*(t+m-1);
		
	}
	*(s+i)='\0';
	}
	
}

3.调试问题及解决方法

错误信息1:strlen(t)函数不能使用
错误原因:在题目中并没有定义strlen()函数
改正方法:运用for循环及'\0'的位置,测出字符数组的实际长度
错误信息2:

posted on 2018-03-18 20:44  邓吃鱼  阅读(270)  评论(21编辑  收藏  举报