1、给出年、月、日,计算该日是该年的第几天。
(本题15分)#include<stdio.h>Int get_days_of_month(int year,int month){if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return31;else if(month==2)if(year%400==0|| (year%4==0&& year%100!=0))return29;elsereturn28;elsereturn30;}Void main(){int i,year,month,day,sum=0,flag=1;while(flag){printf("please input the date(for example:2005,6,9):");scanf("%d,%d,%d",&year,&month,&day);if(year>0)if(month>=1&& month<=12)if(day>=1&& day<=get_days_of_month(year,month))flag = 0;}for(i=1;i<month;i++){sum +=get_days_of_month(year,i);}sum += day;printf("The date is %d day.\n",sum);}2、有几个学生,每个学生考m门课,要求编一函数,能检查n个学生有无不及格的课程,如果有某一学生有一门或一门以上课程不及格,就输出该学生的学号(学号从0开始)和其全部课程成绩。
(本题15分)#include<stdio.h>#define N 100void main(){Int a[N][N];int i,j,m,n,flag;printf("please input the number of students:");scanf("%d",&n);printf("please input the number of courses:");scanf("%d",&m);for(i=0;i<n;i++){printf("please input No.%d scores:",i);for(j=0;j<m;j++)scanf("%d",&a[i][j]);}printf("students who have failed their courses as follows:");for(i=0;i<n;i++){flag = 0;for(j=0;j<m;j++){if(a[i][j]<60){flag=1;break;}}if(flag){printf("No.%d ",i);for(j=0;j<m;j++)printf("%d ",a[i][j]);}printf("\n");}}3、用二分法求方程“(2*X^3)-(4*x^2)+(3*x)-6 = 0”在(-10,10)之间的根。
(本题20分)#include<stdio.h>#include<math.h>float getresult(float x){return(2*x*x*x - 4*x*x + 3*x -6);}void main(){float x0,x1,x2,y0,y1,y2;do{printf("please input x1 and x2:");scanf("%f,%f",&x1,&x2);y1 = getresult(x1);y2 = getresult(x2);}while(y1*y2>0);do{x0 = (x1+x2)/2;y0 = getresult(x0);if(y0*y1>0)x1 = x0;else x2 = x0;}while(fabs(y0)>1e-5);printf("The root is %f.\n",x0);}4、请写出判断“点是否在简单多边形内部”的算法。
(本题20分)解题思路:如果一个点在一个多边形内,那么从该点向上、向下、向左、向右都应与简单多边有交点,点在某一条边上算在多边形内。
#include<stdio.h>#define N 10typedef struct Node{float x;float y;}XYNode,Nodes[N+1];void main(){int i,up=0,down=0,left=0,right=0;int x0,x1,x2,y0,y1,y2;char flag = 'Y';XYNode point;Nodes a;for(i=0;i<N;i++){printf("please input the %dst coordinate:",i+1);scanf("%f,%f",&a[i].x,&a[i].y);}a[N].x = a[0].x; //使起点和终点的坐标相同a[N].y = a[0].y;while(flag!='n' && flag !='N'){printf("Now, please input the Point's coordinate:");scanf("%f,%f",&point.x,&point.y);for(i=0;i<N;i++){if((a[i].x>point.x && a[i+1].x<=point.x)||(a[i].x<point.x && a[i+1].x>=point.x)){x1 = a[i].x;y1 = a[i].y;x2 = a[i+1].x;y2 = a[i+1].y;x0 = point.x;y0 = (y1-y2)*(x0-x1)/(x1-x2) + y1;if(y0==point.y){up =1; down = 1; left = 1; right = 1;break;}else if(y0>point.y)up = 1;else down = 1;}//ifif((a[i].y>point.y && a[i+1].y<=point.y)||(a[i].y<point.y && a[i+1].y>=point.y)){x1 = a[i].x;y1 = a[i].y;x2 = a[i+1].x;y2 = a[i+1].y;y0 = point.y;x0 = (x1-x2)*(y0-y1)/(y1-y2) + x1;if(x0==point.x){up =1; down = 1; left = 1; right = 1;break;}else if(x0>point.y)right = 1;else left = 1;}//if}//forif(up && down && left && right)printf("Yes,the point is in the polygon.\n");else printf("No,the point is not in the polygon.\n");while(getchar()!='\n'); //接收多余的字符printf("would you like to go on?<Y/N>");flag = getchar(); //flag只接收第一个字符while(getchar()!='\n'); //接收多余的字符}//while}5、从平均时间、最坏情况,辅助存储和稳定性的角度,对各种内部排序方法进行比较。
(建议用表格方式进行比较,本题20分)严蔚敏数据结构289页6、定义一个双向循环链表,并写出其定位、插入和删除算法。
(本题20分)#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct DuLNode{ElemType data;struct DuLNode *prior;struct DuLNode *next;}DuLNode,*DuLinkList;Status GetElem_DuL(DuLinkList L,int i,ElemType *e){int j = 1;DuLNode *p;p = L->next;while(p!=L && j<i){p = p->next;j++;}if(p==L || j!=i)return ERROR;*e = p->data;return OK;}Status ListInsert_DuL(DuLinkList &L,int i,ElemType e){//在带头结点的双链循环链表L中第i个位置之前插入元素e//i的合法位置为1<=i<=表长+1int j;DuLNode *p,*s;if(i<1) //如果i的值小于1,则返回错误return ERROR;j = 1;p = L->next;while(p!= L && j<i){p = p->next;j++;}if(j<i)return ERROR;if(!(s = (DuLNode *)malloc(sizeof(DuLNode))))return ERROR;s->data = e;s->prior = p->prior;p->prior->next = s;s->next = p;p->prior = s;return OK;}Status ListDelete_DuL(DuLinkList &L,int i,ElemType *e){//删除带头结点的双链循环线性表L的第i个元素,i的合法位置为1<=i<=表长int j;DuLNode *p;if(i<1)return ERROR;j = 1;p = L->next;while(p!=L && j<i){p = p->next;j++;}if(p==L)return ERROR;*e = p->data;p->prior->next = p->next;p->next->prior = p->prior;free(p);return OK;}void print(DuLinkList L){DuLNode *p;p = L->next;while(p!=L){printf("%d ",p->data);p = p->next;}printf("\n");}void main(){int i;ElemType e;DuLinkList L;if(!(L=(DuLNode *)malloc(sizeof(DuLNode))))exit(0);L->next = L;L->prior = L;for(i=1;i<10;i++){e = (ElemType)i;if(!(ListInsert_DuL(L,i,e)))printf("No.%d is wrong!\n",i);}print(L);ListInsert_DuL(L,5,(ElemType)10);print(L);ListDelete_DuL(L,1,&e);print(L);printf("please input a number:");scanf("%d",&i);if(GetElem_DuL(L,i,&e))printf("L[%d]=%d\n",i,e);else printf("%d is illegal!\n",i);}7、编制一个程序以模拟银行窗口接待客户的排队业务活动(每个窗口在某个时刻只能接待一个客户;窗口空闲,则可上前办理业务;窗口均被占,则新客户便会排在人数最少的队伍前面),并计算一天中客户在银行逗留的平均时间。