上机 第二次课.ppt
文本预览下载声明
数组 定义一维数组和二维数组 void main() { int a[10],b[3]={10,20,30}; int a1[3][2],b1[2][3]={{10,20,30},{20,30,40}}; char c[3]={‘a’,’b’,’c’}; a[0]=30; ……… } 函数自定义和调用 如果自定义函数定义在主调函数后需要在主调函数前给出原型声明 全局变量 函数的形参(变量、数组、结构体等) 数组作为形参 数组作为函数参数的应用举例 【实例】将1至100自然数存放在数组中,并从数组中找出5个相邻自然数,使得它们的乘积为55440。 编程点拨: 只要找到第1个自然数,就可以求5个连续的自然数。 存放自然数的数组类型可以定义为int型,但进行乘法运算时将数据类型强制转换为long型,否则产生数据溢出现象。 程序代码: #include stdio.h #define N 101 int fun(int iP[ ]) { int i=0; for(i=1; iN; i++) iP[i]=i; for(i=1; i+4N; i++) if((long)iP[i]*iP[i+1]*iP[i+2]* iP[i+3]*iP[i+4]==55440) return i; } void main() { int k=0,iA[N]={0}; k=fun(iA); printf(”%d,%d,%d,%d,%d\n”,iA[k], iA[k+1],iA[k+2],iA[k+3],iA[k+4]); } 与数组相关的排序算法 最值和累和、累乘 排序 求最值问题 在线测试一 #include stdio.h void main() { int a[10],i; int max; for (i=0;i10;i++) scanf(“%d”,a[i]); max= ; for (i= ;i10;i++) //补充语句 if (maxa[i]) max=a[i]; printf(“%d “,max); } 累加和累乘算法 累加形式:V=V+e 连乘形式:V=V*e 求N!=1X2X3…xN long fac(int n) { int?i,t; long ?s; return s; } 排序算法 交换排序 基本思想: 第一步:从待排序的N个元素中找出最小值或最大值,与第1个元素进行交换; 第二步:从剩下的N-1个元素中找出最值与第2个元素进行交换; 以此类推,至到最后一个元素为止。 int a[N],i,j;N表示元素个数 ….. for(i=0;i ;i++)//走的趟数 for(j= ;j N ;j++)//第i趟 进行比较次数 //补充代码实现 排序算法-冒泡排序 基本思想:大数沉底,小数冒出 相邻两个元素进行比较,如果前面的元素比后面的大就交换 在线测试-冒泡法实现从小到大排序 已知数据文件IN.DAT中存有300个四位数, 并已调用读函数readDat()把这些数存入数组a中, 请编制一函数jsValue(),其功能是: 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。最后main()函数调用写函数writeDat()把数组b中的数输出到文件OUT.DAT中。 例如: 7153, 7+1 = 5+3, 则该数满足条件存入数组b中, 且个数cnt=cnt+1。 8129, 8+1 != 2+9, 则该数不满足条件忽略。 注意: 部分源程序存在文件PROG1.C文件中。 程序中已定义数组: a[300], b[300], 已定义变量: cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和 写函数writeDat()的内容。 (04套) #include stdio.h int a[300], b[300], cnt=0 ; void readDat(); void writeDat(); jsValue() { } main() { int i ; readDat() ; jsValue() ; writeDat() ; printf(cnt=%d\n, cnt) ;
显示全部