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

1.编写程序,输出s的值(精确到1e-6)

s=\frac{1}{1}*\frac{2}{1}+\frac{1}{3}*\frac{4}{3}+\frac{1}{5}*\frac{6}{5}+\frac{1}{7}*\frac{8}{7}+...+\frac{1}{2n-1}*\frac{2n}{2n-1}+...

#include <stdio.h>

int main() {
	float i=2,flag=2,sum=0;
	while(flag>=1e-6) {
		sum+=flag;
		flag=2.0*i/(2*i-1)/(2*i-1);
		i++;
	}
	printf("%.6f",sum);
}

2.编写函数,按照字典序对n个字符串进行排序

函数名限定为void sort(char st[][10],int n),void sort(char (*st)[10],int n),void sort(char *st[],int n),void sort(char **st,int n)之一

注:不允许使用string.h头文件和其声明的相关函数

#include <stdio.h>

int strcmp(char *str,char *flag) {
	int i=0;
	while(str[i]!='\0'&&flag[i]!='\0') {
		if(str[i]>flag[i])
			return 1;
		else if(str[i]<flag[i])
			return -1;
		else
			i++;
	}
	if(str[i]=='\0'&&flag[i]=='\0')
		return 0;
	else if(str[i]=='\0')
		return -1;
	else
		return 1;
}

void strcpy(char *flag,char *str) {
	int i=0;
	while(str[i]!='\0') {
		flag[i]=str[i];
		i++;
	}
	flag[i]='\0';
}

void sort(char st[][10],int n) {
	char temp[10];
	for(int i=0; i<n-1; i++)
		for(int j=0; j<n-i-1; j++)
			if(strcmp(st[j],st[j+1])>0) {
				strcpy(temp,st[j]);
				strcpy(st[j],st[j+1]);
				strcpy(st[j+1],temp);
			}
}

int main() {
	char st[][10] = {"hello","world","python","C","java","R"};
	int n=6;
	sort(st,n);
	for(int i=0; i<n; i++)
		printf("%s ",st[i]);
	printf("\n");
	return 0;
}

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

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

#include <stdio.h>

int binarySearch(int arr[], int low, int high, int target) {
	if (low > high)
		return -1;
	int mid = (low + high) / 2;
	if (arr[mid] == target)
		return mid;
	else if (arr[mid] > target)
		return binarySearch(arr, low, mid - 1, target); 
	else
		return binarySearch(arr, mid + 1, high, target);  
}

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

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

2)假定所有学生的成绩信息均存储在当前目录下的2018Exp.txt中,编写函数,创建一个用于管理学生实验成绩信息的单向链表

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

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

typedef struct student {
	int number;
	char name[20];
	int dis_score;
	int report_score;
	int test_score;
	struct student *next;
} student;

struct student* creat() {
	struct student *head,*p,*tail;
	head=(struct student*)malloc(sizeof(struct student));
	tail=head;
	tail->next=NULL;
	FILE *file;
	if((file=fopen("2018Exp.txt","r"))==NULL)
		return 0;
	while(!feof(file)) {
		p=(struct student*)malloc(sizeof(struct student));
		fscanf(file,"%d",&p->number);
		fscanf(file,"%s",&p->name);
		fscanf(file,"%d",&p->dis_score);
		fscanf(file,"%d",&p->report_score);
		fscanf(file,"%d",&p->test_score);
		p->next = NULL;
		tail->next=p;
		tail=p;
	}
	fclose(file);
	return head;
}

5.编写函数,将第四题构建的单向链表按照实验成绩从高到低排序

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

typedef struct student {
	int number;
	char name[20];
	int dis_score;
	int report_score;
	int test_score;
	struct student *next;
} student;

void sort(struct student *head) {
	struct student *p,*p0,*r,*r0,*q;
	int pscore,rscore;
	p0=head;
	p=head->next;
	while(p!=NULL) {
		r0=head;
		r=head->next;
		pscore=p->dis_score*0.2+p->report_score*0.2+p->test_score*0.6;
		rscore=r->dis_score*0.2+r->report_score*0.2+r->test_score*0.6;
		while((rscore>pscore)&&(r!=p)) {
			r0=r;
			r=r->next;
			rscore=r->dis_score*0.2+r->report_score*0.2+r->test_score*0.6;
		}
		if(r!=p) {
			q=p;
			p0->next=p->next;
			p=p0;
			q->next=r;
			r0->next=q;
		}
		p0=p;
		p=p->next;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值