第一次作业
作业要求二
题目6-1 计算两数的和与差
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:计算出`op1+op2`的值,并将其赋给`*psum`所指向的变量。
计算出`op1-op2`的值,并将其赋给`*pdiff`所指向的变量。
(2).流程图
2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3.本题调试过程碰到问题及解决办法
错误信息:编译错误
错误原因:在赋值语句后忘记加“;”
改正方法:赋值语句后加“;”
题目6-2 拆分实数的整数与小数部分
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:将`x`强制转化成`int`类型,获取整数部分的值然后赋值给`*intpart`所指向的变量
第四步:将原数减去整数部分,获取小数部分的值然后赋值给` *fracpart`所指向的变量。
(2).流程图
2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
3.本题调试过程碰到的问题和解决办法
错误信息:答案错误
错误原因:没有将`x`强制转化为整形类型
改正方法:`*intpart=(int)x`;在x前加一个强制转化类型(`int`),然后再把值赋给指针`*intpart`
题目6-1(2)在数组中查找指定元素
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:定义一个变量`i`,然后进行一个`for`循环,对数组中所有的元素与指定元素`x`进行判断。
第四步:若相等,输出下标;若不存在,输出`Not found`。
(2).流程图
2.实验代码
int search( int list[], int n, int x )
{
int i;
for(i=0;i<n;i++)
{
if(list[i]==x)
return i;
}
return -1;
}
3.本实验调试过程碰到的问题和解决办法
错误信息:编译错误
错误原因: 用主函数中的`a[i]`去和`x`做判断是否相等。
改正方法:应该判断调用函数中的`list[i]`是否与`x`相等。
题目6-2(2)找最大值及其下标
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:先将首元素的值赋给`max`,再用`for`循环对每两个元素进行大小判断;
第四步:找出最大值,赋给`max`并将其下标存如`*b`所指的变量里。
(2).流程图
2.实验代码
int fun(int *a,int *b,int n)
{
int max = *a;
int i;
for(i=1;i<n;i++)
{
if(*(a+i)>*a)
{
max=*(a+i);
*b=i;
}
}
return max;
}
3.本实验调剂过程中碰到的问题和解决办法。
错误信息:编译错误
错误原因:做比较判断应该是同类型做判断,而我却用一个地址和一个数值做大小比较。
改正方法:将`(a+i)>*a`改为`*(a+i)>*a`。
题目6-2(3)指针选择法排序
1.设计思路
(1)描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:第一趟,在这组数据中选中最大的那个,将它与第一个数字经行交换。依次类推。
第四步:使有序序列不断减小知道全部排序完。
(2)流程图
2.实验代码
void sort(int *x,int n)
{
int t,i,j;
for(i=0;i<(n-1);i++)
{
for(j=0;j<(n-i-1);j++)
{
if(x[j]<x[j+1])
{
t=x[j];x[j]=x[j+1];x[j+1]=t;
}
}
}
}
3.本实验调剂过程中碰到的问题和解决办法。
错误信息:编译错误
错误原因:将选择排序法做成了冒泡排序
改正方法:区分冒泡与选择排序的区别。
6-1(4)判断回文字符串
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:以每组数据(x)的中间数为对称轴(单数,以中间数字;双数,分成两部分),分别将两侧的数字经行比较。
第四步:若每对数字相等,i++,知道i=x/2,若不等跳出循环。
(2)流程图:
2.实验代码
bool palindrome( char *s )
{
int x=strlen(s),i;
for(i=0;i<(x/2);i++)
{
if(s[i]!=s[x-(i+1)])
{
return false;
}
}
if(i==(x/2))
{
return true;
}
}
3.本实验调剂过程中碰到的问题和解决办法。
错误信息:部分答案错误。
错误原因:在 `if(s[i]!=s[x-(i+1)])`后加了break;
改正方法:不用加break,直接在 `if(s[i]!=s[x-(i+1)])`成立后返回false。
6-2(4)使用函数实现字符串部分复制
1.设计思路
(1).描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:统计字符串中的字符数量。
第四步:判断m是否超过字符串的长度。
(2).流程图
2.实验代码
void strmcpy( char *t, int m, char *s )
{
int i,count=0;
for(i=0;t[i]!='\0';i++)
{
count++;
}
if(m>count)
{
s[0]='\0';
}else{
for(i=0;t[m-1]!='\0';i++,m++)
{
s[i]=t[m-1];
}
s[i]='\0';
}
}
3.本实验调剂过程中碰到的问题和解决办法。
这个题是王文博教给我的。自己重写的时候,没有遇到什么问题。
方法二:
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';
}
描述算法:
第一步:阅读题目,明确题意要求。
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:通过外层循环找到需要复制字符之前的字符,通过内循环遍历将需要复制的第一个字符及其之后的字符全部向前移。
第四步:最后将字符串的最后一个元素赋值为'\0' ,输出字符串。
作业要求三
1.总结。
(1).最显而易见的进步是,对函数部分的学习有了很大的进步。上学期函数部分几乎没学会,而这学期通过写这次博客作业,函数部分我几乎都明白了,很开心
(2).掌握了流程图的画法。
(3).即便有的题不能独立完成,但能够渐渐看懂别人的方法和代码。
(4).对指针有了初步的认识,老师上课讲的那些东西也明白了,但还是不太会运用。
(5).有些题能够找到思路,也能够想到解决办法,但变不成代码,这可是现在最大的问题。
总之,就是写博客真的给我带了很大的帮助,即便花的时间可能过长,但感觉这两周真的有进步,而不是一味的抱怨不会,然后又不知道该怎么做。很开心。
2.git托管平台。
https://github.com/Vinecy666/C-