一、单选题
1. 第7周测验
2. 第7周 练兵区——单选题
二、编程题
1. 从键盘输入某班学生的学号和某门课成绩(每班人数最多不超过40人,具体人数由键盘输入),试编程打印最高分和最低分以及对应的学生序号。
#include <stdio.h> #include <stdlib.h> int main() { int n; printf("renshu:n="); scanf("%d",&n); int id[40]; int cg[40]; for(int i=0;i<n;i++) scanf("%d,%d",&id[i],&cg[i]); int max=0; for(int i=0;i<n;i++){ if(cg[i]>cg[max]) max=i; } int min=0; for(int i=0;i<n;i++){ if(cg[i]<cg[min]) min=i; } printf("max: id:%d,cg:%d\n",id[max],cg[max]); printf("min: id:%d,cg:%d\n",id[min],cg[min]); return 0; }2. 编写实现下面的功能(分别用函数实现)
(1)读入一串整型数据,直到输入0,作为输入结束标志为止;
(2)把这些整型数据逆序排列;
(3)输出经过重新排列后的数据;
#include <stdio.h> #include <stdlib.h> int a[100]; int n=0; void A(){ while(scanf("%d",&a[n])&&a[n]!=0) n++; } void B(int b[100]){ int m=0; for(int i=n-1;i>=0;i--){ b[m]=a[i]; m++; } } void C(){ int b[100]; B(b); for(int i=0;i<n;i++){ printf("%d",b[i]); printf(" "); } } int main() { A(); C(); return 0; }3. 编程在元素按增(降)序排列的一个有序数组中,查找给定元素x。(分别采用顺序查找和二分查找函数来实现)。
函数返回值规定如下:如果x出现在数组中,则返回x在数组中的位置(用下标表示),否则返回-1。
#include <stdio.h> #include <stdlib.h> int shunxu(int a[],int n){ int i=0; for(;i<=8;i++){ if(n==a[i]){ return i; } } return -1; } int erfen(int a[],int n){ int low=0,high=8,mid; while(low<=high){ int mid=(low+high)/2; if(n==a[mid]) return mid; else if(n>a[mid]) low=mid+1; else if(n<a[mid]) high=mid-1; } return -1; } int main(){ int n; int a[]={1,2,3,4,5,6,7,8,9}; for(int i=0;i<=8;i++){ printf("%d ",a[i]); } printf("\n"); scanf("%d",&n); printf("%d\n",shunxu(a,n)); printf("%d\n",erfen(a,n)); return 0; }4. 输入一个有序数列,对数列中的数据进行排序。(分别采用交换排序、冒泡排序、选择排序、插入排序函数来实现)。
#include <stdio.h> #include <stdlib.h> int jiaohuan(int a[],int n); int main(){ int a[]={2,8,4,6,5,7,3}; int n=sizeof(a)/sizeof(a[0]); jiaohuan(a,n); for(int i=0;i<n;i++){ printf("%d",a[i]); printf(" "); } return 0; } int jiaohuan(int a[],int n){ int m; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++){ if(a[i]>a[j]){ m=a[i]; a[i]=a[j]; a[j]=m; } } }#include <stdio.h> #include <stdlib.h> int maopao(int a[],int n); int main(){ int a[]={2,8,4,6,5,7,3}; int n=sizeof(a)/sizeof(a[0]); maopao(a,n); for(int i=0;i<n;i++){ printf("%d",a[i]); printf(" "); } return 0; } int maopao(int a[],int n){ int m=0; for(int i=0;i<n-1;i++) for(int j=0;j<n-1-i;j++) if(a[j]>a[j+1]){ m=a[j]; a[j]=a[j+1]; a[j+1]=m; } }#include <stdio.h> #include <stdlib.h> int xuanze(int a[],int n); int main(){ int a[]={2,8,4,6,5,7,3}; int n=sizeof(a)/sizeof(a[0]); xuanze(a,n); for(int i=0;i<n;i++){ printf("%d",a[i]); printf(" "); } return 0; } int xuanze(int a[],int n){ for(int i=0;i<n-1;i++){ int min=i; int j=i+1; int m; for(;j<n;j++){ if(a[j]<a[min]) min=j; } m=a[i]; a[i]=a[min]; a[min]=m; } }#include <stdio.h> #include <stdlib.h> int charu(int a[],int n); int main(){ int a[]={2,8,4,6,5,7,3}; int n=sizeof(a)/sizeof(a[0]); charu(a,n); for(int i=0;i<n;i++){ printf("%d",a[i]); printf(" "); } return 0; } int charu(int a[],int n){ for(int i=1;i<n;i++){ int key=a[i]; int j=i-1; while(j>=0&&a[j]>key){ a[j+1]=a[j]; j--; } a[j+1]=key; } }5. 输入一个有序数列,再输入一个指定的数,将其插入到一有序数列中,使该数列仍保持原来的顺序。
#include <stdio.h> #include <stdlib.h> int main(){ int a[]={2,4,6,8}; int b[5]={2,4,6,8}; int n; scanf("%d",&n); b[4]=n; int key=b[4]; int j=3; while(j>=0&&a[j]>key){ b[j+1]=b[j]; j--; } b[j+1]=key; for(int i=0;i<=4;i++) printf("%d ",b[i]); return 0; }6. 输入一个有序数列,再输入一个指定的数,将其从有序数列中删除。
#include <stdio.h> #include <stdlib.h> int main(){ int a[]={2,4,6,8,10}; int n; scanf("%d",&n); for(int i=0;i<5;i++) if(a[i]==n){ for(;i<4;i++) a[i]=a[i+1]; break; } for(int i=0;i<4;i++) printf("%d ",a[i]); return 0; }