要求:定义和调用函数month_day ( year, yeardy, *pmonth, *pday),通过参数pmonth和pday返回计算得出的月和日。例如,输入2000和61,分别返回3和1,即2000年的第61天是3月1日。
裁判测试程序样例:
# include <stdio.h>
void month_day ( int year, int yearday, int * pmonth, int * pday);
int main (void)
{
int day, month, year, yearday; /* 定义代表日、月、年和天数的变量*/
scanf ("%d%d", &year, &yearday );
month_day (year, yearday, &month, &day );/* 调用计算月、日函数 */
printf ("%d %d %d\n", year, month, day );
return 0;
}
/* 请在这里填写答案 */
思路:总天数减去前几个月天数,剩下的就是当月天数了
解答
void month_day ( int year, int yearday, int * pmonth, int * pday)
{
int month;
int is_leap = 0; //默认为平年
int days[2][12] = { //把每月天数装在数组里
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //平年0
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} //闰年1
}
//判断是否闰年
//if ( year%4==0 && year%100 || year&400==0 ) is_leap = 1;
is_leap = year%4==0 && year%100 || year&400==0; //这样判断闰年也可以,直接赋值
//yearday作为剩下的天数
for ( month=1; yearday>days[is_leap][month]; month++ ){
yearday -= days[is_leap][month];
}
*pmonth = month;
*pday = yearday;
}
输入:第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。
输出:Min is: 最小字符串。
关键:n行的字符串如何获取
#include <stdio.h>
#include <string.h>
#define N 80
#define M 1000
int main()
{
int n;
char a[M][N];
char *min;
scanf("%d", &n);
//getchar();
for ( int i=0; i<n; i++ ){
// gets(a[i]);
scanf("%s", a[i]);
}
min = a[0];
for ( int i=1; i<n; i++ ){
if ( strcmp(a[i],min) < 0 ) min = a[i];
}
printf("Min is: %s", min);
return 0;
}
要求:在字符串str中找出最大的字符并放在第一个位置上,并将将字符前的原字符往后顺序移动。
char str[80], *p, max, *q;
p=str;
gets(p);
max=*(p++);
while(*p != '\0'){
if(max<*p){
max=*p; //max装最大值其值
q=p; //用q来标记最大值的位置
}
p++;
}
p=q; //让p指向最大值的位置
while( p>str ) {
*p=*(p-1); //把最大值那个位置覆盖掉,前面的都往后移一位
p--;
}
*p=max; //第一位放最大值
puts(p);