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、