題目6-1 計算兩數的和與差
//代碼部分
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
//設計思路
1)文字部分
1.觀察主函數,輸出部分與輸入部分都具備,且函數不需要返回值;
2.確定題意,本題要求為輸出主函數中a和b的和(psum)與差(pdiff);
3.運用指針把psum,pdiff輸出;
2)指針在本題中作用為傳遞兩個及以上變量;
//調試錯誤
並未遇到調試錯誤
題目6-2 拆分實數的整數與小數部分
//代碼部分
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
//設計思路
1)文字部分
1.確定題意,本題要求為拆分主函數中x的整數部(intpart)與小數部(fracpart),並輸出;
2.觀察主函數,輸出部分與輸入部分都具備,且函數不需要返回值
3.運用關於int知識拆分出x整數部(intpart);
4.以x減去整數部(intpart)得到小數部(*fracpart);
2)指針在本題中作用為傳遞兩個及以上變量;
//調試錯誤
並未遇到調試錯誤
題目6-1 在數組中查找指定元素
//代碼部分
int search( int list[], int n, int x )
{
int i=0,index;
for(i=0;i<n;i++)
{
if(x==*(list+i))
{
index=i;
break;
}
else
index=-1;
}
return index;
}
//解題思路
1)文字部分
1.確定題意,本題要求為在指定數組list中查找元素x,並在查找到元素時輸出查找到元素的下標或未查找到時輸出“not found”;
2.觀察主函數,輸出部分與輸入部分都具備,主函數需要返回值賦給index;
3.確定index在主函數中作用為代表list數組中x的下標;
4.通過for語句在數組list中查找x,並且定義一個index記錄x的下標作為返回值;
2)流程圖

3)指針在本題中可替代數組使用,亦可不使用;
//調試錯誤
並未遇到調試錯誤
題目6-2 找最大值及其下標
//代碼部分
int fun(int *a,int *b,int n)
{
int i=0,max=*a;
for(;i<n;i++)
{
if(max<*(a+i))
{
*b=i;
max=*(a+i);
}
}
return max;
}
//解題思路
1)文字部分
1.確定題意,本題要求為在指定數組a中查找最大元素與它的下標,並輸出;
2.觀察主函數,輸出部分與輸入部分都具備,主函數需要返回值賦給max;
3.確定max在主函數作用為代表a數組最大值;
4.通過for和if語句在數組a中查找最大值,並在fun函數中定義max儲存最大值作為返回值;
2)流程圖

3)指針在本題作用為儲存最大值的下標,用於輸出;
//調試錯誤
並未遇到調試錯誤
題目6-1 最小數放前最大數放后
//代碼部分
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 i,maxn=0,minn=0;
for(i=0;i<n;i++)
{
if(arr[minn]>arr[i])
minn=i;
if(arr[maxn]<arr[i])
maxn=i;
}
i=*arr;*arr=arr[minn];arr[minn]=i;
i=arr[maxn];arr[maxn]=arr[n-1];arr[n-1]=i;
}
void output(int *arr,int n)
{
int i=0;
for(i=0;i<n;i++)
{
printf("%3d",*(arr+i));
}
}
//解題思路
1)文字部分
1.確定題意,本題要求為在指定數組arr中將數組最小值與數組第一個替換,將數組最大值與最后一個數替換,並在替換后輸出數組;
2.觀察主函數,主函數無輸入輸出部分,主函數無需返回值;
3.確定函數接口作用: input作用為輸入;max_min作用為找到最大最小值並進行替換;output作用為輸出;
4.Input,output作用易實現,max_min函數可利用for函數確定最大最小值下標;
5.使用最值下標進行交換;
2)流程圖
input

max_min

output

3)指針在本題中作用為在不同函數間傳遞數組arr;
//調試錯誤
並未遇到調試錯誤
題目6-2 指針選擇法排序
//代碼部分
void sort(int *x,int n)
{
int i,min=n-1,k;
for(i=0;i<n;i++)
{
if(x[min]>x[i])
{
k=x[min];x[min]=x[i];x[i]=k;
}
}
if(n>0)
{
n--;
sort(x,n);
}
}
//解題思路
1)文字部分
1.確定題意,本題要求為對x數組中的10個數進行由大到小的排序;
2.觀察主函數,主函數有輸入輸出部分,主函數無需返回值;
3.可使用冒泡排序法對x進行排序;
2)流程圖

3)指針在本題中作用為替代數組,可不使用;
//調試錯誤
並未遇到調試錯誤
題目6-1 判斷回文字符串
//代碼部分
bool palindrome( char *s )
{
int i=0,n=0;
for(;s[i]!='\0';i++)
n++;
for(i=0;i<=(n/2);i++)
{
if(s[i]!=s[n-i-1])
return 0;
}
return true;
}
//解題思路
1)文字描述
1.確定題意,本題要求為判斷字符串s是否為順讀和倒讀都一樣的字符串。
2.觀察主函數,主函數有輸入輸出部分,主函數需要返回值,返回值為bool型;
3.定義n用於記錄字符串s長度,通過對比s[i]與s[n-i-1]確定字符串s是否為回文;
2)流程圖

3)指針在本題中作用為替代數組,可不使用;
//調試錯誤
並未遇到調試錯誤
題目6-2使用函數實現字符串部分復制
//代碼部分
void strmcpy( char t, int m, char s )
{
s=NULL;
int i,n=1;
for(i=0;(t+i)!='\0';i++)
n++;
if(m>=n)
*s=NULL;
else
{
for(i=m-1;i<=n-1;i++)
s[i-m+1]=t[i];
}
}
//設計思路
1)文字部分
1.確定題意,本題要求為將字符串t中從第m個字符開始的全部字符復制到字符串s中;
2.觀察主函數,主函數有輸出部分與輸入m部分,無輸入t部分,主函數不需要返回值,同樣可觀察出函數ReadString作用為輸入t;
3.將數組s初始化為空串,定義n為字符串長度;
4.判斷m與n的關系確定s是否為空串,若不是則將t[i]賦值給s[i+1-m];
2)流程圖

3)指針在本題中作用為替代數組,可不使用;
//調試錯誤
並未遇到調試錯誤
額外加題:為了防止信息被別人輕易盜取,需要把電碼明文通過加密方式變換成為密文。變換規則如下:小寫字母y變換為a,小寫字母z變換為b,其他字母變換成為該字母ASCII碼順序后2為字幕,比如o變換成q。要求給出你的姓名全拼加密后的結果。
//代碼部分
//變換規則如下:小寫字母y變換為a,小寫字母z變換為b,
//其他字母變換成為該字母ASCII碼順序后2為字幕,比如o變換成q。要求給出你的姓名全拼加密后的結果。
#include<stdio.h>
int main()
{
char *s;
int i;
scanf("%s",s);
for(i=0;*(s+i)!='\0';i++)
{
if(s[i]>='a'&&s[i]<='x')
s[i]=s[i]+2;
else if(s[i]=='y')
s[i]='a';
else if(s[i]=='z')
s[i]='b';
}
printf("%s",s);
}
//設計思路
1)文字部分
1.確定題意,本題要求為將除了y,z的小寫字母變為順序后兩位字母,y變為a,z變為b;
2.設定字符串*s儲存字符串;
3.用for函數歷遍數組S元素並進行加密;
4.輸出數組;
2)流程圖

//調試錯誤
並未遇到調試錯誤
//運行結果

1、總結兩周里所學的知識點有哪些學會了?哪些還沒有學會?
這兩周中學習了關於指針相關的一些知識,並復習了一些上個學期的內容,在這兩周z的學習中我感覺學到了一些有關於數組和指針關系的知識,並且對於指針通常的使用范圍也有了一些了解,同樣的,我認為自己在指針和數組的不同處這點有些不了解,指針和數組的地址分配上也沒有什么概念
2、將PTA作業的源代碼使用git提交到托管平台上,要求給出上傳成功截圖和你的git地址
地址:https://git.coding.net/q871057265/ZY.git

3、點評3個同學的本周作業
徐銘博:http://www.cnblogs.com/xmb1547828350/p/8597402.html
趙寅勝:http://www.cnblogs.com/2017023960ZYS/p/8604534.html
史澤文:http://www.cnblogs.com/shilcz/p/8611461.html
4、請用表格和折線圖呈現你本周(3/12 8:00~3/26 8:00)的代碼行數和所用時間、博客字數和所用時間


