题目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;
}