實際上仍是沒怎麼明白該怎麼用指針,指針的題集實際上都是用數組寫的,感受沒什麼區別又好像頗有區別,使人頭疼。感受進度好快,有點趕不上,題集刷得慢,概念不清晰,甚至連有的編譯錯誤都由於概念上的不清晰難以找出錯誤。整個寫題過程都充滿了不肯定,不自信,不明白。明明本身寫得沒有問題,但卻老以爲都是問題。特別難受。若是光是看的話,多多少少是能夠看明白的,本身寫就有一點點懸。
110分
字符串的冒泡排序算法
int i,j; int N,K; char s[110][20],temp[20]; scanf("%d %d",&N,&K); i from 0 to N scanf("%s",s[i]); i from 0 to K j from 0 to N-i-1 if(strcmp(s[j],s[j+1])>0) //字符串比較 strcpy(temp, s[j]); //字符串複製 strcpy(s[j], s[j+1]); strcpy(s[j+1], temp); end if i from 0 to N printf("%s\n",s[i]);
- 整個代碼就是對字符串函數運用理解不夠清晰,因此總是錯,原本總體是不會有什麼大問題,可是由於理解不清晰,因此有的時候直接進行比較或者=,就致使結果老是不對。數組
題目:實現小學四則運算。
在函數那章,咱們已經實現小學四則運算這份做業,如今要求你們把以前設計函數升級改造,原來的函數你們都是用全局變量實現不一樣函數參數傳遞,此次做業要求改地址傳遞,減小全局變量的使用。函數
題目要求:
題目有3個難度級別,分別爲:學習
第一級是1位數的一步加減乘除計算
第二級是2位數的2步加減運算
第三級是3位數的2步加減運算
改進內容:
1.構造字符數組存放算術表達式
無論哪一個級別的算式,請都生成一個字符數組存放。無論用戶選擇哪一個級別題目,都能在表達式生成函數中生成一個算術式子。具體函數接口
j=0;
exp[j]=rand()%9+1;
j++;
cr[0]=ch[rand()%4];
exp[j]=rand()%9+1;
j++;
printf("%d%c%d",exp[0],cr[0],exp[1]);
printf("=");
2.表達式是否合法(選作)
對於不合法或者超出該級別小學生學習範圍的表達式,視爲不合法,需重造一個。不合法表達式體現有除數爲0的表達式、1,2級別中出現不能整除的除法表達式或其餘不合法狀況設計
double calculate(int *exp,char *c,int n) { double answer=0; int i; answer=exp[0]; for(i=1;i<n;i++) switch(c[i-1]) { case '+':answer+=(double)exp[i]; break; case '-':answer-=(double)exp[i]; break; case '*':answer*=(double)exp[i]; break; case '/':if(exp[i]!=0) answer/=(double)exp[i]; else printf("ERROR\n");break; } return answer; }
3.表達式運算
根據字符表達式,能計算其結果。有能力同窗深刻研究表達式優先級。3d
這塊代碼能夠參考這題作法:指針
#include <stdio.h> int main() { int m=0, sum=0; char c, oldc='+'; do { c = getchar(); if( c<='9'&&c>='0' ) m = 10*m + c - '0';//1 else { if( oldc == '+' ) sum += m; else sum -= m; m = 0;//2 oldc = c; } } while(c!='='); printf("sum=%d", sum); return; }
主要上述三個函數的改造說明code
1.函數1
僞代碼介紹函數思路blog
int a,b,c,i,t,m,j=0; char ch[4]={'+','-','*','/'},cr[3]; int exp[100],right=0; double answer,response; if(implement==1) i from 0 to num j=0; exp[j]=rand()%9+1; j++; cr[0]=ch[rand()%4]; exp[j]=rand()%9+1; j++; printf("%d%c%d",exp[0],cr[0],exp[1]); printf("="); answer=calculate(exp,cr,2); scanf("%lf",&response); if(response==0&&answer!=0) break; if(response!=answer) printf("不對噢 下一題繼續努力\n正確答案是 %.2lf\n",answer ); if(response==answer) printf("恭喜你答對啦 繼續保持啊\n"); right++; end if if(implement==2||implement==3) for(i=0;i<num;i++) j=0; if(implement==2) exp[j++]=rand()%90+10; cr[0]=ch[rand()%2]; exp[j++]=rand()%90+10; cr[1]=ch[rand()%2]; exp[j++]=rand()%90+10; else if(implement==3) exp[j++]=rand()%900+100; cr[0]=ch[rand()%2]; exp[j++]=rand()%900+100; cr[1]=ch[rand()%2]; exp[j++]=rand()%90+10; printf("%d%c%d%c%d",exp[0],cr[0],exp[1],cr[1],exp[2]); printf("="); answer=calculate(exp,cr,3); scanf("%lf",&response); if(response==0&&answer!=0) break; if(response!=answer) printf("不對噢 下一題繼續努力\n 正確答案是 %.2lf\n",answer); if(response==answer) printf("恭喜你答對啦 繼續保持啊\n"); right++; end if doExercise( right,num);
截圖函數代碼。
排序
2.函數2
僞代碼介紹函數思路
double answer=0; int i; answer=exp[0]; i from 1to n switch(c[i-1]) case '+':answer+=(double)exp[i]; break; case '-':answer-=(double)exp[i]; break; case '*':answer*=(double)exp[i]; break; case '/':if(exp[i]!=0) answer/=(double)exp[i]; else printf("ERROR\n");break; return answer
截圖函數代碼。
3.函數3
僞代碼介紹函數思路
double correctRate; printf("您一共作了%d道題,共作對%d道題",num,right); correctRate=(1.0*right)/num; printf("您的正確率是 %.2lf",correctRate)
截圖函數代碼。
改造前的函數主要是按照三個等級來直接分類,比較直接且暴力,並且使用了大量的全局變量;改造後的就是按照等級,計算和判斷正確率來分類,而後就是一層套一層,其實好像也挺暴力的。可是,第一種就每一個函數其實作的事情都差很少,像是其實就在重複三件相同的事情,沒有起到函數應該有的效果。