高级语言期末2018B(软件学院)

1.编写函数,对一个有序的整型数组进行二分检索(也称折半查找)

函数声明为:int binarysearch(int a[],int n,int key)或其它合适形式

#include <stdio.h>

int binarysearch(int *a,int n,int key) {
	int mid=0,low=0,high=n-1;
	while(low<high) {
		mid=(low+high)/2;
		if(a[mid]==key)
			return mid;
		else if(a[mid]<key)
			low=mid+1;
		else
			high=mid-1;
	}
	return -1;
}

int main() {
	int a[]= {1,2,3,4,5};
	printf("%d",binarysearch(a,5,3));
}

2.编写程序,打印一个n行n列中所有同时满足如下条件的元素a_{ij}

1)a_{ij}是第i行中所有元素的最大值

2)如果将第j列中所有元素a_{0j},a_{1j},...,a_{n-1j}按照从小到大的顺序排序,a_{ij}为第j/2个元素(最小元素为第0个元素,j/2为整数除法)

#include <stdio.h>
#include <stdlib.h>
#define N 10

int searchin(int **a,int i,int j) {
	int count=0;
	for(int k=0; k<N; k++) {
		if(a[i][j]<a[i][k])
			return 0;
		if(a[i][j]>a[k][j])
			count++;
	}
	if(count==j/2)
		return 1;
	return 0;
}

int main() {
	int **a=(int **)malloc(N*sizeof(int *));
	for(int i=0; i<N; i++)
		for(int j=0; j<N; j++)
			scanf("%d",&a[i][j]);
	for(int i=0; i<N; i++)
		for(int j=0; j<N; j++)
			if(searchin(a,i,j))
				printf("%d ",a[i][j]);
}

3.编写递归函数int del(char a[]),计算一个字符串中所有数组字符对应的整数的乘积。

例:数组存放的字符串为”12ab3 3v7“,返回值为126

#include <stdio.h>

int del(char a[]){
	int i=1;
	if(a[0]=='\0')
	return 1;
	if(a[0]>'0'&&a[0]<'9')
	i=a[0]-'0';
	return i*del(a+1);
	
}

int main() {
	char a[10]="qw2rqw3fq3";
	printf("%d",del(a));
}

4.假定每个学生的《程序设计基础》实验成绩信息包括:学号,姓名,讨论成绩,报告成绩,测试成绩5项。约定:《程序设计基础》实验成绩=讨论成绩*20%+报告成绩*20%+测试成绩*60%,所有成绩均介于[0,100]之间

1)定义存储成绩信息的单向链表的结点类型;

2)假定已经构建了用于管理学生实验成绩信息的单向链表,但指导教师更加重视测试成绩,如果测试成绩表现过于优秀,则可忽略讨论和报告的考核。即测试成绩不低于85分,则讨论成绩和报告成绩按满分认定。编写函数,将需要调整的学生的全部信息输出到2018ExpChange.txt中。

注:必须包含且仅包含与该题相关的头文件

#include <stdio.h>

typedef struct student{
	int number;
	char name[10];
	int disscpre;
	int repscore;
	int testscore;
	struct student *next;
}student;

int output(struct student *head){
	FILE *file;
	if((file=fopen("2018ExpChange.txt","w"))==NULL)
		return -1;
	struct student *p=head;
	while(p!=NULL){
		if(p->testscore>=85){
			p->disscpre=100;
			p->repscore=100;
			fprintf(file,"%d",p->number);
			fprintf(file,"%s",p->name);
			fprintf(file,"%d",p->disscpre);
			fprintf(file,"%d",p->repscore);
			fprintf(file,"%d",p->testscore);
		}
		p=p->next;
	}
	fclose(file);
	return 0;
}

5.接上题,假定已经构建了用于管理学生成绩的单向链表。编写函数,按照实验成绩从高到低的顺序,将全部信息输出到文件2018Exp.txt中

注:必须包含且仅包含与该题相关的头文件

#include <stdio.h>
#include <stdlib.h>

typedef struct student {
	int number;
	char name[10];
	int disscpre;
	int repscore;
	int testscore;
	struct student *next;
} student;

float expmark(struct student *temp) {
	return temp->disscpre*0.2+temp->repscore*0.2+temp->testscore*0.6;
}

int savebubble_sort(struct student *head) {
	int flag;
	struct student *p,*prev,*tail;
	tail=NULL;
	while(1) {
		flag=1;
		for(prev=head,p=head->next; p&&p->next!=tail; prev=prev->next) {
			if(expmark(p)<expmark(p->next)) {
				flag=0;
				prev->next=p->next;
				p->next=p->next->next;
				prev->next->next=p;
			} else
				p=p->next;
		}
		if(flag)
			break;
		tail=p;
	}
	FILE *file=NULL;
	if((file=fopen("2018Exp.txt","a+"))==NULL)
		return -1;
	struct student *tempnode=head;
	while(tempnode!=NULL) {
		fprintf(file,"%d ",tempnode->number);
		fprintf(file,"%s ",tempnode->name);
		fprintf(file,"%d ",tempnode->disscpre);
		fprintf(file,"%d ",tempnode->repscore);
		fprintf(file,"%d\n",tempnode->testscore);
		tempnode=tempnode->next;
	}
	fclose(file);
	return 0;
}

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值