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列中所有同时满足如下条件的元素
1)是第i行中所有元素的最大值
2)如果将第j列中所有元素按照从小到大的顺序排序,
为第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;
}