网站开发关联下拉列表,企业展示网站模板,wordpress 数据包,阿里云主机价格文章目录 2015年1.c语言程序设计部分2.数据结构程序设计部分 2016年1.c语言程序设计部分2.数据结构程序设计部分 2015年
1.c语言程序设计部分
1.从一组数据中选择最大的和最小的输出。
void print_maxandmin(double a[],int length) //在一组数据中选择最大的或者最小的输出… 文章目录 2015年1.c语言程序设计部分2.数据结构程序设计部分 2016年1.c语言程序设计部分2.数据结构程序设计部分 2015年
1.c语言程序设计部分
1.从一组数据中选择最大的和最小的输出。
void print_maxandmin(double a[],int length) //在一组数据中选择最大的或者最小的输出
{double max-10000000000; //初始化max是一个极小值double min100000000000; // 初始化min是一个极大值for(int i0;ilength;i){if(a[i]max) maxa[i];if(a[i]max) mina[i];}printf(最大值为%lf\n,max);printf(最小值为%lf\n,min);}int main()
{double a[]{22,55,34,2,5,9,11}; //假定一组数据由数组a存储int lengthsizeof(a)/sizeof(a[0]); //取得数组长度print_maxandmin(a, length); //调用函数
}
运行结果 本题积累复盘: 如何在未知数组长度的情况下得到数组的长度 int lengthsizeof(a)/sizeof(a[0]); //取得数组长度2.从一组数据中计算出平均值并输出
double count_avarage(double a[],int length) //计算一组数据的平均值
{double sum0;for(int i0;ilength;i){suma[i];}return sum/length;
}int main()
{double a[]{22,55,34,2,5,9,11}; //假定一组数据由数组a存储int lengthsizeof(a)/sizeof(a[0]); //取得数组长度printf(平均值为%lf\n,count_avarage(a, length));
} 3.一个超市有8名员工每个员工的数据包括员工号、姓名、工资、职位。 请写出描述员工数据的结构体并编写函数计算工资最高的员工号工资最低的员工号以及员工的平均工资之后将大于平均工资的员工号和姓名输出。
结构体如下:
struct employee{int ID; //员工号char name[100]; //姓名double wage; //工资char degree[100]; //职位};代码如下:
void func_wage(struct employee a[],int length) //在一组数据中选择最大的或者最小的输出
{double max-10000000000; //初始化max是一个极小值double min10000000000; //初始化max是一个极小值double sum0;double avarage0;int flagmax0; //记录取得最高工资的员工号int flagmin0; //记录取得最高工资的员工号for(int i0;ilength;i){if(a[i].wagemax){maxa[i].wage;flagmaxa[i].ID;}if(a[i].wagemin){mina[i].wage;flagmina[i].ID;}suma[i].wage;}avaragesum/length;printf(工资最高的员工号:%d\n,flagmax);printf(工资最低的员工号:%d\n,flagmin);printf(平均工资为:%lf\n,avarage);//工资大于平均工资的员工号和姓名输出printf(工资大于平均工资的员工号和姓名如下:\n);for(int i0;ilength;i){if(a[i].wageavarage){printf(%d %s\n,a[i].ID,a[i].name);}}
}int main()
{struct employee a[8]{1,小A,2000,普通员工,2,小B,3000,普通员工,3,小C,2200,普通员工,4,小D,3100,普通员工,5,小E,4000,高级员工,6,小F,4500,高级员工,7,小G,5000,副组长,8,小H,6000,副组长}; //定义一个含有8个员工的员工结构体数组func_wage(a, 8);
} 2.数据结构程序设计部分
1.写出线性表的结构体并基于线性表结构体快速排序第一趟排序
typedef int ElemType; //将int定义为元素数据类型
typedef struct Sqlist
{ElemType *plist; //指向连续的顺序存储空间int sqListLength; //顺序表元素个数int sqListSize; //整个表的总存储空间数
}Sqlist;//手写一个快速排序第一趟的过程
int partation(int a[],int low,int high)
{while(lowhigh){int pivota[low];//先移动high指针while(a[high]pivotlowhigh) //假如找不到呢总得停止,low和high相遇的时候就停止(在没找到的情况下){high--;} //直到发现指向了一个小的数a[low]a[high];a[high]pivot;pivota[high]; //交换//再移动low指针while(a[low]pivotlowhigh){low;} //直到发现了一个大的数a[high]a[low];a[low]pivot;pivota[low]; //交换}return low; //一趟已经排好了需要再进行递归的操作完成接下来的趟返回的其实就是中间那个轴它左边的都比他小右边的都比他大
}void quicksort(int a[],int low,int high)
{if(lowhigh) //在保证lowhigh的前提下递归{int piovtpartation(a, low, high); //每次找轴的过程中把数组都排好quicksort(a, low, piovt-1);quicksort(a, piovt1, high);}
}
int main()
{int arr[5]{22,7,1,99,3};Sqlist L;L.plistarr;L.sqListLength5;printf(快速排序结束:\n);quicksort(L.plist, 0, L.sqListLength-1);for(int i0;i5;i){printf(%d ,L.plist[i]);}printf(\n);
}
写出二叉树的结构体并基于二叉树查找指定结点的所有祖先结点 什么叫基于二叉树查找指定结点的所有祖先结点 某一个结点的所有祖先节点就是二叉树深搜遍历到的那条路径上除了目标结点本身的其他结点。 祖先结点的定义是一个结点在从根结点到目标结点的路径上位于目标结点之上的结点。特别的因此结点本身不能作为它的祖先结点。 该题本质就是在深搜的基础上进行一些操作。 写出二叉树的结构体
Typedef char ElemType;
Typedef struct BiTNode{ElemType data;struct BiTNode * lchild;struct BiTNode * rchild;
}BiTNode,*BiTree;输出所有的指定祖先结点的函数
bool find(BiTree T,ElemType s) //找s结点的全部祖先结点
{if(TNULL) return false;if(T-datas) return true;if(find(T-lchild,s)||find(T-rchild,s)){printf(%c ,T-data);return true;}return false;
}2016年
1.c语言程序设计部分
1.给了一组年龄求出最高年龄最低年龄平均年龄。 这道题没什么好说的送分题 2.计算∑ (xi-8)4其中i从1到nn和xi由键盘输入
int main()
{ int n;int sum0; //答案保存在sum中scanf(%d,n);while(n--){int x0;scanf(%d,x);sumsum(x-8)*(x-8)*(x-8)*(x-8);}printf(%d\n,sum);
}3.定义结构体里面有英语数学软件工程计算机网络四科成绩有三个学生计算每个学生总分和每科的平均分。
typedef struct Course{int English_score;int Math_score;int software_score;int com_net_score;
}Course;typedef struct student
{char name[100];Course course;int sum_score;
}student;int main()
{ student stu[3]{小李,100,68,22,44,0,小刘,66,55,44,55,0,小王,77,55,77,77,0};//计算每个学生的总分并存储下来for(int i0;i3;i){stu[i].sum_scorestu[i].course.English_scorestu[i].course.Math_scorestu[i].course.com_net_scorestu[i].course.software_score;printf(%s的总分是%d\n,stu[i].name,stu[i].sum_score);}//计算每科的平均分double ava_English0;double ava_Math0;double ava_net0;double ava_software0;for(int i0;i3;i){ava_Englishstu[i].course.English_score;ava_Mathstu[i].course.Math_score;ava_netstu[i].course.com_net_score;ava_softwarestu[i].course.software_score;}ava_English/3;ava_Math/3; ava_net/3;ava_software/3;printf(英语平均分为:%lf\n,ava_English);printf(数学平均分为:%lf\n,ava_Math);printf(计算机网络平均分为:%lf\n,ava_net);printf(软件工程平均分为:%lf\n,ava_software);
}
2.数据结构程序设计部分
1.用拉链法处理冲突写出散列表的创建函数插入函数查找函数。 1写出拉链法处理冲突时散列表的结构体 2写出创建函数插入函数查找函数的算法思想并编程。 写出写出拉链法处理冲突时散列表的结构体 首先回忆拉链的结构是由多个单链表和一个头指针数组表示的‘ 所以首先定义一个单链表结构体再定义一个哈希表结构体这个哈希表结构体中含有指向指针数组的指针哈希表的一些信息如表长关键字个数。 1拉链法处理冲突时散列表的结构体如下
typedef int ELemType;
typedef struct Node
{ElemType data;struct Node *next;
}Node;typedef struct CLHashTable
{Node ** PList;int Table_length; //哈希表长度int kum; //关键字个数
}CLHashTable; 初始化哈希表思路定义一个函数向个函数中传入哈希表名的实参和哈希表长度。 从哈希表的构成三元素考虑初始化问题。 首先就是为指针数组分配空间将哈希表传入的长度哈希表长度循环遍历每一个指针数组中的头指针将指针置空关键字设置为0 void creat_Hash(CLHashTable CHT,int Hashlength)
{CHT.PList(struct Node ** )malloc(sizeof(struct Node *)*Hashlength);CHT.Table_lengthHashlength;for(int i0;iHashlength;i){CHT.PList[i]-nextNULL;}CHT.kum0;
}链地址法哈希表的插入函数本质上就是单链表的插入首先通过Hash函数确定在指针数组中选定哪一个头指针作为待插入的点注意此时分情况讨论如果当前头指针指向空就直接插入如果不为空定义一个pre指针尾插法将新结点插入注意传入哈希表的参数为哈希表插入的key值和divisor(Hash函数中的除数) void insert(CLHashTable CHT,int key,int divisor)
{int indexkey/divisor;Node *curCHT.PList[index];Node *preNULL;if(curNULL){Node *p(struct Node *)malloc(sizeof(Node));p-datakey;p-nextNULL;cur-nextp;}else{while(cur!NULL){precur;curcur-next;}Node *p(struct Node *)malloc(sizeof(Node));p-datakey;p-nextpre-next;pre-nextp;}
} 哈希表的查找跟插入很类似 int find_Hashkey(CLHashTable CHT,int key,int divisor)
{int indexkey/divisor;Node * curCHT.PList[index];if(curNULL) return 0; //查找失败while(cur!NULL){if(cur-datakey) return 1; //查找成功curcur-next;}return 0; //查找失败
}2.存在一个二叉排序树给定一个value值若查找value值就返回比value值大的所有值中最小的值。若value最大就返回空。 本质就是二叉排序树的搜索搜索一遍记录值由于二叉排序树保持着左子树小右子树大的性质返回比value值大的所有值中最小的值也就是搜到第一个比value值大的数若搜索完整个二叉排序树之后还没搜到就返回空 回顾知识 二叉排序树的结构体和树的结构体是一样的 二叉排序树的构造是通过递归构造 二叉树排序的遍历跟正常二叉树没有区别 (1)写出二叉树排序树的结构体
typedef int Elemtype;
typedef struct BiTNode
{Elemtype data;struct BiTNode *lchild;struct BiTNode *rchild;
}BiTNode,*BiTree;(2)说出上述算法思想并编程
给出错误思路: 这个错误思路就是不去递归就大于就右子树小于就左子树这个不能找到比它大的最小的值只能找到一个比它大的值 int max_value_min(BiTree T,ElemType value)
{BiTNode *pT;while(p!NULL){if(p-datavalue){pp-rchild;}else if(p-datavalue){return p-data;}}return 0; //返回0表明没有值比它大
}正确答案 代码刨析: 这个模版本质就是二叉排序树的中序遍历模版因为二叉排序树的中序遍历是有序的。 首先明确最后返回的值是递归开始那里返回的值开始递归层层深入再逐层返回。 if-else那里是停止二叉树的继续遍历如果找到了就停止二叉树的遍历flag值已经被修改就逐层将flag值传递回去。假如都搜完也没有还是逐层将flag值传递回去但是此时flag没有被修改过为0 值得注意的是最后的return flag不能改成return 0如果return 0了就没有意义了只是flag作为全局变量已经被保存下来了与题目中要求有瑕疵。 if(TNULL) return 0;这个0其实就是说T是空树没有什么实际意思最后怎么返回还都是flag int flag0; //标记第一次大于value,为0就是没有这个值为其他的就是要返回的值
int max_value_min(BiTree T,ElemType value)
{if(TNULL) return 0;max_value_min(T-lchild, value);if(T-datavalueflag0){flagT-data;return flag;}else{max_value_min(T-rchild, value);}return flag;}