华中科技大学C语言知识实验报告.doc

收藏

编号:2582220    类型:共享资源    大小:2.35MB    格式:DOC    上传时间:2020-04-22
14
金币
关 键 词:
华中科技大学 语言 知识 实验 试验 报告 讲演 呈文
资源描述:
^` 课 程 实 验 报 告 课程名称: C语言程序设计 专业班级: CS1409 学 号: U201414813 姓 名: 唐礼威 指导教师: 吴海 报告日期: 2015年6月24日 计算机科学与技术学院 目录 1 第一次实验 1 1.1 实验目的 1 1.2 实验内容 1 1.3 实验小结 10 2 第二次实验 11 2.1 实验目的 11 2.2 实验内容 11 2.3 实验小结 16 3 第三次实验 16 3.1 实验目的 16 3.2 实验内容 16 3.3 实验小结 25 4 第四次实验 25 4.1 实验目的 25 4.2 实验内容 25 4.3 实验小结 30 5 第五次实验 31 5.1 实验目的 31 5.2 实验内容 31 5.3 实验小结 37 6 第六次实验 37 6.1 实验目的 37 6.2 实验内容 37 6.3 实验小结 44 7 第七次实验 44 7.1 实验目的 44 7.2 实验内容 44 7.3 实验小结 55 8 第八次实验 55 8.1 实验目的 55 8.2 实验内容 55 8.3 实验小结 63 9 实验总结 63 ^` 1 第一次实验 1.1 实验目的 (1) 熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结合性。 (2)掌握if,while,for循环语句的用法与含义。 (3)掌握简单C程序(顺序结构程序)的编写方法。 (4)掌握getchar, putchar, scanf 和printf 函数的用法 (5)学会简单使用函数调用 1.2 实验内容 (一)使用两个变量实现两数交换 【部分程序代码:】 #include //预处理 void main() //主函数 { int a,b; //定义两变量 a=a+b; b=a-b; a=a-b; //精华部分,实现交换 } 要点说明:要先用一个数储存两个数的值,于是将a+b的值赋给a,从中减去b即获得a的值,赋给b。在从中减去新的b即得原b值,赋给a便实现了两变量值的交换。 (二)程序设计 (1)编写一个程序,输入字符c,如果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。 I、程序框图 开始 输入字符c c为大写 Y 将c转换成对应 字母 的小写 N 输出字符c 结束 思路:小写字母的ASCLL码比其相对应的大写字母ASCLL码值高32,所以,可用if语句进行判断大小写,再通过简单计算进行转化。 II、部分程序代码 char c=getchar(); //定义字符变量c if (c>=A&&c<=Z) //条件判断 { c=c+32; //改变ascll码值实现C变c printf("%c",c); } else printf("%c",c); (2)编写一个程序,输入无符号短整数x,m,n(0 ≤m≤ 15, 1 ≤ n≤ 16-m),取出x从第m位开始向左的n位(m从右至左编号为0~15),并使其向左端(第15位)靠齐。 I、程序框图 开始 输入x,m,n 将x右移m位,再 左移(16-n)位 输出x 结束 II、部分程序代码 unsigned short x, m, n; //定义无符号短整型变量 printf("请依次输入短整数x,m,n:"); scanf("%hu %hu %hu", &x, &m, &n); x = x >> m; //向右移位 x = x << (16 - n); //向左移位 若输入的数为x=12345,m=3,n=3,由于(12345)10=(0011000000111001)2, 经移位后得(1110000000000000)2即应得(57344)10 (3)IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。这些地址在机器中用无符号长整形表示。编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。例如, 整形676879571二进制表示就是:00101000 01011000 01011100 11010011,按照8位一组可表示为:40 88 92 211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。 I、程序框图 开始 输入无符号 长整形x 移位,将每个字节提 取出来。 按ip地址 格式输出 结束 II、部分程序代码 unsigned long int x; //定义无符号长整形 int a, b, c, d; printf("请输入一个整数: \n"); scanf("%lu", &x); a = x >> 24; b = x >> 16 & 0x000000ff; c = x >> 8 & 0x000000ff; d = x & 0x000000ff; printf("%d.%d.%d.%d", d, c, b, a); system("pause"); 【测试】 输入676879571应输出211.92.88.40 (三)自设题 (1)设计一个程序,在字符模式下,以某个字符拼出“王”汉字图形,显示输出。 II、部分程序代码 printf(" ***************** \n"); printf(" * \n"); printf(" * \n"); printf(" ********** \n"); printf(" * \n"); printf(" * \n"); printf(" ***************** \n"); (2)输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。 I、程序框图 开始 输入 华氏温度 计算得摄氏温度 输出 摄氏温度 结束 II、部分程序代码 float f,c; //定义浮点型变量 float question(float x); printf("请输入需要转换为摄氏温度的华氏温度:\n"); scanf("%f",&f); c=question(f); printf("华氏温度%0.1f转换为摄氏温度为%0.1f",f,c); float question(float x) //函数调用,返回计算得到的值 { float a; a=5.0/9*(x-32); //此部刚开始遇到小问题,应注意a的类型,5写为5.0 return a; } 【测试】 (3)设计一个程序,完成如下功能:输出一个三位数,将它反向输出。如输入127,输出721。 I、程序框图 开始 输入一个三位数 用取余、求商等方式将每一位分离 反向排列每一位数 使组成新的数 输出所得得数 结束 II、部分程序代码 int a,b,c; //定义三个整形变量 printf("请输入三位数:\n"); scanf("%d",&a); b=a%10,c=(a%100)/10,a=a/100; a=b*100+c*10+a; printf("逆序数为%d",a); 【测试】 (4) 设计2种完成计算MAX{x,y,z}的程序。 I、程序框图 法一: 表达式 a * (a>=b && a>=c)+ b*(b>=a && b>=c)+c *(c>=a && c>=b)的值即为最大值。 法二: 开始 输入a,b,c, a > b N b > c Y Y N Y a > c N 输出a 输出c 输出b 结束 II、部分程序代码 法一: #include int main() {int a,b,c,d; //定义四个整形变量 scanf("%d%d%d",&a,&b,&c); d = a * (a >= b && a >= c) + b*(b >= a && b >= c) + c *(c >= a && c >= b); printf("最大值为%d",d); } 法二: #include int main() { int question(a,b,c); //简单的函数调用 int a,b,c,big; //定义四个变量 printf("请输入三个数\n"); scanf("%d%d%d",&a,&b,&c); big=question(a,b,c); //子函数返回值给主函数 printf("%d,%d,%d中最大数为%d",a,b,c,big); } int question(a,b,c) //简单的求最大值的子函数 { int d; if(a<=b) { d=b; if(b<=c) { d=c; } } else if(a<=c) { d=c; } else d=a; return d; } 【测试】 法一: 法二: (5) 设计计算一元二次方程的根的程序。 I、程序框图 开始 输入系数 a,b,c b^2-4*a*c N <0 Y 输出“无实根” 输出x1=(-b+sqrt(b*b-4*a*c))/(2*a) x2=(-b-sqrt(b*b-4*a*c))/(2*a) 结束 II、部分程序代码 #include #include //调用库函数中的函数 int main() { double a = 0, b, c, x1, x2; //定义变量 printf("本程序用于计算形如ax^2+bx+c=0的一元二次方程的实根\n"); printf("请依次输入a,b,c的值(以空格分开): \n"); while (a == 0) { scanf("%lf %lf %lf", &a, &b, &c); if (a == 0)printf("一元二次方程a不能为0,请重输:\n"); else break; } if (b*b - 4 * a*c<0)printf("\n 无 实 根 ! \n\n"); else { x1 = (-b + sqrt(b*b - 4 * a*c)) / (2 * a); x2 = (-b - sqrt(b*b - 4 * a*c)) / (2 * a); printf("方程两根: x1=%lf x2=%lf ", x1, x2); } system("pause"); return 0; } 【测试】 (6)根据任意三角形的面积公式(海伦公式):S = √p (p-a)( p-b)( p-c ), 其中,p=(a+b+c)/2, a.b.c为三角形三边,设计一个程序计算任意三角形的面积。 I、设计说明 首先输入三角形三边长,然后由海伦公式得出结果 II、部分程序代码 #include #include int main() { float a,b,c,s,t; printf("input three edge of the triangle\n"); scanf("%f%f%f",&a,&b,&c); s=(a+b+c)/2; t=s*(s-a)*(s-b)*(s-c); float area=sqrt(t); printf("area=%f\n",area); return 0; }【测试】 1.3 实验小结 本次实验熟悉了开发环境,并自己动手实践了一些简单的小程序,在开发程序的过程中我发现一些小的问题往往会破坏整个程序的正常运行,而且非常不容易发现,所以我认为在我们开发程序的过程中,必须要保证好整个源码的格式,并且要是分之小心。目前我能够运用简单的函数调用,分得清数据的类型,掌握了几个循环语句的使用方法,但均不够熟练,在以后的实践过程中还会去不断提高自己,成为一个有基本职业素养的程序开发人员。 2 第二次实验 2.1 实验目的 (1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标点语句。 (2)熟练运用for、while、do-while语句来编写程序。 (3)练习转移语句和标点语句的使用。 (4)使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值 2.2 实验内容 (1)源程序改错 【部分程序代码:】 scanf(“%d”,n) //错误,n要加上取地址符& 改为 scanf(“%d”,&n) for(i=1,i<=n,i++) //错误,应以;间隔 改为 for(i=1;i<=n;i++) (2)用while替换for循环求n! 定义变量n,计数变量i,输出结果变量s 程序框图 开始 输入n的值 Y 判断i<=n? 计算s=s*i;i++ 输出S 结束 (3)用do-while替换for循环求n! 定义变量n,计数变量i,输出结果变量s 程序框图 开始 输入n的值 计算s=s*i;i++ Y 判断i<=n? N 输出S 结束 (4)n!练习4 【部分程序代码:】 { int i=1,s; //定义i,s for(;s>factorial(i);) //循环求出最小整数i i++; } int factorial(x) //定义求n!的子函数 { int i,s=1; //定义子函数中i,s for(i=1;i<=x;i++) s=s*i; return s; } 思路;拿i!和s比较大小,i逐次加1,直到求出最小i (5)求税金if版 【部分程序代码:】 void tax(x); //声明子函数 { int n; //定义工资为变量n scanf("%d",&n); tax(n); } void tax(x) //定义子函数 { if(x<1000)printf("不收取税金"); else if(1000<=x&&x<2000)printf("税金为%0.2f",x*0.05); else if(2000<=x&&x<3000)printf("税金为%0.2f",x*0.10); else if(3000<=x&&x<4000)printf("税金为%0.2f",x*0.15); else if(4000<=x&&x<5000)printf("税金为%0.2f",x*0.20); else if(5000 #include { int i=1; //定义计数变量i char s; //定义字符串变量s } (8)输出逆序数 【部分程序代码:】 { int a[1000],n,i; //定义数组a[] for (i=1;n/10!=0||n%10!=0;) { a[i]=n%10; //给数组a[i]赋值末尾一位 printf("%d",a[i]); n=n/10; } } (9)杨辉三角 【部分程序代码:】 #define N 10 //定义N为10 int c(int x,int y); //声明函数c void main() { int i,j,n=13; //定义i,j,k } int c(int x,int y) //定义函数c { int z; //定义变量z } 2.3 实验小结 本次实验进一步熟悉了Dev的操作。了解了在写程序的时候容易犯的一些小错误,在以后的编程道路上还得处处小心,具体的,发现scanf函数里面不能输入float型变量,不然会出错。另外进一步熟练了函数的调用过程,在写数组那个题时,能够很快想到用数组保存每次取余后的数字还是很不错的。但总体来说,写程序的速度还是颇慢,以后亟待提高 3 第三次实验 3.1 实验目的 1. 熟悉和掌握函数的定义、声明,函数调用与参数传递方法,以及函数返回值类型的定义和返回值的使用。 2. 熟悉和掌握不同储存类型变量的使用。 3. 熟悉多文件编译技术 3.2 实验内容 1. 源程序改错: Long s=0 改为 static long s=0 分析:要将s初始化为静态变量,不然每循环一次s都会变为0 Long fac 改为 long fac=1 分析:要将fac初始化为1 程序框图:开始 K=6,i=1 imax b=1E-6 N 输出s 结束 T16.完全数是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和恰好等于它本身。试求出1~1000范围内的所有完全数。 定义变量:int n,s,a; //n为待检测数,s为求和变量,a为真因子 程序框图: 开始 输入n,s,a n++ n<=1000? Y a
展开阅读全文
提示  淘文阁 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:华中科技大学C语言知识实验报告.doc
链接地址:https://www.taowenge.com/p-2582220.html
关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

收起
展开