常大_C程序设计上机指导_201210.doc_第1页
常大_C程序设计上机指导_201210.doc_第2页
常大_C程序设计上机指导_201210.doc_第3页
常大_C程序设计上机指导_201210.doc_第4页
常大_C程序设计上机指导_201210.doc_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

2012_C程序设计上机指导(第五版)周天彤 向艳 编写常州大学信息科学与工程学院1、 第1章 C程序设计入门1.1 P1_1项目阅读下列程序,先写出手算运行结果,然后录入程序,项目名保存为P1_1。在实验报告纸上记录运行情况。代码:#include int main()char c1,c2;c1=97,c2=98;printf(按字符型输出时c1、c2的值是%c和%c,c1,c2);return 0;结果:按字符型输出时c1、c2的值是a和bPress any key to continue在此基础上,1)加一个printf语句,并运行之printf(“%d,%d”,c1,c2);代码:#include int main()char c1,c2;c1=97,c2=98;printf(按字符型输出时c1、c2的值是%c和%cn,c1,c2);printf(%d,%dn,c1,c2);return 0;结果:按字符型输出时c1、c2的值是a和b97,98Press any key to continue2)再将c1,c2定义修改再运行int c1,c2;代码:#include int main()int c1,c2;c1=97,c2=98;printf(按字符型输出时c1、c2的值是%c和%cn,c1,c2);printf(%d,%dn,c1,c2);return 0;结果:按字符型输出时c1、c2的值是a和b97,98Press any key to continue3)再将第三行修改如下,再运行c1=300,c2=400;代码:#include int main()int c1,c2;c1=300,c2=400;printf(按字符型输出时c1、c2的值是%c和%cn,c1,c2);printf(%d,%dn,c1,c2);return 0;结果:按字符型输出时c1、c2的值是,和?300,400Press any key to continue4)再将c1,c2的定义改回,观察结果代码:#include int main()char c1,c2;c1=300,c2=400;printf(按字符型输出时c1、c2的值是%c和%cn,c1,c2);printf(%d,%dn,c1,c2);return 0;结果:按字符型输出时c1、c2的值是,和?44,-112Press any key to continue1.2 P1_2项目下面的程序是演示C语言中转义字符的语法现象的程序。阅读下列程序,先写手算运行结果,然后录入程序,项目名保存为P1_2。在实验报告纸上记录运行情况。代码:#include int main()char c1=a,c2=b,c3=c,c4=101,c5=116;printf(a%cb%cctc%ctabcn,c1,c2,c3);printf(tb%c%c ,c4,c5);结果:aabbc cc abcAN Press any key to continue1.3 P1_3项目下面程序是验证“自加和自减运算规则”的语法现象的程序。阅读程序,先写出手算运行结果,然后录入程序。项目名保存为P1_3。在实验报告纸上记录运行情况。分析结果:代码:#include void main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);1)运行程序,观察并记录i,j,m,n的值。结果:9,11,9,10Press any key to continue2)将程序分别作以改动后运行,观察并分析运行结果,结论写在报告上。a)将第5、6行改为m=i+;n=+j;代码:#include void main()int i,j,m,n;i=8;j=10;m=i+;n=+j;printf(%d,%d,%d,%dn,i,j,m,n);结果:9,11,8,11Press any key to continueb)将程序改为代码:#include void main()int i,j;i=8;j=9;printf(%d,%dn,i+,j+);结果:8,9Press any key to continuec)在上题基础上,将最后一句改为:printf(“%d,%dn”,+i,+j);代码:#include void main()int i,j;i=8;j=9;printf(%d,%dn,+i,+j);结果:9,10Press any key to continued)最后一句另改为:printf(“%d,%d,%d,%dn”,i,j,i+,j+);代码:#include void main()int i,j;i=8;j=9;printf(%d,%d,%d,%dn,i,j,i+,j+);结果:8,9,8,9Press any key to continue1.4 P1_4项目设计程序,验证“逻辑运算符的短路现象”的语法现象。项目为保存为P1_4。在实验报告纸上记录运行情况。分析结果:代码:#include void main()int a,b,c,d,m=-5,n=-6,result;a=1,b=2,c=3,d=4;result=(m=ab) & (n=cd);printf(result=%d m=%d n=%dn,result,m,n);结果:result=0 m=0 n=-6Press any key to continue说明:由于“ab”的值为0,因此m=0,此时已能判定整个表达式不可能为真,不必再进行“n=cd”的运算,因此n的值不是0而是仍保持原值-6,这就是“逻辑运算符的短路现象”的语法现象。1.5 P1_5项目设计程序,验证“赋值运算的运算次序是从右向左进行”的语法现象。项目名积存为P1_5。在实验报告纸上记录运行情况。分析结果:代码:#include void main()int a=1,b=2;a=b=3*4;printf(a=%d b=%dn,a,b);结果:a=12 b=12Press any key to continue1.6 P1_6项目模仿例1.1,创建项目P1_6,在屏幕上输出自己的名字的拼音。代码:#include / 这是编译预?处理命令int main( ) / 定义主函数 / 函数开始的标志 printf (Wang Xiaogangn); / 输出所指定的一行信息 return 0; / 函数执行完毕时返回函数值0结果:Wang XiaogangPress any key to continue2、 第2章 顺序结构程序设计1、语法错误#define PI 314#include void main( ) float r,s;s=PI*s*s;printf (s=%f,s);结果:s=3620173092907198500.000000Press any key to continue2、逻辑错误#include void main( ) int r,s;s=3.14*r*r;scanf(%f,&r);printf (%f,s);结果:20.000000Press any key to continue3、算法错误2.1 P2_1项目按照下面步骤1)创建P2_1项目,录入以上程序。#include #define PI 3.14 void main( ) float r,s,l,v;scanf(%f,&r);l=PI*r*2;printf (l=%fn,l); s=PI*r*r;printf (s=%fn,s); v=4/3*PI*r*r*r;printf (v=%fn,v);结果:2l=12.560000s=12.560000v=25.120000Press any key to continue2)人工检查录入错误,记录检出错误数目。3)使用菜单项Build下拉菜单中的Build P2_1.exe或者工具栏中的Build(F7)进行编译,记录每个错误提示,然后重新编译。4)不运行程序,判断程序的作用。如果给程序输入1.0,记录笔算的运行结果。使用Build下拉列表中的Execute P2_1.exe或者工具栏中的!Execute Program (Ctrl+F5)运行这个程序,记录程序执行结果。根据异常结果所给出的信息,判断在给出的程序中的逻辑错误(BUG)所在的行并修改这个错误。1.0l=6.280000s=3.140000v=3.140000Press any key to continue2.2 P2_2项目观察下面的程序并在实验报告纸上人工写出运行结果;输入并运行该程序,记录运行结果,记录并总结手算与机算的差异之处。代码:#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;a=61; b=62;c1=a;c2=b;d=3.56;e=-6.87;f=317.890121; g=0.123456789;m=50000; n=-60000;p=32768; q=40000;printf(a=%d,b=%dnc1=%c,c2=%cnd=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%15.6f,g=%15.12fn m=%ld,n=%ldn p=%u,q=%un,f,g,m,n,p,q);结果:a=61,b=62c1=a,c2=bd= 3.56,e= -6.87f= 317.890121,g= 0.123456789000 m=50000,n=-60000 p=32768,q=40000Press any key to continue在此基础上,改变程序,运行程序并分析结果。1)将程序第8-13行改为a=61; b=62;c1=a; c2=b;f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;代码:#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;a=61; b=62;c1=a; c2=b;f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;printf(a=%d,b=%dnc1=%c,c2=%cnd=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%15.6f,g=%15.12fn m=%ld,n=%ldn p=%u,q=%un,f,g,m,n,p,q);结果:a=50000,b=-60000c1=,c2=d=3157.89,e= 0.12f= 3157.890121,g= 0.123456789000 m=50000,n=-60000 p=50000,q=4294907296Press any key to continue2)在1)的基础上将printf语句改为:printf(a=%d,b=%dn c1=%c,c2=%cn d=%6.2f,e=%6.2fn,a,b,c1,c2,d,e);printf(f=%f,g=%fn m=%d,n=%dn p=%d,q=%dn,f,g,m,n,p,q);代码:#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;a=61; b=62;c1=a; c2=b;f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;printf(a=%d,b=%dn c1=%c,c2=%cn d=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%f,g=%fn m=%d,n=%dn p=%d,q=%dn,f,g,m,n,p,q);运行结果:a=50000,b=-60000 c1=,c2= d=3157.89,e= 0.12f=3157.890121,g=0.123457 m=50000,n=-60000 p=50000,q=-600003)将p,q改用%O格式符输出。printf(f=%f,g=%fn m=%d,n=%dn p=%o,q=%on,f,g,m,n,p,q);a=50000,b=-60000 c1=,c2= d=3157.89,e= 0.12f=3157.890121,g=0.123457 m=50000,n=-60000 p=141520,q=377776126404)改用scanf函数输入数据,而不用赋值语句。代码:#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;scanf(%ld,%ld,&a,&b);/a=61; b=62;c1=a; c2=b;scanf(%lf,%lf,&f,&g);/f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;printf(a=%d,b=%dn c1=%c,c2=%cn d=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%f,g=%fn m=%d,n=%dn p=%o,q=%on,f,g,m,n,p,q);结果:61,623157.890121,0.123456789a=50000,b=-60000 c1=,c2= d=3157.89,e= 0.12f=3157.890121,g=0.123457 m=50000,n=-60000 p=141520,q=377776126405)改用scanf输入浮点数时,使用%lf和%f有什么不同;比较scanf输入整型数时,使用%ld和%d有什么不同?代码:#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;scanf(%d,%d,&a,&b);/a=61; b=62;c1=a; c2=b;scanf(%f,%f,&f,&g);/f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;printf(a=%d,b=%dn c1=%c,c2=%cn d=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%f,g=%fn m=%d,n=%dn p=%o,q=%on,f,g,m,n,p,q);结果:61,623157.890121,0.123456789a=50000,b=-60000 c1=,c2= d= -1.#J,e= -1.#Jf=-92559605387113434000000000000000000000000000000000000000000000.000000,g=-92559603991907475000000000000000000000000000000000000000000000.000000 m=50000,n=-60000 p=141520,q=37777612640说明:对于double变量,scanf时必须选择%lf,而printf时仍可用%lf或%f61,623.2,6.5a=50000,b=-60000 c1=,c2= d= 3.20,e= 6.50f=3.200000,g=6.500000 m=50000,n=-60000 p=141520,q=37777612640#include #define PI 3.14 void main( ) int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned p,q;scanf(%d,%d,&a,&b);/a=61; b=62;c1=a; c2=b;scanf(%lf,%lf,&f,&g);/f=3157.890121; g=0.123456789;d=f; e=g;p=a=m=50000; q=b=n=-60000;printf(a=%d,b=%dn c1=%c,c2=%cn d=%6.2f,e=%6.2fn,a,b,c1,c2,d,e); printf(f=%lf,g=%lfn m=%d,n=%dn p=%o,q=%on,f,g,m,n,p,q);61,625.6,8.6a=50000,b=-60000 c1=,c2= d= 5.60,e= 8.60f=5.600000,g=8.600000 m=50000,n=-60000 p=141520,q=377776126402.3 P2_3项目编辑调试上机准备1的程序,记录编译过程中出现的错误,运行时分别输入10,2.3,1.2E10,测试程序的运行并记录结果;代码:#include #define PI 3.14 void main( ) float r,s,l,v;scanf(%f,&r);l=PI*r*2;printf (l=%fn,l); s=PI*r*r;printf (s=%fn,s); v=4/3*PI*r*r*r;printf (v=%fn,v);结果1:10l=62.800000s=314.000000v=3140.000000Press any key to continue结果2:2.3l=14.444000s=16.610599v=38.204378Press any key to continue结果3:1.2E10l=75360000000.000000s=452160000000000000000.000000v=5425920000000000600000000000000.000000Press any key to continueprintf (v=%en,v); 或者:printf (v=%en,v);结果:1.2e10l=75360000000.000000s=452160000000000000000.000000v=5.425920e+030Press any key to continue2.4 P2_4项目编辑调试上机准备2的程序,记录编译过程中出现的错误,运行时分别输入课前准备的5组数据,记录5个运行结果,比较手算与计算的差异。代码:P37:例3.1题#include int main ( ) float f,c; / 定义f和c为单精度浮点型变量 scanf(%f,&f); /f=64.; / 指定f的值 c=(5.0/9)*(f-32); / 利用公式计算c的值 printf(f=%fnc=%fn,f,c); / 输出c的值 return 0; 结果1:56f=56.000000c=13.333333Press any key to continue2.5 P2_5项目编辑调试上机准备3的程序,记录编译过程中出现的错误,运行时分别输入课前准备的3组数据,记录3个运行结果,比较手算与计算的差异。代码:P37:例3.2题#include int main( ) float p0,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; scanf(%f,&p0); p1 = p0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(p1=%fnp2=%fnp3=%fn,p1,p2,p3); return 0;结果:1000p1=1003.599976p2=1022.500000p3=1019.898010Press any key to continue3、 第3章 选择结构程序设计上机操作:#include void main( ) int a,b; float c; scanf(%d%d,&a,&b); /printf( a=%d,b=%d,a,b); c=a/b; printf( c=%f ,c);结果:6 3 c=0 Press any key to continue按F10键进入单步调试状态:上机练习:3.1 P3_1项目1、编写程序求函数的值:项目保存为P3_1代码:#include int main( ) float x,y; scanf(%f,&x); /printf( x=%f,x); if (x1) y=x; else if (x10) y=2*x-1; else y=3*x-11; printf(x=%f,y=%fn,x,y);结果:2x=2.000000,y=3.000000Press any key to continue3.2 P3_2项目2、给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。分别用switch和if语句写出程序。项目分别保存为P3_2和P3_3,设计10组测试数据来验证程序结果,记录测试结果。P3_2:switch实现代码:#include int main() float score; char grade; printf(请输入学生成绩:); scanf(%f,&score); while (score100|score0)printf(n 输入有误,请重输);scanf(%f,&score); switch(int)(score/10) case 10:case 9: grade=A;break;case 8: grade=B;break;case 7: grade=C;break;case 6: grade=D;break;case 5:case 4:case 3:case 2:case 1:case 0: grade=E; printf(成绩是 %5.1f,相应的等级是%cn ,score,grade);return 0;结果:请输入学生成绩:88成绩是 88.0,相应的等级是B Press any key to continue3.3 P3_3项目P3_3:if实现代码:#include int main() float score; char grade; printf(请输入学生成绩:); scanf(%f,&score); while (score100|score=90) grade=A;else if (score=80) grade=B;else if (score=70) grade=C; else if (score=60) grade=D;else grade=E; printf(成绩是 %5.1f,相应的等级是%cn ,score,grade);return 0;结果:请输入学生成绩:86成绩是 86.0,相应的等级是B Press any key to continue3.4 P3_4项目3、创建项目P3_4,P3_5,实现前面阅读2所给出的框图,输入测试用例,记录测试结果。项目P3_4:实现110各个整数的和的程序。代码:#include int main() int a; a=1+2;a=a+3;a=a+4;a=a+5;a=a+6;a=a+7;a=a+8;a=a+9;a=a+10; printf(a=%dn ,a);return 0;结果:a=55 Press any key to continue3.5 P3_5项目项目P3_5:实现求一元二次方程根的程序。代码:#include #include int main() float a,b,c,delta,p; printf(Please input a,b,c:);scanf(%f %f %f,&a,&b,&c);delta=b*b-4*a*c;if (delta0)p=sqrt(delta);printf(x1=%fn,-b/(2*a)+p/(2*a); printf(x2=%fn,-b/(2*a)-p/(2*a); else printf(x1=x2=%fn,-b/(2*a); return 0;结果:Please input a,b,c:1 -3 2x1=2.000000x2=1.000000Press any key to continue3.6 P3_6项目4、创建项目P3_6,实现以下功能:输入一个不多于5位的正整数,判断:(1)它是几位数;(2)分别打印每一位数字;(3)逆序输出各位数字。输入测试数据,记录测试结果。#include #include int main()int num,indiv,ten,hundred,thousand,ten_thousand,place; /分别代表个位,十位,百位,千位,万位和位数 printf(请输入一个整数(0-99999):);scanf(%d,&num);if (num9999)place=5;else if (num999)place=4;else if (num99)place=3;else if (num9)place=2;else place=1;printf(位数:%dn,place);printf(每位数字为:);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place) case 5:printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break;case 4: printf(%d,%d,%d,%d,thousand,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%d%dn,indiv,ten,hundred,thousand); break;case 3: printf(%d,%d,%d,hundred,ten,indiv); printf(n反序数字为:); printf(%d%d%dn,indiv,ten,hundred); break;case 2: printf(%d,%d,ten,indiv); printf(n反序数字为:); printf(%d%dn,indiv,ten); break;case 1: printf(%d,indiv); printf(n反序数字为:); printf(%dn,indiv); break;return 0;结果:请输入一个整数(0-99999):86921位数:5每位数字为:8,6,9,2,1反序数字为:12968Press any key to continue4、 第4章 循环结构程序设计上机准备:18题;上机练习:4.1 P4_1项目求出前20个不能被2,3,5,7整除的数,并求出这些数的和。记录编辑编译过程中产生的错误。写出运行结果。代码:#include #include int main()int i=1,num=0,sum=0; /num用于计数20个,sum用于存放累加和 while (num20)if (i%2)&(i%3)&(i%5)&(i%7) printf(%d ,i);num+;sum+=i;i+; printf(nsum=%dn,sum);return 0;结果:1 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83sum=858Press any key to continue4.2 P4_2项目写程序求1-3+5-7+-99+101的值。记录编辑编译过程中产生的错误。写出运行结果。代码:#include int main()int sign=1,i=1,sum=0; while (i=101)sum+=sign*i;sign*=(-1);i+=2; printf(sum=%dn,sum);return 0;结果:sum=51Press any key to continue4.3 P4_3项目公式求e的近似值,精度要求为10-6。记录编辑编译过程中产生的错误。写出运行结果。分析:直到发现某一项的绝对值小于10-6为止。因为精度公式:代码:#include int main()int fact=1,i=1; double item=1,sum=1;while (item=1e-6)fact*=i;item=1.0/fact;sum+=item;i+; printf(e=%lf, %dn,sum,i);return 0;结果:e=2.718282, 11Press any key to continue4.4 P4_4项目录入并编辑实验准备第四项内容,记录编辑编译过程中产生的错误。写出运行结果。背景:计算圆周率方法中有一种称为“蒙特卡罗”法。思路:在平面坐标系的第一象限中,以(0,0),(0,1),(1,0),(1,1)四个角为顶点的正方形中,产生随机点。已知由圆心为(0,0),起点为(1,0),终点为(0,1)的四分之一圆的扇形区域面积为,所以若随机点到圆心距离小于1,则认为落在这个扇形内部。根据落在这个扇形内部点的比例再乘以4即可得到圆周率的近似值。画出框图,编写程序,分别输出当随机点点数为10,100,1000,10000,50000等所求出的圆周就绪,并求出当随机点数为多少时,求出圆周率精度为小数点后3位。背景:C库函数中系统提供了两个函数用于产生随机数:srand()和rand()。原型为:函数一:int rand(void);功能:从srand(seed)中指定的seed开始,返回一个0, RAND_MAX(0x7fff)间的随机整数。函数二:void srand(unsigned seed);功能:参数seed是rand()的种子,用来初始化rand()的起始值。代码:#include #include #include int main()long n,s,count=50000;double x,y,pi;n=s=0;srand(time(NULL); /随机函数初始化,否则每次运行的结果都相同while(s=count) x=rand()/32737.0; y=rand()/32767.0; if(x*x+y*y)1) n+; s+;pi=(4.0*n)/count;printf(圆周率约等于%lfn,pi);return 0;结果1:10次圆周率约等于4.000000Press any key to continue结果2:100次圆周率约等于3.200000Press any key to continue结果3:1000次圆周率约等于3.044000Press any key to continue结果4:10000次圆周率约等于3.122800Press any key to continue结果5:50000次圆周率约等于3.129680Press any key to continue结果6:100000000次圆周率约等于3.138503Press any key to continue代码2:计算达到所需精度需

温馨提示

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

评论

0/150

提交评论