C语言程序设计实验上机报告.doc_第1页
C语言程序设计实验上机报告.doc_第2页
C语言程序设计实验上机报告.doc_第3页
C语言程序设计实验上机报告.doc_第4页
C语言程序设计实验上机报告.doc_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

课 程 实 验 报 告课程名称: C语言程序设计 专业班级: 信息安全 1302 学 号: 姓 名: 指导教师: 报告日期: 2014年6月16日 计算机科学与技术学院目 录1 实验概述12 第一次实验22.1 实验目的32.2 实验内容32.3 实验小结193 第二次实验203.1 实验目的203.2 实验内容203.3 实验小结354 第三次实验364.1 实验目的364.2 实验内容364.3 实验小结495 第四次实验505.1 实验目的505.2 实验内容505.3 实验小结626 第五次实验636.1 实验目的636.2 实验内容636.3 实验小结697 第六次实验707.1 实验目的707.2 实验内容707.3 实验小结838 第七次实验848.1 实验目的848.2 实验内容848.3 实验小结1059 实验总结106参考文献1071实验概述本实验采用C语言常用的上机开发环境Visual C+6.0集成开发环境。其关键是掌握程序的编辑、修改、编译、链接和执行的方法,以及如何调试程序,跟踪程序,通过断点控制程序,观察变量、表达式在程序运行过程中的取值,如何综合运用这些方法定位程序中的的错误和排除错误。在实验中除了传统的编程设计题外,增加了源程序改错题,源程序完善、修改、替换题,程序的调试跟踪题等,培养学生跟踪程序、设置断点、调试程序的能力,排除程序中语法、逻辑方面错误与故障的能力,并养成细致、周密、严谨的编程作风。实验中的源程序改错题,先给出一些含有经典、常见错误的源程序,让学生通过编译或运行发现错误,并加以改正,从而纠正初学者易犯的常见错误,实验中的源程序修改替换题,也是先给出源程序,然后要求学生按要求编写修改替换原来程序中的部分代码。实验中的跟踪调试结果填空题,给出源程序,要求学生填写程序运行过程中的某些中间结果。强迫学生用断点设置、单步跟踪等调试程序,观察并填写相应的中间结果。实验中的编程设计题,只给出题目,要求学生完成从源程序的编程、编辑、修改,编译产生目标代码,链接产生可执行文件,运行程序得到正确结果的全部环节。学习C语言与学习和使用任何一门其他程序设计语言一样。首先要理解程序设计语言的语法和语义,然后通过上机熟悉该语言集成开发环境,掌握编辑、修改、编译、链接、跟踪、调试程序等方面的技巧。最后,还要熟悉语言编译系统提供的库函数或类库,以便快速实现程序的设计与开发。上机实验就是学习与掌握上面三个环节的重要途径。上机实验之前一定要预先编好有关程序,把上机的重点放到程序的编辑、修改、编译、链接、跟踪、调试程序等方面,放到观察程序运行过程中的中间结果和运行完毕后的运行结果方面来。最终使自己的大脑变成一台“计算机”,能够在脑袋中运行自己的程序,判断各种情况下程序的走向等等,从而提高上机的效率和程序设计的准确性。 总之,上机实验是进一步深刻了解C语言的语法、语义,掌握用C语言进行初步程序设计所需要的方法和技能的一个重要环节。2 第一次实验2.1 实验目的1.熟悉C语言开发环境VC+6.0的使用;2.学会在VC+6.0中编译、运行、调试程序;3.熟悉表达式和标准输入与输出;4.熟悉掌握掌握各种运算符运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是c语言特有的运算符,例如位运算符,问号运算符,逗号运算符;书籍运算符的优先级和结合性;5.掌握getchar,putchar,scanf和printf函数的用法;6.掌握c程序(顺序结构程序)的编写方法。2.2 实验内容(一) 修改四个源程序得到正确的结果和如下程序设计:1. 编写一个程序,输入字符,如果是大写字母,则将转换成对应的小写,否则的值不变,最后输出。2. 编写一个程序,输入无符号短整数x,(0 15, 1 16-),取出x从第位开始向左的位(从右至左编号为015),并使其向左端(第15位)靠齐。3. (3)IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。例如,整形676879571二进制表示就是:00101000 01011000 01011100 11010011,按照8位一组可表示为:40 88 92 211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。(二)1. 设计一个程序,在字符模式下,以某个字符拼出“王”汉字图形,显示输出。2. 输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。3. 设计3种算法,完成交换整型两个变量值的程序。4. 设计一个程序,完成如下功能:输出一个三位数,将它反向输出。如输入127,输出721。5. 设计2种完成计算MAXx,y,z的程序。6. 设计一个程序,完成计算3个数的居中数。7. 设计计算一元二次方程的根的程序。8. 根据任意三角形的面积公式(海伦公式):S=p(p-a)(p-b)(p-c), 其中,p=(a+b+c)/2, a.b.c为三角形三边,设计一个程序计算任意三角形的面积。(3) 实验步骤及结果(要求给出源程序和程序运行结果。另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象) (一)改错:(红色字体为修改部分)源程序1.#include #includeint main(void) float a,b,c,s,t; print(input three dege of the trianglen) scanf(%f%f%f,&a,&b,&c); s=(a+b+c)/2 t=s*(s-a)*(s-b)*(s-c); area=sqrt(t); print(area=%dn,area); return 0;修改后:源程序1.#include #include int main(void) float a,b,c,s,t; print(input three dege of the trianglen); scanf(%f%f%f,&a,&b,&c); s=(a+b+c)/2; t=s*(s-a)*(s-b)*(s-c); t=sqrt(t); printf(area=%dn,t); return 0;源程序2:#include #define N 5;int sum(int x,int n);int main() int i,aN,total; printf(Input %d integer please!n,N); for(i=0;iN;i+) scanf(%d,ai); total=sum(a,N); printf(The sum is %dn,total); return 0;int sum(int x,int n); int i,s; for(s=0;i=0;in;i+); s+=xi; return s;修改后:#include #define N 10int sum(int x,int n);int main() int i,aN,total; printf(Input %d integer please!n,N); for(i=0;iN;i+) scanf(%d,ai); total=sum(a,N); printf(The sum is %dn,total); return 0;int sum(int x,int n) int i,s; for(s=0,i=0;in;i+) s+=xi; return s;源程序3:#include #define PI 3.14159; voidmain(void) int f; short p,k; double c,r,s; /*for task 1*/ printf(Input Fahrenheit:); scanf(%d,f); c=5/9*(f-32); printf(n %d(F)=%.2(C)nn,f,c /*for task 2*/ printf(input the radius r:); scanf(%f,&r); s=PI*r*r; printf(nThe acreage is %.2fnn,s); /*for task 3*/ printf(input hex int k,p:); scanf(%x %x,&k,&p);newint=(p&0xff00)|(k&0xff00)8; printf(new int=%xnn,newint);修改后:#include #define PI 3.14159 int main(void) int f,newint; short p,k; double c,r,s; /*for task 1*/ printf(Input Fahrenheit:); scanf(%d,&f); c=5/9*(f-32); printf(n %d(F)=%.2f(C)nn,f,c); /*for task 2*/ printf(input the radius r:); scanf(%lf,&r); s=PI*r*r; printf(nThe acreage is %.2fnn,s); /*for task 3*/ printf(input hex short int k,p:); scanf(%hd %hd,&k,&p); newint=(p&0xff00)+(k8)&0x00ff; printf(newint=%hdnn,newint); return 0;源程序4:#include void main() int a,b,t; printf(Input two integers:); scanf(%d %d,&a,&b); t=a;a=b;b=t; prinf(na=%d,b=%d,a,b);替换下划线,语句:#include void main() int a,b; printf(Input two integers:); scanf(%d %d,&a,&b); a=a+b; b=a-b; a=a-b; printf(na=%d,b=%d,a,b);程序设计:程序1: #include void main() int c ; c=getchar(); if(c=A&c=Z) c=c-A+a; putchar(c);程序2: #include int main() unsigned short int x,m,n; unsigned short int result; scanf(%hu%hu%hu,&x,&m,&n); result=xm(16-n); printf(%hu,result); return 0;程序3:#includevoid main() long ip; unsigned int i=0,tem=0,c=0; scanf(%ld,&ip); for (i=0;i32;i+) tem|=(ip%2)(i-8*c); if(i+1)%8=0) c=2?printf(%3d.,tem):printf(%3d,tem); tem=0; c+; ip=ip/2;(二)、题1:#include void main()printf(1111111111n);printf( 11 n);printf( 11 n);printf( 11111111 n);printf( 11 n);printf( 11 n);printf(1111111111n);题2:#include void main ()int tem,res;printf(please input your temperaturen);scanf(%d,&tem);res=5.0/9.0*(tem-32);printf(the result is: %dn,res);题3: #include void main () int a,b; printf(The first Methoad:n); printf(please input the value of a,bn); scanf(%d%d,&a,&b); int tem; tem=a,a=b,b=a; printf(a=%d b=%d,a,b); printf(The second Methoad:n); printf(please input the value of a,bn); scanf(%d%d,&a,&b); a+=b; b=a-b; a=a-b; printf(a=%d b=%d,a,b); printf(The third Methoad:n); printf(please input the value of a,bn); scanf(%d%d,&a,&b); a=b; b=a; a=ab; printf(a=%d b=%d,a,b); 题4:#include void main() int num,res;printf (input the number :n);scanf(%d,&num);res=100*(num%10);res+=num%100-num%10;res+=num/100;printf(the result is the :n%dn,res); 题5: #include void main() int a,b,c;printf(the first:ninput three numbersn);scanf(%d%d%d,&a,&b,&c);a=ab?a:b;a=ab?a:c;if (ab) if(ac); elsea=c; else a=b; if (bc); else a=c; printf(Max=:%dn,a);printf(the second:ninput three numbersn);scanf(%d%d%d,&a,&b,&c);a=(ab)?(ac?a:c):(bc?b:c);printf(Max=:%dn,a);题6: #include void main() int a,b,c,d;printf(input three numbers:n);scanf(%d%d%d,&a,&b,&c);d=a+b+c;a=(ab)?(bc?c:b):(ac?c:a);b=(ab)?(ac?a:c):(bc?b:c);d=d-a-b;printf(mid=%dn,d); 题7:#include#includeint main(void)float a,b,c,d,x1,x2,realpart,imagepart;printf(Input a,b,c:n);scanf(%f%f%f,&a,&b,&c);if(a=0)printf(Inupt ERRORn);elsed=b*b-4*a*c;if(d0)realpart=-b/(2*a);imagepart=sqrt(-d)/(2*b);printf(complex roots:%g+%.3gin,realpart,imagepart);printf(complex roots:%g-%.3gin,realpart,imagepart);elsex1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a);printf(x1=%f,x2=%fn,x1,x2);return 0;题8:#include #include void main() float a,b,c,s,p; printf(input three numbers:n); scanf(%f%f%f,&a,&b,&c); p=(a+b+c)/2; if(p*(p-a)*(p-b)*(p-c)0) s=sqrt(p*(p-a)*(p-b)*(p-c); printf(the result :%fn,s); else printf(these numbers isn a triangle!n);2.3 实验小结1.编写程序时,要注意加上“#include ” ,这是一个包含基本输入输出的头文件。2,在温度转换题中。公式是c=5/9*(f-32),但是用c语言不能这么写。因为在C语言中,5/9是得到一个int 型的结果,所以会得到0,导致程序运行结果始终为0;必须写成5.0/9才能得到浮点型结果。3.一个工程中只能有一个main()函数,不然编译器会报错。4.在使用标准输入语句scanf()是其中需要赋值的变量要使用其地址,即使用&来获取其地址,以存入数据。6.define 语句后不带分号,for条件表达式后不需要分号。7.数据输入定义类型要和输入一致;使用变量必须声明。3 第二次实验3.1 实验目的1.掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while 三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。2.熟练运用for、while、do-while语句来编写程序。3.练习转移语句和标号语句的使用。4.使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。3.2 实验内容(一) 下面是计算s=n!的源程序,在这个源程序中存在若干语法和逻辑错误。 要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任 务。例如,8!=40320。 源程序修改替换(1)修改上述计算s=n!的源程序,要求分别用while和do-while语句替换for语句。(2)修改上述计算s=n!的源程序,要求输入改为“整数S”,输出改为“满足n!S的最小整数n”。例如,输入整数为40310,输出结果为n=8。 编写并上机调试运行能实现以下功能的程序。 (1) 假设工资税金按以下方法计算:x 1000元,不收取税金;1000 x 2000,收取5%的税金;2000 x 3000,收取10%的税金;3000 x 4000,收取15%的税金;4000 x 5000,收取20%的税金;x5000,收取25%的税金。编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替(3)编写一个程序,打印如下的杨辉三角形。1/*第0行 */11/*第1行 */121/*第2行 */13311464115101051161520156117213535217118285670562881193684126126 843691每个数据值可以由组合计算(表示第i行第j列位置的值),而的计算如下: (i=0,1,2,)(j=0,1,2,3,i)说明:本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是3个空格,说明:本程序中为了打印出金字塔效果,要注意空格的数目。一位数之间是3个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分。(4)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321。 编写并上机调试运行能实现以下功能的程序。编写一个程序,用牛顿迭代法求方程满足精度e=10-6的一个近似根,并在屏幕上输出所求近似根。牛顿迭代法求方程近似根的迭代公式为:,其中,是函数f(x)的导函数。牛顿迭代法首先任意设定的一个实数来作为近似根的迭代初值x0,然后用迭代公式计算下一个近似根x1。如此继续迭代计算x2, x3, , xn, 直到,此时值xn即为所求的近似根。(二) 9. 设计一个计算个人所得税的程序。 10. 计算两个自然数的最大公约数和最小公倍数。 11. 输入一个数n(2),判定n是否为素数。 12. 输出2100范围内的所有素数。要求:不使用子函数。 13. 输出九九乘法口诀表(3) 实验步骤及结果(要求给出源程序和程序运行结果。另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象) (一)改错:(红色字体为修改部分)2.3-1#include int main()int i,n,s=1;printf(Please enter n:);scanf(%d,n);for(i=1,i=n,i+)s=s*i;printf(%d!=%d,n,s);return 0;#include int main()int i,n,s=1;printf(Please enter n:);scanf(%d,&n);for(i=1;i=n;i+)s=s*i;printf(%d!=%d,n,s);return 0;源程序修改替换:2.3-2(1)#include int main()int i=1,n,s=1;printf(Please enter n:);scanf(%d,&n);while(i=n)s*=i;i+;printf(used the while :%d!=%dn,n,s);printf(Please enter n:);scanf(%d,&n);i=1;s=1;dos*=i;i+;while(i=n);printf(used the do-while :%d!=%dn,n,s);return 0;(2)#include int main()int i,n=1,s,tem=1;printf(Please enter s:);scanf(%d,&s);for(;n+)for(i=1;i=s) break;tem=1;printf(MAX n: %d!=%dn,n,s);return 0; 程序设计:2.3-3.1#include void main()int sala;printf(input your salary:n);scanf(%d,&sala);switch(sala/1000)case 0: printf(your tax is 0%n);break;case 1: printf(your tax is 5%n);break;case 2: printf(your tax is 10%n);break;case 3: printf(your tax is 15%n);break;case 4: printf(your tax is 20%n);break;default: printf(your tax is 25%n);2.3-3.2#include void main()char c1,c2;while(c1=getchar()!=EOF) while(c1= ) if(c2=getchar()!= ) printf(%c,c1); c1=c2; printf(%c,c1);2.3-3.3#include int c(int j,int i);void main() int i,j,m; for(i=0;i=9;i+) for(m=0;m20-2*i;m+) printf( ); for(j=0;j=i;j+) printf(%-4d,c(j,i); printf(n); int c(int j,int i) if(j=0) return 1; return(c(j-1,i)*(i-j+1)/j;2.3-3.4#include void main() long m,res=0; int i,n; printf(input your number:n); scanf(%d,&m); for(i=0;(m=(n=m%10,m/10)=0;i+) res=res*10+n; if(m=0) break; printf(result: %dn,res);2.3-4#include #include #define e 1e-6int c(int j,int i);void main() double x0=1,xk=1;do x0=xk; xk=x0-(3*x0*x0*x0-4*x0*x0-5*x0+13)/(9*x0*x0-8*x0-5); while(fabs(x0-xk)e); printf(%.9lf,xk);(二)题9:#includeint main(void)float a,n,m;printf(Inupt a number:n);scanf(%f,&a);n=a-3500;if(a=0&a=3500)printf(0);else if(n=1500)m=n*0.03;else if(n=4500)m=n*0.1-105;else if(n=9000)m=n*0.2-555;else if(n=35000)m=n*0.25-1005;else if(n=55000)m=n*0.3-2755;else if(n=80000)m=n*0.35-5505;else m=n*0.45-13505;printf(m=%.3f,m);return 0;题10:#includeint main(void)int x,y,max,min,c,d;printf(Input two numbersn);scanf(%d%d,&x,&y);if(x=0|yy)max=x;min=y; else max=y;min=x;while(!(min%x=0&min%y=0)y-;c=y;d=(x*y)/c;printf(c=%d,d=%d,c,d);return 0;题11:#include#includeint main(void)int n,i,r;int k;printf(Input a number:n);scanf(%d,&n);if(n2)i=1;dok=sqrt(n);i+;r=n%i;while(r!=0)&(i=k);if(r)printf(%d is a prime.n,n);elseprintf(%d is not a prime.n,n);return 0;题12:#include#includeint main(void)int n,i,r,k;printf(n=2 is a prime.n);for(n=2;n=100;n+)i=1;dok=sqrt(n);i+;r=n%i;while(r!=0)&(i=k);if(r)printf(n=%d is a prime.n,n);return 0;题13:#includemain(void)int i,j,result;for(i=1;i10;i+)for(j=1;j10;j+)result=i*j;printf(%d*%d=%-3d,i,j,result);printf(n);3.3 实验小结1. 在使用标准输入语句scanf()是其中需要赋值的变量要使用其地址,即使用&来获取其地址,以存入数据。2,while是先进行条件判断,为真就进入循环;do-while是先执行循环体一次,在进行判断,并且while条件体后需要添加分号;。3.for循环是注意判断条件是)还是=)。4.使用switch语句是记着加上break语句跳出switch,有必要时需加上default。6.double型数据输入输出要使用“%lf”。7.两个数的最小公倍数就是两数之积除以两数的最大公约数。8.九九乘法表,注意“t”和“n”的使用时机。4 第三次实验4.1 实验目的(1) 熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。(2) 熟悉和掌握不同存储类型变量的使用。(3) 熟悉多文件编译技术。4.2 实验内容(一) 源程序改错下面是计算s=1!+2!+3!+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 源程序修改替换(1)修改上述源程序中的sum_fac函数,使其计算量最小(2)修改上述源程序中的sum_fac函数,计算 跟踪调试下面是计算fabonacci数列前n项和的源程序,现要求单步执行该程序,并观察p,i,sum,n值,即:(1)刚执行完scanf(%d,&k);语句时,p,i值是多少?(2)从fabonacci函数返回后,光条停留在哪个语句上?(3)进入fabonacci函数时,watch窗口显示的是什么?(4)当i=3时,从调用fabonacci函数到返回,n值如何变化? 程序设计编写并上机调试运行能实现以下功能的程序。(1)编写一个程序,让用户输入两个整数,计算两个数的最大公约数并且输出之。要求用递归函数实现求最大公约数,同时以单步方式执行该程序,观察其递归过程。(2)编写一个程序,验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。(3)编写一个程序,证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。例如,如果BEGIN为10,END为20,则程序的输出应为:GOLDBACHS CONJECTURE:(二)14. 求n个数的最大值、最小值和平均值。要求:不使用数组。15. 依据下列格里高利公式,计算圆周率。要求最后一项10-6。16. 完全数是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和恰好等于它本身。试求出11000范围内的所有完全数。17. 水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:13 + 53 + 33 = 153。试求出所有的水仙花数。18. 一个的数,其七进制和九进制均为3位数,且3位数的数字正好相反。试求出这个数。19. 求解1313的尾数三位是多少。20. 求解100!尾数有多少个0。(3) 实验步骤及结果(要求给出源程序和程序运行结果。另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象) (一)1源程序改错下面是计算s=1!+2!+3!+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。源程序:#includevoid main(void) int k; for(k=1;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k);long sum_fac(int n) long s=0; int i; long fac; for(i=1;i=n;i+) fac*=i; s+=fac; return s;修改后:#includelong sum_fac(int n);void main(void) int n; printf(please input N :n); scanf(%d,&n); printf(the sum is %ldn,sum_fac(n); long sum_fac(int n) long s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=fac; return s;2源程序修改替换(1)修改上述源程序中的sum_fac函数,使其计算量最小。l

温馨提示

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

评论

0/150

提交评论