第一次做业(2)

6-1 计算两数的和与差

一、设计思路

第一步:根据题意对函数进行定义。
第二步:分析得该函数所求为op1与op2的和与差,将所得和与差分别为psum和pdiff。
第三步:得出代码。html

二、实验代码

void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
  *psum=op1+op2;
  *pdiff=op1-op2;
}

三、本题调试过程碰到问题及解决办法


问题:编译错误
解决:在定义函数时像定义变量同样在结尾加上了逗号,删除了逗号后答案便正确了。git

6-2 拆分实数的整数与小数部分

一、设计思路

第一步:定义函数。
第二步:根据题意分析,要将一个数的整数部分和小数部分分开,首先会想到int由此获得整数部分,而后用原来的数减去整数部分便能获得小数部分。
第三步:指针intpart指向x的整数部分,fracpart指向其小数部分。数组

二、实验代码

void splitfloat(float x, int *intpart,float *fracpart)
{
  *intpart=(int)x;
  *fracpart=x-*intpart;
}

三、本题调试过程碰到问题及解决办法

该题没有遇到问题。函数

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

一、设计思路

第一步:定义函数。
第二步:若是没有找到与x相等的数则返回-1,因此先定义k并赋予初值-1。在比较中只有遇到与x相等的数时k才会被赋予其余的值不然最后返回-1。因为k为最小坐标,因此在遇到第一个与x相等的数后跳出循环。
第三步:得出代码。学习

二、实验代码:

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;
}

三、流程图

四、本题调试过程碰到问题及解决办法


这是我最开始的答案,结果是部分错误。由于我将return放在了for循环中并无中止,因此出现了错误。修改无果找了其余出路。.net

6-2 找最大值及其下标

一、设计思路

第一步:定义函数。
第二步:将指针max指向a[]首元素地址,在for循环中当遇到大于它的数时从新赋值max且b指向其下标,一直循环到最后返回最后的max。
第三步:得出代码。设计

二、实验代码:

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;
}

三、流程图

四、本题调试过程碰到问题及解决办法


在该题中我出现的问题在于对max初值的定义的错误,我习惯性地将它定义为0了。而a表示a[i]的首元素地址,再将后面的与max比较。3d

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

一、设计思路

第一步:定义函数。
第二步:本题其实就是三个小函数的集合,每个函数都是在比较大小而后按照题意交换位置,小的数换到前面大的数换到后面,循环。
第三步:输出。指针

二、实验代码

#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]);
}
}

三、流程图

四、本题调试过程碰到问题及解决办法

这道题我刚开始作时彻底没有思路,以为很复杂,因此是经过其余同窗的帮助完成的。调试

6-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;
}

三、流程图

四、本题调试过程碰到问题及解决办法


少了return 0,没有中止循环。

6-1判断回文字符串

一、设计思路

第一步:定义函数。
第二步:当不是空格时开始判断一直到最后,由于最后一位时\0因此减1,进行比较,若是k=i则返回true。
第三步:结束代码。

二、实验代码

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;  
}  
}

三、流程图

四、本题调试过程碰到问题及解决办法


没有考虑到不能时\0的状况。

6-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'; 
}

三、流程图

四、本题调试过程遇到的问题及解决办法

学习总结和进度

一、总结两周里所学的知识点有哪些学会了?哪些尚未学会?
本周咱们主要学习将新知识点指针与数列、地址联系起来,做业都是与函数相关联的,对指针的运用还不熟悉。
二、个人git地址是: https://coding.net/u/zhouxuan12

三、点评
http://www.cnblogs.com/exo123/p/8575595.html
http://www.cnblogs.com/fengzx/p/8612048.html
http://www.cnblogs.com/dx2017/p/8560765.html
四、

相关文章
相关标签/搜索