11月6日 哈工大c语言编程题

1
三天打渔两天晒网 (4分)

题目内容:

中国有句俗语叫“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”,即工作三天,然后再休息两天。问这个人在以后的某一天中是在工作还是在休息。从键盘任意输入一天,编程判断他是在工作还是在休息,如果是在工作,则输出:He is working,如果是在休息,则输出:He is having a rest,如果输入的年份小于1990或者输入的月份和日期不合法,则输出:Invalid input。

输入格式: "%4d-%2d-%2d"

输出格式:

"Invalid input" 或

"He is having a rest" 或

"He is working"

输入样例1:

2014-12-22

输出样例1:

He is working

输入样例2:

2014-12-24

输出样例2:

He is having a rest

输入样例3:

2014-12-32

输出样例3:

Invalid input

#include
#include


int main()
{
    int year,month,date,a=0,b,c=0,e;
    int sum1,sum2,d;
    scanf( "%4d-%2d-%2d",&year,&month,&date);
    if((month<0||month>12)||(date<0||date>=31))
    {
        printf("Invalid input" );
        return -1;
    }
    for(b=1990;b     {
        if((b%4==0)&&(b%100!=0)||(b%400==0))
            a=a+1;
        else
        {
            c=c+1;
        }
    }
    sum1=366*a+365*c;
    sum2=0;
    for(e=1;e     {
        switch(e)
        {
            case 1:
            case 3:
            case 5 :
            case 7 :
            case 8 :
            case 10 :
            case 12 :
                    d=31;
                    break;
            case 4:
            case 6:
            case 9:
            case 11:
                    d=30;
                    break;
            case 2:
            {
                if((year%4==0)&&(year%100!=0)||(year%400==0))
                {
                    d=29;
                }
                else
                {
                    d=28;
                }
            }
            break;
            default:d=0;


        }
        sum2=sum2+d;


    }
    sum1=sum1+sum2+date;
    if(sum1%5==0||sum1%5==4)
    {
        printf("He is having a rest" );
    }
    else
    {
        printf("He is working");
    }
return 0;
}

2
统计用户输入 (4分)

题目内容:

从键盘读取用户输入直到遇到#字符,编写程序统计读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。(要求用getchar()输入字符)

程序运行结果示例1:

Please input a string end by #:

abc def↙

jklm op↙

zkm #↙

space: 3,newline: 2,others: 15

程序运行结果示例2:

Please input a string end by #:

hello friend!#↙

space: 1,newline: 0,others: 12


输入提示信息:"Please input a string end by #:\n"

输入格式: getchar()

输出格式: "space: %d,newline: %d,others: %d\n"

#include
#include


int main()
{
    int space=0,newline=0,others=0;
    char ch;
    printf("Please input a string end by #:\n");
    while((ch=getchar())!='#')
    {
        if(ch!=' '&&ch!='\n')
        others++;
        else if(ch!=' ')
            newline++;
        else
            space++;
    }
    printf( "space: %d,newline: %d,others: %d\n",space,newline,others);
    return 0;
}

3
统计正整数中指定数字的个数 (4分)

题目内容:

从键盘输入一个正整数number,求其中含有指定数字digit的个数。例如:从键盘输入正整数number=1222,若digit=2,则1223中含有 3个2,要求用函数实现。函数原型为:int CountDigit(int number,int digit);

程序运行结果示例1:

Input m,n:

1222,2

3

程序运行结果示例2:

Input m,n:

1234,6↙

0


输入提示信息:"Input m,n:\n"

输入格式: "%d,%d"

输出格式: "%d\n"

#include
int CountDigit(int number,int digit);
int main()
{
int number;
int digit;
printf("Input m,n:\n");
scanf("%d,%d",&number,&digit);
int a=CountDigit(number,digit);
printf("%d\n",a);
}
int CountDigit(int number,int digit)
{
int c=0;
while(number)
{
if(digit==number%10)
c++;
number=number/10;
}
return c;
}

4
玫瑰花数 (4分)

题目内容:

如果一个n位正整数等于它的n个数字的n次方和,则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。


输入格式:

输出格式:"%d\n"

#include
#include
#include


int main()
{
    int a,b,c,d,e,f;
    for(a=1;a<=9;a++)
    {
        for(b=0;b<=9;b++)
        {
            for(c=0;c<=9;c++)
            {
                for(d=0;d<=9;d++)
                {
                    e=a*1000+b*100+c*10+d;
                    f=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d;
                    if(e==f)
                    {
                        printf("%d\n",e);
                    }
                }
            }
        }


    }
    return 0;
}

5
四位反序数 (4分)

题目内容:

反序数就是将整数的数字倒过来形成的整数。例如,1234的反序数是4321。设N是一个四位数,它的9倍恰好是其反序数,编程计算并输出N的值。


输入格式: 

输出格式:"%d\n"

#include
#include


int main()
{
    int N;
    for(N=1000;N<=9999;N++)
    {
        if(N%10*1000+N%100/10*100+N/100%10*10+N/1000==N*9)
        {
            printf("%d\n",N);
        }
    }
    return 0;
}

6
8除不尽的自然数 (4分)

题目内容:

一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求满足以上条件的最小自然数。


输入格式:

输出格式:"%d\n"

#include
#include


int main()
{
    int n=1993;
    printf("%d",n);
    return 0;
}

7
矩阵转置v1.0 (4分)

题目内容:


用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。其中,n的值不超过10,n的值由用户从键盘输入。


程序运行结果示例1:

Input n:3↙

Input 3*3 matrix:

1 2 3↙

4 5 6↙

7 8 9↙

The transposed matrix is:

   1   4   7

   2   5   8

   3   6   9


程序运行结果示例2:

Input n:2↙

Input 2*2 matrix:

1 2↙

4 5↙

The transposed matrix is:

   1   4

   2   5


输入提示信息:

提示输入矩阵的阶数:"Input n:"

提示输入矩阵数据:"Input %d*%d matrix:\n"

输入格式: "%d"

输出提示信息:"The transposed matrix is:\n"

输出格式:"%4d"

#include
#include
#define N 10
int readnumber(int a[N][N],int n);
int changenumber(int a[N][N],int n);


int main()
{
    int a[N][N],n;
    printf("Input n:");
    scanf( "%d",&n);
    printf("Input %d*%d matrix:\n",n,n);
    readnumber(a,n);
    printf("The transposed matrix is:\n");
    changenumber(a,n);
    return 0;


}
int readnumber(int a[N][N],int n)
{
    int i,j;
    for(i=0;i     {
        for(j=0;j         {
            scanf("%d",&a[i][j]);
        }
        getchar();
    }
}
int changenumber(int a[N][N],int n)
{
    int i,j;
    for(i=0;i     {
        for(j=0;j         {
            printf("%4d",a[j][i]);
        }
        printf("\n");
    }
}

8
兔子生崽问题 (4分)

题目内容:

假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,n(n<=12)月以后可有多少对兔子(即当年第n月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题,n的值要求从键盘输入。

参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:

(1)每月小兔对数 = 上个月成兔对数。

(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。

综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。

用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:


程序运行示例:

Input n(n<=12):

10↙

   1   2   3   5   8  13  21  34  55  89

Total=89


输入提示:"Input n(n<=12):\n"

输入格式:"%d"

输出格式:

每个月兔子对数的输出格式:  "%4d"

第12个月的兔子总数的输出格式:  "\nTotal=%d\n"


#include
#include


int fn(int n);
int main()
{
    int n,i;
    printf("Input n(n<=12):\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("%4d",fn(i));
    }
    printf("\nTotal=%d\n",fn(n));
    return 0;


}
int fn(int n)
{
    if(n==1)
    {
        return 1;
    }
    else if(n==2)
    {
        return 2;
    }
    else
    {
        return fn(n-1)+fn(n-2);
    }
}

9
抓交通肇事犯 (4分)

题目内容:

一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。

[提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数

k = 1000*i + 100*i + 10*j + j

式中,i和j都在0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。

输入格式: 

输出格式:"k=%d,m=%d\n"


#include
int main()
{
   int j,c;
   for (j=31;j<=100;j++)
   {
       c=j*j;
       if (((c/100)%11==0)&&((c%100)%11==0))
       printf("k=%d,m=%d\n",c,j);
   }


   return 0;
}

0
检验并打印幻方矩阵 (4分)

题目内容:

幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。

输入格式: "%d"

输出格式:

如果是幻方矩阵,输出提示信息: "It is a magic square!\n"

矩阵元素的输出: "%4d"(换行使用"\n")

如果不是幻方矩阵,输出提示信息: "It is not a magic square!\n"

输入样例1:

17_24_1_8_15

23_5_7_14_16

4_6_13_20_22

10_12_19_21_3

11_18_25_2_9

(输人样例中“_”代表空格)

输出样例1:

It is a magic square!

**17**24***1***8**15

**23***5***7**14**16

***4***6**13**20**22

**10**12**19**21***3

**11**18**25***2***9

(输出样例中“*”代表空格)

输入样例2:

1_0_1_6_1

3_1_1_1_1

1_1_1_1_2

1_1_1_1_1

9_1_7_1_1

(输人样例中“_”代表空格)

输出样例2:

It is not a magic square!

#include
#define MAX 5


int Fun(int a[][MAX]);
int main()
{
    int a[MAX][MAX] ;
    int i,j;
    for ( i = 0; i < MAX; i++)
    for ( j = 0; j < MAX; j++)
        scanf("%d ", &a[i][j]);
    if (Fun(a) == 1)
    {
        printf("It is a magic square!\n");
        for ( i = 0; i         {
            for ( j = 0; j < MAX; j++)
                printf("%4d", a[i][j]);
            printf("\n");
        }
    }
    else
        printf("It is not a magic square!\n");


    return 0;
}
int Fun(int a[][MAX])
{
    int s1, s2, sum;
    int i,j;
    sum = 0;
    for ( i = 0; i     for ( j = 0; j         sum = sum+a[i][j];
        sum =sum/MAX;
    for ( i = 0; i     {
        s1 = s2 = 0;
        for ( j = 0; j         {
            s1 =s1+ a[i][j];
            s2 =s2+a[j][i];
        }
        if (s1 != sum || s2 != sum)
        {
            return 0;
        }
    }
    s1 = s2 = 0;
    for ( i = 0; i     {
        s1 = s1+a[i][i];
        s2 =s2+ a[i][MAX - i - 1];
    }
    if (s1 != sum || s2 != sum)
        return 0;
    return 1;
}

你可能感兴趣的:(11月6日 哈工大c语言编程题)