C语言考试解答十题

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

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

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个学生的学号、姓名、系别、联系电话的数据文件。从键盘上输入一个学号,可以查寻到此人其他信息。并按姓名排序且输出。

代码如下:

第一题:

计算 ,并输出其结果。

#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");
}

 

时间: 2024-11-04 05:01:35

C语言考试解答十题的相关文章

2016年上半年网络工程师考试下午真题,参考答案,详细解答发布

2016年上半年网络工程师考试下午真题,参考答案,详细解答发布http://down.51cto.com/data/2221024

复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第七大题解答

七.(本题10分)  设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(\lambda),g'(\lambda))=1$. 证明: $A$ 可对角化的充要条件是 $g(A)$ 可对角化. 证明  先证必要性. 设 $A$ 可对角化, 即存在非异阵 $P$, 使得 $P^{-1}AP=\Lambda=\mathrm{diag}\{\lambda_1,\lambda_2,\cdots,\lambda_n\}$ 为对角阵,

中国MOOC_零基础学Java语言_期末考试的编程题_1二进制的前导的零

期末考试的编程题 返回 这是期末考试的编程题,在60分钟内,你可以多次提交,直到正确为止. 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 二进制的前导的零(10分) 题目内容: 计算机内部用二进制来表达所有的值.一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000.可以看到,从左边数过来,在第一个1之前,有27

复旦大学2015--2016学年第二学期(15级)高等代数II期末考试第七大题解答

七.(本题10分) 设 $A,B,C$ 分别为 $m\times m$, $n\times n$, $m\times n$ 阶复矩阵, $M=\begin{pmatrix} A & C\\ 0 & B\\ \end{pmatrix}$ 可对角化, 求证: 矩阵方程 $AX-XB=C$ 必有解. 证明  任取 $M$ 的特征值 $\lambda_0$, $M-\lambda_0I=\begin{pmatrix} A-\lambda_0I & C \\ 0 & B-\lambd

链表十题(本节终)

本节内容汇总了近期所做的有关于链表的10道题目,以超链接的形式在下面,点击便可以跳转相应的博文. 由于个人水平有限,所分享的十题都是leetcode网站上简单.中等难度的题目,每道题目都采用java和C语言来进行答题的,并且大多数题目都提供了2种及以上的不同思路. 由于打字困难,对于题目的解答思路都在代码的注释中.该十大题目大部分都不是最优解法,仅是作者的个人想法的体现,仅供参考.如果读者也有着自己对题目的想法,欢迎将您的答案留在评论区,充实本文内容,一起探究算法题的乐趣. 1.回文链表 2.旋

2016上半年网络工程师考试上午真题(1-26)

2016年上半年网络工程师考试真题是备战下半年网络工程师考试的最佳资料,下面希赛软考学院为您整理了上午试题,供您参考学习. 2016年上半年网络工程师考试上午真题(1-26) ●内存按字节编址,从A1000H到B13FFH的区域的存储容量为(1)KB. A.32 B.34 C.65 D.67 ●以下关于总线的叙述中,不正确的是(2). A.并行总线适合近距离高速数据传输 B.串行总线适合长距离数据传输 C.单总线结构在一个总线上适应不同种类的设备,设计简单且性能很高 D.专用总线在设计上可以与连

2016年上半年信息系统管理工程师考试上午真题(2)

通过信息系统管理工程师考试并获得证书的人员,能聘任对应技术岗位,能评中级职称.下面希赛软考学院为您整理了2016年上半年信息系统管理工程师上午真题,助准备参加考试的你一臂之力. 2016年上半年信息系统管理工程师考试上午真题(26-50题) ●SNMP属于OSI/RM的(26)协议. A.管理层 B.应用层 C.传输层 D.网络层 ●下面4个主机地址中属于网络220.115.200.0/21的地址是(27). A.220.115.198.0 B.220.115.206.0 C.220.115.2

苹果新的编程语言 Swift 语言进阶(十四)--扩展

Swift语言的扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能.        扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名字.        扩展能够为已存在类型:     1)增加计算属性和计算静态属性:     2)定义新的实例方法和类型方法:     3)提... 请转移到此位置继续阅读,谢谢! 苹果新的编程语言 Swift 语言进阶(十四)--扩展 苹果新的编程语言 Swift 语

矩阵十题【三】 HDU 1588 Gauss Fibonacci

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1588 题目大意:先要知道一组斐波那契数列 i 0 1 2 3 4 5 6 7 f(i) 0 1 1 2 3 5 8 13 下面给你一组数: k,b,n,M 现在知道一组公式g(i)=k*i+b:(i=0,1,2,3...n-1) 让你求出 f(g(i)) 的总和(i=01,2,3,...,n-1),比如给出的数据是2 1 4 100 2*0+1=1   f(1)=1 2*1+1=3   f(3)=2