感覺:指針這一節開始學習的時候只知其一;不知其二的,本身的知識點理解不夠到位,不太理解函數接口的指針與數組之間的聯繫,作題時也感受概念模模糊糊的,指針比較抽象,很差理解,調試的過程當中有時候走到哪裏都不知道了,如今的練習量不夠因此感受不習慣用指針。若是說計算機領域是星辰大海的話,那麼我如今應該在納米吧,呃,說不定是個微米。但願本身仍是多多理解一些概念,多看看別人優秀的代碼。 學到的知識:1.一些函數的使用,好比strcpy,strcat等。2.一些函數與指針之間的關係。3.更加具體的瞭解變量內存的形態,地址與指針的關係。
題目簡介: 給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。
char ch[500010];字符數組 int count ;用來計單詞個數 for (i=len(ch)to 0)//從尾部讀入 { if (ch[i]!=' ')若是遇到的不是空格的話,單詞個數加 count ++; if(ch[i]>='A'&&ch[i]<'Z')遇到字符的話 { 立flag控制空格 for(j=i to i+count ) printf 單詞 立count從新爲0 } if(count>0) { printf空格; for(i=0 to count-1) printf最後單詞
- Q1.一開始的思路作單詞順序也是倒的 - A1.參考了同窗的代碼用數組的方式來作 - Q2.輸出最後一個單詞只有第一個字母 - A2.以後查看是不是最後控制輸出的是時候的範圍不對,結果就發現最後控制輸出應該是直接到ch[i].
題目:實現小學四則運算。算法
int num1,num2,num3;//分別是三位計算數產生隨機數範圍 switch(data) { case 1:num1,num2,num3rand()%10; case 2:num1,num2,num3rand()%100; case 3:num1,num2,num3rand()%1000; } if(num2>num1)//防止負數結果 { 交換num1,num2; } if(data==1) { int jk=rand()%4;//隨機產生兩個隨機式子 switch(jk) { case 1:strcpy(exp,"+");*answer=num1+num2;printf("%d %s %d=__?__\n",num1,exp,num2); case 2:strcpy(exp,"-");*answer=num1-num2;printf("%d %s %d=__?__\n",num1,exp,num2); case 3:strcpy(exp,"*");*answer=num1*num2;printf("%d %s %d=__?__\n",num1,exp,num2); case 4:strcpy(exp,"/");*answer=num1/num2;printf("%d %s %d=__?__\n",num1,exp,num2); } } data==2||data==3 與data==1處理方式相同,不過我多加成兩步運算 else if(data==2||data==3) { int jk=rand()%4; switch(jk) { case 1:strcpy(exp,"+");*answer=num1+num2;printf("%d %s %d=__?__\n",num1,exp,num2); case 2:strcpy(exp,"-");*answer=num1-num2;printf("%d %s %d=__?__\n",num1,exp,num2); case 3:strcpy(exp,"+");*answer=num1+num2+num3;printf("%d %s %d %s %d=__?__\n",num1,exp,num2,exp,num3); case 4:strcpy(exp,"-");*answer=num1-num2-num3;printf("%d %s %d %s %d=__?__\n",num1,exp,num2,exp,num3); } }
if a[i]=='/' num1%num2!=0 and num2!=0 and num3!=0 不然 continue ;//跳出while循環 防止負數的步驟在函數1中
int wong,right;//正確答案與錯誤答案 int result; 用戶輸入答案 比較用戶答案與正確答案; if (results == *answer) { CorrectResponse();//調用正確答案評語 right++; } else { IncrrectResponse(); wrong++; } int ch; printf("\n\t\t\t提示:輸入2結束遊戲,輸入其餘數字繼續遊戲\n"); scanf("\n\t\t\t%d",&ch); while(1) { if(ch==1) continue; else if(ch==2) goto end;//中途玩家不想玩在提示處輸入2則結束遊戲 } int correct; printf("\n\t\t\t回答正確%.f題,回答錯誤%.f題\n", right, wrong);// correct=right/(right+wrong)*100.0; gettimeofday(&end, NULL); printf("\n\t\t\t\t作題總用時%ld秒\n",timer); printf("\n\t\t\t正確率爲百分之%.f",correct);
函數1:函數1是改動最大的地方,開始的作法是三級分別處理,封裝爲三個函數,改動以後三級產生隨機產生式子封裝在一個函數中,代碼量大大減小,不過修改以後的代碼問題是當兩步運算時候運算符是同樣的。以前的代碼加減乘除給出正確答案是用四個函數來封裝,修改以後直接在產生運算式那裏給出正確答案。 函數2: 函數二在以前的做業中沒有實現,此次修改沒有用到指針,而是直接用暴力解決,雖然知道這樣作很容易致使循環程序崩潰,但一時沒有好的改進方法和個人代碼結合,看了其餘同窗的代碼,我以爲方法很值得我學習,接下來也會進一步完善。 函數3: 函數3在原來的基本上是沒作太大的修改的,基本思路是給用戶輸入答案,判斷答案是否正確,給出正確或錯誤的評語,計算正確和作錯誤答案的個數,結束頁面。
此次的大做業修改蠻大的,不過修改以前的代碼的一些不足,好比考慮了輸入非法字符,外加了計算用戶回答答案的時間函數。最開始的代碼由於main中須要作太多的功能,我就先把main分解在幾個函數中,發現三個級別的運算都相差不太大,就想着在把三級運算產生隨機數那部分修改在一個函數在一塊就行了,結果我太天真了,那樣作以後發現我三級運算就要算乘除運算,考慮用戶計算有難度,就再次修改了。還有加減乘除那四個函數運算正確答案那一塊原本想着不作修改的,一改就不可收拾了,我不太會使用指針,要用指針修改,難度對我來講就大大加大了,雖然強硬改了以後的代碼量少了許多,不過感受本身代碼很醜,並且有些亂。接下來還要改成文件版的,但願此次的修改可以稍微方便一點下一的改進吧。