一章顺序结构.ppt

上传人:sccc 文档编号:5502269 上传时间:2023-07-14 格式:PPT 页数:33 大小:1.59MB
返回 下载 相关 举报
一章顺序结构.ppt_第1页
第1页 / 共33页
一章顺序结构.ppt_第2页
第2页 / 共33页
一章顺序结构.ppt_第3页
第3页 / 共33页
一章顺序结构.ppt_第4页
第4页 / 共33页
一章顺序结构.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《一章顺序结构.ppt》由会员分享,可在线阅读,更多相关《一章顺序结构.ppt(33页珍藏版)》请在三一办公上搜索。

1、1,1,第三章 顺序结构,顺序结构一般由函数调用语句、说明语句、表达式语句和输入输出语句组成。,顺序结构:按语句出现先后顺序依次执行的程序结构。顺序结构是程序设计中最简单、最基本的结构,其特点是程序运行时,按语句书写的次序依次执行,其结构如图所示。,2,2,3.1 C语句概述,一、C语句的分类1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句,完成一定的控制功能。包括选择结构控制语句、循环结构控制语句、其他控制语句。,表达式语句由表达式后加上分号“;”组成。,由函数名、实际参数加上分号“;”组成。,把多个语句用括号括起来组成的一个语句组称复合语句。,只有分号“;”组成的语句称为空

2、语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。,第3章 顺序结构,3,3,3.1 C语句概述,二、C语句示例,while(getchar()!=n);/*这里的循环体为空语句。本语句的功能是,只要从键盘输入的字符不是回车则重新输入。*/,第3章 顺序结构,a+4*b;算术表达式语句4*x,4+y;逗号表达式语句x=4*5;赋值表达式语句(赋值语句),printf(“Hello Everyone!”);,函数调用,分号,3.2 数据输入输出一、数据输入输出的概念,计算机的输入输出是以计算机主机为主体而言。,输入:从外部通过输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数

3、据。,输出:从计算机向外部设备(如显示屏、打印机、磁盘等)输出数据。,4,4,3.2 数据输入输出,第3章 顺序结构,二、数据输入输出在语言中的实现,调用输入输出库函数实现输入输出操作,语言本身不提供输入输出语句,输入和输出操作是通过调用语言库函数中输入输出函数来实现的。,如:printf函数格式输出 putchar函数输出字符 scanf函数格式输入 getchar函数输入字符 puts 函数输出字符串 gets 函数输入字符串,2文件开头应有“#include”命令,在调用标准输入输出库函数时,文件开头应有编译预处理命令:#include/*系统到存放C库函数头文件的目录中寻找要包含的文件

4、,此为标准方式。*/或#include”stdio.h”/*系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。*/,stdio.h是”头文件”,包含了与用到的标准输入输出函数有关的信息。头文件的扩展名为.h,如 string.h对字符串进行操作的标准函数;math.h有关数学的标准函数。,库函数:是将函数放到一个文件里,供编程人员使用,一般是放到.lib文件里的。有两类库函数,一类是c语言标准规定的库函数,一类是编译器特定的库函数。,5,说明:输出项也称为输出参数,可以是变量、常量、表达式,输出项之间用逗号“,”隔开。printf函数是将各个输出项的值按照格式控制字符串中指定

5、的格式输出。例如:printf(“%d”,5);/*把5以%d的形式输出*/printf(“%d”,5-6);/*把表达式5-6的值1以%d的形式输出*/printf(“%d”,a);/*把变量a的值以%d的形式输出*/3.格式控制字符串里面包含三种类型的字符:(1)以%开头的格式说明,用于控制输出项的输出格式,其一般形式为:%修饰符格式字符 以%开头的格式说明的个数和输出项列表中输出项的个数是一一对应的,因此二者的数目必须一致。(2)转义字符,以反斜线“”开头,后面紧跟一个特定的字符,用来代表某个特定的操作。如“n”代表回车。(3)普通字符,在显示器上原样输出,主要起解释、说明作用。除了格式

6、说明和转义字符之外,在格式控制中的其他字符(包含空格)均按原样输出。,5,3.3 格式输出printf函数,一、printf函数的调用形式printf(格式控制,输出项列表)在printf函数调用之后加上“,”,就构成了输出语句:printf(“格式控制字符串”,输出项列表);功能:按控制字符串规定的输出格式,把输出项的值依次输出到系统指定的缺省输出设备,通常为显示器。,int a=3,b=4;printf(“a=%d b=%#odn”,a,b);,格式控制字符,普通字符,输出项,转义字符,“格式控制字符串”,输出项1,输出项2,输入项n,6,6,3.3 格式输出printf函数,二、格式说明

7、,格式说明的一般形式为:%-+0#整数1.整数2l或h 格式字符说明:它是由“%”开头,以格式字符(英文字母)结束的一串字符。2.-+0#整数1.整数2l或h为可选项,中的字符为修饰符,可以控制输出的宽度、精度、小数位数、对齐方式等。3.格式字符是格式控制(说明)中必须要有的,它控制输出列表里相应输出项数据的输出类型。,#includemain()printf(%d,%#o,%#xn,345,345,345);printf(%d,%#o,%#xn,0234,0234,0234);printf(%d,%#o,%#xn,0 x6e,0 x6e,0 x6e);,运行结果:345,0531,0 x15

8、9156,0234,0 x9c110,0156,0 x6e,7,7,3.3 格式输出printf函数,二、格式说明1.格式字符,8,#includevoid main()int a,b;double x,y;a=9;x=6.5;y=1.9;printf(x+a%4*(int)(x-y)%3/5=%fn,x+a%4*(int)(x-y)%3/5);a=2;b=3;x=4.5;y=6.7;printf(float)(a+b)/3+(int)x%(int)y=%fn,(float)(a+b)/3+(int)x%(int)y);,8,3.3 格式输出printf函数,二、格式说明1.格式字符,#inc

9、ludevoid main()int a,b;double x,y;a=9;x=6.5;y=1.9;printf(x+a%4*(int)(x-y)%3/5=%fn,x+a%4*(int)(x-y)%3/5);a=2;b=3;x=4.5;y=6.7;printf(float)(a+b)/3+(int)x%(int)y=%fn,(float)(a+b)/3+(int)x%(int)y);,运行结果:x+a%4*(int)(x-y)%3/5=6.500000(float)(a+b)/3+(int)x%(int)y=5.666667,运行结果:x+a*(int)(x-y)/5=6.500000(flo

10、at)(a+b)/3+(int)x(int)y=5.666667,9,9,3.3 格式输出printf函数,二、格式说明 1.格式字符,(1)与整型数据的格式输出有关的格式说明%d(%i)、%o、%X(%x)、%u,#includevoid main()int a=123;printf(%d,%o,%X,%x,%un,a,a,a,a,a);printf(%d%o%X%x%un,a,a,a,a,a);printf(%i,%o,%X,%x,%u,a,a,a,a,a);printf(%d%o%X%x%un,a,a,a,a,a);int b=-123;printf(%d,%o,%X,%x,%un,b,

11、b,b,b,b);,或%i:按十进制整型数据的实际长度输出,正数不输出符号“+”。%o:以八进制形式输出整型数据,输出的数值不带符号,符号位也一起作为八进制 数的一部分输出,输出的八进制整数不带前缀0。%x或%X:以十六进制数形式输出不带前缀0 x或0X的正整数。%u:以无符号十进制数形式输出整型数据.,运行结果:123,173,7B,7b,123123 173 7B 7b 123123,173,7B,7b,123123 173 7B 7b 123-123,37777777605,FFFFFF85,ffffff85,4294967173,10,10,3.3 格式输出printf函数,二、格式控

12、制1.格式字符,(2)与实型数据的格式输出有关的格式说明%f、%E(%e)、%G、%g,#includevoid main()float a=1234.56789;printf(%f,%E,%e,%G,%gn,a,a,a,a,a);double b=1234.56789;printf(%f,%E,%e,%G,%gn,b,b,b,b,b);,f:以小数形式输出实数(包括单、双精度数),不指定字段宽度,由系统自动指定字段宽度,使整数部分全部输出,并输出位小数。应当注意,在输出的数字中并非全部数字都是有效数字,单精度实数的有效位数一般为7-8位;双精度实数的有效位数一般为15-16位。%E或%e:以

13、指数形式输出实数(单,双精度数)。输出数据为标准指数形式,隐含精度为6,小数部分(尾数)的小数位数为3,即%e输出形式为-m.ddddddexxx,%E输出形式为-m.ddddddExxx,共占列宽度。%G或%e:根据数值的大小,自动选格式或格式,使得数据的输出宽度最小,且不输出无意义的零。%g对应输出的指数形式为-m.ddddddexxx,%G对应输出的指数形式为-m.ddddddExxx。格式用得较少。,运行结果:1234.567871,1.234568E+003,1.234568e+003,1234.57,1234.571234.567890,1.234568E+003,1.234568

14、e+003,1234.57,1234.57,11,11,3.3 格式输出printf函数,二、格式控制2.修饰符,12,12,3.3 格式输出printf函数,二、格式控制2.修饰符,(1)宽度说明:,在%和格式字符之间加入一个整数来指定输出数据的宽度。如果指定的宽度m大于数据实际的宽度,则输出数据的左端用空格补足;如果指定的宽度m小于数据实际的宽度,则按实际位数输出,这时指定的宽度不起作用。,为整型数据指定输出宽度md:输出宽度为m的十进制整型数据。mo:输出宽度为m的八进制整型数据。mx或%mX:输出宽度为m的十六进制整型数据。,#includemain()int a=1234567;pr

15、intf(%3d,%12dn,a,a);printf(%3o,%12on,a,a);printf(%3x,%12xn,a,a);,运行结果:1234567,12345674553207,455320712d687,12d687Press any key to continue-,13,13,3.3 格式输出printf函数,二、格式控制2.修饰符,(1)宽度说明,为实型数据指定输出宽度%m.nf:输出位的小数形式,包含1位小数点,其中有位小数位数。m.ne:输出位的指数形式,包含1位小数点,其中有位小数位数。注意:当数据的小数位数大于指定的宽度n时,截去右边多余的数,并对截去的第一位小数做四舍

16、五入处理;当数据的小数位数小于指定宽度n时,在小数的右边添0,使得输出数据的小数位数等于n。当数据的实际位数小于m时,则输出数据的左端用空格补足,使得输出数据的位数等于n;当数据的实际位数大于m时,则按实际位数输出数据,这时指定的宽度不起作用。%mf或%me:只指定宽度,小数位数按系统指定的形式输出。%.nf或%.ne:不指定宽度,只指定小数位的位数输出形式。,14,14,3.3 格式输出printf函数,(1)宽度说明,为实型数据指定输出宽度,#includevoid main()float a=1.23456789;printf(%fn%3.1fn%15.4fn%15.10fn,a,a,a

17、,a);double b=1.23456789;printf(%fn%3.1fn%15.4fn%15.10fn,b,b,b,b);double c=1.23456789987654321;printf(%fn%17fn%19.19fn%15.10fn,c,c,c,c);,运行结果:1.2345681.2 1.2346 1.23456788061.2345681.2 1.2346 1.23456789001.234568 1.2345681.2345678998765433000 1.2345678999,#includevoid main()float a=1234.5678;printf(%

18、fn%3fn%15fn,a,a,a);double b=1234.5678;printf(%fn%.3fn%.4fn%.7fn,b,b,b,b);,运行结果:1234.5677491234.567749 1234.5677491234.5678001234.5681234.56781234.5678000,15,15,3.3 格式输出printf函数,二、格式控制2.修饰符,(2)输出数据左对齐符号“-”,格式控制在指定输出数据的宽度后,如果指定的宽度m大于数据实际的宽度,则输出数据时自动右对齐,左端用空格补足,此时,也可以指定输出结果左对齐,方法是在宽度前加上“-”符号,使输出的数值向左端靠

19、,右端补空格。形式如下:,-md-mo-mx或%-mX%-mf%-m.nf%-me 或%-mfE%-m.ne 或%-m.nE,#includevoid main()float a=1234.5678;printf(%fn%3fn%-15fn,a,a,a);double b=1234.5678;printf(%fn%.3fn%.4fn%.7fn,b,b,b,b);,运行结果:1234.5677491234.5677491234.5677491234.5678001234.5681234.56781234.5678000,16,16,3.3 格式输出printf函数,二、格式控制2.修饰符,(3)

20、#:在八进制和十六进制数前显示先导(前缀)0、0 x、0X,#o:输出带先导0的八进制整型数据。#x:输出带先导0 x的十六进制整型数据。%#X:输出带先导0X的十六进制整型数据。,运行结果:1234567,1234567,1234567,123456704553207,04553207,04553207,045532070 x12d687,0 x12d687,0 x12d687,0 x12d687,#includemain()int a=1234567;printf(%-3d,%-12d,%#3d,%#12dn,a,a,a,a);printf(%-#3o,%-#12o,%#3o,%#12on

21、,a,a,a,a);printf(%-#3x,%-#12x,%#3x,%#12xn,a,a,a,a);,17,17,3.3 格式输出printf函数,二、格式控制2.修饰符,(4)h:在d,o,x,u前使用,指定输出精度为short型。,(5)l(L):在d,o,x,u前使用,指定输出精度为long型;在e,f,g前使用,指定输出精度为double型。,#includemain()int a=3456789;printf(%d,%#o,%#Xn,a,a,a);printf(%hd,%#ho,%#hXn,a,a,a);printf(%ld,%#lo,%#lXn,a,a,a);,#includem

22、ain()double b=-345.6789;printf(%f,%e,%gn,b,b,b);printf(%lf,%le,%lgn,b,b,b);,3456789,015137425,0X34BF15-16619,0137425,0XBF153456789,015137425,0X34BF15,运行结果:345.678900,3.456789e+002,345.679345.678900,3.456789e+002,345.679,18,18,3.3 格式输出printf函数,二、格式控制2.修饰符,(6)+:指定输出数据前显示符号(正号或负号),(7)0:输出数值时指定左边不使用的空位置

23、自动填0(零)。,#includemain()int a=9876,b=-9876;printf(%i,%in,a,b);printf(%+i,%+in,a,b);printf(%8i,%8in,a,b);printf(%+08i,%+08in,a,b);printf(%-+08i,%-+08in,a,b);,运行结果:9876,-9876+9876,-9876 9876,-9876+0009876,-0009876+9876,-9876,19,19,3.3 格式输出printf函数,三、使用函数时的注意事项,1.输出项从右向左计算后,按格式说明的顺序、类型和要求对应输出。格式说明和输出项的个

24、数、类型应相同,如不匹配系统不能正确输出.格式说明的个数少于输出项个数,多余的输出项将不输出;格式说明的个数多于输出项个数,多余的格式说明将输出随机的值。整型数据按%f 输出或者实型数据按%d 输出,均出现输出错误结果。2.格式字符除X(表示输出的十六进制数用大写字母输出)、E(表示输出的指数e用大写字母E输出)、G(表示若选用指数形式输出,则用大写字母E输出)外,必须是小写字母。如%d不能写成%D。3.实数精度(有效数字)由输出项类型控制(float6-7位double 15-16位),对float型输出项用%lf格式不能增加精度;增大“整数2”可增加实数输出的小数位数,但不能增加精度。,2

25、0,20,3.3 格式输出printf函数,三、使用printf函数时的注意事项,4.若想输出字符“%”,则在格式字符串中用连续两个%表示。如:printf(“%f%”,1.0/4);则输出:0.250000%5.printf(“%*d”,m,i);将按m指定的宽度输出i的值,而不是输出m的值。printf(“%*.*f”,m,n,i);将按m、n指定的宽度和精度输出i的值,而不是输出m、n的值。6.printf函数的返回值是本次调用输出字符的个数,包括回车等控制符。7.尽量不要在输出语句中改变变量的值,以免造成输出结果的不确定性。8.连续输出多个数据时,注意用逗号、空格、回车等区隔数据,避免

26、数据粘连,使输出结果不清晰。,21,21,3.4 格式输入scantf函数,三、使用printf函数时的注意事项,#includemain()float a=1.23456789;int x=12,y=3;printf(%fn,a);printf(%lfn,a);printf(%.16lfn,a);printf(%*.*fn,x,y,a);,运行结果:1.2345681.2345681.2345678806304932 1.235,22,说明:“变量地址列表”是由要接收数据的各变量地址组成。变量地址由地址运算符“&”后跟变量名组成,如&a,&b分别表示变量a和变量b的地址。若接收多个数据,则变

27、量地址之间用“,”分隔。并且地址列表与格式控制中的格式说明要相匹配。scanf函数格式控制的功能是规定输入数据的格式,与printf函数的格式控制相似。但是,scanf函数格式控制只可以包括格式说明和普通字符,一般不包含转义字符,而且通常仅有格式说明,其形式为%修饰符格式字符3.不提倡在scanf函数的格式控制中包含普通字符。,22,3.4 格式输入scanf函数,一、scanf函数的调用形式scanf(格式控制,变量地址列表)在scanf函数调用之后加上“,”,就构成了输出语句:scanf(“格式控制字符串”,变量地址列表);功能:通过输入设备(键盘)为变量赋值。即按照scanf格式控制指定

28、的输入格式,从键盘输入数据,存入变量地址列表中变量所对应的存储单元。,“格式控制字符串”,&变量1,&变量2,,&变量n,#includemain()int a,b,c;printf(请输入三个整数:);scanf(%d%d%d,23,说明:4.scanf函数中的格式说明与输入项必须一一对应。如果格式说明与输入项的类型不一一对应匹配,则不能正确输入,且编译时不会报错。如果格式说明个数少于输入项个数,scanf函数结束输入,多余的输入项无法得到正确的输入值;如果格式说明个数多于输入项个数,scanf函数也结束输入,多余的数据作废。5.从键盘输入的数据个数应该与scanf函数要求的个数相同,当二者

29、个数不同时系统做如下处理。如果输入数据少于scanf函数要求的个数时,函数将等待输入,直到满足要求或遇到非法字符为止。如果输入数据多于scanf函数要求的个数时,多余的数据将留在缓冲区作为下一次输入操作的数据。6.scanf函数有返回值,其值就是本次scanf函数调用正确输入的数据项的个数。,23,3.4 格式输入scanf函数,一、scanf函数的调用形式scanf(格式控制,变量地址列表),输入项1,输入项2,输入项n,&变量1,&变量2,,&变量n,24,24,3.4 格式输入scanf函数,二、格式说明,格式说明的一般形式为:%*宽度修饰符ml或h 格式字符说明:它是由“%”开头,以格

30、式字符结束的一串字符。2.%*宽度修饰符ml或h为可选项,中的字符为修饰符,分别是抑制修饰符*、宽度修饰符m、格式修饰符 l(L)或h、。,25,25,3.4 格式输入scanf函数,二、格式说明1.格式字符及其功能,26,26,3.4 格式输入scanf函数,二、格式说明 1.格式字符及其功能,(1)与整型数据的格式输入有关的格式说明%d、%i、%o、%x、%u,#includemain()int a,b,c,d,e;printf(请输入五个整数:);scanf(%d%i%o%x%u,运行过程1:请输入五个整数:11 22 33 44 55变量a,b,c,d,e的值分别为:11,22,033

31、,0 x44,55.变量a,b,c,d,e的值分别为:11,22,27,68,55.Press any key to continue,运行过程2:请输入五个整数:11 22 033 0 x44 55变量a,b,c,d,e的值分别为:11,22,033,0 x44,55.变量a,b,c,d,e的值分别为:11,22,27,68,55.Press any key to continue,注意:对scanf函数中的%o、%x格式说明,无论输入数据有无先导,都被默认为是八进制数、十六进制数。,27,27,3.4 格式输入scanf函数,(2)与实型数据的格式输出有关的格式说明%f、%e,#inclu

32、demain()float a,b;printf(请输入两个实数:n);scanf(%f%e,注意:对scanf函数中的%f、%e格式说明,无论输入数据是小数形式还是指数形式,均可被正确输入,这是由实型数据的存储形式决定的。,28,28,3.4 格式输入scanf函数,(3)宽度修饰符m:用于指定输入数据所占的宽度(列数),系统自动按m截取所需数据。但输入数据时不能规定精度,即不能指定小数位数的宽度。,#includemain()float a,b;printf(请输入两个实数:);scanf(%4f%3e,注意:对scanf函数中的宽度修饰符m,由于系统把输入的数据当做数据流处理,因此当连续

33、输入的数据不能满足输入项时,运行程序将等待输入,直到输入的数据满足要求为止。,29,29,3.4 格式输入scanf函数,二、格式控制1.格式字符,(4)(赋值)抑制修饰符*:表示读入该输入项,但是读入以后不赋予相应的变量,即跳过该输入值。“*”的作用通常在当有一批数据时,若不想要其中某些位置的数据,就可以用此方法跳过该部分的数据。,#includemain()float a,b;printf(请输入两个实数:);scanf(%*2f%4f%3e,(5)长度修饰符 l(L)和 h:l(L)加在d、o、x、u前,用于输入长整型数据,加在f、e前用于输入double型数据;h加在d、o、x前,用于

34、输入短整型数据.VC6.0环境下,输入短整型(short int),格式控制必须用%hd;输入双精度(double),格式控制必须用%lf或%le。否则,数据不能正确输入。,30,30,3.4 格式输入scanf函数,三、使用scanf函数从键盘输入数据时如何分隔数据.,1.当scanf函数中只有格式说明没有其他的普通字符时,输入的数据之间可以用空格、回车键、跳格键Tab(制表符)等间隔符隔开,间隔符数量不限。即使在格式说明中指定了输入宽度,也同样可以用此方法输入。,2.当scanf函数中除了格式说明还有其他的普通字符(通配符)时,那么在给变量输入值时,必须在输入数据的对应位置把这些通配符一摸

35、一样、一字不漏的敲进去。否则,不能正确读入数据。因此,scanf函数调用尽量不用通配符,只要有格式说明。,注意:在输入数据时,每行数据在按下回车键(enter键)之前,可以任意修改,按下回车键后,就不能再修改。,四、使用scanf函数从键盘输入数据时如何判断数据已经结束,输入数据时,遇以下情况认为该数据输入结束:按指定的宽度结束;遇空格,或“回车”键,或“Tab”键;遇非法输入。,#includemain()int a,b;printf(请输入两个数:);scanf(%4d%3d,注:因为接受的是整型数据,当遇到”.”时,就认为遇到了非法输入,所以只能把d点(.)之前的数据赋给变量b。,31,

36、3.5 顺序结构举例,教材例3.1 程序如下:#includemain()int x,y,t;/*定义变量*/printf(Enter x/*输出x、y的数值,验证交换是否正确*/,顺序结构的程序特点:(1)程序是按照所编写的语句顺序执行的。(2)程序中的每一条语句有且仅有一次被执行。,运行过程1:Enter x&y:1234x=12 y=34x=34 y=12Press any key to continue,(1)定义变量x、y,键盘输入两个变量x,y的值(2)输出x和y的值(3)交换x和y的值:借助另一变量t,实现两变量值互换t=x;/*将x之值赋值给t*/x=y;/*将y之值赋值给x*

37、/y=t;/*将t之值赋值给by*/(4)再输出x和y,32,3.5 顺序结构举例,课堂练习:习题3.19。流程图如下:,分析问题中需要变量x、y、z,定义double型变量x、y、z。用scanf函数为变量x、y、z赋值。,计算x、y、z的平均值,将其存在变量t,须先定义double型变量t。对变量t小数点后的第二位数进行四舍五入。,习题3.19参考代码:#includemain()double x,y,z,t;printf(请输入三个实数x、y、z:);scanf(%lf%lf%lf,运行过程:请输入三个实数x、y、z:45.67 7.412 33.698(x+y+z)/3=28.9000

38、00Press any key to continue,用printf函数输出t的值。,顺序结构程序设计的一般步骤:分析问题中有哪些变量及其数据类型,然后按C语法定义该变量。对已知变量赋值。根据问题处理已知变量和未知变量,写出相应的C语句。输出处理结果。,33,33,作业:,本章学习了顺序结构的基本组成和执行原理、数据的格式输出和格式输入、简单顺序结构程序的设计。1.要求同学们复习了解C语句的分类及其构成,熟记并掌握printf函数和scanf函数的格式和使用,弄清格式控制字符串的含义、格式控制字符串中不同字符的作用、输入输出项列表的含义,能模仿进行简单顺序结构程序的设计。2.完成教材习题3.1-3.20。3.思考:格式输入函数和格式输出函数在功能和使用场合上有哪些异同。,33,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号