C语言练习 作业06,第七题到第十题。(2018.11.29)

题目7:方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3…的自然数列,从左上角开始,
按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。(所有函数写在一个函数中)

#include <stdio.h>

int main()
{
    int a[50][50];
    int i,j,n,circle = 1;  //circle为走到哪里的圈。
    int pos = 1;

    printf("请输入一个正整数。\n");
    scanf("%d",&n);
    while(pos <= (n*(n + 1) / 2))
    {
        for(i = circle, j = circle; j <= n-(circle - 1) * 2; j++) //横向向左
        {
            a[i][j] = pos;
            pos++;
        }
        for(i = circle + 1, j = n -  (circle-1)*2 - 1; i <= n - (circle-1)*2 && j>= circle;i++, j--)  //对角线
        {
            a[i][j] = pos;
            pos++;
        }
        for(i = n - (circle-1)*2-1, j = circle; i >= circle + 1; i--)  //竖向上
        {
            a[i][j] = pos;
            pos++;
        }
        circle++;
    }
    
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n - i + 1; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }


    return 0;
}

在这里插入图片描述

题目8: 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)

#include <stdio.h>

MonthAndDay(int day, int *month, int *date, int flag)
{
    int i,j,temp;
    temp = day;
    if(flag == 1)//看是否是闰年,是2月是29天
    {
        month[1] = 29;
    }

    for(i = 0;i < 12; i++)//求是几月
    {
        if(temp <= 31)
        {
            if((i+1) == 2 && flag == 1 && temp >29 || (i+1) == 2 && flag == 0 && temp > 28)    //即使余下31天,看是不是2月,因为2月是28-29天。如1998年3月1号是60天。不作这个判断会输出2月29号,不符合常理。
            {
                temp = temp - month[i];
                continue;
            }
            date[0] = i + 1;  //存放月份
            break;
        }
        temp = temp - month[i];
    }
    for(j = 1;j <= 31; j++)  //求是第几天
    {
        if(temp == j)
        {
            date[1] = j;   //存放号数。
            break;
        }
    }

}

int main()
{
    int year,day,flag;
    int date[2];
    int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    printf("请输入年份和天数。\n");
    scanf("%d%d",&year,&day);

    if(year % 4 == 0 && year % 100 != 0 || (year % 400 == 0))  //闰年
    {
        flag = 1;
    }
    else  //平年
    {
        flag = 0;
    }

    MonthAndDay(day,month,date,flag); //求是几月几号的函数
    printf("这是%d年%d月%d日\n",year,date[0],date[1]);
    return 0;
}

在这里插入图片描述

题目9: 取十个1-100的随机整数,然后倒序打印出来。(通过指针,而不是数组下标)

#include <stdio.h>
#include <time.h>

int main()
{
    int num[10];
    int i,j;
    int *p = num;
    srand(time(NULL));
    for(i = 0; i < 10; i++)
    {
        num[i] = rand() % 100 + 1;
    }
    printf("正序:\n");
    for(i = 0; i < 10; i++)
    {
        printf("%4d",num[i]);
    }
    
    printf("\n");

    printf("倒序:\n");
    for(p = num + 9; p >= num; p--)
    {
        printf("%4d",*p);
    }
    printf("\n");

    return 0;
}

在这里插入图片描述

题目10: 通过随机函数获取到26个小写英文字母,存储到数组里并小写字母顺序打印出来。

#include <stdio.h>
#include <time.h>
int main()
{
    int letter[50];
    int i,j;
    int temp;
    srand(time(NULL));
    for(i = 0; i < 26; i++)
    {
        letter[i] = 'a' + (rand() % 26);
    }
    
    printf("未排序:\n");
    for(i = 0; i < 26; i++)
    {
        printf("%c",letter[i]);
    }
    printf("\n");
    
    for(i = 0; i < 26; i++)
    {
        for(j = 0; j < 25; j++)
        {
            if(letter[j] > letter[j+1])
            {
                temp = letter[j];
                letter[j] = letter[j+1];
                letter[j+1] = temp;
            }
        }
    }
    
    printf("排序后:\n");
    for(i = 0; i < 26; i++)
    {
        printf("%c",letter[i]);
    }
    printf("\n");
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值