2018年
26题 #include <stdio.h> //本题就是找规律,后一个分数的分子是前一个分数的分子分母之和,后一个分数的分母是前一个分数的分子 int main() { float sum=0.0,term=0.0,den=1,n=2,t; int i; for(i=0;i<20;i++) { term = n/den; //term代表单个分数 sum += term; t = n; //t用来记录前一个分数分子的值,最后赋给下一个分数的分子 n = den+n; //后一个分数的分子为前一个分数分子与分母之和 den = t; //更新下一个分母数 } printf("%f ",sum); return 0; }
27题 //选择排序的思想 #include <stdio.h> int main() { int a[10]={22,15,26,89,77,12,33,0,55,6},i,j,pos1,pos2,min,max,t; min = 0;//假定最小元素下标为0 for(i=1;i<10;i++) { if(a[i]<a[min]) { min = i; //在后面元素中找到最小元素下标,更换下标 } } if(min!=0) //如果最小元素的下标位置不是0,则交换位置,即把最小元素a[0]交换位置 { t = a[min]; a[min] = a[0]; a[0] = t; } max = 9; //方法同上 for(j=0;j<9;j++) { if(a[max]<a[j]) max = j; } if(max!=9) { t = a[9]; a[9] = a[max]; a[max] = t; } for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }
2017年
17题 #include <stdio.h> int main() { int a[3][3]={1,2,3,1,1,1,2,2,2},i,j,sum=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(i==j) sum += a[i][i]; } } printf("%d ",sum); return 0; }
18题 //统计a,b两个数组中对应位置元素相等的个数和不相等的个数 #include<stdio.h> int main() { int a[30]={1,3,5,9},b[30]={2,3,8,6},i=0,j=0,s1=0,s2=0; while(i<30&&j<30) { if(a[i]==b[j]) s1++; else s2++; i++; j++; } printf("s1= %d ,s2= %d",s1,s2); return 0; }
19题 //将两个递增的有序表合并成一个表存入c中 //算法思想:首先,按顺序不断取下两个顺序表表头较小的结点存入新的顺序表中,然后哪个表有剩余,将剩下的部分嫁到新的顺序表后面 #include <stdio.h> #define MaxSize 50 typedef struct { Elemtype data[MaxSize]; int length; }SqList; bool Merge(SqList &La,SqList &Lb,SqList &Lc) { if(La.length+Lb.length>c.MaxSize) return false; int i=0,j=0,k=0; while(i<La.length&&j<Lb.length) //循环,两两比较,小者存入Lc表中 { if(La.data[i]<Lb.data[j]) Lc.data[k++] = La.data[i++]; else Lc.data[k++] = Lb.data[j++]; } //下面的while语句只会执行一个 while(i<La.length) Lc.data[k++] = La.data[i++]; while(j<Lb.length) Lc.data[k++] = Lb.data[j++]; Lc.length = k+1; return true; }
2016年
26题 //计算π的近似值 #include <stdio.h> #include <math.h> int main() { float term = 1.0,pi =1.0,den = 2.0; while(fabs(term)>=1e-3) { term =1.0/(den*den); pi += term; den++; } pi = sqrt(6*pi); printf("%4.3f ",pi); return 0; }
27题 //数组大小为10,编程实现:在主函数从键盘输入数组值,在子函数中求出数组最大元素及该元素的下标值 #include <stdio.h> #include <math.h> void Max(int A[],int n) { int i,max,pos=0; max = A[0]; for(i=1;i<n;i++) { if(max<A[i]) { max = A[i]; pos = i; } } printf("%d %d",max,pos); } int main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); Max(a,10); return 0; }
28题 /*设有两个顺序表A和B,编写一个算法将属于A,但不属于B的数据元素放到另一顺序表c中 算法思想:用A中的每一个元素去给B中的元素比较,如果没有则放入C中 #include <stdio.h> #define MaxSize 100 //假设一个顺序表最大存储100个数据 typedef struct { int data[MaxSize]; //用于存储数据 int length; //用于表示顺序表中实际存储数据的个数 }SeqList; void M(SeqList &A,SeqList &B,SeqList &C) { int i,j,k=0; for(i=0;i<A.length;i++) { for(j=0;j<B.length;j+) { if(A.data[i]==B.data[j]) //如果相等则跳过 break; //如果在A中的数B中也有,则A中的数没必要继续比较下去,直接跳出当前循环,用A中的下一个元素进行比较 } //上一个循环能够结束,有两个原因,一个原因是A的某个数和B中某个数相等,执行了break语句 //另外一个原因是,用A的某个数与所有的B的数据都比较过,没发现相等的数据,那么此时j==B.lenth if(j==B.length) C.data[k++]=A.data[i]; } C.length = k+1; }*/ #include <stdio.h> int main() { int i,j,k=0; int a[5]={2,6,3,9,11},b[5]={8,5,3,4,2},c[10]; for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(a[i]==b[j]) break; } if(j==5) { c[k++]=a[i]; } } for(i=0;i<k;i++) printf("%d ",c[i]); return 0; }
2015年
36题 //已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。 /*算法思想: 如果插入的数n比a数组的最后一个数大,则将插入的数放在a数组的末尾 如果插入的数n不比最后一个数大,则将它依次和a[0]-a[n-1]比较,直到出现a[i]>n为止,这时表示a[0]-a[i-1]的值都比n的大。 n则插入到a[i]的位置上 */ #include <stdio.h> int main() { int a[100],i,j,n; for(i=0;i<9;i++) scanf("%d",&a[i]); scanf("%d",&n); if(n>a[8]) //如果输入的n比最后一个元素大,则放在最后面 a[9] = n; else //输入的n小于最后一个元素 { for(i=0;i<9;i++) //从前往后找n的插入位置 { if(a[i]>n) //当出现第一个大于n的元素,则该元素所在的位置就是n要插入的位置 { for(j=9;j>i;j--) //元素从后开始往后移一个位置 a[j]=a[j-1]; break; //一定要加break.当移好位置后,直接让n放在a[i]的位置上,所以必须要加break跳出for循环。如果不加break会出错 } } a[i] = n;// n插入到适当的位置 } for(i=0;i<10;i++) printf("%d ",a[i]); return 0; }
37题 //采用顺序存储结构存储。 //思想:用i变量所以的结点,当i大于等于MaxSize时,返回0。当t[i]是空结点的时候返回0; //当t[i]为非空结点时,若它为叶子节点,num增1.否则递归调用num1求出左子树叶子节点个数, //再调用num2求出右子树的叶子节点个数,最后返回num #define InitSize 50 typedef struct BiTNode{ ElemType *data; int MaxSize,length; }*SqBTree; int LeafNums(BiTree bt,int i) { int num1,num2,num=0; if(i<MaxSize) { if(t[i]!='#') //‘#’表示结束 { if(t[2*i]=='#'&&t[2*i+1]=='#') num++; else { num1 = LeafNums(t,2*i); num2 = LeafNums(t,2*i+1); num += num1+num2; } return num; } else return 0; } else return 0; }