6-1 計算兩數的和與差(10 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是計算兩個數的和與差,根據“函數接口定義”確定了變量,op1和op2是輸入的兩個實數,psum和pdiff是計算得出的和與差。
2.算法設計
(1)根據題干給*psum、 *pdiff
賦值
3.流程圖
4. [代碼]
(https://github.com/dangrui/dangrui.git)
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1+op2;
*pdiff = op1-op2;
}
5.問題與解決方法
再調用函數中,此句后邊加了分號void sum_diff( float op1, float op2, float *psum, float *pdiff )
在之前已經被聲明了,不能重復聲明。
6-2 拆分實數的整數與小數部分(15 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是將這個數的小數和整數部分分開,根據“函數接口定義”確定了變量,x, intpart, fracpart其中x是被拆分的實數(0≤x<10000),intpart和fracpart分別是將實數x拆分出來的整數部分與小數部分。
2.算法設計
(1)將定義的float類型的X強制轉換成int型取整
(2)取得整數部分后用X - 整數部分 = 小數部分
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = (int)x;
*fracpart = x - *intpart;
}
5.問題與解決方法
開始認為取余便可得到整數部分*intpart = x%10 -*fracpart;
無效操作數的二進制%(有“浮”和“int”)
之后又把程序改為*intpart = (int)x%10 -*fracpart;
結果只有個位數的數字才有用十位以上就不對了
之后遍去百度“如何取整”得到答案---[x]或INT(x)---
6-1 在數組中查找指定元素(15 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是在輸入的一串數字中查找指定元素,根據函數接口int search( int list[], int n, int x );
進行編譯,確定輸出結果。
2.算法設計
(1)做一個循環將所有的數查找一遍。
(2)用if語句進行判斷,如果找到則函數search
返回相應元素的最小下標(下標從0開始),否則返回−1。
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
int search(int list[],int n,int x) //如果找到一樣的值,返回下標,下標是從0開始的,所以返回值不加1
{
int i;//i最小下標
for(i = 0;i <= n;i++)
{
if(list[i] == x)
return i;
}
return -1;
}
6-2 找最大值及其下標(10 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是找出輸入的數字中最大數及其下標,根據函數接口int fun(int *a,int *b,int n);
進行編譯,確定輸出結果。
2.算法設計
(1)將max的初始值定為*a
(2)定義一個循環找出最大值
(3)將最大值賦給max
(4)將下標i賦給b
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
int fun(int *a,int *b,int n)
{
int max =*a,i;
for(i=1;i<n;i++)
if(*(a+i)>max)
{
max = *(a+i);
*b = i;
}
return max;
}
5.問題與解決方法
沒給max賦初值,將一串數字的首位*a賦給max.
6-1 最小數放前最大數放后(10 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是將其中最小的數與第一個數對換,將最大的數與最后一個數對換,根據函數接口
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
確定輸出結果。
2.算法設計
(1)輸入
(2)找出最大值和最小值並與首位、末位交換位置
(3)輸出
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
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,t;
int j=0,p=0;
for(i=0;i<n;i++)
{
if(*(arr+i)<min)
{
min = *(arr+i);
p =i ;
}
if(max<*(arr+i))
{
max = *(arr+i);
j = i ;
}
}
t=*(arr+0);
*(arr+0)=*(arr+p);
*(arr+p)=t;
t=*(arr+n-1);
*(arr+n-1)=*(arr+j);
*(arr+j)=t;
}
void output(int *arr,int n)
{
int i;
for(i = 0;i<n;i++)
printf("%3d",arr[i]);
}
5.問題與解決方法
(1)在input中輸入下標時,不能加&否則數組下標類型無效
(2)“int arr [ 0 ]“陰影參數,要將它賦值到一個已知變量中
(3)錯誤的一元“*”類型的參數(有“int”),直接打arr【】既可
6-2 指針選擇法排序(10 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是將數字按從大到小的順序依次排列,根據函數接口void sort(int *x,int n);
進行編譯,確定輸出結果。
2.算法設計
(1)設計一個循環,比較前后兩個數的大小
(2)交換位置
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
{
int i,j,s,t;
for(i=0;i<n-1;i++)
{
s=i;
for(j=i+1;j<n;j++)
{
if(*(x+s)<*(x+j))
{
s=j;
}
}
if(s!=i)
{
t=*(x+i);
*(x+i)=*(x+s);
*(x+s)=t;
}
}
}
6-1 判斷回文字符串(20 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是判斷字符串兩邊是否對稱,根據函數接口bool palindrome( char *s );
進行編譯,確定輸出結果。
2.算法設計
(1)for循環遍歷數組
(2)不對稱false,對稱true
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
bool palindrome(char *s) //定義返回值為布爾類型的函數
{
char *a = s;
int i = 0,j=0,k=0;
while (*a != '\0')
{
a++;
i++;
}
a--; //因為最后一為為'\0'所以減一位
while (*s != '\0') //進行兩個比較
{
if (*s == *a)
{
k++;
}
else
{
return false;
}
s++;
a--;
}
if (k == i) //如果每個都相等 k=i返回true
{
return true;
}
}
5.問題與解決方法
(1)因為最后一為為'\0'所以減一位
(2)直接將兩邊的字符進行比對既可
6-2 使用函數實現字符串部分復制(20 分)
1.案例描述
需要寫一個被題干調用的函數,被調用函數的作用是復制部分字符串,根據函數接口void strmcpy( char *t, int m, char *s );
進行編譯,確定輸出結果。
2.算法設計
(1)寫一個循環,首先確保所給位置在輸出的字符串中
(2)輸出此位置之后的字符串
3.流程圖
4.代碼
(https://github.com/dangrui/dangrui.git)
void strmcpy( char *t, int m, char *s )
{
int i;
for(i=m;*(t+i-1)!='\0';i++)
{
*(s+i-m)=*(t+i-1);
}
*(s+i-m)='\0';
}
時間總結
托管代碼
學習總結
以前寫PTA如果懶了的話,就找同學的抄一下就好,但是現在不行了,上課之后要看書重新捋順知識,之后做PTA,不懂的地方錯誤的原因都要標注出來,只有這樣才能更好地完成博客作業,這也使得我對C語言的學習投入了更多的精力,和時間,也和我的懶惰做了對抗。
評論同學
王帥(http://www.cnblogs.com/moxiaoshuai/p/8633373.html)
張琪(http://www.cnblogs.com/zhang03/p/8641322.html#3933170)
鄧欣茹(http://www.cnblogs.com/dxfish/p/8597352.html)
焦瑞君(http://www.cnblogs.com/jiaoruijun/p/8639383.html)
梁聖然(http://www.cnblogs.com/messi6/p/8626565.html)