版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程实验报告课程名称: C语言程序设计实验 专业班级: 计算机1709班学号: U201714759姓爸 指导教师:甘早斌 报告日期; 2018/1/1()计算机科学与技术学院
目录1表达式和标准输入输出实验.实验目的 实验内容 实验小结 流程控制实验 实验目的 实验内容 实验小结 函数与程序结构实验 实验目的 实验内容 实验小结 编译预处理实验 实验目的 实验内容 实验小结 数组实验 实验目的 实验内容 实验小结 指针实验 实验目的 实验内容 实验小结 结构与联合实验 实验目的 实验内容 实验小结 文件实验 实验目的 实验内容 实验小结 2 2 2 2 11J错误!未定义书签。错误!未定义书签。2…错误!未定义书签。2 25 26 26 26 37 38 38 38 46 47 47 47 60 61.6错误!未定义书签。.6错误!未定义书签。 77错误!未定义书签。8 78 7811错误!未定义书签。 112,错误!未定义书签。12.错误!未定义书签。12.错误!未定义书签。17 1181表达式和标准输入与输出实验实验目的(1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。(2)掌握getchar,putchar,scanf和printf函数的用法。(3)掌握简单C程序(顺序结构程序)的编写方法。实验内容源程序改错下面给出了一个简单C语言程序例程,用来完成以下工作:(1)输入华氏温度f,将它转换成摄氏温度c后输出;(2)输入圆的半径值r,计算并输出圆的面积s;(3)输入短整数k、p,将k的高字节作为结果的低字节,p的高字节作为结果的高字节,拼成一个新的整数,然后输出;在这个例子程序中存在若干语法和逻辑错误。要求参照1.3和1.4的步骤对下面程序进行调试修改,使之能够正确完成指定任务。#include<stdio.h>#definePI3.14159;voidmain(void)4(intf;shortp,k;doublec,r,s;/*fortask1*/printf(力nputFahrenheit:^^);scanfi^%d,\f);c=5/9*(f-32);printf("\n%d(F)=%.2f(C)\n\n”,f,c);/*fortask2*/printf("inputtheradiusr:");scanf("%f,&r);s=PI*r*r;printf("\nTheacreageis%.2f\n\n",&s);/*fortask3*/printf("inputhexintk,pscanf("%x%x",&k,&p);21newint=(p&0xff00)|(k&0xff00)«8;22printf("newint=%x\n\n",newint);}解答:(1)错误修改:1)第2行的符号常量定义后不能有分号,正确形式为:#definePI3.141592)第3行的voidmain(void)的返回类型和函数名应分开,正确形式为:intmain(void)3)第10行的scanf("%d",f);在输入内容时指向地址应使用&,正确形式为:scanf("%d",&f);4)第11行的c=5/9*(f-32);由于f是int型,在运算时右侧表达式会被截去小数部分,正确形式为:c=5.0/9*(f-32);5)第12行的printf("\n%d(F)=%.2f(C)\n\n”,f,c);由于c是双精度浮点型变量应使用占位符%If,正确形式为:printf("\n%d(F)=%.21f(C)\n\n",f,c);6)第15行的scanf("%f,&r);由于r是双精度浮点型变量应使用占位符%If,正确形式为:scanf("%lf,&r);7)第17行的printf("\nTheacreageis%.2f\n\n",&s);变量s为长浮点型,且输出不需要取址符,正确形式为:printf(M\nTheacreageis%.21f\n\nu,s);8)第21行newint变量未声明,且数学表达式错误,正确形式为:shortnewint;newint=(p&0xff00)|((k&0xff00)»8);9)第20行、第22行的变量为短整型,%x应为%hx,正确形式为:20scanf("%hx%hx",&k,&p);22printf("newint=%hx\n\n",newint);(2)错误修改后运行结果:■•C:\Users\ML\Desktop\Myfiles\EX001\bin\Debug\EX001.exe"InputFahrenheit:8080(F)=26.67(C)inputtheradiusr:1Theacreageis3.14inputhexintk,p:200200newint=202Processreturned0(0x0)executiontime:7.647sPressanykeytocontinue.源程序修改替换下面的程序利用常用的中间变量法实现两数交换,请改用不使用第3个变量的方法实现。该程序中t是中间变量,要求将定义语句中的t删除,修改下划线处的语句,使之实现两数对调的操作。#include<stdio.h>voidmain()(inta,b,t;printf^Inputtwointegers:");scanf("%d%d,,,&a,&b);t=a;a=b;b=t;prinfi[tt\na=%d,b=%d,,,a,b);)解答:替换后的程序如下所示:#include<stdio.h>voidmain()(inta,b;printf^Inputtwointegers:^^);scanf「%d%d”,&a,&b);a=a+b;b=a-b;a=a・b;printfC\na=%d,b=%d,,,a,b);Inputtwointegers:46a=6,b=4程序设计(1)编写一个程序,输入字符C,如果C是大写字母,则将C转换成对应的小写,否则C的值不变,最后输出C。
解答:1)算法流程如图1」所示。输入字符c=c-('A'-'a')输出字符C结束输入字符c=c-('A'-'a')输出字符C结束测试用例程序输入理论结果运行结果用例1Eee用例2eee用例31112)程序清单#include<stdio.h>intmain()(intc;printf("输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:");c=getchar();〃通过getchar。来获得字符对应的ASCII码if(c<='Z'&&c>='A')〃判断字符c是否为大写字母c=c-('A'-'a');〃将大写字母变为小写printf("处理结果是:%c",c);return0;}3)测试(a)测试数据:表1-1编程题1的测试数据测试用例程序输入理论值运行结果用例1Bbb用例2bbb用例3111(b)用例1的运行结果如图1.2所示输入芋符,如果它是大写了母,则将它转换成对应的小叮,否则原样输出:B见理结臬是:b图1.2用例2的运行结果如图1.2所示而入:件,如果它是大写;吐则珞它转换成对应的小瓦否则原样输出:bI处理结果是:b图1.3用例3的运行结果如图1.2所示输入字符,如果它是大写字母,则将它转换成对应的小写,否则原样输出:1处理结果是:1图1.4运行结果与理论分析结果一致,验证了程序的正确性。(2)编写一个程序,输入无符号短整数x,m,n(0<m<15,1<n<16-m),取出x从第m位开始向左的n位(m从右至左编号为0〜15),并使其向左端(第15位)靠齐。1)解题思路:A.输入x,m,nB.如果输入合理,转a,否则转Ca准备使用位运算,先准备逻辑尺b为利用按位与计算,将非预变换位变为0c使用生成的逻辑尺与预变换数进行按位与运算,达到取出所需部分的目的d将取出的部分向左靠齐e输出结果C.提示输入错误D.结束2)程序清单#include<stdio.h>intmain()(unsignedshortx,m,n,i;printf("输入x(10进制)、m(0~15)和n(l-16-m):");scanf("%hu%hu%hu",&x,&m,&n);if(m>=0&&m<=15&&n>=1&&n<=16-m)〃判断输入是否合理(i=Oxffff; 〃准备位运算所需逻辑尺i»=m; 〃确定变换起始位置i«=16-n; 〃确定变换作用长度i»=16-m-n; 〃进入变换位置x&=i;x«=16-m-n;〃左移printf("经过变换得到:%hu",x);1elseprintf("输入错误,请检查您的输入");〃提示输入不合理return0;}3)测试(a)测试数据:测试写字勒入理论绻累运与果XmN国例10000000000011001(25)32rkXiSMllOO000000000000K491524915均例21101010110000011:54«59)161帔入婚央检查寄月列31101010110000011(54«59)135帧入槽乖(nfl€r53)(b)对应测试测试用例1的运行结果如图2-2所示。|输入x(10进制)、m(0~15)和n :2532经过变换得到:49152图2-2编程题2的测试用例一的运行结果对应测试测试用例2的运行结果如图2-3所示。输入x(10进制)、m(015)和n(116-m):54659161输入错误,请检查您的输入图2-3编程题2的测试用例二的运行结果对应测试测试用例3的运行结果如图2-4所示。输入x(10进制)、m(0'15)和n :54659135输入错误,请检杳您的输入图2-4编程题2的测试用例三的运行结果运行结果与理论分析结果一致,验证了程序的正确性。(3)IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。解答:1)解题思路:A.输入变为整型数的IPB为4个byte准备4个逻辑尺C.用这4个逻辑尺分别取出各byte中二进制数D将二进制数统一移到最低八位E按要求的格式与顺序输出ip地址2)程序清单#include<stdio.h>intmain()(unsignedlongintip,ml,m2,m3,m4,pl,p2,p3,p4;printf("输入IP地址:");scanf("%lu",&ip);ml=OxffOOOOOO;//各分段逻辑尺m2=OxOOffOOOO;//各分段逻辑尺m3=OxOOOOffOO;〃各分段逻辑尺m4=OxOOOOOOff;//各分段逻辑尺pl=(ip&ml)»24;//取出各部分二进制数p2=(ip&m2)»16;〃取出各部分二进制数p3=(ip&m3)»8;//取出各部分二进制数p4=(ip&m4);〃取出各部分二进制数printf("这个IP地址常规形式为:%lu.%lu.%lu.%lu",p4,p3,p2,pl);//按要求格式输出return0;)3)测试(a)测试数据:测试用例程序输入理论结果运行结果用127.184.245.127.184.2用例212345678921.205.91.721.205.91.7用例378965432149.43.17.4749.43.17.47(b)对应测试测试用例1的运行结果如图3-2所示。输入IP地址:45645613这个IP地址常规形式为:45.127.184.2图3-2编程题3的测试用例一的运行结果对应测试测试用例2的运行结果如图1-3所示|输入IP地址:123456789这个IP地址常规形式为:21.205.91.7图3-3编程题3的测试用例二的运行结果对应测试测试用例3的运行结果如图3-4所示|输入IP地址:789654321这个IP地址常规形式为:49.43.17.47图3-4编程题3的测试用例三的运行结果运行结果与理论分析结果一致,验证了程序的正确性实验小结(1)对基本集成开发环境的运用更加熟练;(2)体会到写程序前先理清思路的重要性;(3)体会到了判断输入值对程序的重要性;(4)掌握了书写实验报告的基本方法。实验2流程控制实验实验目的(1)掌握if-else,do-while,switch-case等流程控制语句之用法。(2)能正确理解各流程控制语句所包含的逻辑关系。(3)能正确理解各流程控制语句之间不同,并用这些不同优化自己的程序。(4)能用流程控制语句编写简单的C语言程序。实验内容及要求源程序改错下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。例如,8!=40320。#include<stdio.h>intmain(void)3{inti,n,s=l;printf(nPleaseentern:H);scanf(H%dn,n);for(i=l,i<=n,i++)s=s*i;printf(H%d!=%d\n,s);)return;解答:(1)错误修改:1)第6行的scanf在输入时应指向单元地址而非单元名称,正确形式为:scanf("%d",&n);2)第7行的for语句表达式之间应用;分隔,正确形式为:for(i=l;i<=n;i++)3)第10行的return0;和第11行的}位置错误,大括号应该在整段代码的末尾,正确形式为:return0;)(2)错误修改后运行结果:见图2-1Pleaseentern:88!=40320图2-1修改后的运行结果源程序修改替换(1)修改第1题,分别用while和do-while语句替换for语句。解答:在使用while语句时,将for语句中赋i初值的语句放到while循环之前,每次改变i的值的语句放在循环的最后一条语句即可,而在其他的地方,则与经for语句的处理基本一致,替换后的程序如下所示:#include<stdio.h>intmain(void)(inti=l,n,s=l;printf("Pleaseentern:");scanf("%d",&n);while(i<=n){s=s*i;i++;)printf("%d!=%d",n,s);return0;运行结果见图2-2Pleaseentern:88!=40320图2-2while结构下的运行结果在使用do-while语句时,其与while语句的差异特别体现在无论n的值为何值,其都会进行一次循环,但值得注意的是,这一次额外的循环(发生于输入n=0时)在i的初值为1时,并不会改变s的值,从而并不需要进行额外的处理,调换循环体与条件的位置即可,替换后的程序如下所示:#include<stdio.h>intmain(void)(inti=l,n,s=l;printf("Pleaseentern:");scanf("%d",&n);do{s=s*i;i++;)while(i<=n);printf("%d!=%d",n,s);return0;1运行结果见图2-3Pleaseentern:88!=40320图2-3do-while结构的运行结果(2)修改第1题,要求输入改为“整数s",输出改为“满足n!Ns的最小整数nH0例如,输入整数为40310,输出结果为n=8。解答:这个问题,从本质上来说,是要找到一个数,使它的阶乘的值大于等于所输入的n的值,且要求这个数的值最小。阶乘的实现,可借助之前编写的程序,只需修改一下输入和输出,及增加一个输出条件。程序如下所示:#include<stdio.h>intmain(){intj,n=O,s,m=l;printf("Pleaseenters:n);scanf(n%dn,&s);for(j=l;;j++)m=m*j;n++;if(m>=s){printf("n=%d",n);break;}}return0;)运行结果见图2-4Pleaseenters:40320n=8图2-4第2题程序的运行结果程序设计(1)假设工资税金按以下方法计算:x<1000元,不收取税金;1000Wx<2000,收取5%的税金;2000WxV3000,收取10%的税金;3000Wx<4000,收取15%的税金;4000WxV5000,收取20%的税金;x>5000,收取25%的税金。编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现解答:在if-else结构下,对x的区间划分比较显然,但由于switch语句只能选择整数,结合x的分段区间宽度均为1(X)0,于是将x除以1000后再强制转换类型为int类型在进入各个case语句进行运算,流程图如下:
结束程序如下所示:(if)#include<stdio.h>floattax(floatx);intmain(void)(floatx;printf("Pleaseinputyoursalary:'*);scanf(n%f\&x);printf("Youshouldpay%fyuan.\nn,tax(x));return0;)floattax(floatx)floatn;if(x<1000&&x>0)n=0;elseif(x<2000)n=0.05;elseif(x<3000)n=0.1;elseif(x<4000)n=0.15;elseif(x<5000)n=0.2;elsen=0.25;returnn*x;}(switch)#include<stdio.h>floattax(floatx)(floata;switch((int)(x/1000)){case0:a=0;break;casel:a=0.05;break;case2:a=0.1;break;case3:a=0.15;break;case4:a=0.2;break;default:a=0.25;returna*x;}}intmain(void)floatx;
printf(nPleaseinputyoursalary:");scanf(n%f;&x);printf(MYoushouldpay%fyuan.\nn,tax(x));return0;程序运行结果:Pleaseinputyoursalary:1000Youshouldpay50.000000yuan.程序运行结果:Pleaseinputyoursalary:2000Youshouldpay200.000000yuan.Pleaseinputyoursalary:3000Youshouldpay450.000000yuan.Pleaseinputyoursalary:4000Youshouldpay800.000000yuan.Pleaseinputyoursalary:5000Youshouldpay1250.000000yuan.Pleaseinputyoursalary:6000Youshouldpay1500.000000yuan.图2-5编程题1的测试用例一的运行结果(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。解答:使用状态机通过判断空格的个数选择不同状态,从而实现消去空格的作用。流程图如下:#include<stdio.h>enum{COPY,START,SPACE};intmain()(charc;intstate=COPY;printff'Pleaseinputachar:\nH);while((c=getchar())!-\n*){switch(state){caseCOPY:if(c=**)state=START;elseputchar(c);break;caseSTART:putchar,');if(c=f,)state=SPACE;else{state=COPY;putchar(c);}break;caseSPACE:if(c!=''){state=COPY;putchar(c);}elsestate=SPACE;break;)]return0;程序运行结果如下:Pleaseinputachar:Ilove youIloveyou!图2-6编程题2的测试用例的运行结果(3)编写一个程序,打印如下的杨辉三角形。1 /*第0行*/TOC\o"1-5"\h\z1 1 /*第 1行 */1 2 1 /*第 2行 */3 16 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 2856 70 56 28 8 11 9 36 84 126126 84 36 9 1每个数据值可以由组合c/计算(表示第i行第j列位置的值),而的计算如下:c;=l (i=0,l,2,…)C/=C/-'*(i-j+l)/j(j=0,l,2,3,-,i)说明:本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是3个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分。解答:首先,应该用一个循环控制每一行的输出,而每一行中应该分为空格的输出和数字的输出,空格的输出根据规律应该为每行输出2*(总行数-当前行数)个空格,而数字的输出则按照给定的公式循环输出即可。故一共两个内循环分别控制每行数字前的空格输出和数字输出,还有一个外循环控制每一行。程序如下:#include<stdio.h>#definen10intmain(void)(inti,j,k,c,m;fbr(i=0;i<n;i++)(for(m=0;m<n-i;m++){printf("");)for(j=0;j<=i;j++){if(j==O)c=l;elsec=c*(i+l-j)/j;printf("%4d",c);)printf("\n");)return0;}程序运行结果如下:111TOC\o"1-5"\h\z1 2 113 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1图2-7编程题3的运行结果(4)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321o解答:利用同余除法的特性,求出输入数据除以十的余数并将其输出,而后将输入的数字除以十,由于输入是int型,从而除以十的结果等效于消除了最后一位数字,再求出新的数字除以10的余数,如此循环下去,便可输出被逆转的整数,考虑到循环的逻辑简明,故采用while语句。流程图如下:程序如下:#include<stdio.h>intmain(void)(longn,m;printf("Pleaseintputanintegern(n>0):");scanf(n%ldn,&n);printf(nThenewintegeris:");while(n>0)m=n%10;printf("%ld",m);n=n/10;}return0;)程序运行结果如下:Pleaseintputanintegern(n>0):1234Thenewintegeris:4321图2-8编程题4的运行结果2.2.4选做题编写一个程序,用牛顿迭代法求方程"幻=3--4--5丫+13=°满足精度e=l(?6的一个近似根,并在屏幕上输出所求近似根。牛顿迭代法求方程近似根的迭代公式为:x0=aV,Xk+\=Xk~f(Xk)//(工人)其中,/'(x)是函数f(x)的导函数。牛顿迭代法首先任意设定的一个实数a来作为近似根的迭代初值xo,然后用迭代公式计算下一个近似根Xlo如此继续迭代计算X2,X3,…,Xn,直到叱―度e,此时值Xn即为所求的近似根。解答:首先,定义两个函数分别用来计算函数f(X)和f,(X)的值,定义一个循环,考虑到先执行再判断精度是否达到要求,用do…while循环,先按照题目所给公式执行再判断,当精度达到要求即跳出循环。需要注意的是,需用另一个变量记录Xk的值,因为每次经过计算后Xk+1的值会覆盖Xk的值。程序如下:#include<stdio.h>#defineE0.000001doubleR)(doublex)(return3*x*x*x-4*x*x-5*x+13;)doublefl(doublex)(return9*x*x-8*x-5;)intmain(void)(doublex,y;scanf("%lf',&x);do{y=x;x=x-f0(x)/fl(x);}while((x-y)>E||(x-y)<(-E));printf("%lf',x);return0;)程序运行结果如下:3-1.548910图2-9选做题的的运行结果2.3实验小结(1)掌握了流程控制语句的基本用法。(2)实践中运用调试功能找出了程序的低级错误,明白了学会调试的重要性。(3)初步理解了在编程时利用各程序语句的特点优化程序的重要性与必要性。(4)在平时写程序时就应该思考对于一个问题有没有多种解决方案,使用不同的逻辑结构多种尝试寻求最优解。3函数与程序结构实验实验目的(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。(2)熟悉和掌握不同存储类型变量的使用。(3)熟悉多文件编译技术。实验内容源程序改错题下面是计算s=l!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。#includenstdio.hHvoidmain(void)3(4 intk;5 for(k=l;k<6;k++)6 printf("k=%d\tthesumis%ld\n,,,k,sum_fac(k));7}8longsum_fac(intn)9{longs=0;inti;longfac;for(i=l;i<=n;i++)fac*=i;s+=fac;returns;17}解答:(1)缺少对函数的声明,应该在第1行与第2行之间加上如下代码:longsum_fac(intn);(2)第7行前少了一个return。;语句,在第6行与第7行之间加上:return0;(3)第14、15行两条语句应该都包括在for循环内,正确形式为:14 {fac*=i;15s+=fac;}修改后程序运行结果:TOC\o"1-5"\h\zk=l the sum is 1卜=2 the sum is 3k=3 the sum is 9k=4 the sum is 33k=5 the sum is 153源程序修改替换题(1)修改第1题中sum_fac函数,使其计算量最小。解答:利用static变量类型对循环进行化简,保留上一个值,避免多次重复循环。流程图如下:开始结束程序代码如下:#include<stdio.h>longsum_fac(intn);intmain(){intk;for(k=l;k<6;k++)printf(Hk=%d\tthesumis%ld\nn,k,sum_fac(k));return0;)staticlongs=0,fac=l;longsum_fac(intn)(fac*=n;s+=fac;returns;)程序运行结果如下:TOC\o"1-5"\h\zk=l the sum is 1k=2 the sum is 3k=3 the sum is 9k=4 the sum is 33k=5 the sum is 153(2)修改第1题中sum_fac函数,计算s=1+,+,+…+'。2!3! 〃!相比较于源程序,变动之处在于求的是阶乘的倒数和,则在循环中多一步求倒数的过程,并对倒数求和。需要注意的是函数的类型应改变为float,变量s也需要改成float类型,还需再声明一个额外的float型变量i用来存放1/fac的值。流程图如下:开始k=l,s=O,fac=l,i=lK<=6?fe£*=k;i=l/fec;S+=i;输出s结束程序代码如下:#include<stdio.h>longsum_fac();intmain()intk;for(k=l;k<6;k++)printf(nk=%d\tthesumis%ld\nu,k,sum_fac(k));return0;staticlongs=0,fac=l;longsum_fac(intn)fac*=n;s+=fac;returns;程序运行结果如下:
k=lthesumis1.000000k=2thesumis1.500000k=3thesumis1.666667k=4thesumis1.708333k=5thesumis1.716667跟踪调试题下面是计算fabonacci数列前n项和的源程序,现要求单步执行该程序,观察p,i,sum,n值,即:(1)刚执行完scanf("%d",&k);语句,p,i值是多少?(2)从fabonacci函数返回后光条停留在哪个语句上?(3)进入fabonacci函数时,watch窗口显示的是什么?(4)当i=3时,从调用fabonacci函数到返回,n值如何变化?解答:回i=0abonacci⑴;©p=(long*abonacci⑴;>Ti=2p=(long")0x62fe38k=5n=2(4)n=3->n=2->n=l->n=3源程序voidmain(void)(inti,k;longsum=0,*p=∑scanf(n%dn,&k);for(i=l;i<=k;i++){sum+=fabonacci(i);printf(ni=%d\tthesumis%ld\nn,i,*p);}longfabonacci(intn)(if(n==l||n==2)return1;elsereturnfabonacci(n-1)+fabonacci(n-2);)其中,longsum=0,*p=∑声明p为长整型指针并用&sum取出sum的地址对p初始化。*p表示引用p所指的变量(*p即sum)。编程设计题(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。同时以单步方式执行该程序,观察递归过程。解答:(1)用辗转相除法求最大公约数,程序框图如下:开始取两个数中的较大数除以较小数得到钠若余数不为零,去余数和被除数,重复上一步操作余数为零后,取被除数,即为最大公约数结束程序代码如下:#include<stdio.h>intGCD(intm,intn);intmain(void)(intm,n;printf("Pleaseinputtwointegers:\nn);scanf(n%d%dM,&m,&n);printf(nTheGCDis%dM,GCD(m,n));return0;)intGCD(intm,intn)(if(m<n){intt;t=m;m=n;n=t;}if(m%n==0)returnn;else{intr;r=m%n;m=n;n=r;returnGCD(m,n);?)程序运行结果如下:IPleaseinputtwointegers:68[TheGCDis2Pleaseinputtwointegers:42TheGCDis2(2)编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。解答:首先编写一个函数用来判断一个数n是否为质数(可用从2到根号n的每个整数去除n,判断是否有余数),如果是质数,则返回1,不是则返回0.在主函数里再接受x的输入,首先判断x是否为偶数,不是偶数则直接结束程序;是偶数,再判断i和x-i是否都是质数,若都是则符合要求,输出。i从1开始一直循环至x/2.程序框图如下如下:代码如下:#include<stdio.h>intprime(intn)(inti;for(i=2;i*i<=n;i++)if(n%i==O)return0;return1;)intmain(void)intx,i;scanf(n%dn,&x);if(x%2==0){for(i=2;i<=x/2;i++){if(prime(i)&&prime(x-i))printf(n%d=%d+%d\nn,x,i,x-i);))return0;)程序运行结果如下:^050=3+4750=7+4350=13+3750=19+31(3)编写一个程序,证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。例如,如果BEGIN为10,END为20,程序的输出应为:GOLDBACH'SCONJECTURE:Everyevennumbern>=4isthesumoftwoprimes.10=3+712=5+720=3+17解答:思路:本题可借助上题的大部分程序,只需去掉上题中的输入部分,换成一个循环,将上题由输入获取的X用作控制循环的变量,X从BEGIN的值循环到END的值。需要注意的是,因为需要验证的是偶数,因此循环条件中应该为x=x+2而不是x++.程序代码如下:#include<stdio.h>#defineBEGIN10#defineEND20intprime(intn)(inti;for(i=2;i*i<=n;i++)if(n%i==0)return0;return1;)intmain(void)(intx,i;printfC'GOLDBACH'SCONJECTUREAnEveryevennumbern>=4isthesumoftwoprimes.0);for(x=BEGIN;x<=END;x=x+2)(fbr(i=2;i<=x/2;i++){if(prime(i)&&prime(x-i))printf(,,%d=%d+%d\n,,,x,i,x-i);)return0;选做题假设一个C程序由filel.c和file2.c两个源文件及一个file.h头文件组成,filel.c>file2.c和file.h的内容分别如下所述。试编辑该多文件C程序,并编译和链接。然后运行生成的可执行文件。源文件filel.c的内容为:include"file.h"intx,y; /*外部变量的定义性说明*/charch; /*外部变量的定义性说明*/intmain(void)(x=10;y=20;ch=getchar();printf(Minfilelx=%d,y=%d,chis%c\nM,x,y,ch);funcl();return0;}源文件file2.c的内容为:#include"file.h"voidfund(void)(x++;y++;ch++;printf(uinfile2x=%d,y=%d,chis%c\nM,x,y,ch);)头文件file.h的内容为:#include<stdio.h>externintx,y;/*外部变量的引用性说明*/
externcharch;/*外部变量的引用性说明*/voidfund(void);/*funcl函数原型*/建立工程的截图:QWorkspace金,第三次实验&&Sources,」file2.c&Headers
L-口file.h运行结果:infilelx=10,y=20,chisainfile2x=ll,y=21,chisb运行结果:3.3实验小结(1)学会更加熟练地调试,如何逐语句调试,如何进入进入函数内部单步调试;(2)了解了更多的常规经典算法如何简洁地用C语言写出来,如判断是否为质数、辗转相除法等;(3)学会了建立工程。实验4编译预处理实验4.1实验目的(1)掌握文件包含、宏定义、条件编译、assert宏的使用;(2)练习带参数的宏定义、条件编译的使用;(3)练习assert宏的使用;(4)使用TurboC2.0集成开发环境中的调试功能:单步执行、设置断点、观察变量值。4.2实验题目及要求4.2.1源程序改错题下面是用宏来计算平方差、交换两数的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。#include"stdio.h"#defineSUMa+b#defineDIFa-b#defineSWAP(a,b)a=b,b=avoidmain6{intb,t;printf("Inputtwointegersa,b:");scanf("%d,%d",&a,&b);printf("\nSUM=%d\nthedifferencebetweensquareofaandsquareofbis:%d”,SUM,SUM*DIF);SWAP(a,b);Printf("\nNowa=%d,b=%d\n",a,b);)解答:(1)第2、3行,由于宏定义是简单的字符替换,不知道替换后的表达式具体怎样,不知道有哪些可能的运算符,就不知道运算的优先级,因此宏定义的变量和表达式需要加上括号。正确形式为:#defineSUM((a)+(b))#defineDIF((a)-(b))(2)第4行,宏定义sw叩不合逻辑,无法达到交换a和b值的目的,且还需增加一个参数t正确形式为:#defineSWAP(a,b,t)t=b,b=a,a=t(3)第7行,变量a未声明。正确形式为:inta,b,t;(4)第9行,scanf语句中两个输入的数间不需要符号。正确形式为:scanf("%d%d",&a,&b);(5)第11行,由于宏定义SWAP增加了一个参数,需相应增加一个参数,正确形式为:SWAP(a,b,t);修改后的程序运行结果如图:Inputtwointegersa,b:45SUM=9Thedifferencebetweensquareofaandsquareofbis:-9Nowa=5,b=4源程序修改替换题下面是用函数实现求三个数中最大数、计算两数之和的程序,在这个源程序中存在若干语法和逻辑错误。要求:(1)对这个例子程序进行调试修改,使之能够正确完成指定任务;(2)用带参数的宏替换函数max,来实现求最大数的功能。voidmain(void)(inta,b,c;floatd,e;printf("Enterthreeintegers:");scanf(n%d,%d,%dM,&a,&b,&c);printf(n\nthemaximumofthemis%d\nf,,max(a,b,c));printf(nEntertwofloatingpointnumbers:0);scanf(n%f,%f,,&d,&e);printf(u\nthesumofthemis%f\n",sum(d,e));}intmax(intx,inty,intz)(intt;if(x>y)t=x;elset=y;if(t<z)t=z;returnt;)floatsum(floatx,floaty)(returnx+y;}(1)解答:(1)没有文件头,应在第一行加上#include〈stdio.h>max、float函数均未声明,应在main主函数前加上如下两行:intmax(intx,inty,intz);floatsum(floatx,floaty);scanf语句中输入的数之间不需要符号修改后的代码如下:#include<stdio.h>intmax(intx,inty,intz);floatsum(floatx,floaty);intmain(void)(inta,b,c;floatd,e;printf("Enterthreeintegers:*');scanf(,,%d%d%du,&a,&b,&c);printf("\nthemaximumofthemis%d\n,^,max(a,b,c));printf("Entertwofloatingpointnumbers:");scanf(M%f%f,&d,&e);printf(n\nthesumofthemis%f\nn,sum(d,e));return0;)intmax(intx,inty,intz)(intt;if(x>y)t=x;elset=y;if(t<z)t=z;returnt;)floatsum(floatx,floaty)(returnx+y;运行结果如图:Enterthreeintegers:345themaximumofthemis5Entertwofloatingpointnumbers:1.23.2thesumofthemis4.400000(2)解答:解题思路:可将函数max用带参数的宏定义表示,利用语句“?」表示if选择语句。代码如下:#include<stdio.h>#definemax(x,y,z)(((x)>(y)?(x):(y))>(z))?((x)>(y)?(x):(y)):(z)floatsum(floatx,floaty);intmain(void)(inta,b,c;floatd,e;printf("Enterthreeintegers:*');scanf(n%d%d%d';&a,&b,&c);printf("\nthemaximumofthemis%d\nu,max(a,b,c));printf("Entertwofloatingpointnumbers:'*);scanf("%f%口&d,&e);printf(n\nthesumofthemis%f\nn,sum(d,e));return0;}floatsum(floatx,floaty)(returnx+y;运行结果如图:Enterthreeintegers:456themaximumofthemis6Entertwofloatingpointnumbers:1.56.4thesumofthemis7.900000跟踪调试题下面程序利用R计算圆的面积s,以及面积s的整数部分。现要求:(1)修改程序,使程序编译通过且能运行;(2)单步执行。进入函数decimal_fraction时watch窗口中x为何值?在返回main时,watch窗口中i为何值?(3)排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信Massertionfailedo#defineRvoidmain(void)(floatr,s;ints_integer=O;printf("inputanumber:");scanf(n%f;&r);#ifdefRs=3.14159*r*r;printf(nareaofroundis:%f\n",s);s_integer=integer_fraction(s);printf(ntheintegerfractionofareais%d\nM,s_integer);assert((s-s_integer)<1.0);#endif}intinteger_fraction(floatx)inti=x;returni;)解答:(1)改错L原程序没有标准输入输出头文件,由于程序中还调用了assert宏,还需要加上包含assert宏的文件头。2.函数integer_fraction未声明。(2)回x=3.141590120i=34.2.4编程设计题(1)三角形的面积是〃ea=Js(s-a)(s-A)(s-c),其中s=(a+〃+c)/2,a,b,c为三角形的三边,定义两个带参数的宏,一个用来求s,另一个用来求area。编写程序,用带参数的宏来计算三角形的面积。解答:定义两个带参数的宏,分别计算s和area程序如下:#include<stdio.h>#include<math.h>#defines(a,b,c)((a)+(b)+(c))/2#definearea(s,a,b,c)sqrt((s)*((s)-(a))*((s)-(b))*((s)-(c)))intmain()(doublea,b,c;printf("Pleaseinputthreenumbers:\nn);scanf(n%lf%lf%ir,&a,&b,&c);if(abs(a-b)<c&&abs(b-c)<a&&abs(a-c)<b)printf(ns=%lfarea=%lf*,s(a,b,c),area(s(a,b,c),a,b,c)); 44 elseprintf("ERROR!");return0;}程序运行结果如图:Pleaseinputthreenumbers:456s=7.500000area=9.921567(2)用条件编译方法来编写程序。输入一行电报文字,可以任选两种输出:一为原文输出;二为变换字母的大小写(如小写'a'变成大写‘A',大写'D'变成小写'广),其他字符不变。用#define命令控制是否变换字母的大小写。例如,#defineCHANGE1则输出变换后的s文字,若#defineCHANGE0则原文输出。解答:解题思路:宏定义变量CHANGE,通过改变CHANGE的值,利用#if、#else控制大小写变换或者原文输出。代码如下:#include<stdio.h>#defineCHANGE1intmain()(charc;printf("Pleaseinputtheparagraphendwithctrl4-z:\nu);while((c=getchar())!=EOF){#ifCHANGE==l(if(c>=,A'&&c<=,Z,)putchar(c4-32);elseif(c>=,a*&&c<=,z*)putchar(c-32);elseputchar(c);)#elseputchar(c);#endif)return0;)程序运行结果如图:Pleaseinputtheparagraphendwithctrl+z:fAILUREISTHEMOTHEROFSUCCESS!Failureisthemotherofsuccess!CHANGE=1时输出结果Pleaseinputtheparagraphendwithctrl+z:NEVERGIVEUP!NEVERGIVEUP!CHANGE=0时输出结果3实验小结(1)源程序修改与替换题锻炼我们将函数功能转化为带参数的宏定义的能力,同时要注意宏定义的引用方式,时刻注意加上括号,防止在引用过程中由于优先级不同导致引用产生歧义,严谨杜绝副作用。(2)在平时写程序时就应该思考对于一个问题有没有多种解决方案,使用不同的逻辑结构多种尝试寻求最优解。(3)知道了条件编译与if语句的区别。5数组实验实验目的(1)掌握数组的说明、初始化和使用。(2)掌握一维数组作为函数参数时实参和形参的用法。(3)掌握字符串处理函数的设计,包括串操作函数及数字串与数之间转换函数实现算法。(4)掌握基于分治策略的二分查找算法和选择法排序算法的思想,以及相关算法的实现。实验内容及要求2.1源程序改错下面是用来将数组a中元素按升序排序后输出的源程序。分析源程序中存在的问题,并对源程序进行修改,使之能够正确完成任务。源程序#include<stdio.h>intmain(void)3{inta[10]={27,13,5,32,23,3,17,43,55,39);voidsort(int口,int);inti;sort(a[0],10);for(i=0;i<10;i++)printf("%6d",a[i]);printf("\n");return0;)voidsort(intb[],intn) 47 {inti,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(bU]<bU+l])t=b[j],b[j]=b[j+l],b[j+l]=t;)解答:(1)函数的声明应放在main主函数前,将第5行内容移至第1、2行之间。(2)第7行函数的形参应该是数组而不是数组中的第一个元素,改为:7 sort(a,10);(3)题目要求为升序输出,因此第18行的应改为程序运行结果如下:3 513172327323943555.2.2源程序完善、修改、替换(1)下面的源程序用于求解瑟夫问题:M个人围成一圈,从第一个人开始依次从1至N循环报数,每当报数为N时报数人出圈,直到圈中只剩下一个人为止。请在源程序中的下划线处填写合适的代码来完善该程序。源程序:#include<stdio.h>#defineM10#defineN3intmain(void){inta[M],b[M];/*数组a存放圈中人的编号,数组b存放出圈人的编号*/inti,j,k;for(i=0;i<M;i++) /*对圈中人按顺序编号1—M*/a[i]=i+1; 48 for(i=M,j=0;i>/*i表示圈中人个数,初始为M个,乘ij1个人时结束循环;j表示当前报数人的位置*/for(k=1;k<=N;k++) /*1至N报数*/if(++j>i-1)j=0;/*最后一个人报数后第一个人接着报,形成一个圈*/b[M-i]=j?:;/*将报数为N的人的编号存入数组b*/if(j)for(k=-j;k<i;k++)/*压缩数组a,使报数为N的人出圈*/for(i=0;i<M-l;i++) /*按次序输出出圈人的编号*/printf(“%6d”,b[i]);printf("%6d\n”,a[0]); /*输出圈中最后一个人的编号*/return0;)解答:aU-1]〃j为当前报数人的位置,但是上一次循环后j多自加一次,因此j不为0时将元素存入数组ba[i-l]〃j为0时,说明一圈恰好完了,则将圈中最后一个元素放入数组ba[k]=a[k+l]〃压缩数组程序运行结果如下:36927185 10 4(2)上面的程序中使用数组元素的值表示圈中人的编号,故每当有人出圈时都要压缩数组,这种算法不够精炼。如果采用做标记的办法,即每当有人出圈时对相应数组元素做标记,从而可省掉压缩数组的时间,这样处理效率会更高一些。因此,请采用做标记的办法修改(1)中的程序,并使修改后的程序与(1)中的程序具有相同的功能。解题思路:可采用标记的方式,初始时将数组a中元素都标记为0,踢出圈的元素就标记为1,在每次循环中遇到一个标记为1的则多报一次数。其他过程类似。代码如下:#include<stdio.h>#defineM10#defineN3intmain()(inta[M]={0},b[M];〃将数组a中元素都标记为0inti,j,k;for(i=M,j=0;i>0;i-){for(k=1;k<=N;k++){if(++j>M-Dj=0;〃循环完一圈j=0回到第一"元素if((j==0&&a[M-1]==1)||(j!=0&&a[j-1]==l))k=k-l;〃若遇到已提出元素k减1使循环次数加1)b[M-i]=j?j:M;〃数组b存放被踢出元素的位置将踢出的元素标记为1)for(i=0;i<M;i++)printf("%6d",b[i]);return0;)运行结果如下:36927185 10 45.2.3跟踪调试源程序在下面所给的源程序中,函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。但函数strncat在定义时代码有误,不能实现上述功能。请按下面的要求进行操作,并回答问题和排除错误。(1)单步执行源程序。进入函数strncat后观察表达式s、t和i。当光条落在for语句所在行时,i为何值?当光条落在strncat函数块结束标记(右花括号})所在行时,s、t分别为何值?(2)分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。源程序:#include<stdio.h>voidstrncat(char[],char[],int);intmain(void)(char a[501="The adopted symbol is,,,b[27]=',abcdefghijklmnopqrstuvwxyzn;strncat(a,b,4);printf(n%s\nn,a);return0;)voidstmcat(chars[],chart[],intn)(inti=0,j;while(s[i++]);for(j=0;j<n&&t[j];)s[i++]=t[j++];s[i]='\0';}解答:(1)同i=〃s=0x62fdf0"Theadoptedsymbolisabed"t=0x62fe30"abcdefghijklmnopqrstuvwxyz"(2)错误:循环变量i多自加一次,修改后代码如下:#include<stdio.h>#include<stdlib.h>voidstrncat(char[],charf],int);intmain()chara[50]="Theadoptedsymbolisn,b[27]=Mabcdefghijklmnopqrstuvwxyz";strncat(a,b,4);printf(n%s\n';a);return0;)voidstrncat(chars[],chart[],intn){inti=0,j;while(s[i])i++;for(j=0;j<n&&t[j];)s[i++]=t[j++];s[i]='\0';5.2.4程序设计编写并上机调试运行能实现以下功能的程序。(1)编写一个程序,从键盘读取数据,对一个3x4矩阵进行赋值,求其转置矩阵,然后输出原矩阵和转置矩阵。(2)编写一个程序,其功能要求是:输入一个整数,将它在内存中二进制表示的每一位转换成为对应的数字字符,存放到一个字符数组中,然后输出该整数的二进制表示。(3)编写一个程序,其功能要求是:输入n个学生的姓名和C语言课程的成绩,将成绩按从高到低的次序排序,姓名同时作相应调整,输出排序后学生的姓名和C语言课程的成绩。然后,输入一个C语言课程成绩值,用二分查找进行搜索。如果查找到有该成绩,输出该成绩同学的姓名和C语言课程的成绩;否则输出提示“notfound!Mo解答:(1)利用二位数组下标值的不同交换行列数组元素,实现转置数组的目的。代码如下:#include<stdio.h>#defineM3#defineN4intmain()(inti,j;inta[M][N],b[N][M];printf("Pleaseinputanarrayitemfbr3*4:\nH);for(i=0;i<M;i++)for(j=0;j<N;j++)scanf(M%d",&a[i][j]);for(i=0;i<M;i++)for(j=0;j<N;j++)b[j][i]=a口皿;〃行列交换printf("Arrayais:\nn);for(i=0;i<M;i++){for(j=0;jvN;j++)printf(n%10dM,a[i][j]);printf(n\nn);}printf(n\nArraybis:\nM);for(i=0;i<N;i++){for(j=0;j<M;j++)printf(n%10dM,b[i][j]);printf(n\n");}return0;)运行结果如下:Pleaseinputan12345678Arrayais:159arrayitem
910*1112for3*4:371112Arraybis:90129012(2)制作最低位为1的逻辑尺,使用按位与运算每次取操作数最低位后再右移一位继续重复运算直至操作数值为0,最后再倒序输出。代码如下:#include<stdio.h>#defineM20intmain()(inti,a[M];unsignedn;printf("Pleaseinputanunsignedinteger:\n");scanf("%u",&n);for(i=0;i<M;i++){a[i]=n&0x0001;〃最低位为1的逻辑尺n»=l;〃每次取最低位后右移一位}for(i=M-l;i>=0;i—)printf("%d",a[i]);〃倒着输出return0;)运行结果如下:pleaseinputanunsignedinteger:00000000000000001100(3)用一个二维字符数组存放学生姓名,一个一维int型数组存放分数,并使之对应起来。用冒泡排序对存放分数的数组中元素排序,每次交换时将字符数组中对应名字也作交换处理。二分法查找搜索,依次使用每一轮的最高位和最低位求出中间值并进行比较。代码如下:#include<stdio.h>#include<string.h>#include<stdlib.h>#defineN5#include<stdio.h>voidbinfind(intval[l,intnum,intvalue,charname[N][20])〃二分查找(intstart=0;intend=num-1;intmid=(start+end)/2;while(val[mid]!=value&&start<end)(if(valfmid]>value)(end=mid-1;)elseif(valfmid]<value){start=mid+1;}mid=(start+end)/2;)if(val[mid]==value)printf("%s:%d”,name[mid],val[mid]);〃找到输出对应名字和分数elseprintf(,^notfound!^^);intmain()(inti,j,temp;charname[N][20],a[20]={},b;intscore[N];for(i=0;i<N;i++){printf(nname:M);scanf(n%su,name[i]);printf(nscore:n);scanf(M%d'\&score[i]);)fbr(i=O;i<N-l;i++){for(j=0;j<N-l;j++){if(score[jl<score[j+l]){temp=score|j];score[j]=score[j+l];score[j+l]=temp;//冒泡排序交换分数strcpy(a,namefj]);strcpy(name[jl,name[j+1]);strcpy(name[j+11,a);}〃交换对应的姓名))printf(,,\n\nM);for(i=0;i<N;i+4-)printf(,,name:%-15ssocre:%4d\n,,,name[i],score[i]);intx;scanf("%d,&x);〃输入待查找的分数binfind(score,N,x,name);return0;运行结果如下:name:ascore:95name:bscore:75namezcscore:98name:dscore:76name:escore:85TOC\o"1-5"\h\zname:c socre: 98name:a socre: 95name:e socre: 85name:d socre: 76namezb socre: 7585e:855.2.5选做题程序设计编写并上机调试运行能实现以下功能的函数和程序。(1)编写函数strnins(s,t,n),其功能是:可将字符数组t中的字符串插入到字符数组s中字符串的第n个字符的后面。(2)编写一个实现八皇后问题的程序,即:在8*8方格国际象棋盘上放置8个皇后,任意两个皇后不能位于同一行、同一列或同一斜线(正斜线或反斜线)上,并输出所有可能的放法。解答:(1)用while循环判断数组t中的元素是否为,(T并通过循环变量i来计算t中字符数,再将t中字符一个个地赋给s中从第n个开始的每一个元素,循环i代码如下:#include<stdio.h>voidstrcopy(chars[],chart[],intn)inti=O,j,k=O;while(s[k])k++;while(t[i])i++;for(j=0;j<i;)s[n++]=t[j++];if(n>k)s[nl='\O';}intmain(void)(intn;chars[100],t[1001;scanf("%s%s%d",s,t,&n);strcopy(s,t,n);printf("%s",s);return0;)运行结果如下:asdfghjklqwe4asdfqwekl(2)由于皇后们是不能放在同一行的,所以我们可以去掉"行''这个因素,即我第1次考虑把皇后放在第1行的某个位置,第2次放的时候就不用去放在第一行了,因为这样放皇后间是可以互相攻击的。第2次我就考虑把皇后放在第2行的某个位置,第3次我考虑把皇后放在第3行的某个位置,这样依次去递归。每计算1行,递归一次,每次递归里面考虑8歹U,即对每一行皇后有8个可能的位置可以放。找到一个与前面行的皇后都不会互相攻击的位置,然后再递归进入下一行。找到一组可行解即可输出,然后程序回溯去找下一组可靠解。代码如下:#include<iostream>usingnamespacestd;intc[20],n=8,cnt=O;voidprint(){for(inti=0;i<n;++i){for(intj=0;j<n;++j){if(j==c[i])cout«,,lelsecout«nO}cout«endl;)cout«endl;}voidsearch(intr){if(r==n)(print();++cnt;return;)for(inti=0;i<n;++i){c[r]=i;intok=1;for(intj=0;j<r;++j)if(c[r]==c[j]||r-j==c[r]-c[j]||r-j==c[j]-c[r])(ok=0;break;}if(ok)search(r+l);))intmain()(search(O);cout«cnt«endl;return0; 59 5.3实验小结(1)使用assert时记住包含assert.h头文件。(2)一般来说,宏比较适合于经常
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产科解剖护理风险评估
- 妇科护理中的跨文化沟通
- 人力资源建设承诺书7篇
- 医疗健康领域服务保障责任承诺书7篇
- 家庭屋顶光伏发电项目购售电合同
- 品牌形象与视觉规范应用模板
- 沙眼患者的同伴支持系统
- 2026年黄石市园博文化旅游经营管理有限公司招聘备考题库有答案详解
- 2026年宁津县人民医院招聘洗衣房护工1人备考题库及参考答案详解1套
- 护理人文关怀的社会影响
- 生物化学实验智慧树知到期末考试答案章节答案2024年浙江大学
- 高中物理新课标人教必修252平抛运动(带动画和投弹游戏)课件
- 化工农药制剂建设项目试生产方案备案资料
- HY/T 070-2022海域使用面积测量规范
- YS/T 724-2016多晶硅用硅粉
- GB/T 2624.2-2006用安装在圆形截面管道中的差压装置测量满管流体流量第2部分:孔板
- 2020中考-语文专题复习-:-句子的语气-(共13张PPT)
- 2023年中石油职称英语考试通用选读
- GA 802-2019道路交通管理机动车类型
- 注塑工艺培训资料史上最全课件
- 法人治理主体“1+3”权责表
评论
0/150
提交评论