第一題:
計算兩數的和與差
設計思路:
描述方法:
第一步:閱讀主函數和函數聲明,弄清楚程序中每個函數的意義
第二步:通過op1和op2計算所需要的數值並將其賦給pusm和pdiff
第三步:輸出函數
流程圖:

實驗代碼:
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1 +op2;
*pdiff = op1 -op2;
}
遇到的問題:
無
第二題:
拆分實數的小數與整數部分
設計思路:
描述方法:
第一步:閱讀主函數和函數聲明,弄清楚程序中每個函數的意義
第二步:先通過實數求出其整數部分並賦值給*inpart,再用減法用實數減去整數部分並賦值給*fracpart
實驗代碼:
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = (int)x;
*fracpart = x - *intpart;
}
遇到的問題:
無
第三題:
在數組中查找指定元素
設計思路:
描述方法:
第一步:閱讀主函數和函數聲明
第二步:看題目的要求,遍歷數組,從一個數組中找到所需要的數,如果找到則返回其下角標;如果沒有找到,則返回-1
流程圖:

實驗代碼:
int search( int list[], int n, int x )
{
int i;
for(i=0; i<n; i++,)
{
if(list[i]==x)
return i;
}
return -1;
}
遇到的問題:
無
第四題:
找最大值及其下標
設計思路:
描述方法:
第一步:將最大值存儲在max里
第二步:利用for循環來比較數組中的每個數來找出最大值,再將其下標賦值給*b
流程圖:

實驗代碼:
int fun(int *a,int *b,int n)
{
int i;
int max=a[0];
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
*b=i;
}
}
return max;
}
遇到的問題:
錯誤信息:將i復制給*b的時候沒寫*
改正方法:*b=i
第五題:
最小數放前最大數放后
設計思路:
描述方法:
第一步:將數據存放到input數組中
第二步:通過max_min遍歷數組找到最大值和最小值,並按照題目要求進行交換
第三步:通過output輸出所求數據
流程圖:

實驗代碼:
void input(int *arr,int n){
int i;
for(i=0;i<n;i++){
scanf("%d",arr+i);
}
}
void max_min(int *arr,int n){
int min=arr[0],max=arr[0];
int i,temp;
int j=0,k=0;
for(i=0;i<n;i++){
if(min>*(arr+i)){
min=*(arr+i);
j=i;
}
if(max<*(arr+i)){
max=*(arr+i);
k=i;
}
}
temp=*(arr+0);*(arr+0)=*(arr+j);*(arr+j)=temp;
temp=*(arr+n-1);*(arr+n-1)=*(arr+k);*(arr+k)=temp;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+j));
}
}
遇到的問題:
錯誤信息:忘記了怎么交換數組的位置
改正方法:參考別人的作業
錯誤信息:最后輸出的時候忘記了題目要求的3列
改正方法:%d→%3d
第六題:
指針選擇法排序
設計思路:
描述方法:
第一步:遍歷數組找到最大值放到第一位
第二步:循環上一步知道將所有數都排序完成
第三步:輸出
流程圖:

實驗代碼:
void sort(int *x,int n)
{
int i,j,k,temp;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
{
if(x[j] > x[k])
k = j;
}
if(i != k)
{
a = x[i];
x[i] = x[k];
x[k] = temp;
}
}
}
遇到的問題:
錯誤信息:第一次編寫時錯誤的寫成了冒泡排序法
改正方法:用選擇排序法重新編寫
第七題:
判斷回文字符串
設計思路:
描述方法:
第一步;將字符串輸入進數組
第二步:利用循環分兩次將字符串從前往后和從后往前定義並進行比較
第三步:如果相同則返回true,如果不同則返回false
流程圖:

實驗代碼:
bool palindrome(char *s)
{
int a,b;
int n=strlen(s);
a=0,b=n-1;
while(b>a)
{
if(s[a]!=s[b])
{
return false;
}
a++,b--;
}
return true;
}
遇到的問題:
無
第八題:
使用函數實現字符串部分復制
設計思路:
描述方法:
第一步:調用函數strmcpy進行復制
第二步:判斷m是否超過字符串長度,如果超過則為'/0',若沒超過則進行復制
流程圖:

實驗代碼:
void strmcpy(char *t,int m,char *s)
{
int i;
int sum=0;
for(i=0;t[i]!='\0';i++) {sum++;}
if(sum<m) {s[0]='\0';}
else
{
for(i=0;t[m-1]!='\0';i++,m++)
{
s[i]=t[m-1];
}
s[i]='\0';
}
}
遇到的問題:
錯誤信息:編譯錯誤 for循環時忘記了t[m-1]='\0',m++
學習總結和進度
1、這兩周主要學習了指針的用法,雖然指針占了主要部分,但在習題中也用到了很多別的知識,本來基礎就不好,又得重新看C語言的書,不僅能當作復習,還加深了我對其他知識的印象。
2、
https://gitee.com/lhdsb666/zuoye
3、
[梁聖然] (http://www.cnblogs.com/messi6/p/8626565.html)
[張琪] (http://www.cnblogs.com/zhang03/p/8641322.html)
[林松] (http://www.cnblogs.com/BigFace123/p/8635570.html)
4 
5 