实际上仍是没怎么明白该怎么用指针,指针的题集实际上都是用数组写的,感受没什么区别又好像颇有区别,使人头疼。感受进度好快,有点赶不上,题集刷得慢,概念不清晰,甚至连有的编译错误都由于概念上的不清晰难以找出错误。整个写题过程都充满了不肯定,不自信,不明白。明明本身写得没有问题,但却老以为都是问题。特别难受。若是光是看的话,多多少少是能够看明白的,本身写就有一点点悬。
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)
截图函数代码。
改造前的函数主要是按照三个等级来直接分类,比较直接且暴力,并且使用了大量的全局变量;改造后的就是按照等级,计算和判断正确率来分类,而后就是一层套一层,其实好像也挺暴力的。可是,第一种就每一个函数其实作的事情都差很少,像是其实就在重复三件相同的事情,没有起到函数应该有的效果。