6-1 计算两数的和与差
1、设计思路
第一步:根据题意对函数进行定义。
第二步:分析得该函数所求为op1与op2的和与差,将所得和与差分别为psum和pdiff。
第三步:得出代码。
2、实验代码
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3、本题调试过程碰到问题及解决办法
问题:编译错误
解决:在定义函数时像定义变量一样在结尾加上了逗号,删除了逗号后答案便正确了。
6-2 拆分实数的整数与小数部分
1、设计思路
第一步:定义函数。
第二步:根据题意分析,要将一个数的整数部分和小数部分分开,首先会想到int由此得到整数部分,然后用原来的数减去整数部分便能得到小数部分。
第三步:指针intpart指向x的整数部分,fracpart指向其小数部分。
2、实验代码
void splitfloat(float x, int *intpart,float *fracpart)
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
3、本题调试过程碰到问题及解决办法
该题没有遇到问题。
6-1 在数组中查找指定元素
1、设计思路
第一步:定义函数。
第二步:如果没有找到与x相等的数则返回-1,所以先定义k并赋予初值-1。在比较中只有遇到与x相等的数时k才会被赋予其他的值否则最后返回-1。由于k为最小坐标,所以在遇到第一个与x相等的数后跳出循环。
第三步:得出代码。
2、实验代码:
int search( int a[], int n, int x )
{
int i=0;
int k=-1;
for(i=0;i<n;i++)
{
if(a[i]==x)
{
k=i;
break;
}
}
return k;
}
3、流程图
4、本题调试过程碰到问题及解决办法
这是我最开始的答案,结果是部分错误。因为我将return放在了for循环中并没有停止,所以出现了错误。修改无果找了其他出路。
6-2 找最大值及其下标
1、设计思路
第一步:定义函数。
第二步:将指针max指向a[]首元素地址,在for循环中当遇到大于它的数时重新赋值max且b指向其下标,一直循环到最后返回最后的max。
第三步:得出代码。
2、实验代码:
int fun(int *a,int *b,int n)
{
int i;
int *max=a;
*b=0;
for(i=0;i<n;i++)
{
if(a[i]>*max)
{
*max=a[i];
*b=i;
}
}
return *max;
}
3、流程图
4、本题调试过程碰到问题及解决办法
在该题中我出现的问题在于对max初值的定义的错误,我习惯性地将它定义为0了。而a表示a[i]的首元素地址,再将后面的与max比较。
6-1 最小数放前最大数放后
1、设计思路
第一步:定义函数。
第二步:本题其实就是三个小函数的集合,每一个函数都是在比较大小然后按照题意交换位置,小的数换到前面大的数换到后面,循环。
第三步:输出。
2、实验代码
#include<stdio.h>
void input(int *arr,int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
}
void max_min(int *arr,int n)
{
int j=0,x=0,y=n-1;
for(j=0;j<n;j++)
{
if(arr[x]>arr[j])
{
int swap;
swap=arr[x];arr[x]=arr[j];arr[j]=swap;
}
}
for(j=n-1;j>0;j--)
{
if(arr[y]<arr[j])
{
int temp;
temp=arr[y];arr[y]=arr[j];arr[j]=temp;
}
}
}
void output(int *arr,int n)
{
int k=0;
for(k=0;k<n;k++)
{
printf("%3d",arr[k]);
}
}
3、流程图
4、本题调试过程碰到问题及解决办法
这道题我刚开始做时完全没有思路,觉得很复杂,所以是通过其他同学的帮助完成的。
6-2 指针选择法排序
1、设计思路
第一步:定义函数。
第二步:循环判断,并根据题意交换位置。
第三步:结束循环。
2、实验代码
void sort(int *x,int n)
{
int i,j;
int a;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(*(x+i)<*(x+j))
{
a = *(x+i);
*(x+i) = *(x+j);
*(x+j) = a;
}
}
}
return 0;
}
3、流程图
4、本题调试过程碰到问题及解决办法
少了return 0,没有停止循环。
6-1判断回文字符串
1、设计思路
第一步:定义函数。
第二步:当不是空格时开始判断一直到最后,因为最后一位时\0所以减1,进行比较,如果k=i则返回true。
第三步:结束代码。
2、实验代码
bool palindrome(char *s)
{
char *a = s;
int i = 0,j=0,k=0;
while (*a != '\0')
{
a++;
i++;
}
a--;
while (*s != '\0')
{
if (*s == *a)
{
k++;
}
else
{
return false;
}
s++;
a--;
}
if (k == i)
{
return true;
}
}
3、流程图
4、本题调试过程碰到问题及解决办法
没有考虑到不能时\0的情况。
6-2使用函数实现字符串部分复制
1、设计思路
第一步:定义函数。
第二步:前移。
第三步:结束。
2、实验代码
void strmcpy( char *t, int m, char *s )
{
int i,j,k;
k=strlen(t);
strcpy(s,t);
for(i=m-1;i>0;i--)
{
for(j=i;j<k;j++){
*(s+j-1)=*(s+j);
}
}
*(s+k-m+1)='\0';
}
3、流程图
4、本题调试过程遇到的问题及解决办法
无
学习总结和进度
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
本周我们主要学习将新知识点指针与数列、地址联系起来,作业都是与函数相关联的,对指针的运用还不熟悉。
2、我的git地址是: https://coding.net/u/zhouxuan12
3、点评
http://www.cnblogs.com/exo123/p/8575595.html
http://www.cnblogs.com/fengzx/p/8612048.html
http://www.cnblogs.com/dx2017/p/8560765.html
4、