《C程序设计》课程实验报告.doc
兰州商学院陇桥学院工学系课 程 实 验 报 告课程名称: 高级程序设计语言 专 业: 信息管理与信息系统 班 级: 2012级本科二班 学 号: 姓 名: 柳彦军 指导教师: 于 岚 2013年06月26日实验一 熟悉C语言运行环境一、实验目的:1、熟悉C语言编程环境,Visual C+ 6.0,掌握运行一个C程序的基本步骤,包括编辑、编译、连接和运行。2、通过运行简单的C程序,初步了解C源程序的特点。3、了解程序调试的思想,能找出并改正C程序中的语法错误。二、实验内容:1、在E盘中建立自己的文件夹,存放程序。2、启动Visual C+ 6.0,进入C编译集成环境。3、输入并运行几个简单程序。三、实验步骤1、启动Visual C+ 6.0,输入和编辑一个简单、正确的程序。在Visual C+主窗口菜单栏中选择“文件”“新建”“文件”选项卡,选择“C+ Source File”,然后在右边的“文件名”框内输入源文件名“lt1-1.c”,并在“位置”框选择E盘中自己建立的文件夹,单击“确定”按钮,出现编辑屏幕,即可编写程序。输入程序如下:#include<stdio.h> /这是编译预处理指令 void main() /定义主函数 /函数开始的标志 printf("Lets study a C program.n"); /输出所指定的信息 /函数结束标志选择“文件”菜单的“保存”命令,保存程序。依次选择“文件”菜单的“编译”,“组建”,“运行”,实现对程序的编译及运行,弹出结果输出窗口。2、输入一个有错误的程序,修改程序,直到程序能正常运行。#include<stdio.h> void main() int a,b,sum /声明部分,定义3个整型变量 a=123; /对变量a赋值 b=456; sum=a+b /进行a+b运算,把结果存放在变量sum中 printf("sum is: %dn",sum); /输出结果。d表示用十进制整数输出 3、输入并运行一个需要输入数据的程序:#include<stdio.h> int max(int x,int y) /定义max()函数,函数值为整型,x,y为形式参数 int z; /定义main ()函数内部用到的变量z为整数 if(x>y)z=x; /将x,y中较大的值赋给 else z=y; return(z); /将z值返回。通过max()函数带回调用处void main(); int a,b,c; printf("input a,b="); scanf("%d,%d",&a,&b); /输入变量a和b的值 c=max(a,b); printf("max is: %dn",c); 四、调试过程1、编译第1个程序时,在调试信息窗口中显示如下信息:成功编译。2、编译第2个程序时,在调试信息窗口中显示如下信息: 经查程序,发现int a,b,sum和sum=a+b两句末漏写了“;”。在这两句末加上分号后,重新编译程序后,没有错误,编译成功。3、编译第3个程序时,在调试信息窗口中显示如下信息: 经查程序,发现void main();末尾多加了一个分号。删去分号,重新编译,没有错误,编译成功。五、实验结果1、第1个程序结果:2、第2个程序结果:3、第3个程序运行后输入8和5,输出结果:在运行后输入12和45,输出结果:六、实验总结:(实验中遇到的问题及解决方法,心得体会等)经过本次上机实验,我基本掌握运行一个C程序的基本步骤:编辑编译连接运行。了解了C源程序的特点及书写规则,如函数是程序的主要组成部分;每一个声明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“”之后不能加分号,等等。基本了解程序调试的思想,能找出并改正C程序中的语法错误。实验二 熟悉C语言程序的结构一、实验目的:1、掌握C语言程序的结构特点。2、掌握基本的输入、输出函数。3、能够模仿例题编写简单的C语言程序。4、进一步熟悉C程序的编辑、编译、连接和运行的过程。*Very good!*二、实验内容:1、请参照本章例题,编写一个C程序,输出以下信息:。2、从键盘输入矩形的长和宽,计算该矩形的周长和面积。三、解题思路:1、题目要输出三行字符串,第1、3行是一串*,第2行是英文字符串,在程序里的函数体中可以用三句输出函数调用语句分别输出每一行的字符串。2、 第一步:定义四个变量a,b,s,r;第二步:输入长和宽的值,并赋值给a,b;第三步:计算a*b,2*(a+b)分别赋值给s,r;第四步:输出面积s和周长r的值。四、编写程序:1、#include <stdio.h>void main()printf("*n");printf(" Very good!n");printf("*n");2、#include <stdio.h>void main()int a,b,s,r;printf("请输入长和宽:");scanf("%d,%d",&a,&b);s=a*b;r=2*(a+b);printf("面积为%d,周长为%dn",s,r);五、实验结果: 1、第1个程序的结果: 2、六、实验总结:(实验中遇到的问题及解决方法,心得体会等)通过本次学习我基本上掌握C语言程序的结构特点,能够理清头绪读懂c语言,能够熟练的用运基本的输入、输出函数,并能模仿例题编写简单的C语言程序,在实验一的基础上进一步熟悉C程序的编辑、编译、连接和运行的过程,感觉对c语言产生了浓厚的兴趣,期待之后的知识的学习。实验三 数据类型、运算符和简单的输入输出一、实验目的:1、掌握C语言数据类型,熟悉如何定义一个整形、字符型和实型的变量,以及对他们赋值的方法。2、掌握将数学公式装换为计算机语言。3、学会使用C的有关算术运算符,以及包含这些运算符的表达式。二、实验内容:1、计算存款利息。有1000元,想存一年。有三种方法可选: (1)活期,年利率为r1=0.35% (2)一年期定期,年利率为r2=3.0% (3)存两次半年定期,年利率为r3=2.8%请分别计算出一年后按三种方法所得到的本息和。2、给定一个大写字母,要求用小写字母输出。(用getchar输入,putchar输出,和scanf输入,printf输出两种方法。)三、算法设计:1.第一步:先定义七个变量p,r1,r2,r3,p1,p2,p3;;第二步:分别把本金和各种存法赋值给p,r1,r2,r3;第三步:计算p*(1+r1),p*(1+r2),p*(1+r3/2)*(1+r3/2),的值,并分别赋值给p1,p2,p3;第四步:输出。2.方法一:第一步:定义一个字符型变量c;第二步:用运getchar()语句输入一个大写字母,并赋值给c;第三步:用运petchar()输出c+32的值,即转换成小写输出。方法二:第一步:定义两个字符型变量c,e;第二步:从键盘输入一个大写字母并赋值给c;第三步:把c+32赋值给e;第四步:以字符型输出e的值。四、编写程序: 1、#include<stdio.h>main()float p,r1,r2,r3,p1,p2,p3;p=1000;r1=0.0035;r2=0.03;r3=0.028;p1=p*(1+r1);p2=p*(1+r2);p3=p*(1+r3/2)*(1+r3/2);printf("活期:%f,一年期定期:%f,存两次半年定期:%fn",p1,p2,p3);2、方法一:#include <stdio.h>void main()char c;c=getchar();putchar(c+32);putchar('n');方法二:#include <stdio.h>void main()char c,e;printf("输入大写字母:");scanf("%c",&c);printf("小写为:%cn",e=c+32);五、实验结果: 1、 2、六、实验总结:(实验中遇到的问题及解决方法,心得体会等)通过本次试验我基本上掌握了C语言数据类型,熟悉了如何定义一个整形、字符型和实型的变量,以及对他们赋值的方法;掌握了数学运算与计算机语言的转换;并掌握了使用C的有关算术运算符,以及包含这些运算符的表达式,感觉很不错,努力ing!实验四 顺序程序设计一、实验目的:1、掌握C语言中使用最多的一种语句赋值语句的使用方法。2、掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。二、实验内容:1、有若干只鸡和兔在同个笼子里,从上面数,有35个头;从下面数,有94只脚。编程求笼中各有几只鸡和兔?2、从键盘输入一个3位整数,要求反向输出该数。(如输入123,反向输出为321)三、算法设计:1、第一步:定义四个变量x,y,a,b;并给a,b分别赋值35,94;第二步:列方程表达式;第三步:输出求出的x,y。2.第一步:定义五个变量a,b,c,d,x;第二步:从键盘输入有一个三位数并赋值给x;第三步:通过计算将百位上的数赋值给a,十位的赋值给b,各位赋值给c。第四步:d=a*100+b*10+c;第五步:输出新值。四、流程图:(手绘)五、编写程序:1.#include <stdio.h>void main()int x,y,a=35,b=94;x=(4*a-b)/2;y=(b-2*a)/2;printf("鸡有=%d,兔有=%dn",x,y);2. #include <stdio.h>void main()int a,b,c,d,x;printf("输入一个三位数:");scanf("%d",&x);a=x/100;b=x/10%10;c=x%10;d=c*100+b*10+a;printf("反向输出结果为:%dn",d);六、实验结果:1. 2. 七、实验总结:(实验中遇到的问题及解决方法,心得体会等) 通过练习我掌握了C语言中使用最多的一种语句赋值语句的使用方法,区分开了等于与赋值的不同,并能熟练的用运,并掌握了各种类型数据的输入输出的方法与表示字符,能正确使用各种格式转换符。实验五 选择结构程序设计一、实验目的:1、了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真” )。2、学会正确使用逻辑运算符和逻辑表达式。3、熟练掌握if语句和switch语句。+4、结合程序掌握一些简单的算法。二、实验内容:1、编写程序,计算下面分段函数的值: x-5 (x>10)y=4x+2 (x<=10)要求:自变量x与函数值y均为单精度类型,输出结果保留2位小数。2、从键盘输入一个整数作为月份,判断该月是哪个季节?(用switch语句)三、算法设计: 1. 第一步:定义两个单精度变量x,y; 第二步:从键盘输入一个数并赋值给x; 第三步:判断x与10的关系; 第四步:若大于十则执行y=4*x+2; 否则执行y=x-5; 第五步:输出y的值。2.第一步:先定义一个变量a;第二步:从键盘输入月份并赋值给a;第三步:用运switch语句把2,3,,4定义为春季,以此类推定义其它月份;第四步:输入一个月份,判断。第五步:经判断并输出结果。四、流程图:(手绘)五、编写程序:1. #include <stdio.h>void main()float x,y;printf("请输入x的值");scanf("%f",&x);if(x<=10)y=(float)(4*x+2);elsey=(float)(x-5);printf("y=%.2fn",y);2. #include <stdio.h>void main()int a;printf("输入月份:");scanf("%d",&a);switch(a) case 2: case 3: case 4: printf("春季!n",a);break; case 5: case 6: case 7: printf("夏季!n",a);break; case 8: case 9: case 10: printf("秋季!n",a);break; case 11: case 12: case 1: printf("冬季!n",a);break; default: printf("错误!n");六、实验结果:1. 2.五、实验总结:(实验中遇到的问题及解决方法,心得体会等)通过练习掌握了C语言表示逻辑量的方法和表示符号,并学会正确使用逻辑运算符和逻辑表达式,熟练掌握if语句和switch语句两种选择语句,结合程序掌握一些简单的算法,不错,要不断加油!实验六 循环结构程序设计一、实验目的:1、熟悉掌握用while语句,do-while语句和for语句实现循环的方法。2、掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。二、实验内容:1、求1!+2!+3!+20!。(用单循环、多循环两种方法)2、输出所有“水仙花数”。(用单循环、多循环两种方法)三、算法设计:1.第一步:定义四个变量i,n,t=1,sum=0;第二步:用运for循环执行;第三步:输出值。 2.(单循环)第一步:定义四个变量x,y,z,h; 第二步:对x进行for循环; 第三步:把x的个十百位上的数分别赋值给h,z,y; 第四步:判断(y*y*y)+(z*z*z)+(h*h*h)的值是否等于x的值,若等于则输 出水仙花数,并进行下一次循环,若不是,则直接进行下一次循环。(多循环)第一步:定义四个变量x,y,z,h; 第二步:对x,y,z分别进行for循环; 第三步:判断(x*x*x)+(y*y*y)+(z*z*z)的值是否等于h的值,若等于则输出水仙花数,并进行下一次循环,若不是,则直接进行下一次循环。四、流程图:(手绘) 五、编写程序:1. #include <stdio.h>void main() int i,t=1,sum=0;for(i=1;i<=20;i+)t=t*i;sum=sum+t;printf("1!+2!+···+20!=%dn",sum);多循环. #include <stdio.h>void main() int i,n,t=1,sum=0; for(n=1;n<20;n+)for(i=n;i<=n;i+)t=t*i;sum=sum+t;printf("1!+2!+···+20!=%dn",sum);2.单循环:#include <stdio.h>void main()int x,y,z,h;for(x=100;x<=999;x+)y=x/100;z=x/10%10;h=x%10; if(x=(h*h*h)+(y*y*y)+(z*z*z)printf("水仙花树:%dn",x);多循环:#include <stdio.h>void main()int x,y,z,h;for(x=1;x<=9;x+)for(y=0;y<=9;y+)for(z=0;z<=9;z+)h=x*100+y*10+z; if(x*100+y*10+z)=(x*x*x)+(y*y*y)+(z*z*z)printf("水仙花树:%dn",h);六、实验结果 1. 2. 七、实验总结:(实验中遇到的问题及解决方法,心得体会等)熟练掌握了三种循环语句实现循环的方法,并能互相转换,还掌握在程序设计中用循环的方法实现一些常用算法,在这之前的练习中,我基本上掌握了简单的c语言编程,能够想出程序运行的每一步,觉得c语言是一门和数学一样特别有成就感的课,使我对这门课的学习就觉得是在享受,以后还会不断努力,多练习的。实验七 数 组一、实验目的:1、掌握一维数组和二维数组的定义、赋值和输入输出的方法。2、掌握字符数组和字符串函数的使用。3、掌握与数组有关的算法(特别是排序算法)。二、实验内容:1、用选择法对10个整数排序。10个整数用scanf函数输入。2、输出以下的杨辉三角形(要求输出10行)。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1. . . . . . . . . . . . . . . .3、编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcmp函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符相应字符的ASCII码的差值。三、算法设计:(算法设计思路、流程图、源程序)1.编程首先需简要定义个存储数据的数组,具体如下:第一步:定义一个一位数组a10,并定义三个整形变量; 第二步:从键盘输入十个数; 第三步:用for循环进行大小判断; 第四步:输出排序后结果。2.要简洁的输出杨辉三角以及美观的格式,则应该先定义一个十一位(也可定义为十位)的二位数组,在输出时记得用空格或Tab进行同行区间话分,具体如下: 第一步:宏定义M、N,定义二维数组aMN: 第二步:给ai1、aii赋初值为1; 第三步:对其它元素进行循环运算; 第四步:输出结果。3.本编程需要用字符串函数,所以先要进行#include <string.h>,再进行之后计算: 第一步:定义两个数组,以及所需变量; 第二步:键盘随便输入两个字符串; 第三步:进行计算; 第四步:输出结果。四、流程图(要求手绘):五、源程序: 1.#include<stdio.h>void main()int a10,i,j,t;printf("请输入10个数:");for(i=0;i<10;i+)scanf("%d",&ai);for(i=0;i<10;i+)printf("%d ",ai); printf("n"); for(j=0;j<9;j+) for(i=0;i<9-j;i+)if(ai<ai+1)t=ai+1;ai+1=ai;ai=t;for(i=0;i<10;i+)printf("%d ",ai);printf("n");2. #include <stdio.h>#define N 11#define M 11void main() int aMN,i,j,c;for(i=1;i<=11;i+) ai1=aii=1; for(i=3;i<=11;i+) for(j=2;j<i;j+)aij=ai-1j+ai-1j-1;for(i=1;i<=11;i+) for(j=1;j<=i;j+)printf("%d ",aij); printf("n"); 3.#include <stdio.h>#include <string.h>#define M 100void main()char s1M,s2M;int a,b,i,d=1;printf("输入第一个字符串:n"); scanf("%s",s1);printf("输入第二个字符串:n");scanf("%s",s2);for(i=0;i<100;i+)if(s1i>s2i)a=s1i-s2i; printf("%dn",a);break;if(s1i<s2i)b=s1i-s2i; printf("%dn",b);break;if(s1i=s2i)d=0; if(d=0) printf("%dn",d);四、实验结果1、第1个程序结果:2、第2个程序结果:3、第3个程序结果:五、实验总结:(实验中遇到的问题及解决方法,心得体会等)通过实验掌握了一维数组和二维数组的定义、赋值和输入输出的方法,能熟练的对数组进行排序、取最值等算法和字符数组、字符串函数的使用,相比以前,自我感觉数组比较难!实验八 函 数一、实验目的:1、熟悉定义函数的方法。2、熟悉声明函数的方法。3、熟悉调用函数时实参和形参的对应关系,以及“值传递”的方式。4、掌握函数的嵌套调用与递归调用。二、实验内容:1、写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。2、猴子吃桃子问题:猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?三、实验步骤及调试过程:1、编写第1题的程序:#include <stdio.h>#include <math.h>void prime(int x)int i,c,d;c=1;for(i=2;i<x;i+)if(x%i=0) c=0;break;if(c)printf("%d是素数!",x);else printf("%d是不素数!",x);void main()int a;doprintf("输入一个整数:n");scanf("%d",&a);while(a<=2);prime(a);2、编写第2题的程序:#include <stdio.h>int sum(int day)if(day=10)return 1;elsereturn (sum(day+1)+1)*2;main()int a;a=sum(1);printf("总共有%dn",a);四、实验结果1、第1个程序结果:2、第2个程序结果:五、实验总结:(实验中遇到的问题及解决方法,心得体会等)这部分真的还挺难的,需要下功夫好好思考,谨慎再谨慎还是会时不时的出错,以后还要多加练习才能掌握。不过还是有说获得知道了定义函数、声明函数的方法,并了解实参和形参的对应关系,以及“值传递”的方式和函数的嵌套调用与递归调用。学期实验总结(本学期做了哪些实验?是如何解决实验中遇到的问题的?通过这些实验收获到了什么?如何进行下一步的学习?心得体会等)这学期快要结束了,从刚开始学c语言到现在这门可快要结束,自己学的从整体来说还行,觉得c语言并不是那么恐怖,只要认真思考,勤奋编程,就不是太难,刚开始时老师让仿照书上人家编好的来编写,以此来熟悉c语言,并掌握基本的语法、语句,到后来老师找些经典的问题,让自己根据所学来完成,因此觉得每个知识点掌握起来并没多大问题。但仅靠老师是不够的,还需要自己在课后的努力、多练习。本学期做了很多实验,我很庆幸的是每个程序都是自己亲手完成的,很陶醉于那种遇到问题和同学讨论的氛围,在讨论无果的时候也会借助网络来查询,或者问老师,最后还是能完成任务我觉得美中不足是在编写完程序后,没有在再过头去重新编一次或者看一下以前是怎么编的,因此我并没做好及时去复习的工作。通过对c语言的学习,自己能够独立编出一些小程序,能够灵活的用运判断、选择、循环三种基本的语句,还能对数组、函数、指针进行正确的操作,自我感觉收获较大,本人对c语言期末考试以及九月份的等级考试充满期待。指导教师评语及成绩年 月 日