1.编写程序,输出s的值(精确到1e-6)
#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;
}
}