2018年吉林大学软件学硕复试编程题

1、输出1000以内的所有完数,完数是指该数的所有非本身的因子之和等于其本身。例如:6=1+2+3.

#include 
#include 
int fun(int n)
{
    int i,j;
    int sum=0;
    for(i=1;i

2、有100个点,求其中任意两点组成的线段的最长的值,并输出。

#include 
#include 
#include 
void main()
{
    double max=0.0,temp=0.0;
    double x[100],y[100];
    int i,j;
    for(i=0; i<100; i++)
    {
        scanf("%lf%lf",&(x[i]),&(y[i]));
    }
    int m=0,n=0;//记录坐标
    for(i=0; i<100; i++)
    {
        for(j=i; j<100; j++)
        {
            temp=pow(x[i]-x[j],2)+pow(y[i]-y[j],2);
            if(temp>max)
            {
                max=temp;m=j;n=i;
            }

        }
    }
    printf("the points are{%.4lf,%.4lf}{%.4lf,%.4lf}\nthe max is %.4lf",x[n],y[n],x[m],y[m],sqrt(max));
}

 3、定义数组100个数,规则如下:第一个数为1 ,第二个数为2,其余的数规则如下:若为技术则为前两个数之和,若为偶数则为前两项之差!要求按递增排序输出!

#include 
#include 
#include 
void main()
{
    int array[100];
    int i,j;
    for(i=1; i<=10; i++)
    {//确定数组
        if(i<=2)
        {
            array[i]=i;
        }
        else
        {
            if(i%2==1)
            {
                array[i]=array[i-1]+array[i-2];
            }
            else
            {
                array[i]=array[i-1]-array[i-2];
            }
        }
        printf("%-6d",array[i]);
    }
    printf("\n");
    for(i=1; i<=10; i++)
    {//排序
        for(j=i; j<=10-i; j++)
        {
            if(array[j]>array[j+1])
            {
                int temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }
    }
    for(i=1; i<=10; i++)
    {
        //输出
        printf("%-6d",array[i]);
        if(i%5==0)
            printf("\n");
    }
}

4、 对于输入的串(输入0或者1,以2 为结尾)统计0串个数,0串是指传中所有含有0的最大长串的长度,例如:000110002有两个串。注:不太懂这个题目的意思,若输入001100012,是否会输出1(0串最大长度为1,则输出1)??求解读

#include 
#include 
#include 
#define N 1024
// 对与输入的串(输入0或者1,以2 为结尾)统计0串个数,
//0串是指传中所有含有0的最大长串的长度,例如:000110002有两个串。
void main()
{
    char ch;
    char str[N];char* p = str;
    int A[100];memset(A,0,sizeof(int)*100);
    int i=0,j,k=1;
    printf("Enter string:\n");
    for (i = 0, ch = '\0'; ch != '2'; ++i)
    {
        ch = getchar();
        if (i >= N)  //当超出字符串长度时, 继续接受键盘输入的字符,直到输入\n为止
        {
            //这是为了防止字符串输入完成后输入的字符会被下一个需要输入的数据接收
            continue;
        }
        if (ch == '2' || i == N - 1)
        {
            p[i] = '\0';
            continue;
        }
        p[i] = ch;
        if(p[i]=='0')
        {
            A[k]++;
        }
        else
        {
            k++;
        }
    }
    int m=0,n=0;
    for(j=1;j<=k;j++)
    {
        printf("%d  ",A[j]);
        if(A[j]>m)
        {
            m=A[j];
        }
    }
    for(j=1;j<=k;j++)
    {
        if(m==A[j])
        {
            n++;
        }
    }
    printf("\n%d",n);
}

 

你可能感兴趣的:(2018年吉林大学软件学硕复试编程题)