结构体-练习题

1:输入若干人员姓名电话,义字符“#”表示结束,输入姓名,查找该人电话

 scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。scanf()可以读取所有类型的变量
 gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中。gets()用到读取字符串,用回车结束输入
 使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,
 所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后
面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲
区的回车已经被 gets() 取出来扔掉了。如果前面使用的不是 gets() 而是
scanf,那么通过键盘给 ch 赋值前就必须先使用getchar() 清空缓冲区。
复制代码
struct person
{
char name[10];
char tel[20];
};
void search1(struct person a[],char *x,int j)
{
    int i=0;
    while(strcmp(a[i].name,x)!=0&&i<j)i++;
    if(i<j)printf("%s",a[i].tel);
    else printf("null");
}
int main()
{
    struct person s[100];
    int i=0;
    char na[10],te[20];
    while(1)
    {
        printf("输入姓名:");
        gets(na);
        if(strcmp(na,"#")==0)
        {
            break;
        }
        printf("输入电话:");
        gets(te);
        strcpy(s[i].name,na);
        strcpy(s[i].tel,te);
        i++ ;
    }
     printf("输入查找姓名");
     gets(na);
     search1(s,na,i);

 return 0;
}
复制代码

2:1:根据输入日期(年月日)求出改天是该年的第几天  2:根据输入的年份和天数,求出对应日期

1,3,5,7,8,10,12:31天
闰年:229
平年:228
其余4,6,9,11:30天
根据年份算出是闰年还是平年
四年一闰,百年不闰,四百年再闰
复制代码
struct DATE{
int year;
int month;
int day;
}date;
int main(){
    int run=0,curdays;
    int monthday[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
    printf("输入年 月 日 天数:");
    scanf("%d %d %d %d",&date.year,&date.month,&date.day,&curdays);
    if(date.year%4==0&&date.year%100!=0||date.year%400==0){
        run=1;
    }
    if(run==1){//润年
         monthday[2]=29;
    }else{
         monthday[2]=28;
    }
    //求天数
    int temp=0,j,num;
    switch(date.month){
       case 1:for(j=0;j<1;j++)temp+=monthday[j];break;
       case 2:for(j=0;j<2;j++)temp+=monthday[j];break;
       case 3:for(j=0;j<3;j++)temp+=monthday[j];break;
       case 4:for(j=0;j<4;j++)temp+=monthday[j];break;
       case 5:for(j=0;j<5;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 6:for(j=0;j<6;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 7:for(j=0;j<7;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 8:for(j=0;j<8;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 9:for(j=0;j<9;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 10:for(j=0;j<10;j++){temp+=monthday[j];printf("%d+",monthday[j]);}break;
       case 11:for(j=0;j<11;j++)temp+=monthday[j];break;
       case 12:for(j=0;j<12;j++)temp+=monthday[j];break;
       }
    num=temp+date.day;
    printf("%d",date.day);
    printf("\n第%d天\n",num);
    //求年月日
    int i,curM=0,curD=0;
    for(i=0;i<13;i++){
        curdays-=monthday[i];
        printf("curdays=%d\n",curdays);
        curM++;
        if(curdays<=31&&curdays>0)
        {
            curD=curdays;
            break;
        }
    }
    printf("%d年%d月%d日",date.year,curM,curD);
}



//可以做成菜单再计算(后续方法不写了)
int a[2][13]={{0,31,29,31,30,31,30,31,31,30,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}};
int main(){
while(1)
{
    int m;
    printf("选择1:输入年月日,输出第几天;2:输入年,第几天,输出年月日\n");
    scanf("%d\n",&m);
    if(m==1)
    {
        int n,y,r;
        printf("请输入年 月 日\n");
        scanf("%d %d %d",&n,&y,&r);
        searchdd(n,y,r);
    }
    else if(m==2)
    {
        int n,t
        printf("请输入年 天数\n");
        scanf("%d %d",&n,&t);
        searchyr(n,t);
    }
    else break;
}
}
复制代码

 


 

posted on   Y-flower  阅读(183)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示