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的定义为:
注: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);
}