您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页c程序设计实验教案

c程序设计实验教案

来源:爱站旅游
《C程序设计上机实验》教案

授课时间 2007-3-22 第 1 次课 授课章节 实验器材 实验一 数据类性、运算符和表达式 任课教师 及职称 课时安排 李忠 副教授 2 奔腾计算机 使用教材和 主要参考书 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: 1.在计算机上如何编辑、编译、连接和运行一个C程序。 2.掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及赋值的方法 3.掌握不同的类型数据之间赋值的规律。 4.学会使用C的有关算术运算符,以及包含这些运算符的表达式。 实验内容: 1.检查所用的计算机系统是否已安装了C编译系统并确定它所在的子目录。 2.建立用户自己的子目录 3.进入TC工作环境 4.熟悉Turbo C集成环境 5.编辑并运行程序 题目1 写出以下程序运行的结果。 main( ) { char c1=‟a‟,c2=‟b‟,c3=‟c‟,c4=‟\\101‟,c5=‟\\116‟; printf(\"a%cb%c\c%c\abc\\n\",c1,c2,c3); printf(\"\\\b%c%c\",c4,c5); } 题目2 写出程序的运行结果。 main( ) { char c1,c2; c1=97; c2=98; printf(\"%c %c\\n\",c1,c2); printf(\"%d %d\\n\",c1,c2); } 思考:可否改成int c1,c2;? 1

《C程序设计上机实验》教案

题目3 写出程序运行结果。 main ( ) { int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(\"%d,%d,%d,%d\",i,j,m,n); } 思考:m=++i;与m=i++;的相同之处与不同之处? 题目5 下列程序的输出是 main( ) { int a=9; a+=a-=a+a; /*包含复合的赋值运算符的赋值表达式*/ printf(\"%d\\n\",a); } 思考:赋值表达式a+=a-=a+a的求解步骤? 题目6 下列程序的输出是 main( ) { int a=7,b=5; printf(\"%d\\n\",b=b/a); } 思考:若将printf语句中%d变为%f,可否输出分式的值? 题目7 下列程序的输出是 main( ) { int a=011; printf(\"%d\\n\",++a); } 题目8 若int类型数据占两个字节,则下列语句的输出为 main( ) { int k=-1; printf(\"%d,%u\\n\",k,k); } 思考:-1在内存中的存储形式? 2

《C程序设计上机实验》教案

复习思考题、作业题: 题目9 下列程序的运行结果是 #include main( ) { printf(\"%d\",null); } 运行情况: 因为变量null无定义,无法正确运行。 思考:如将null改为NULL,则结果如何? 题目10 若k,g均为int型变量,则下列语句的输出为 main( ) { int k,g; k=017; g=111; printf(\"%d\\",++k); printf(\"%x\\n\",g++); } 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

3

《C程序设计上机实验》教案

授课时间 2007-4-5 第 2 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验二 简单的C程序设计 奔腾计算机 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: (1)掌握C语言中赋值语句的使用方法。 (2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 重点:各种类型数据的输入输出的方法。 难点:能正确使用各种格式转换符。 实验内容: 题目1 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=‟a‟,c2=‟b‟。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 要求输出的结果如下: a=3b=4c=5 x=1.200000,y=2.400000,z=-3.600000 x+y=3.60y+z=-1.20z+x=-2.40 u=51274n=128765 c1=‟a‟or97(ASCII) c2=‟b‟or98(ASCII) 题目2 请写出下面程序的输出结果: main( ) { int a=5,b=7; float x=67.85,y=-7.124; char c=‟A‟; long n=1234567; unsigned u=65535; printf(\"%d%d\\n\",a,b); printf(\"%3d%3d\\n\",a,b); printf(\"%f,%f\\n\",x,y); printf(\"%-10f,%-10f\\n\",x,y); printf(\"%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\\n\",x,y,x,y,x,y); printf(\"%e,%10.2e\\n\",x,y); printf(\"%c,%d,%o,%x\\n\",c,c,c,c); 4

《C程序设计上机实验》教案

printf(\"%ld,%lo,%x\\n\",n,n,n); printf(\"%u,%o,%x,%d\\n\",u,u,u,u); printf(\"%s,%5.3s\\n\",\"COMPUTER\",\"COMPUTER\"); } 思考:解释倒数第三个printf语句的输出结果。 题目3 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‟A‟,c2=‟a‟。问在键盘上如何输入? main( ) {int a,b; float x,y; char c1,c2; scanf(\"a=%d b=%d\",&a,&b); scanf(\" %f %e\",&x,&y); scanf(\" %c %c\",&c1,&c2); printf(\"a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\\n\",a,b,x,y,c1,c2); } 题目4 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。 main( ) { float pi,h,r,l,s,sq,vq,vz; pi=3.1415926; printf(\"input r,h:\\n\"); scanf(\"%f,%f\",&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=4.0/3.0*pi*r*r*r; vz=pi*r*r*h; printf(\"l=%6.2f\\n\",l); printf(\"s=%6.2f\\n\",s); printf(\"sq=%6.2f\\n\",sq); printf(\"vq=%6.2f\\n\",vq); printf(\"vz=%6.2f\\n\",vz); }

5

《C程序设计上机实验》教案

运行结果: input r,h: 1.5,3↙ 1= 9.42 s= 7.07 sq= 28.27 vq= 14.14 vz= 21.21 5题目5 输入一个华氏温度,要求输出摄氏温度。公式为c=(F-32)。输出要有文字说明,取2位9小数。 main( ) { float c,f; printf(\"input f:\\n\"); scanf(\"%f\",&f); /*输入华氏温度f*/ c=(5.0/9.0)*(f-32); /*求摄氏温度c*/ printf(\"c=%5.2f\\n\",c); } 运行结果: input f: 78↙ c=25.56 思考:求c值的语句可否改成c=(5/9)*(f-32);为什么? 题目6 下列程序的运行结果为 main( ) { int x=2,y,z; x*=3+2;printf(\"%d\\",x); x*=y=z=4;printf(\"%d\\",x); x=y=1; z=x++-1; /*此处等价于z=x-1;x=x+1;故z为0,x为2*/ printf(\"%d,%d\\",x,z); z+=-x+++y; /*此处等价于z+=-(x++)+y*/ printf(\"%d,%d\\",x,z); x=40;y=4;z=4; x=y==z;printf(\"%d\\",x); x=x==(y=z);printf(\"%d\\n\",x); } 运行结果为: 10 40 2,0 3,-1 1 0 思考:表达式i+++j如何理解?

6

《C程序设计上机实验》教案

题目7 下列程序的运行结果为 main( ) { int i,j; i=16; j=(i++)+i; printf(\"%d\\",j); i=15; printf(\"%d\%d\\",++i,i); i=20; j=i--+i; printf(\"%d\\",j); i=13; printf(\"%d\%d\\n\",i++,i); } 运行结果为: 32 16 15 40 13 13 思考:如函数参数求值顺序是自左向右,则结果又将如何? 题目8 下列程序的运行结果为 main( ) { unsigned char a=‟a‟,b=‟b‟,c=‟c‟; a=a-32; b+=c-a; c=c-32+b-a; printf(\"a=%c,b=%c,c=%c\\n\",a,b,c); } 题目9 下列程序的运行结果为 #include\"stdio.h\" main( ) { int x=2,y=4,z=40; x*=3+2; printf(\"%d\\n\",x); x=y=z; printf(\"%d\\n\",x); } 思考:赋值运算符的结合顺序?

7

《C程序设计上机实验》教案

复习思考题、作业题: 题1 下列程序的运行结果为 main( ) { int a=5; printf(\"\\n%d,\",(3+5,6+8)); a=(3*5,a+4); printf(\"a=%d\\n\",a); } 思考:程序第5行如改为a=3*5,a+4;结果将如何? 题2 输入a字母时,下列程序运行结果为 #include main( ) { char ch; ch=getchar( ); (ch>=‟a‟&&ch<=‟z‟)?putchar(ch+‟A‟- ‟a‟):putchar(ch); } 题3 下列程序运行结果为 main( ) { int x,y,z; x=24; y=024; z=0x24; printf(\"%d,%d,%d\\n\",x,y,z); } 题4 执行下面的程序后,变量w,x,y,z的值分别为: main( ) { int w=5,x=4,y,z; y=w++*w++*w++; z=--x*--x*--x; printf(\"%d %d %d %d\",w,x,y,z); } 题5 下列程序运行结果为 main( ) { unsigned x1; int b=-1; x1=b; printf(\"%u\",x1); }

8

《C程序设计上机实验》教案

下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

9

《C程序设计上机实验》教案

授课时间 2007-4-19 第 3 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验三 逻辑结构程序设计 奔腾计算机 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: (1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if语句和switch语句。 (4)结合程序掌握一些简单的算法。 (5)学习调试程序。 重点、难点:调试程序 实验内容: 题目1 有3个整数a、b、c,由键盘输入,输出其中最大的数。 方法1: main( ) { int a,b,c; printf(\"input three integer:\"); scanf(\"%d,%d,%d\",&a,&b,&c); if (a10

《C程序设计上机实验》教案

方法2: main( ) { int a,b,c,temp,max; printf(\"input three integer:\"); scanf(\"%d,%d,%d\",&a,&b,&c); temp=(a>b)?a:b; /*temp为a、b中较大值*/ max=(temp>c)?temp:c; /*在temp和c中比较出最大值*/ printf(\"max=%d\\n\",max); } 运行结果: input three integer:12,34,9↙ max= 34 x题目2 有一函数:y=2x13x11(x1)(1x10),写一程序,输入x,输出y值。 (x10)main( ) { int x,y; printf(\"input x:\"); scanf(\"%d\",&x); if(x<1) /*当x<1时,求对应y值*/ { y=x; printf(\"x=%3d,y=x=%d\\n\",x,y); } else if(x<10) /*当1≤x<10时,求对应y值*/ { y=2*x-1; printf(\"x=%3d,y=2*x-1=%d\\n\",x,y); } else /*当x≥10时,求对应y值*/ { y=3*x-11; printf(\"x=%3d,y=3*x-11=%d\\n\",x,y); } } 运行结果: input x:20↙ x= 20,y=3*x-11=49

11

《C程序设计上机实验》教案

题目3 给出一百分制成绩,要求输出成绩等级„A‟、„B‟、„C‟、„D‟、„E‟。90分以上为„A‟,80~分为„B‟,70~79分为„C‟,60~69分为„D‟,60分以下为„E‟。 main( ) { float score; char grade; printf(\"input student score:\"); scanf(\"%f\",&score); while (score>100||score<0) /*当输入错误时,提示用户并允许重新输入*/ { printf(\"error\\n.\"); scanf(\"%f\",&score); } switch((int)(score/10)) /*将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(\"score: %5.1f,grade: %c\\n\",score,grade); } 运行结果: input student score:90.5↙ score: 90.5,grade:A 题目4 试编程判断输入的正整数是否既是5又是7的整数倍。若是,则输出yes;否则输出no。 main( ) { int x; printf(\"input x:\"); scanf(\"%d\",&x); if(x%5==0&&x%7==0) printf(\"yes\"); else printf(\"no\"); }

12

《C程序设计上机实验》教案

题目5 输入年份和月份,求该月有多少天。 main( ) {int year,month,days; printf(\"Enter year and month:\"); scanf(\"%d%d\",&year,&month); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: /* 处理\"大\"月*/ days=31;break; case 4: case 6: case 9: case 11: /* 处理\"小\"月 */ days=30;break; case 2: /* 处理\"平\"月 */ if(year%4==0&&year%100!=0||year%400==0) days=29; /* 如果是闰年 */ else days=28; /* 不是闰年 */ break; default: printf(\"Input error! \\n\"); /* 月份输入错误 */ days=0; } if(days!=0) printf(\"%d, %d is %d days\\n\",year,month,days); } 题目6通过键盘输入字符,判断其为控制、数字、大写字母、小写字母和其他字母的哪一类。 #include \"stdio.h\" main( ) {char c; printf(\"Enter a char:\"); c=getchar( ); /* 从键盘读取输入的一个字符,然后分类判断 */ if(c<0x20) printf(\"\\nThe char is a control char.\\n\"); else if (c>=‟0‟&&c<=‟9‟) printf(\"\\nThe char is a digit char.\\n\"); else if (c>=‟A‟&&c<=‟Z‟) printf(\"\\nThe char is a captal char.\\n\"); else if (c>=‟a‟&&c<=‟z‟) printf(\"\\nThe char is a lower char. \\n\"); else printf(\"\\nThe char is an other char. \\n\"); }

13

《C程序设计上机实验》教案

复习思考题、作业题: 1. 输入3个整数,输出其中绝对值最小的数。 2. 输入3个正整数m,n,x,判断x是否是m,n的公约数或公倍数,并输出下列信息之一:①是公约数;②是公倍数;③既不是公约数,也不是公倍数;④既是公约数,又是公倍数。 3. 有一个半径为15的圆,圆心坐标为原点(0,0),从键盘输入任意点的坐标(a,b),判断该点在圆内,在圆外,还是恰巧在圆周上。 4. 在屏幕上显示如下提示: please input a char : 并等待用户键入一个字符,如输入的是大写英文字母,则输出其对应的小写形式;如输入的是小写英文字母,则输出其对应的大写形式;如是数字字符,则输出其ASCII码值;如是其它字符,打印一行‟*‟号组成的图案。 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

14

《C程序设计上机实验》教案

授课时间 2007-5-10 第 4 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验四 循环控制 奔腾计算机 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: 熟悉掌握用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。进一步学习调试过程。 实验重点,难点: 实验内容: 题目1 输入两个正整数m和n,求其最大公约数和最小公倍数。 main( ) { int p,r,n,m,temp; printf(\"input n and m:\"); scanf(\"%d,%d\",&n,&m); if(n15

《C程序设计上机实验》教案

运行情况: Input n and m :12,8↙ Gongyueshu: 4 gongbeishu:24 思考:请根据最大公约数、最小公倍数的定义考虑有无其它算法? 题目2 输入一行字符,分别统计出其中英文字母、空格、数字和其他字母的个数。 #include main( ) { char c; int letter=0,space=0,digit=0,other=0; printf(\"input a line letter:\\n\"); while((c=getchar( ))!=‟\\n‟) /*读取当前字符,如不为回车符则进行统计*/ { if(c>=‟a‟ &&c<=‟z‟||c>=‟A‟&&c<=‟Z‟) letter++; else if(c==‟ ‟) space++; else if(c>=‟0‟&&c<=‟9‟) digit++; else other++; } printf(\" letter=%d,space=%d,digit=%d,other=%d\\n\",letter,space,digit,other); } 思考:为什么用getchar函数可以实现一行字符的输入并判断? 题目3 求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。 main( ) { int a,n,i=1,sn=0,tn=0; printf(\"a,n:\"); scanf(\"%d,%d\",&a,&n); while(i<=n) {tn=tn+a; /*赋值后的tn为i个a组成数的值*/ sn=sn+tn; /*赋值后的sn为多项式前i项之和*/ a=a*10; ++i; } 16

《C程序设计上机实验》教案

printf(\"a+aa+aaa+…=%d\\n\",sn); } 运行情况: n:2,5↙ a+a+aaa+…=24690 题目4 求n!(即求1!+2!+3!+4!+…+20!)。 n120main( ) { float s=0,t=1; int n; for (n=1;n<=20;n++) { t=t*n; /* n!*/ s=s+t; /*将各项累加*/ } printf(\"1!+2!+…+20!=%e\\n\",s); } 运行结果: 1!+2!+…+20!=2.56133e+18 思考:s可否定义为int或long型? 1题目5 求k+k+ 。 k1k1k1k21005010main( ) { int n1=100,n2=50,n3=10; float k; float s1=0,s2=0,s3=0; for(k=1;k<=n1;k++) /*计算1到100的和*/ s1=s1+k; for (k=1;k<=n2;k++) /*计算1到50各数的平方和*/ s2=s2+k*k; for (k=1;k<=n3;k++) /*计算1到10各数的倒数和*/ s3=s3+1/k; printf(\"total=%8.2f\\n\",s1+s2+s3); } 运行结果: total=47977.93 思考:如定义k为整型,则程序应作如何修改以保证正确性?

17

《C程序设计上机实验》教案

题目6 求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。 main( ) { int i,j,k,m,n; for(i=1;i<=4;i++) /*i为百位上数字,范围是1---4*/ for(j=0;j<=9;j++) /*j为十位上数字,范围是0---9*/ for(k=0;k<=9;k++) /*k为个位上数字,范围是0---9*/ { m=i*100+j*10+k; /*m为100---499之间的一个数*/ n=i*i*i+j*j*j+k*k*k; /*n为m的各位数字的立方和*/ if(m==n) printf(\"%5d\",m); } } 解法2: main( ) { int i,j,k,m; for(m=100;m<500;m++) { i=m/100; /* 取百位 */ j=m/10-i*10; /* 取十位 */ k=m%10; /* 取个位 */ if (m==i*i*i+j*j*j+k*k*k) /* 如满足条件,则输出 */ printf(\"%5d\",m); } } 运行结果为: 153 370 371 407 思考:解法1中,最内层循环体中的语句共执行多少次? 题目7 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并输出。 main( ) { int i,a,m; for(i=1;i<1000;i++) /*判断i是否完数*/ { for(m=0,a=1;a<=i/2;a++) if(!(i%a)) m=m+a; /*如a是i的因子,则累加到m*/ if (m==i)printf(\"%4d\",i);/*如因子和m与自身相等,则是完数,输出*/ } } 18

《C程序设计上机实验》教案

复习思考题、作业题: 1.打印下三角形式的乘法口诀表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 … … … … … … 1*9=9 2*9=18 … … 9*9=81 2.打印出所有个位数字为5、且能被3整除的五位数。 3.一个数列,前三个数是0,0,1,以后每个数都是其前面三个数之和,请编程打印出此数列的前三十个数。 4.两个不同的整数a,b,如果a的所有因子之和等于b,b的所有因子之和等于a,则a与b互称为亲密数。打印出1000以内所有的亲密数对。 5.歌德提出,一个不小于6的偶数必定能表示为两个素数之和,例如:6=3+3,8=3+5,10=3+7,…编程验证此猜想 ,要求当用户输入任意一个不小于6的偶数时,打印出它所能分解成的两个素数。 6.打印如下图案: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日 19

《C程序设计上机实验》教案

授课时间 2007-5-17 第 5 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验5 数组 奔腾计算机 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: (1)掌握一维数组和二维数组定义、赋值和输入输出的方法; (2)掌握字符数组和字符串函数的使用; (3)掌握与数组有关的算法(特别是排序算法)。 实验重点,难点:掌握字符数组和字符串函数的使用 20

《C程序设计上机实验》教案

实验内容: 题目1 用筛法求100之内的素数。 #include main( ) { int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; /* a[1]--a[100]中存放数据 */ for(i=2;i《C程序设计上机实验》教案

题目2 用选择法对10个整数排序。 main( ) { int i,j,min,temp,a[11]; printf(\"Enter data:\\n\"); for (i=1;i<=10;i++) { printf(\"a[%d]=\",i); scanf(\"%d\",&a[i]); /*输入10个数*/ } printf(\"\\n\"); for (i=1;i<=10;i++) printf(\"%5d\",a[i]); /*输出这10个数*/ printf(\"\\n\"); for (i=1;i<=9;i++) /*以下8行是对10个数排序*/ { min=i; for (j=i+1;j<=10;j++) if (a[min]>a[j]) min=j; temp=a[i];/*以下3行将a[i+1]至a[10]中最小者与a[i]对换*/ a[i]=a[min]; a[min]=temp; } printf(\"\\nThe sorted numbers:\"); for (i=1;i<=10;i++) printf(\"%5d\",a[i]); /*输出已排好序的10个数*/ } 运行结果: 题目3 求一个3×3矩阵对角线元素之和。 main( ) { int i,j,a[3][3],sum=0; printf(\"Enter data:\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\"%d\",&a[i][j]); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) sum=sum+a[i][j]; printf(\"sum=%d\\n\",sum); } 思考:如果求矩阵两条对角线元素的和,如何修改程序? 22

《C程序设计上机实验》教案

题目4 已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 main( ) { int i,j,number; int a[11]={1,4,6,9,13,16,19,28,40,100}; printf(\"array a:\\n\"); for(i=0;i<10;i++) /* 输出数组原有元素 */ printf(\"%d \",a[i]); printf(\"\\n\"); printf(\"Insert data:\"); scanf(\"%d\",&number); /* 读入要插入的数据 */ i=0; /* 以下三行找到插入位置i */ while (a[i]=i;j--) /* 将插入点以后的元素顺序后移一位 */ a[j+1]=a[j]; a[i]=number; /* 插入数据 */ printf(\"Now,array a:\\n\"); for(i=0;i<11;i++) /* 输出插入后仍有序的数组 */ printf(\"%d \",a[i]); } 题目5 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。 #define N 5 main( ) { int a[N],i,temp; printf(\"Enter array a:\\n\"); for (i=0;i23

《C程序设计上机实验》教案

题目6。已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插 入数组中。 main( ) { int i,j,number; int a[11]={1,4,6,9,13,16,19,28,40,100}; /*数组初始化时预留一位置*/ printf(\"array a:\\n\"); for(i=0;i<10;i++) /* 输出数组原有元素 */ printf(\"%d \",a[i]); printf(\"\\n\"); printf(\"Insert data:\"); scanf(\"%d\",&number); /* 读入要插入的数据 */ i=0; /* 以下三行找到插入位置i */ while (a[i]=i;j--) /* 将插入点以后的元素顺序后移一位 */ a[j+1]=a[j]; a[i]=number; /* 插入数据 */ printf(\"Now,array a:\\n\"); for(i=0;i<11;i++) /* 输出插入后仍有序的数组 */ printf(\"%d \",a[i]); } 运行情况如下: array a: 1 4 6 9 13 16 19 28 40 100 Insert data:5↙ Now,array a: 1 4 5 6 9 13 16 19 28 40 100 24

《C程序设计上机实验》教案

题目7 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。 main( ) { int i,j,upp,low,dig,spa,oth; char text[3][80]; upp=low=dig=spa=oth=0; /*各类字符个数初始为0*/ for(i=0;i<3;i++) { printf(\"Please input line %d:\\n\",i+1); /*提示输入每一行字符串*/ gets(text[i]); /*读入一行字符串text[i]*/ for(j=0;j<80 && text[i][j]!=‟\\0‟;j++) /*当text[i]串未结束时判断其中字符并统计*/ { if(text[i][j]>=‟A‟&& text[i][j]<=‟Z‟) upp++; else if(text[i][j]>=‟a‟&& text[i][j]<=‟z‟) low++; else if(text[i][j]>=‟0‟&& text[i][j]<=‟9‟) dig++; else if(text[i][j]==‟ ‟) spa++; else oth++; } } printf(\"upper case:%d\\n\",upp); /*输出各类字符的个数*/ printf(\"lower case:%d\\n\",low); printf(\"digit:%d\\n\",dig); printf(\"space:%d\\n\",spa); printf(\"other:%d\\n\",oth); }

25

《C程序设计上机实验》教案

复习思考题、作业题: 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

26

《C程序设计上机实验》教案

授课时间 2007-5-24 第 6 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验六 函数 奔腾计算机 multimedia 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。 (5)学习对多文件程序的编译和运行。 实验重点,难点: 题目1 写两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 int hcf(int u,int v) /*求两个整数u、v的最大公约数*/ { int t,r; if(v>u) {t=u;u=v;v=t;} while((r=u%v)!=0) { u=v; v=r; } return(v); } int lcd(int u,int v,int h) /*已知最大公约数h,求u、v的最小公倍数*/ { return(u*v/h); } 27

《C程序设计上机实验》教案

main( ) { int u,v,h,l; scanf(\"%d,%d\",&u,&v); /*读入两个数*/ h=hcf(u,v); /*求最大公约数*/ printf(\"H.C.F=%d\\n\",h); l=lcd(u,v,h); /*求最小公倍数*/ printf(\"L.C.D=%d\\n\",l); } 运行结果如下: 24,16↙ H.C.F=8 L.C.D=48 题目2 写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 main( ) { int prime(int); /*函数原型声明*/ int n; printf(\"\\nInput an integer:\"); scanf(\"%d\",&n); if (prime(n)) /*如prime函数返回值“真”,则是素数*/ printf(\"\\n%d is a prime.\"n); else printf(\"\\n%d is not a prime.\",n); } int prime(int n) /*此函数当n为素数时返回1,否则返回0*/ { int flag=1,i; for (i=2;i28

《C程序设计上机实验》教案

array[i][j]=array[j][i]; array[j][i]=t; } } main( ) { int i,j; printf(\"Input array:\\n\"); for (i=0;i29

《C程序设计上机实验》教案

printf(\"Inverse string:%s\\n\",str); /*输出转换后的字符串*/ } int inverse(char str[]) /*函数定义*/ { char t; int i,j; for(i=0,j=strlen(str);i30

《C程序设计上机实验》教案

复习思考题、作业题: 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

31

《C程序设计上机实验》教案

授课时间 2007-5-31 第 7 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验七 编译预处理 奔腾计算机 multimedia 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的 (1)掌握宏定义的方法; (2)掌握文件包含处理方法; (3)掌握条件编译的方法。 实验重点,难点: 实验内容: 题目1 定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 #define SWAP(a,b) t=b;b=a;a=t main( ) { int a,b,t; printf(\"Input two integers a,b:\"); scanf(\"%d,%d\",&a,&b); SWAP(a,b);/* 宏展开后为t=b;b=a;a=t;*/ printf(\"Now,a=%d,b=%d\\n\",a,b); } 运行结果如下: Input two integers a,b:3,4↙ Now,a=4,b=3 思考:可否定义一个能实现形参变量a、b相交换的函数swap(a,b),在主函数中调用它实现实参数变量的交换? 32

《C程序设计上机实验》教案

题目2 输入两个整数,求它们相除的余数。用带参的宏来实现,编程序。 #define SURPLUS(a,b) a%b main( ) { int a,b; printf(\"Input two integers a,b:\"); scanf(\"%d,%d\",&a,&b); printf(\"Remainder is %d\\n\",SURPLUS(a,b)); } 运行结果如下: Input two integers a,b:60,13↙ Remainder is 8 题目3 给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可定义为LEAP_YEAR,形参为y,即定义宏的形式为: #define LEAP_YEAR(y)(读者设计的字符串), 在程序中用以下语句输出结果: if(LEAP_YEAR(year)) printf(\"%d is a leap year\",year); else printf(\"%d is not a leap year\",year); #define LEAP_YEAR(y) (y%4==0)&&(y%100!=0)||(y%400==0) main( ) { int year; printf(\"\\nInput year:\"); scanf(\"%d\",&year); if(LEAP_YEAR(year)) printf(\"%d is a leap year.\\n\",year); else printf(\"%d is not a leap year.\\n\",year); } 运行结果: Input year:1990↙ 1990 is not a leap year.

33

《C程序设计上机实验》教案

复习思考题、作业题: 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

34

《C程序设计上机实验》教案

授课时间 2007-6-7 第 8 次课 授课章节 实验器材 与手段 使用教材和 主要参考书 实验八 指针 奔腾计算机 multimedia 任课教师 及职称 课时安排 李忠 副教授 2 C程序设计题解与上机指导(第三版).谭浩强编著 Programming In ANSI C(third edition),E. Balagurusami著 实验目的: (1)通过实验进一步掌握指针的概念,会定义和使用指针变量; (2)能正确使用数组的指针和指向数组的指针变量; (3)能正确使用字符串的指针和指向字符串的指针变量; (4)能正确使用指向函数的指针变量: (5)了解指向针的指针的概念及其使用方法。 实验重点,难点: 实验内容: 1.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少? #include main( ) { int upper=0,lower=0,digit=0,space=0,other=0,i=0; char *p,s[20]; printf(\"Input string:\"); while((s[i]=getchar())!=‟\\n‟) i++; /*从缓冲区逐个读取字符赋给字符数组 */ p=&s[0]; /* 指针指向字符串的起始字符 */ while(*p!=‟\\n‟) /* 当串未结束时,逐个字符统计 */ { if((*p>=‟A‟)&&(*p<=‟Z‟)) ++upper; else if((*p>=‟a‟)&&(*p<=‟z‟)) ++lower; else if(*p==‟ ‟ ) ++space; else if((*p>=‟0‟)&&(*p<=‟9‟)) 35

《C程序设计上机实验》教案

++digit; else ++other; p++; } printf(\"upper case:%d lower case:%d \",upper,lower); printf(\"space:%d digit:%d other:%d\\n\",space,digit,other); } 运行结果: Input string:Today is 2003.1.1↙ upper case:1 lower case:6 space:2 digit:6 other:2 思考:此程序输入字符串时还可用哪个函数? 题目2写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 main( ) { int len; char str[50]; printf(\"Input string:\"); scanf(\"%s\",str); len=length(str); /*调用函数求实参字符串的长度*/ printf(\"The length of string is %d.\",len); } length(char *p) /* 此函数返回以p为首地址的字符串长度 */ { int n; n=0; while(*p!=‟\\0‟) /* 当串未结束时 */ { n++; /* 计数 */ p++; /* 指针指向下一个字符 */ } return(n); } 运行结果: Input string:Hello↙ The length of string is 5. 思考:如运行时输入1234 567↙,则输出结果将是什么? 36

《C程序设计上机实验》教案

题目3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数: 输入10个数; 进行处理; 输出10个数。 main( ) { int number[10]; input(number); /*调用输入函数输入number数组的元素*/ max_min_value(number); /*调用对换函数处理number数组*/ output(number); /*调用输出函数输出number数组中元素的值*/ } input(int number[10]) /*此函数向首地址为number的数组输入10个元素*/ { int i; printf(\"Input 10 numbers:\"); for(i=0;i<10;i++) scanf(\"%d\",&number[i]); } max_min_value(int array[10]) /*此函数交换array数组的对应元素*/ { int *max,*min,*p,*array_end; array_end=array+10; max=min=array; /*max、min初值为数组首地址*/ for(p=array+1;p*max) max=p; /*max中存放最大数的地址*/ else if(*p<*min) min=p; /*min中存放最小数的地址*/ *p=array[0];array[0]=*min;*min=*p; /*最小数与第一个数交换*/ *p=array[9];array[9]=*max;*max=*p; /*最大数与最后一个数交换*/ return; } output(int array[10]) /*此函数输出array数组的10个元素*/ { int *p; printf(\"Now,they are:\"); for(p=array;p<=array+9;p++) printf(\"%d \",*p); } 运行结果: Input 10 numbers:32 24 56 78 1 98 36 44 29 6↙ Now,they are:1 24 56 78 32 6 36 44 29 98 37

《C程序设计上机实验》教案

题目4 写一函数,将一个3行3列的矩阵转置。 main( ) { int a[3][3]={1,2,3,4,5,6,7,8,9},*p,i; p=&a[0][0]; move(p); /* 以二维数组的起始元素的地址作实参调用move函数 */ for(i=0;i<3;i++) /*输出转置后各行元素的值 */ printf(\"\\n%5d%5d%5d\",a[i][0],a[i][1],a[i][2]); } move(pointer) /* 将以pointer为起始地址的二维数组转置 */ int *pointer; { int i,j,t; for(i=0;i<3;i++) /* 将数组的对应元素相交换,实现转置 */ for(j=i;j<3;j++) { t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; } } 思考:如p是指向二维数组中a中元素的指针,开始指向a[0][0],则a[i][j]的地址如何表示?如p是指向二维数组中每一行的指针,则又有什么不同? 题目5 编程序将字符串s中所有的空格字符删去。 #include\"stdio.h\" main( ) { char *s=\"Our teacher teachs C language\"; /* 字符数组初始化 */ int i,j; printf(\"\\nBefore delete is: %s \",s); for(i=j=0;s[i]!=‟\\0‟;i++) if(s[i]!=‟ ‟) s[j++]=s[i];/* 如当前字符不是空格,则重新按顺序存放到原数组中 */ s[j]=‟\\0‟; /* 加结束标记 */ printf(\"\\nNow is: %s:\\n\",s); } s[j++]=s[i];/* 如当前字符不是空格,则重新按顺序存放到原数组中 */ s[j]=‟\\0‟; /* 加结束标记 */ printf(\"\\nNow is: %s:\\n\",s); } 思考:去掉程序中的s[j]=‟\\0‟; 语句,输出结果如何。

38

《C程序设计上机实验》教案

题目6 编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字符的大、小写按不同字符处理。 解法1: #include \"stdio.h\" #include \"conio.h\" int fun(char s[],int c) /* 删除串s中的ASCII码值为c的字符 */ { int i=0; char *p; p=s; /* 指针p指向起始字符 */ while(*p) /* 当串未结束时 */ { if(*p!=c) /* 如不是要删除的字符 */ {s[i]=*p; /* 保留到数组中 */ i++;} /* 修改下一个被保留字符在数组中的下标 */ p++; /* 继续判断原串中的下一个字符 */ } s[i]=‟\\0‟; /* 被保留字符的末尾加结束标志,以便输出 */ } main( ) { static char str[]=\"turboc and borlandc++\";/* 字符数组初始化 */ char ch; clrscr( ); printf(\"the old string:%s\\n\",str); /* 输出原字符串 */ printf(\"Enter a char:\"); scanf(\"%c\",&ch); /* 输入要删除的字符 */ fun(str,ch); /* 调用函数修改字符串 */ printf(\"the new string:%s\\n\",str); /* 输出新串 */ } 解法2: fun函数体改写为: { int i,j; for(i=j=0; *(s+i);i++) if(s[i]!=c) s[j++]=s[i]; s[j]=‟\\0‟; } 思考:如果不区分同一个字符的大小写,应如何处理?

39

《C程序设计上机实验》教案

题目7 编写函数fun,将s 所指向字符串的正序和反序进行连接,形成一新串放在t数组中。 #include \"stdio.h\" #include \"string.h\" void fun(char *s,char *t) { int i,d; d=strlen(s); /* 得到s串的长度 */ for(i=0;i40

《C程序设计上机实验》教案

复习思考题、作业题: 下次课预习要点 实施情况及实验效果分析 学院审核意见 学院负责人签字 年 月 日

41

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务