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=0 double 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^-5 printf("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^-5 printf("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-- ; else
printf(
"第%d个素数是%d\n",i+1 ,a[i]); n=n-1
;
}
}

第九题:

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

#include<stdio.h>
#include
<math.h> #define PI 3.14159026 int 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 3 struct 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"
);
}

 

 

转载于:https://www.cnblogs.com/wangshunli/p/3983182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值