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

1.编写函数,将整型数组中的n个元素删除最小的j个元素。函数声明为:void sort(int a[],int n,int j)

#include <stdio.h>

void sort(int a[],int n,int j){
	while(j>0){
		int flag=findmin(a,n);
		change(a,flag,n);
		n--; 
		j--;
	}
}

int findmin(int *a,int n) {
	int min=999;
	int flag=0;
	for(int i=0; i<n; i++)
		if(a[i]<min) {
			min=a[i];
			flag=i;
		}
	return flag;
}

void change(int *a,int i,int n) {
	for(int j=i; j<n; j++)
		a[j]=a[j+1];
	for(int i=0; i<n-1; i++)
		printf("%d ",a[i]);
	printf("\n");
}

int main() {
	int a[]= {1,2,3,4,5,6,7,8,9};
	sort(a,9,2);
}

2.编写函数,按照ASCII大小比较n个字符串,返回排在最后的字符串。

函数声明为:char *final(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';
}
 
 
char *final(char *st[], 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);
			}
			return st[n-1];
}
int main() {
	int n = 6;
	char **st = (char **)malloc(6*sizeof(char *));
	st[0] = strdup("hello");
	st[1] = strdup("world");
	st[2] = strdup("python");
	st[3] = strdup("C");
	st[4] = strdup("java");
	st[5] = strdup("R");
	printf("%s ", final(st, n));
	return 0;
}

3.编写递归函数g,g的定义为:

g_{n}(x)=\left\{\begin{matrix} 0 ,n=0& & \\ x+1 ,n=1& & \\ g_{n-2}(x-1)+ 2g_{n-1}(x),n>2& & \end{matrix}\right.

注:n为正整数,x为实数,不需要考虑浮点类型数据溢出问题

#include <stdio.h>

int g(double x,int x) {
	if(n==0)
		return 0;
	if(n==1)
		return x+1;
	else
		return g(x-1,n-2)+2*g(x,n-1);
}

4.假定每个学生的考研初始成绩包括:学号、姓名、政治成绩、英语成绩、数学成绩、专业课成绩6项。要求:

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

2)假定学生的总成绩=政治成绩+英语成绩+专业课成绩,四个单项成绩的满分分别为100,100,150,150分。编写函数,通过键盘顺次读入一个考场30个学生的考研初试成绩,创建一个用于管理学生考研初试成绩的单向链表,并在创建过程中随时保证该单向链表按学号从低到高排序。

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

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

typedef struct student {
	int number;
	char name[10];
	int pscore;
	int escore;
	int mscore;
	int zscore;
	struct student *next;
} student;

struct student *create() {
	struct student *p=NULL,*p0,*head=NULL;
	p0=(struct student*)malloc(sizeof(struct student));
	p0->next=NULL;
	head=p0;
	for(int i=0; i<N; i++) {
		p=(struct student*)malloc(sizeof(struct student));
		scanf("%d%s",&p->number,&p->name);
		scanf("%d%d%d%d",&p->pscore,&p->escore,&p->mscore,&p->zscore);
		while(p0->next!=NULL&&p0->next->number<p->number)
			p0=p0->next;
		if(p0->next==NULL) {
			p0->next=p;
			p->next=NULL;
		} else {
			p->next=p0->next;
			p0->next=p;
		}
		p0=head;
	}
	p=head;
	head=head->next;
	free(p);
	return head;
}


5.假定考研初试成绩要求:四个单项成绩和总成绩的合格线分别为45、45、68、68、320分。如果有人格单项或总成绩不合格,均表示初试未通过,编写函数,在第四题构建的单向链表中,将初始通过的学生的成绩信息输出到D盘根目录下的2017scores.txt中

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

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

typedef struct student {
	int number;
	char name[10];
	int pscore;
	int escore;
	int mscore;
	int zscore;
	struct student *next;
} student;

void delete(struct student *head) {
	struct student *p,*q;
	if(head==NULL)
		return;
	p=head;
	while(p->next!=NULL) {
		int sum=p->next->pscore+p->next->escore+p->next->mscore+p->next->zscore;
		if(p->next->pscore<45||p->next->escore<45||p->next->mscore<68||p->next->zscore<68||sum<320)
			p->next=p->next;
		else
			p=p->next;
	}
	FILE *file=fopen("D:\\2017scores.txt","w");
	if(file==NULL) {
		printf("can not open\n");
		exit(1);
	}
	q=head;
	while(q!=NULL) {
		fprintf(file,"%d %s %d %d %d %d \n",q->number,q->name,q->pscore,q->escore,q->mscore,q->zscore);
		q=q->next;
	}
	fclose(file);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值