C語言博客05--指針
阿新 • • 發佈:2018-12-16
r+ alt 截圖 null 語言 性能 else 質量 遞歸法
1.本章學習總結
1.1 思維導圖
1.2 本章學習體會及代碼量
1.2.1學習體會
指針是C的靈魂,用C語言卻不用指針,就像找個女人開房卻聊天一晚上
1.沒學指針之前用數組比較多,調用函數時直接把整個數組傳過去,但是這樣對性能影響比較大,學了指針直接傳地址就可以了。
2.指針還可以實現子函數返回多個值;還可以利用指針可以實現動態內存分配。
3.指針直接對內存操作 ,效率高,指針還用於表示和實現各種復雜的結構,從而為編寫出更加高質量的程序奠定基礎。
4.但是指針編寫的程序也更容易隱含各式各樣的錯誤,一不小心就有可能引起程序崩潰。
1.2.2 代碼累計
2.PTA總分
2.1截圖 PTA中的排名得分
2.2 我的總分:
PTA總分:110 分
3.PTA實驗作業
3.1 PTA題目1
給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。
輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字符串。字符串由若幹單詞和若幹空格組成,
其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用若幹個空格分開。
輸出格式:
每個測試用例的輸出占一行,輸出倒序後的句子,並且保證單詞間只有1個空格。
輸入樣例:
Hello World Here I Come
輸出樣例:
Come I Here World Hello
3.1.1算法分析(遞歸法)
void strput(char *str) 定義輸出函數 定義靜態變量flag=0 定義字符指針temp = strchr(str,‘ ‘) //尋找空格地址 if temp 等於 NULL then if strlen(str)不為0 then //str長度為零不輸出 flag=1; //如果字符串長度不為零 flag=1 輸出str end if else strput(temp + 1) //遞歸 *temp = ‘\0‘ //把空格改為\0 if strlen(str)不為0並且flag等於1 then //如果字符串為0不輸出 並根據flag的值選輸出方式 輸出" str" else 輸出str end if end if 主函數 定義字符數組 str[500011] gets(str) //讀取字符數組 strput(str) //調用輸出函數
3.1.2 代碼截圖
3.1.3 PTA提交列表及說明
- 開始用二維數組結果內存太大最後一個點過不了,後來改為遞歸
- 剛開始沒有這個語句“if strlen(str)不為0 then //str長度為零不輸出 ”導致
4.大作業
4.1函數算法分析(三合一)
聲明全局變量 n //n與難度有關
void CreateExp(int *result)
{
srand(time(NULL)) //隨機種子
int ret //中轉變量
char tistr[40]={0} //放式子
int num1,num2,num3 //放隨機數
char ch1,ch2 //放運算符
隨機數num1生成 //第一個數
itoa(num1, tistr, 10)//把num1接到tistr
運算符生成ret
switch(ret)
{
case 0:ch1=‘+‘;break;
case 1:ch1=‘-‘;break;
case 2:ch1=‘*‘;
if(n==1000) ch1=‘+‘; //為了給小學生減少壓力,第三級沒有乘除
break;
case 3:ch1=‘/‘;
if(n==1000) ch1=‘-‘; //為了給小學生減少壓力,第三級沒有乘除
break;
}
tistr[strlen(tistr)]=ch1; //放運算符
do
{
num2=rand()%n; //第二個數
if(num2!=0&&ch1==‘/‘&&num1!=0) //對除法做處理
{
if(((num1%num2)!=0||num1<num2))
{
num2=0;
}
}
} while(num2==0);
然後重復生成
*(tistr+strlen(tistr))=‘=‘
*(tistr+strlen(tistr))=0 //式子生成結束
switch(ch1)
{
case ‘+‘:*result=num1+num2;break;
case ‘-‘:*result=num1-num2;break;
case ‘*‘:*result=num1*num2;break;
case ‘/‘:*result=num1/num2;break;
}
switch(ch2) //解決優先級問題 (枚舉)
{
case ‘+‘:*result=*result+num3;break;
case ‘-‘:*result=*result-num3;break;
case ‘*‘:
if(ch1==‘+‘) *result=num1+num2*num3;
if(ch1==‘-‘) *result=num1-num2*num3;
if(ch1==‘*‘) *result=*result*num3;
if(ch1==‘/‘) *result=*result*num3;break;
case ‘/‘:
if(ch1==‘+‘) *result=num1+num2/num3;
if(ch1==‘-‘) *result=num1-num2/num3;
if(ch1==‘*‘) *result=*result/num3;
if(ch1==‘/‘) *result=*result/num3;
break;
}
輸出tistr
}
//結束函數
- 代碼截圖
4.2 與原有函數代碼比較
1.傳的參數少了;
2.處理除數更全面。
4.3 改進大作業總結
1.使用指針傳參數就不要return了,更何況有時候要返回幾個數。
C語言博客05--指針