题目
回顾数组及函数的定义方法和函数的调用方法;
回顾数组名作为函数参数时信息传递方式;
编写完整的程序,实现以下功能:
题目:给出年、月、日,计算该日是该年的第几天。
代码
1.直接嵌套
/*19通信 田博
学号:1940301109*/
#include<stdio.h>
int main(){
int year,month,day;
int res=0,i;
int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int d[12];
scanf("%d%d%d",&year,&month,&day);
if(year%4==0&&year%100!=0||year%400==0){
for(i=0;i<12;i++){
d[i]=r[i];
}
}
else{
for(i=0;i<12;i++){
d[i]=p[i];
}
}
if (month>=1&&month<=12){
if(day>=1&&day<=d[month-1]){
for(i=0;i<month-1;i++){
res=res+d[i];
}
res=res+day;
printf("%d\n",res);
}else{
printf("输入的时间不正确\n");
}
}else{
printf("输入的时间不正确\n");
}
return 0;
}
2.参数传递
/*19通信 田博
学号:1940301109*/
#include<stdio.h>
int main(){
int year,month,day;
int res=0;
int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int *d;
int get(int year,int month ,int day,int d[]);
scanf("%d%d%d",&year,&month,&day);
if(year%4==0&&year%100!=0||year%400==0){
d=r;
}
else{
d=p;
}
res=get(year,month,day,p);
if(res==0){
printf("日期错误");
}else{
printf("%d",res);
}
}
int get(int year,int month ,int day,int d[]){
int res,i;
if (month>=1&&month<=12){
if(day>=1&&day<=d[month-1]){
for(i=0;i<month-1;i++){
res=res+d[i];
}
res=res+day;
return res;
}else{
return (0);
}
}else{
return (0);
}
}
3.不用指针传递数组
#include<stdio.h>
int main(){
int year,month,day;
int res;
int r[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int p[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int get(int year,int month ,int day,int d[]);
scanf("%d%d%d",&year,&month,&day);
if(year%4==0&&year%100!=0||year%400==0){
res=get(year,month,day,r);
}
else{
res=get(year,month,day,p);
}
if(res==0){
printf("日期错误");
}else{
printf("%d",res);
}
}
int get(int year,int month ,int day,int d[]){
int res=0,i;
if (month>=1&&month<=12){
if(day>=1&&day<=d[month-1]){
for(i=0;i<month-1;i++){
res=res+d[i];
}
res=res+day;
return res;
}else{
return (0);
}
}else{
return (0);
}
}
Comments | NOTHING