结构体-练习题
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天 闰年:2:29 平年:2:28 其余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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?