第二次博客作业
第二次博客作业
目前学习中,存在的最大知识漏洞就是有关指针的问题。漏洞产生的原因是预习时候没懂的地方上课的时候仍然没弄明白,可能和自身原因有关,上课时候精力不够集中。因为这个漏洞,近期作业中出现的很多有关指针的并不复杂的题目也出了问题。
具体例子如下面这道题:本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数
strmcpy
将输入字符串
char *t
中从第
m
个字符开始的全部字符复制到字符串
char *s
中。若
m
超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 20
void strmcpy( char *t, int m, char *s );
int main()
{
char t[MAXN], s[MAXN];
int m;
cin>>m;
cin.ignore();
cin.getline(t,MAXN);
strmcpy(t,m,s);
cout<<s;
return 0;
}
/*
你的代码将被嵌在这里
*/
这题思路很简单,但考点很明确就在于指针
以下是我的程序:void strmcpy( char *t, int m, char *s )
{ int i,j,len;
strcpy(s, t);
len = strlen(s);
for(i=m-1;i>0;i--)
{ for(j=i;j<len;j++)
{ *(s+j-1)=*(s+j); }
} *(s+len-m+1)='\0';}
就是因为对指针的不明确,最后的寻找复制对象的步骤一开始写不出来。
下面是一道我认为有难度的题目,就是涉及到函数和指针应用的。
数组元素换位 (15 分)
在主函数中输入n个整数到数组中,调用函数(要求被调参数为⑴数组名 ⑵数组元素的个数)完成将数组中的最小值与第0个元素对调,将数组中的最大值与最后一个元素对调,主函数中输出调换后的数组。要求函数用指针变量作形参。
输入格式:
第一行是一个整数n,表示元素个数; 第二行是n个整数,表示数组的n个元素。
输出格式:
输出调换元素后的数组,以空格分隔。
以下是我的代码:
#include <iostream>
using namespace std;
void change(int *a,int n)
{
int min=0,i;
for(i=1;i<n;i++)
{
if(*(a+i)<*(a+min))
{
min=i;
}
}
int t;
t=*a;
*a=*(a+min);
*(a+min)=t;
int max=0,k;
for(i=1;i<n;i++)
{
if(*(a+i)>*(a+max))
{
max=i;
}
}
int l;
l=*(a+n-1);
*(a+n-1)=*(a+max);
*(a+max)=l;
}
int main()
{
int n;
cin >> n;
int a[n];
int i;
for(i=0;i<n;i++)
{
cin >> a[i];
}
change(a,n);
for(i=0;i<n;i++)
{
cout << a[i];
if(i<n-1)
{
cout << " ";
}
}
}
解题的时候,首先看到针对很多不同情况设计的程序,因此为了程序清晰,决定先设计两个函数,使其达到交换最小数和最大数的作用。在设计函数是,思路是先利用循环语句逐一比较,找出最大和最小值,用数组来代替具体的数。在主函数中,先输入总数,来确定数组中数的个数,然后运用函数解决问题。最开始我的问题在于如何找到最大和最小值,并且由于对数组不熟悉,所以不会将两个数进行交换。后来翻书和利用搜索引擎解决了问题。
以上,就是我第二次博客作业全部内容。