C语言程序设计实验电子稿_第1页
C语言程序设计实验电子稿_第2页
C语言程序设计实验电子稿_第3页
C语言程序设计实验电子稿_第4页
C语言程序设计实验电子稿_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.3 实验一 熟悉C语言的VC+6.0编程环境一、实验目的与要求1. 学会使用Visual C+集成开发环境。2掌握简单C程序的编写、编辑、编译、连接和运行。3初步学会Visual C+环境下简单调试C程序的方法。二、实验内容1.程序运行题(1)打开VC+6.0环境。(2)在VC+6.0环境的编辑窗口中,输入如下程序保存为myexp1_1.cpp。(3)选择 【组建】"【编译 myexp1_1.cpp】(可按快捷键CTRL+F7)命令对程序进行编译。(4) 选择【组建】"【组建】(按快捷键F7)命令对程序进行连接。(5) 单击【!】按钮或选择【组建】"【执行】菜

2、单项(按快捷键F5),运行程序。(6) 判断结果正确与否。#include <stdio.h>void main() int a, b, sum;a=123; b=456;sum=a+b;printf(“a+b= %dn”,sum); 填写运行结果:关闭上面的程序,按上面的步骤再次输入如下的程序,进行编译、连接和运行,写出运行结果。#include <stdio.h>void main() int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(“%fn”,x);填写运行结果: 思考: 把前面的语句x=m/2

3、+n*a/b+1/2;改为x=m/2.0+n*a/b+1.0/2;运行结果将会是什么?2.程序改错题 程序改错1: 输入如下错误的程序,然后进行编译和连接,仔细检查并修改错误,再进行编译连接,直到没有错误为止。 运行程序, #include <stdio.h>void mian( ) printf(“We are studying C language!n) 程序改错2输入并运行下面一个需要在运行时输入数据的程序,程序要求从键盘输入三个实数,输出它们的和。#include <stdio.h>mian( ) float a,b,c,sum;printf(" In

4、put a,b,c: ")scanf("%f %f %f",&a,&b, c);sum=a+b+c;printf("n sum=%fn",sum); 输入该程序,然后进行编译和连接,如果出错,仔细检查并修改错误,再进行编译连接,直到没有错误为止。 运行程序,按照输入输出示例提示输入a、b、c三个变量的值,变量值之间用空格分隔,输入完毕按回车键【Enter】。 查看运行结果,判断结果正确与否。输入输出示例:Input a,b,c:3 5 6'sum=14.0再次运行程序并按如下的格式输入数据,观察结果是否正确?为什么?In

5、put a,b,c: 3,5,6' sum=?思考: 改正程序的错误后,把printf语句中的%f改成%d,再运行程序,有什么结果?Input a,b,c: 3.5,5.5,6.5'结果: 3.程序完整题完整题1二整数整除程序模板如下:#include <stdio.h>void main( ) int a,b, div; printf(" Input a,b: "); /*提示输入二个数*/scanf("%d%d",&a,&b); /*从键盘输入二个数存储在变量a,b中*/ /*除法运算,相除的结果放在变量d

6、iv中*/ /*用%d输出结果*/ 输入输出示例:Input a,b:3 5'div=0Input a,b:5 3'div=1思考:把上述int a,b,div;改成float a,b,div;scanf("%d%d",&a,&b);中的%d改成%f,同时把输出语句中的%d改成%f,运行程序后,再用前面的数据输入,结果会发生如何变化?为什么有这样的变化?Input a,b:3,5'div=Input a,b:5,3'div=完整题2仿照教材中例1-2程序,在横线地方填写语句,输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积

7、。 #include <stdio.h> void main( ) ; /* 定义变量*/ printf("请输入圆的半径和高:n"); /*在屏幕上显示提示信息*/ scanf("%f%f", &r,&h); /* 从键盘输入半径和高给变量r*/ ; /* 计算体积*/ ;/* 计算表面积*/ printf("v=%f,s=%fn", v,s) ; /* 输出体积和表面积*/ 输入与输出:请输入圆的半径和高:'5.0 8.0'输出结果?试一试:如果把上述程序中所有的%f改成%d,再次运行程

8、序,仍然输入“5.0 8.0”,输出结果会是什么?分析结果。把上述程序中的第一个n去掉,再编译运行程序,有什么变化?试说出n的作用。2.5 实验二 编写几个简单的C程序一、实验目的与要求1. 掌握C语言基本数据类型的概念,理解数据类型与运算的关系。2. 掌握简单变量的定义,算术表达式和赋值表达式的使用。3. 掌握基本输出语句的使用。4. 进一步熟悉C程序的编辑、编译、连接和运行的过程。5. 掌握简单C程序查错方法,编写几个简单程序。6. 实验4学时二、实验内容1.程序验证或填空 (1) 编译和运行下面程序,查看执行的结果:#include<stdio.h>int main(void

9、)int si=-1;float f=5;double df=3;printf("si = %d, f = %f, f = %lfn", si,f,df);return 0; 若把输出语句中的格式控制中的格式说明符的顺序改变一下,会有什么结果? 再把%lf修改为%f,运行会有什么结果?(2)分析程序,并上机运行验证运行结果 #include “stdio.h” void main( ) printf(“t*n”); printf(“tb* * *n”); printf(“tbb * * * * *n”); (3) 运行程序,并分析结果。 #include “stdio.h”

10、 void main( ) int a=10,x=5,y=6; a+=a*=6; x=y+; y=+x  a=x+y  printf(“%d,%d,%dn”,a,x,y);(4)不用第3个变量,实现将二个数进行对调,请填空。 #include “stdio.h” void main( ) int a,b  scanf(“%d%d”,&a,&b); printf(“a=%d b=%dn”,a,b); a= ; b= ;a= ;printf(“a=%d b=%dn”,a,b);2.程序改错改正下面程序中的多处错误。计算某个数x的平方y,并分别以“y =

11、 x*x”和“x*x = y”的形式输出x和y的值。x的值由键盘输入。输出示例(假设x的值为3):9 = 3*33*3 = 9源程序(有错误的程序)#include<stdi0.h>int main(void)int y;y = x*x;printf("%d = %d * %d",x); /* 输出printf("d * %d = %d", y);3.一般编程题编程题1 编写程序,输入二个整数,计算它们的和、差、积、商和余数,并按5+11=16这样的输出格式输出结果。编程题2 编写程序,输入二个实数,计算它们的和、差、积、商,并按32.24=

12、12.2+20.04这样的输出格式输出结果。实数分别定义为单精度实数或双精度实数。编程题3 编写程序,从键盘输入一个大写字母,改用小写字母输出。编程题4 求华氏温度150 对应的摄氏温度。计算公式如下,其中:c表示摄氏温度,f表示华氏温度。要求输出结果为: fahr = 150,celsius = 66思考:如果使用公式计算华氏温度150 所对应的摄氏温度,计算结果是否一样?为什么?编程题5 编写程序,从键盘输入学生的三门课成绩,求其平均成绩(保留小数点后1位)。4.较难编程题编程题1 当n为三位十进制整数时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit

13、3)的值。这里增加了一个题目输出示例:n为整数152时,它的个位数字是2,十位数字是5,百位数字是1提示:n的个位数字digit1的值是n%10,十位数字digit2的值是(n/10)%10,百位数字digit3的值是n/100。编程题2 将从键盘输入的实型十进制数分离为整数部分和小数部分后输出。如输入233.55,输出为:233.55=233+0.55。编程题3 计算定期存款的本金与利息之和。设银行定期存款的年利率rate为2.25%,存款期为n年,存款本金为money元,具体的数字由键盘输入,编程计算n年后的本金与利息之和(提示,利用pow函数)。3.5 实验三 选择结构程序设计一、实验目

14、的与要求1. 理解C语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。2. 掌握利用if结构实现选择结构的方法。3. 掌握利用switch结构实现多分支选择结构。4 结合程序掌握一些简单的算法,学习调试程序5 实验4学时二、实验内容1程序改错题改正下面程序中的错误。输入实数x,计算并输出下列分段函数f(x)的值(保留1位小数)。 输入输出示例1(改正后程序的运行结果)Enter x:100f(100.00)= 0.1输入输出示例2(改正后程序的运行结果)Enter x:23f(23.00)= 23.0源程序(有错误的程序)#include<stdio.h>#include&

15、lt;math.h>void main(void)double x;printf("Enter x: n");scanf("=%f", x);if(x = 100) y = 1/sqrt(x)else (x != 100) y = x;printf("f(%.2f) = %.1fn",x,y);2一般编程题编程题1 输入任意三个整数a,b,c,求3个数中的最大值和最小值。编程题2输入x,计算并输出下面分段函数f(x)的值(保留2位小数)。请调用sqrt函数求平方根,调用pow函数求幂。 输入输出示例(共运行3次)Enter x:

16、10f(10.00) = 3.16Enter x:0.5f(0.50) = 2.75Enter x:0f(0.00) = 0.00成本 编程题3有一函数: x (-5<x<0) y= x-1 (x=0) x+1 (0<x<10)编写程序,要求用scanf函数输入x的值,输出y的值。具体要求如下:(1)用if语句实现分支,自变量和函数值均用实数类型。(2)自变量用scanf函数输入,给一些输入提示。(3)运行程序,输入x的值(分别为-5<x<0,x=0,0<x<10)三种情况,检查输出的y值是否正确。编程题4 某服装店经营成套服装的买卖,同时也允许

17、单件销售。若一次购买不少于70套,则每套90元;若不足70套,则每套110元;只买上衣每件70元;只买裤子每条60元。请编写程序假设用户买入x件上衣和y条裤子,请编写程序计算相应的应付款是多少?编程题5编写程序实现:输入一个整数,判断它能否被3 、5 、7整除,同时输出如下信息。(1) 能同时被3 、5 、7整除;(2) 能同时被其中的哪二个数整除;(3) 能被其中的哪一个数整除;(4) 不能被3 、5 、7任一个数整除。3较难编程题编程题1请用switch语句编程计算员工每月的薪水。(exph3_1.cpp) 已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与提成的关

18、系如下(计量单位:元): profit1000 没有提成;1000profit2000提成10%;2000profit5000提成15%;5000profit10000提成20%;10000profit 提成25%。分析:为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、),如果将利润profit整除1000,则相邻两个区间的重叠。为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可: profit1000 对应0 1000p

19、rofit2000对应1 2000profit5000对应2、3、4 5000profit10000对应5、6、7、8、910000profit对应10、11、12、编程题2编写程序实现如下功能:输入二个运算数(exp1,exp2)和一个运算符(op),计算表达式exp1 op exp2的值,其中OP可以为+、-、*、/、%五个符号中的任一种(提示:用switch语句实现)。 4.5 实验四 循环结构程序设计一、实验目的与要求1 熟练掌握用while语句,do-while语句实现循环的方法。2 熟练掌握用for语句实现循环的方法。3 对循环语句的三种形式进行分析、比较,以掌握各种形式的共同之处

20、与其特点。4 掌握循环结构的嵌套,掌握break语句和continue语句在循环体中的作用。5 实验4学时二、实验内容1. 程序验证题与改错题(1)程序验证从键盘输入一个整数,在屏幕上将其逆序数输入,例如输入8193,输出3918。#include<stdio.h>void main() int x,number; printf("请输入一个整数:"); scanf("%d",&x); do x=number%10; number=number/10; printf("%d", x); while(number!=

21、0); printf("n");如果输入的是一个负整数,程序应该如何改?(2)程序改错计算表达式1+2!+3!+10!的值,改正下面程序中的多处错误。源程序(有错误的程序)#include<stdi0.h>void main(void)int sum1,sum2, i,j; for(i=1;i<10;i+) for(j=1,j<=i,i+) sum1*=j; sum1+=sum2;printf("%d ",sum1); 3一般编程题编程题1 用三种循环结构(while语句、do-while语句、for语句),求1000以内奇数的和

22、。编程题2输入一个正整数n,计算 的前n项之和,输出时保留6位小数。输入输出示例1:Enter n:5sum = 1.787302输入输出示例2:Enter n:23sum = 2.549541编程题3 编写程序求a+aa+aaa+aaa,a是一个数字,有n个a,实际的n和a值由键盘输入,输出格式如下示例(此时a是3,n是5)。 3+33+333+3333+33333=37035 提示:将a乘上10倍并加上a,变成aa,再将aa乘上10倍并加上a,变成aaa,依次类推,在变化的同时将a,aa,aaa进行累加。编程题4 统计从键盘输入的一行字符中的英文字母的个数。4较难编程题编程题1 输出1-9

23、99之间的所有同构数。(同构数:一个数出现在它的平方数的右端,这个数就称为同构数,如5出现在25的右端,5是同构数,25出现在625右端,25也是同构数。编程题2 如下程序利用c语言的数学函数库,求解sinx的近似值, 根据高等数学的公式,sinx =x-x3/3!+x5/5!-.(-1)k-1*x2k-1/(2k-1)!+. ,直到最后一项的绝对值小于1e-7为止。请阅读此程序,并根据cosx =1-x2/2!+x4/4!-.(-1)k*x2k/(2k)!+., 实现计算cosx的程序代码。(exph4_1.cpp)5.4 实验五 函数与预处理一、实验目的与要求 1. 掌

24、握C语言函数的定义方法、函数的声明及函数的调用方法。2. 理解函数实参与形参的对应关系以及“值传递”的方式。3. 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。4. 掌握动态存储分配的方法。5. 掌握宏定义和文件包含处理方法。6. 实验4学时二、实验内容1程序验证与改错题(1) 程序验证题 下面程序执行的结果是什么 void swap(int x, int y) int temp; temp=x; x=y; y=temp;void main() int a,b; scanf(“%d%d”, &a,&b); if(a>b) swap(a, b); printf(

25、“%dt %d”, a,b);思考:为什么a,b的值没有交换? 调用函数fun计算:m=1+2+3+4+9+10,并输出结果。请验证下面的程序是否符合题目要求。#include”stdio.h”int fun(int n) int m, i;for (i=1; i<=n; i+) m+=i;return m;void main() printf("m=%dn", fun(10);在上面程序的基础上,修改程序. 计算m=1-2+3-4+9-10。(2)程序改错题 下列程序的功能是利用自定义函数计算一无符号的整数各位数字的乘积。#include<stdio.h>

26、;unsigned f(unsigned num) unsigned k=0; do k*=num/10; num/=10; while(k); return k; void main() int x; printf(“input x=:n”); scanf(“%d”, x); printf(“%d”, f(x);2一般编程题编程题1 编写一函数,把输入的4个数字字符转换成一个int数据存放,如输入4123这字符转换为4123这个整数,并通过主函数验证结果。编程题2 编写程序求:1*1*1+2*2*2+3*3*3+4*4*4+5*5*5提示:主函数用来现实结果,f1( )函数用来求一个数的立方

27、,f2( )函数用来求和。#include <stdio.h>int f1(int n)int f2(int m)void main() 编程题3 定义两个带参数的宏,将两个参数的值相加和相减,并写出程序,输入两个数作为使用宏时的实参。输出相加和相减后的和与差。编程题4 编程输出2到10000之间的所有完数。所谓完数是指因子之和与它本身相等的数。如6=1+2+3,6是一个完数。要求:定义函数 factor(m) 判断m是否为完数;由主函数调用它,来对所有2到10000之间的所有数进行判断。#include <stdio.h>#include <math.h>

28、int factor(int m) int i,s=0; void main() int i,m,sum; 3较难编程题编程题1 用函数调用实现求两个数的最大公因子和最小公倍数编程题2 用递归方法求1+2+3+并将其中素数去除后之和。#include <stdio.h>#include <math.h>int isprime (int number) long fact(int n) void main() int m,sum; 6.4 实验六 数组一、 实验目的与要求1. 掌握一维数组的定义、赋值和输入输出的方法。2. 理解一维数组的存储方法及下标的表示方法。3. 掌

29、握与数组有关的算法(特别是排序算法)。4. 掌握二维数组的定义、赋值和输入输出的方法。5. 理解二维数组的存储方法及下标的表示方法。6. 实验4学时。这里有改动二、实验内容1程序验证题与改错题(1)程序验证题 给定一个整型数组a,要求求出其中小于0的元素的个数。请验证下面的程序是否符合题目要求。#define N 10void main() int aN=11,2,4,-1,5,-3,-66,0,10,-5; int i; /*变量i用于for循环*/ int count=0; /*变量count用于技术,初始化为0*/ for (i=0;i<N;i+) if(ai<0) coun

30、t+; /*如果元素ai<0,count计数+1*/ printf("%dn",count); 给定一个整型二维数组a(3,3),要求求出对角线元素的和。请验证下面的程序是否符合题目要求。#include <stdio.h>#define N 3void main() int aNN=1,2,3,4,5,6,7,8,9; int i,j; /*变量i,j用于for循环*/ int sum=0; /*变量sum用于求和,初始化为0*/ for (i=0;i<N;i+)for(j=0;j<N;j+) if (i=j)sum+=aij; /*如果是对

31、角线元素,sum+aij*/ printf("%dn",sum); return 0;注1:在程序验证题的基础上,修改程序,求出数组a中大于a0的元素之和。注2:对上述程序进行优化,消除内循环,实现同样的效果。在 的基础上,修改程序,求出数组a中反对角线元素之和。提示:内循环用逆序;i+j=N-1。(2)程序改错题2一般编程题编程题1:从键盘输入10个整型数据,放入数组a 中,求其最大值、最小值及其所在元素的下标位置,并输出。程序提示:定义10个元素的数组,用for循环语句逐一输入数据;定义最大值变量和最小值变量,用for循环语句遍历所有数组元素,逐一比较查找最大值和最小值

32、。编程题2:给定一个字符数组a,要求将数组的内容倒置。如:执行前数组的内容为'1','2','3','4','5','6','7','8'执行后数组的内容为'8','7','6','5','4','3','2','1'提示:用i表示数组的第一个元素的下标;用j表示数组最后一个元素的下标。 交换ai和aj,当i<=j时交换完毕。 交换一个

33、元素后,i+1,j-1。编程题3:给定一个二维数组a,要求将数组的内容逆置。如:执行前数组的内容为1,2,3,4,5,6,7,8,9,执行后数组的内容为1,4,7,2,5,8,3,6,9提示:用i表示数组的行下标;用j表示数组的列下标。以对角线元素为界,交换aij和aji。编程题4:一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。张王李赵周Math8061598576C7565638777English9271709085提示:可设一个二维数组a53存放五个人三门课的成绩。再设一个一维数组v3存放所求得各分科平均成绩,设变量average 为全组各科总平均

34、成绩。3.较难编程题编程题1:给定一个整型数组a,要求将数组a中的元素进行从小到大的排序(用冒泡法排序)【算法描述】从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后;第二遍只需考虑(N-1)个数,即不用考虑最后一个数;以此类推每次少考虑一个数,直到第(N-1)遍比较后就可以完成排序。编程题2:有15个整数(已排序)存放在一个数组中,输入一个数,要求用折半查找法找出该数在数组中的下标值,如果该数不在数组中,则输出“无此数”。这15个数用赋初值的方法在程序中给出。要找的数用scanf函数输入。提示:折半查找

35、法:在一个已从小到大排序的数组a中,用b(begin)表示数组首元素的下标,用e(end)表示数组末元素的下标,需查找的数x首先和处于数组最中间的下标为m=(b+e)/2的元素比较,若x和该数组元素相等,则找到位置,返回m;否则,若x大,则x可能落在下半区中,令b=m+1,若x小,则x可能落在上半区中,令e=m-1。重新计算m,再比较x和am;重复上述操作直到找到相等元素或b>e。若找到相等元素,则返回元素下标,否则返回-1表示无此数。7.4 实验七 字符与字符串处理一、实验目的与要求1. 掌握C语言字符型数据的概念,理解字符型与整型数据之间的关系。2. 掌握字符的输入与输出。3. 掌握

36、转义字符常量、字符串常量的使用。4. 掌握字符、字符串与字符数组的输入与输出。5. 掌握字符串函数的使用字符串数组的使用。6. 实验课时2学时二、实验内容1程序改错题 调试下列程序,使之具有如下功能:任意输入两个字符串(如:"ningbo"和"china"),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。程序中的strlen是库函数,功能是求字符串的长度,它的原型保存在头文件"string.h"中。调试时注意库函数的调用方法,不同的字符串输入方法,通过错误提示发现程序中的错误。#include

37、 <stdio.h> #include<string.h>void main()char a10,b10,ch;int c,d,k;scanf("%s",&a);scanf("%s",&b); /* error */printf("a=%s,b=%sn",a,b);c=strlen(a);d=strlen(b);if(c>d)for(k=0;k<d;k+) /* error */ch=ak;ak=bk;bk=ch;ak='0' /* error */printf(&q

38、uot;a=%sn",a);printf("b=%sn",b); 下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void fun(char *s) int i,j; for(i=0;j=0;sj!='0'i+) /* error */ if(si>='0' && si<='9')

39、 sj+=si; sj=”0”; /* error */void main() char item80; printf("nEnter a string :"); gets(item); printf("nnThe string is : %sn",item); fun(item); printf("nnThe string of changing is : %sn",item);2.一般编程题编程题1请编一个函数fun(char*s),该函数的功能是把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg,则调用该函数后,串

40、中的内容为gfedcba。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include <string.h>#include <stdio.h>#define N 81void fun ( char s)/*请填写完整*/void main() char aN; printf ( "Enter a string : "); gets ( a ); printf ( "The original string is: " ); puts( a ); fun( a

41、 ); printf("n"); printf ( "The string after modified : "); puts (a);编程题2请编写输入以下图案(1)、(2)的程序,图案的行数由输入的值确定。 (1) (2) 3较难编程题编程题1编写程序:程序功能是从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,例如,若输入edcba,则应输出abcde。#include<stdio.h>#include<string.h>void main() int i,j;char string100, c; printf(&qu

42、ot;Please input a string:"); gets(string); /*请填写完整*/ printf("result:%sn", string);编程题2编写程序:程序功能是统计子串substr在母串str中出现的次数。要求编写并调用函数fun的功能是:从str所指字符串中,找出substr所指子串的个数作为函数值返回。例如,当str所指字符串中的内容为abcdabfab,substr所指字符串的内容为ab,则函数返回整数3。#include <stdio.h>count(char str,char substr)/*请填写完整*/v

43、oid main()char str80,substr80; int n;gets(str);gets(substr);printf("%dn",count(str,substr); 8.4 实验八 指针一、 实验目的与要求1. 理解和掌握指针的概念,定义和使用指针变量。2. 掌握函数之间指针的传递关系。3. 掌握通过指针操作数组中元素的方法。4. 实验2学时二、实验内容1程序调试(1)调试本程序,了解运算符*与&的用法,并注意容易出错的地方。#include<stdio.h>void main() float x;float *xptr; /xptr=

44、&x; /,此处是否可以用*xptr=&x;?x=7.9;printf(“The address of x is %xn”,&x);printf(“The value of xptr is %xn”,xptr);printf(“The value of x is %fn”,x);printf(“The value of *xptr is %fn”,*xptr); /程序运行结果如下:在上面的程序中,注意区别*ptr的不同意义。语句中的*表示此处的xptr是作为一个指针变量来定义的,而语句中的*则表示取变量xptr所指向的值,在本题中就是变量x的值,这时的*可以作为运算符

45、来看待。这也可以理解为什么语句中用了xptr=&x而不是*xptr=&x,因为在运算过程中*xptr所表示的就是x,如果将x的地址赋给x,肯定会产生错误。明白了*与&的用法后,可以接着看下面一个例子,分析其出错的原因。(2) 调试程序。下面程序中有错误,请调试修改输入3个整数,按从小到大的顺序输出。#include “stdio.h”void main( ) int a,b,c int *p1,*p2,*p3  /定义3个指针变量void swap(int *p1,int *p2) scanf(“%d,%d,%d”,&a,&

46、b,&c) p1=&a  p2=&b  p3=&c  /3个指针分别指向3个整型变量/用swap函数交换2个数,使较小数放到变量a中,较大数放到变量b中if(a>b) swap(p1,p2)  / if(a>c) swap(p1,p3);if(b>c) swap(p2,p3);printf(“%d,%d,%d”,a,b,c); /按从小到大的顺序输出3个数void swap(int *p1,int *p2) /swap函数试图实现2个数的交换 int *x; x=p1; / p1=p2; /p2

47、=x; /本题编译连接都没有问题,但是不能运行出正确结果。原因在哪里呢?对语句的调用进行分析,请大家仔细观察swap函数的实现部分。语句表明a>b成立,因此需要将变量a和b中的数值进行调换,使其满足从小到大的排列顺序。swap函数中定义了一个指针变量x,语句是以指针变量x作为中间变量,将形参指针p1和p2所指的方向进行了调换,即,使形参指针p2指向了较小值,而p1指向了较大值,但是这种交换对变量a和b并没有产生任何影响,当swap函数调用完毕后,变量a和b依然维持原有情况,无法使它们中的数值按从小到大的顺序重新排列,因此无法得到正确的运行效果。对swap函数如何改造才能得到正确结果呢?请

48、大家结合本题进行改错。2 程序完整题运用指针对传递进来的两个整型量计算它们的和与积之后,通过参数返回,并予以输出。划横线的位置是本程序缺失的部分,请填写正确内容并运行此程序。#include <stdio.h>void compute(int m, int n, int *sum, int *p) void main()int x,y,sum,product;scanf("%d%d",&x,&y); /输入两个整型量compute(x,y,&sum,&product); /将两数和存入变量sum,积存入变量productprintf("%d %dn",sum,product);3一般编程题1. 用指针法统计10个数中正数、负数和零的个数,并分别求正数的总和,负数的总和。2. 通过指向整型数组的指针将数组amn的内容按m行n列的格式输出,如一个2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论