第一次作业(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: