c语言算法总结非常精辟内容摘要:

int i。 for(i=0。 in。 i++) if(a[i]==m)return i return (1) 还有一种折半查找,此方法速度较快,但须事先将数组排序,代码繁琐,就不介绍了。 4插入 amp。 删除 对于这类操作首先要进行定位,一般用指针来移动定位,在进行插入或删除操做 【思想推广】 一维数组操作时十分简单的,在二级考试中一般只做 为填空或选择,在大题目中一般不出现。 一维数组的熟练掌握对后面的二维数组有很大的帮助 【思想汇总】二维 数组操作是一个很重要的内容,其变化方式也是多种多样,但万变不离其宗,只要你能熟练使用(二维)指针就能轻松应 对各种难题。 先列出一个重要的表格给大家 a[i][j]的地址 amp。 a[i][j] a[i]+j *(a+i)+j a[i][j]的值 a[i][j] *(a[i]+j) *(*(a+i)+j) (*(a+i))[j] 若 int *p=a[0] p+i*m+j 既是 a[i][j]的地址( m既是二维数组的列数) 上面这张表十分重要,几乎历年的改错题都和二维数组有关,并且都会有一两个错误出自此处 【 算法语句 】 (上下三角操作 ) void turn(int a[4][4]) { int i,j,k。 for(i=0。 i4。 i++) for(j=0。 j4。 j++) if(ij){t=a[i][j]。 a[i][j]=a[j][i]。 a[j][i]=t。 } } 上下三角元素交换 void turn( int a[4][4]) { int i,j,t。 for(i=0。 i4。 i++) for(j=0。 ji。 j++) /*此行还可改为 for(j=i+1。 j4。 j++)*/ {t=a[i][j]。 a[i][j]=a[j][i]。 a[j][i]=t。 } } (行)互换 若要求第 A行与第 B行互换则 void exchange(int a[4][4]) { int i,k。 for(i=0。 i4。 i++) {k=a[A][i]。 a[A][i]=a[B][i]。 a[B][i]=k} /*行互换时,列从 0到 N变换,再用三 } 段交换法 */ 同理可得列互换 (对角线求和, 周边元素求和 ) 对角线求和 fsum(int a[N][N],int n) { int i,sum=0。 for(i=0。 in。 i++) sum+=a[i][i]+a[i][Ni1]。 return sum。 } 周边元素求和,有两种思维,一是求全体和减去其内部元素之和,二是扫描全体元素,若元素在周边,则累加。 我就写一个第二种思维的程序 int i,j,sum=0。 for(i=0。 iN。 i++) for(j=0。 jN。 j++) if(i==0||j==0||i=N1||j==N1) /*这是一个判断是否在周边的语句,在写此类语句是 sum+=a[i][j]。 一定要注意“与”和“或”要弄清楚 */ 【思想推广】二维数组的操作还远不止这些,但都与此类似 ,在做这类题目时一定要注意定位准确,操作符合规则,若出现比较繁琐的操作,可考虑化简,或是逆向思考,可以迎刃而解。 前面的八个类型是最基本最重要的,一定要超熟练的掌握,后面补充一些比较难的算法,供大家发挥。 【思想汇总】 定积分计算的意义既是函数在某个区间内的面积,可用梯形法进行计算,所谓梯形法,既是将函数在区间内围成的面积 分割成无数个小梯形,求出每个梯形的面积,最后求和。 梯形法公式为 n1 s=h*{[f(a)+f(b)]/2+∑ f(a+i*h)} h=|(ba)/n| i=1 【算法语句】 double integral(double (*fun)(),double a,double b,int n) { double s,h,y。 int i。 s=((*fun)(a)+(*fun)(b))/2。 /*这里的 (*fun)是函数指针,根据自己不同的需 h=(ba)/n。 要指向不同的原函数 */ for(i=1。 in。 i++) s=s+(*fun)(a+i*h)。 y=s*h。 return y。 } 只要你套进不同的函数式即可算出答。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。