首页 > 代码库 > C语言考试解答十题

C语言考试解答十题

学院比较奇葩,大一下期让学的VB,这学期就要学C++了,然后在开学的前三个周没有课,就由老师讲三个周的C语言,每天9:30~11:30听课,除去放假和双休日,实际听课时间一共是12天*2小时,下午是14:10~5:00,上机,不过每天下午有将近三个小时的上机时间。时间那么紧迫还要考试,今天上午得知考试题是从以下十道题中出,轻松了很多。题如下:

1.计算 QQ20140916182624_thumb4,并输出其结果。

2.求出n个学生一门课程中的最高成绩、最低成绩及高于平均成绩的人数。

3.有10个100内的整数,使用选择排序法从大到小排序。

4.有n个考生,每个考生有考号和一个总分成绩,如果录取m人(n>m),确定录取分数线,并输出该分数线上的考生的考号和成绩。

5.用过程实现:求两个正整数的最大公约数。

6.用过程实现:求两个正整数的最小公倍数。

7.用牛顿迭代法求一元方程 x5+2x3-x2+x+1=0在 0 附近的近似值。

8.找出 1000 以内最大的 3 个素数。

9.设计一个具有+、-、*、/、开方、阶乘、指数、正弦、余弦、正切、求余数功能的简易计算器。

10.利用文本编辑软件在外存上建立一个有n个学生的学号、姓名、系别、联系电话的数据文件。从键盘上输入一个学号,可以查寻到此人其他信息。并按姓名排序且输出。

代码如下:

第一题:

计算 161932153009632_thumb,并输出其结果。

#include<stdio.h> int mul(int n) { int num,i; num=1; for(i=1;i<=n;i++) num=num*i; return(num); } void main() { int i,sum=0; for(i=1;i<=10;i++) sum+=mul(i); printf("The sum is %d\n",sum);  }

改进:

输入n即可求从1到n的阶乘的和。

#include<stdio.h> int mul(int n) {     int num,i;     num=1;     for(i=1;i<=n;i++)         num=num*i;     return(num); } void main() {     int i,n,sum=0;     printf("Enter the number:\n");     scanf("%d",&n);     if(n<=0)         printf("Error\n");     else     {         for(i=1;i<=n;i++)             sum+=mul(i);         printf("The sum is %d\n",sum);     } }

第二题:

求出n个学生一门课程中的最高成绩、最低成绩及高于平均成绩的人数。

#include<stdio.h> int sort(int a[],int n) {     int i,j,temp;     for(i=0;i<n;i++)     {         for(j=0;j<=n-i-1;j++)         {             if(a[j]<a[j+1])             {                 temp=a[j];                 a[j]=a[j+1];                 a[j+1]=temp;             }         }     } } void main() {     int i,k,sum=0,ave,n=4,a[5];//假设题中n=5,即有5名学生     for(i=0;i<=n;i++)     {         printf("Please enter number %d\n",i);         scanf("%d",&a[i]);         sum+=a[i];     } sort(a,n); printf("max is %d\n",a[0]); printf("min is %d\n",a[n]); ave=sum/n; for(k=0;k<=n&&a[k]>ave;) k++; printf("%d\n",k); }
第三题:

有10个100内的整数,使用选择排序法从大到小排序。

#include<stdio.h> int sort(int a[],int n) {     int i,j,temp;     int min;     for(i=1;i<=n;i++)     {         min=i;         for(j=0;j<=n;j++)         {             if(a[j]<a[min])             {                 min=j;             }             if(min!=i)             {                 temp=a[j];                 a[j]=a[min];                 a[min]=temp;             }         }     } } void main() { int i,k,n=9,a[10];     for(i=0;i<=n;i++)     {         printf("Please enter number(<100) %d\n",i);         scanf("%d",&a[i]); //        if(a[k]<0||a[k]>100) //            goto end;         } sort(a,n); for(k=0;k<=n;k++)     printf("%4d",a[k]);     printf("\n"); //end:printf("Error\n"); }

第四题:
有n个考生,每个考生有考号和一个总分成绩,如果录取m人(n>m),确定录取分数线,并输出该分数线上的考生的考号和成绩。

#include<stdio.h> int sort(int a[],int n) {     int i,j,temp;     for(i=0;i<n;i++)     {         for(j=0;j<=n-i-1;j++)         {             if(a[j]<a[j+1])             {                 temp=a[j];                 a[j]=a[j+1];                 a[j+1]=temp;             }         }     } } void main() {     int i,m,n=4,a[5];//假设题中n=5,即有5名学生     for(i=0;i<=n;i++)     {         printf("Please enter number %d\n",i);         scanf("%d",&a[i]);     } sort(a,n); printf("Please enter number m \n"); scanf("%d",&m); for(i=0;i<m;i++)     printf("考号和成绩分别是%d  %d\n",i,a[i]); }

第五题:
用过程实现:求两个正整数的最大公约数。

#include<stdio.h> void main(){     int a,b;     int min,max,tmp;     printf("Enter tne number a b:\n");     scanf("%d%d",&a,&b);     a>b?(max=a,min=b):(max=b,min=a);     while(tmp=(max%min))     {         max=min;         min=tmp;     }     printf("GCF is %d\n",min); }

 

第六题:

用过程实现:求两个正整数的最小公倍数。

#include<stdio.h>void main(){int a,b,lcm;int min,max,tmp;printf("Enter tne number a b:\n");scanf("%d%d",&a,&b);a>b?(max=a,min=b):(max=b,min=a);while(tmp=(max%min)){max=min;min=tmp;}lcm=a*b/min;printf("LCM is %d\n",lcm);}

第七题:

用牛顿迭代法求一元方程 x5+2x3-x2+x+1=0在 0 附近的近似值。

#include <stdio.h>#include <math.h>//x5+2x3-x2+x+1=0double F1(int,int,int,int,int,int,double); //原函数double F2(int,int,int,int,int,int,double); //原函数的一阶导数double Newton(int,int,int,int,int,int,double, double);int main(){/* int a,b,c,d,e,f;double x,x0 = 0;double g = pow(10,-5);//精度10^-5printf("please input a b c d e f\n");scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);x = Newton(a,b,c,d,e,f,x0,g);double g = pow(10,-5);*/double x;x = Newton(1,0,2,-1,1,1,0,pow(10,-5));//精度10^-5printf("the result is x = %f\n",x);}double F1(int a, int b, int c, int d, int e, int f,double x){return a*x*x*x*x*x + b*x*x*x*x + c*x*x*x + d*x*x +e*x +f;}double F2(int a, int b, int c, int d, int e, int f, double x){return 5*a*x*x*x*x + 4*b*x*x*x + 3*c*x*x +2*d*x +e;}double Newton(int a, int b, int c, int d,int e, int f,double x, double g){double x0;do{x0 = x;x = x0 - F1(a,b,c,d,e,f,x0) / F2(a,b,c,d,e,f,x0);}while (fabs(x0 - x) > g);return x;}

第八题:

找出 1000 以内最大的 3 个素数。

#include<stdio.h>#include<math.h>int sort(int x){int i,sx;sx=(int)sqrt(x);for(i=2;i<=sx;i++){if(x%i==0)break;if(i==sx)return(x);}return(0);}void main(){int n=999,i,a[3];// 3个for(i=0;i<3;i++){a[i]=sort(n);if(a[i]==0)i--;elseprintf("第%d个素数是%d\n",i+1,a[i]);n=n-1;}}

第九题:

设计一个具有+、-、*、/、开方、阶乘、指数、正弦、余弦、正切、求余数功能的简易计算器。

#include<stdio.h>#include<math.h>#define PI 3.14159026int add(int x,int y){    return(x+y);}int sub(int x,int y){    return(x-y);}int mul(int x,int y){    return(x*y);}double div(double x,double y){    if(y==0)        return (0);    else    return(x/y);}int fac(int x){    int num,i;        num=1;    for(i=1;i<=x;i++)        num=num*i;    return(num);}int mod(int x,int y){    return(x%y);}void main(){//    int (* oper[11])(int,int);    int m,n,temp1;    double x,y,temp2;    char i;    char c[]={+,-,*,/,q,!,^,s,c,t,%};//+、-、*、/、开方、阶乘、指数、正弦、余弦、正切、余数    printf("Enter  0 for   +  \n");    printf("Enter  1 for   -  \n");    printf("Enter  2 for   *  \n");    printf("Enter  3 for   /  \n");    printf("Enter  4 for 开方 \n");    printf("Enter  5 for 阶乘 \n");    printf("Enter  6 for 指数 \n");    printf("Enter  7 for 正弦 \n");    printf("Enter  8 for 余弦 \n");    printf("Enter  9 for 正切 \n");    printf("Enter  a for 余数 \n");    i=getchar();    if(i==0||i==1||i==2||i==6||i==a)    {        printf("Enter m  n: \n");        scanf("%d%d",&m,&n);    switch(i)    {        case 0:printf("%d+%d=%d\n",m,n,add(m,n));break;        case 1:printf("%d-%d=%d\n",m,n,sub(m,n));break;        case 2:printf("%d*%d=%d\n",m,n,mul(m,n));break;        case 6:temp1=(int)pow(m,n);printf("%d^%d=%d\n",m,n,temp1);break;//pow        case a:printf("%d%%%d=%d\n",m,n,mod(m,n));break;    }    }    else if(i==3||i==4)    {        printf("Enter x  y: \n");        scanf("%lf%lf",&x,&y);//        printf("%lf  %lf\n",x,y);        switch(i)    {        case 3:printf("%lf/%lf=%lf\n",x,y,div(x,y));break;        case 4:temp2=pow(x,1/y);printf("%lf开%lf次方=%lf\n",x,y,temp2);break;//pow    }        }    else if(i=5)    {        printf("Enter m: \n");        scanf("%d",&m);        printf("%d!=%d\n",m,fac(m));    }    else if(i==7||i==8||i==9)    {        printf("Enter x: \n");        scanf("%lf",&x);        x=x*PI/180;//        printf("Enter x is %f\n: ",x);        switch(i)    {        case 7:printf("sin(%lf)=%f\n",x,sin(x));break;        case 8:printf("cos(%lf)=%f\n",x,cos(x));break;        case 9:printf("tan(%lf)=%f\n",x,tan(x));break;    }    }    else        printf("Error!\n");}

第十题:(非原创)

利用文本编辑软件在外存上建立一个有n个学生的学号、姓名、系别、联系电话的数据文件。从键盘上输入一个学号,可以查寻到此人其他信息。并按姓名排序且输出。

#include <stdio.h>#include <stdlib.h>#define M 3struct data                 /*定义结构体 */{    int idno;    char name[10];    char telno[15];};struct data person[M];        /* 定义结构体数组 */void personlist()                 /* 建立学生表函数*/{    int  i;    FILE * fp;    fp = fopen("student.txt","r");//打开文件    if(fp==NULL)    exit(0);     for(i=0;i<M;i++)    {        fscanf(fp,"%d%s%s",&person[i].idno,person[i].name,person[i].telno);//读取记录        fprintf(stdout,"\n   学号:%d,姓名:%s,电话号码: %s\n",person[i].idno,person[i].name,person[i].telno);    }    fclose(fp);//关闭文件}void main(){    int  i,no,yes=0;    personlist();    printf("\n  请输入要查找信息的id号: ");    scanf("%d",&no);    for (i=0;i<M;i++)    {        if (person[i].idno==no)        {            printf("\n  姓   名: %s",person[i].name);            printf("\n 电话号码: %s\n",person[i].telno);            yes=1;            break;        }    }    if(!yes)        printf("\n 没找到相应资料!\n");}

 

C语言考试解答十题