第2章 实验内容 实验1 初识运行环境VC++2010和运行过程 一、实验目的 (1)了解C程序设计编程环境VisualC++2010(简写VC++2010)等,掌握运行一个C 程序设计的基本步骤,包括编辑、编译、连接和运行。 (2)了解C语言程序的基本组成,能够编写简单的C程序。 (3)了解程序调试的思想,能找出并改正C程序中的语法错误。 (4)介绍Code::Blocks、Dev-C++等C/C++集成开发平台(参考)。 二、实验内容 1.在“我的电脑”某磁盘上新建一个文件夹 用于存放C程序,文件夹名字自定。 2.运行实例 在屏幕上显示一个短句“Hello,World!”。源程序如下。 #include int main(void) { printf("Hello, World!\n"); } 运行结果: Hello, World! 基本步骤: (1)启动VC++2010。选择“开始”→“程序”→MicrosoftVisualC++2010Express→ MicrosoftVisualC++2010Express进入VC++2010编程环境。 (2)创建项目。 在VC++2010下开发程序首先要创建项目,不同类型的程序对应不同类型的项目,初 学者应该从控制台程序学起。打开VC++2010,在上方菜单栏中选择“文件”→“新建”→ “项目”命令。 选择“Win32控制台应用程序”,填写好项目名称,选择好存储路径,单击“确定”按钮即 可。如果安装的是英文版的VC++2010,那么对应的项目类型是Win32 Console Application。另外还要注意,项目名称和存储路径最好不要包含中文。 新建Win32应用程序向导之设置页,请先取消“预编译头”,再勾选“空项目”,然后单击 40 “完成”按钮就创建了一个新的项目。 (3)新建源程序文件(*.c或*.cpp)。 在空项目的“源文件”文件夹处右击鼠标,在弹出菜单中选择“添加”→“新建项”命令,在 “代码”分类中选择C++文件(.cpp),填写文件名(文件名的扩展名建议指定为“.c”,表示是C 语言源程序,将来会用C 语言编译器给予编译等),单击“添加”按钮就添加了一个新的源 文件。 (4)编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态 下,同时注意大小写,一般都用小写)。 在编辑窗口中输入源程序,然后,按Ctrl+S组合键或单击工具栏上的“保存”按钮或执 行“文件”→“保存”或“文件”→“另存为”菜单项操作。 (5)编译(生成*.obj)。 直接按Ctrl+F7组合键,对当前源程序文件进行编译。 (6)生成解决方案(即编译+连接,生成*.exe)。 选择“调试”→“生成解决方案”菜单项或直接按F7 键(构建(即编译+连接)整个解决 方案)。 (7)运行。 选择“调试”→“启用调试”菜单项或按F5键直接启用调试运行;直接按Ctrl+F5组合 键开始运行(不调试),运行时命令行窗口会停留显示结果,最后提示“请按任意键继续”。 (8)关闭(项目)解决方案。 选择“文件”→“关闭解决方案”菜单项。 (9)打开文件。 选择“文件”→“打开”菜单项。 (10)查看C源文件、目标文件和可执行文件的存放位置。 一般源文件在项目目录下,目标文件和可执行文件在“项目目录\Debug”中。 3.自己编写程序 编写程序在屏幕上显示一个短句“ThisismyfirstCprogram.”。 4.错误程序调试示范 在屏幕上显示一个短句“Welcometoyou!”。带有错误的源程序如下。 #include void mian() { printf(Welcome to you!\n") } 操作步骤: (1)按照运行实例中介绍的步骤(1)~(4)输入上述源程序并保存。 (2)编译,按Ctrl+F7组合键或按F5键启用调试运行,信息输出窗口中显示编译出错 信息,如图2.1所示。 (3)找出错误,在输出窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序 出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。 图2. 1 编译错误提示1 第4行,出错信息:Welcome 是一个未定义的变量,但Welcome 并不是变量,出错的原 因是Welcome 前少了一个双引号。 (4)改正错误,重新编译,2所示出错信息。 得到如图2. 图2. 2 编译错误提示2 出错信息:“}”前少了分号(;)。 (5)再次改正错误,在“}即printf() 后加上“;”(英文状态), 重新编译(按Ctrl+F7 组合键), 显示正确,3所示。前(”) 如图2. 41 图2. 3 编译成功提示 (6)连接,选择“调试”→“生成解决方案”菜单项或直接按F7 键,出现如图2. 4所示出 错信息。 图2. 4 连接错误提示 出错提示信息:缺少主函数。 所示 ( 。 7)改正错误,即把“”改为“”后,重新生成,输出窗口显示生成成功,如图2. mianmain5 (8)运行,按Ctr如图2. l+F5 组合键,6所示。观察结果是否与要求一致。 42 43 图2.5 生成项目解决方案(即编译+连接)成功提示 图2.6 运行结果界面 【二维码:VisualC++ 2010Express的基本使用】:★02-02———VSC++2010Express的 基本使用.docx 5.自己改错 改正下列程序中的错误。 带有错误的源程序: #include int main(void) { Printf("****************\n"); Printf(" Welcome") Printf("****************\n"); } 三、实验报告要求 将实验中的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过 程中的心得体会,写在实验报告上。后续实验报告要求相同。 四、Code::BlocksC/C++集成开发平台(选阅) Code::Blocks是一个开放源码的全功能的跨平台C/C++集成开发环境。按需也可以 44 作为C语言的实验平台。具体可通过扫描如下二维码来初步了解与使用。 【二维码:Code::Blocks集成开发平台简介】:★01-02———CodeBlocksC&C++ 集成开 发平台.docx 【二维码:Code::Blocks新建项目操作视频】:★01-03———CodeBlocks新建项目.mp4 五、Dev-C++集成开发平台(选阅) Dev-C++也是一个Windows环境下C&C++ 开发工具,它是一款自由软件,遵守GPL 协议。按需也可以作为C 语言的实验平台。具体可通过扫描下面二维码来初步了解与 使用。 【二维码:Dev-C++ 集成开发平台简介】:★01-04———Dev-C++集成开发平台.docx 【二维码:Dev-C++ 新建项目操作视频】:★01-05———Dev-C++新建控制台项目.mp4 实验2 熟悉VC++ 2010环境及算法 一、实验目的 (1)进一步掌握VC++2010环境下C程序的建立、编辑、编译和执行过程。 (2)能够设计与表示解题的算法。 (3)了解基本输入/输出函数scanf()、printf()的格式及使用方法。 (4)掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。 二、实验内容 【二维码:VisualC++ 2010Express的基本使用】:★02-02———VSC++ 2010Express的 基本使用.docx 1.改错题 (1)以下程序的功能是计算x-y的值,并将结果输出。纠正程序中存在的错误,以实 现其功能。 #include int main(void) { Int x=2;y=3;a /*变量定义*/ A=x-y; /*运算*/ printf('a=%d",a); /*输出*/ printf("\n"); /*换行*/ return 0; } (2)以下程序的功能是从键盘输入两个数a和b,求它们的平方和,并在屏幕上输出。 输入该C程序,编译并运行,记下屏幕的输出结果。 #include int main(void) 45 { Int a,b,sum; /*变量定义*/ printf("Please Input a,b\n"); /*输出输入提示信息*/ scanf("%d %d",&a,&b); /*输入变量值*/ sum=a*a+b*b; /*运算*/ printf("%d+%d=%d\n",a,b,sum); /*输出结果*/ return 0; } (3)以下程序的功能是求两个数中的较大数据并输出。纠正程序中存在的错误,以实 现其功能。 #include int main(void) { Int a,b,max; /*变量定义*/ Scanf("%d,%d",&a,&b); /*输入变量值*/ Max=a; /*先把a 作为较大数*/ If(max int main(void) { int a,b,m; printf("Input a,b please!"); scanf("%d%d ",&a,&b); /*赋值语句,将a 和b 之积赋给m*/ /*输出a 和b 积的结果值并换行*/ return 0; } 3.设计与表示算法 (1)判断一个数n能否同时被3和5整除(能用多种方式表示算法)。 (2)对配套教材第2章中例2-2~例2-14的算法用多种方式表示。 4.编程题 (1)编写程序,运行后输出信息“Howareyou!”。 (2)编写程序,从键盘输入3个整数,输出它们的立方和。 实验3 数据类型及其运算 一、实验目的 (1)理解C语言中各种数据类型的含义,掌握各种数据类型的定义方法。 46 (2)掌握C程序中常量、变量的定义与使用。 (3)掌握C语言中数据类型和运算符的基本使用。 二、实验内容 1.程序运行 对配套教材第3章中的例3-1~例3-33选择性地输入、运行。 2.改错题 (1)以下程序的功能是已知圆锥半径r和高h,计算圆锥体积V。纠正程序中存在的错 误,以实现其功能。计算圆锥体积的公式为V=1/3πr2h。 #include stdio.h int main(void) { float r=10,h=5; V=1/3*3.14159*r^2*h; printf("v=%d\n",V); } (2)以下程序的功能是通过键盘输入两个整数,分别存放在变量x、y中,不借用第3个 变量实现变量x、y互换值。纠正程序中存在的错误,以实现其功能。 #include int main(void) { int x,y; printf("请输入两个整数\n"); scanf("%d%d",x,y); printf("互换前的x:%d y:%d\n"); x=x+y y=x-y; x=x-y; printf("互换后的x:%d y:%d/n",x,y); } 3.程序填空题 (1)以下程序的功能是从键盘输入3个整数,分别存入变量i1、i2、i3中,然后将变量i1 的值存入变量i2,将变量i2的值存入变量i3,将变量i3的值存入变量i1,输出经过转存后变 量i1、i2、i3的值。补充完善程序,以实现其功能(提示:使用中间变量)。 #include int main(void) { int i1,i2,i3, ; printf("Please input i1,i2,i3: "); scanf("%d%d%d", ); ; /*注意赋值顺序*/ ; ; 47 ; printf("i1=%d\ni2=%d\ni3=%d\n",i1,i2,i3); } (2)计算当x=8时,公式y=(1+x2)/(x2+4x1/2+10)的值。补充完善程序,以实现其 功能。 #include //使用数学函数需包含math.h 头文件 int main(void) { float x=8.0,y; printf("%f",y); } 4.编程题 (1)定义3个字符变量并分别赋给3个不同的大写英文字母,把它们转换成小写字母 后输出。 (2)定义3个整形变量并给它们赋值,输出它们的平均值与积。 实验4 顺序结构程序设计 一、实验目的 (1)掌握scanf()、printf()以及其他常用输入/输出函数的使用。 (2)掌握格式控制符的基本使用。 (3)掌握顺序结构程序设计的方法。 二、实验内容 1.程序运行 对配套教材第4章中的例题选择性地输入、运行,领会顺序结构程序的编写规律,掌握 格式输入/输出函数的使用方法。例题如例4-6、例4-9、例4-15~例4-25等。 2.改错题 (1)以下程序的功能是按公式x= 2ab (a+b)2计算并输出x的值。其中,a和b的值由键 盘输入。纠正程序中存在的错误,以实现其功能。 #include int main(void) { int a,b; float x; scanf("%d,%d",a,b); x=2ab/(a+b)(a+b); printf("x=%d\n",x); } 48 (2)以下程序的功能是输入一个华氏温度,要求输出摄氏温度。其公式为C=5/9(F- 32),输出取两位小数。纠正程序中存在的错误,以实现其功能。 #include stdio.h int main(void) { float c,f; printf("请输入一个华氏温度:\n"); scanf("%f",f); c=(5/9)*(F-32); printf("摄氏温度为:%5.2f\n"c); } (3)以下程序的功能是从键盘输入一个小写字母,要求改用大写字母输出。纠正程序 中存在的错误,以实现其功能。 #include int main(void) { char c1,c2; c1=getchar; /*从键盘输入一个小写字母*/ printf("%c,%d\n",c1,c1); /*输出该小写字母及其ASCII 码值*/ c2=c1+26; /*转换为大写字母*/ printf("%c,%d\n",c2,c2); /*输出该大写字母及其ASCII 码值*/ } 3.程序填空题 (1)以下程序的功能是设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、 圆球体积、圆柱体积。用scanf函数输入数据r、h,输出计算结果,保留小数点后两位(圆周 长ly=2πr,圆面积sy=πr2,圆球表面积sq=4πr2,圆球体积vq=4/3πr3,圆柱体积vz= πhr2)。补充完善程序,以实现其功能。 #include int main(void) { float pi=3.1415926,h,r,ly,sy,sq,vq,vz; printf("请输入圆半径r,圆柱高h:\n"); ; ly= ; sy= ; sq= ; vq= ; vz= ; printf("圆周长为: ); printf("圆面积为: ); printf("圆球表面积为: ); printf("圆球体积为: ); printf("圆柱体积为: ); } (2)以下程序的功能是按给定格式输入数据,按要求的格式输出结果。补充完善程序, 以实现其功能。 输入形式:enterx,y:23.4 49 输出形式:x+y=5.4 #include int main(void) { int x; float y; printf("enter x,y: "); } (3)以下程序的功能是通过键盘输入两个整数,分别存入变量x、y中,当x int main(void) { int x,y, ; printf("请输入x,y:\n "); ; if (x int main(void) { int a,b,c,max; printf("请输入3 个整数:"); scanf("%d%d%d",&a,&b,&c); max=a; if (c>b) { if (b>a) max=c; else {if (c>a) max=b;} printf("3 个数中最大者为:%d\n",max); } (2)以下程序的功能是输入一个英文字母,如果它是小写字母,则首先将其转换成大写 字母,再输出大写的该字母的前序字母、该字母本身及其后序字母。例如输入g,则输出 FGH;输入a,则输出ZAB;输入M,则输出LMN;输入Z,则输出YZA。纠正程序中存在的 错误,以实现其功能。 #include stdio.h int main(void) { char ch,c1,c2; printf("Enter a character:"); ch=getchar(); if ((ch>='a') || (ch<='z')) ch-=32; c1=ch-1; c2=ch+1; if (ch='A') c1=ch+25; else if (ch='Z') c2=ch-25; putchar(c1); putchar(ch); putchar(c2); putchar('\n'); } (3)以下程序的功能是输入1~12的月份数,输出该月份对应的英语表示法。例如输 入“3”,则输出“Mar”。纠正程序中存在的错误,以实现其功能。 #include int main(void) { char m; printtf("input the month number:\n"); scanf("%c",&m); switch(m) 51 { case 1:printf("Jan"); case 2:printf("Feb"); case 3:printf("Mar"); case 4:printf("Apr"); case 5:printf("May"); case 6:printf("Jun"); case 7:printf("Jul"); case 8:printf("Aug"); case 9:printf("Sep"); case 10:printf("Oct"); case 11:printf("Nov"); case 12:printf("Dec"); } } 3.程序填空题 (1)以下程序的功能是实现加、减、乘、除四则运算。补充完善程序,以实现其功能。 #include int main(void) { int a,b,d; char ch; printf("Please input a expression:"); scanf("%d%c%d", ); /*输入数学表达式*/ switch(ch) { case '+': d=a+b; printf("%d+%d=%d\n",a,b,d); break; case '-': d=a-b; printf("%d-%d=%d\n",a,b,d); case '*': ; printf("%d*%d=%d\n",a,b,d); break; case '/': if ( ) printf("Divisor is zero\n"); else printf("%d/%d=%f\n",a,b,( )a/b); /*强制类型转换*/ break; default: printf("Input Operator error!\n"); } } (2)以下程序的功能是判断从键盘上输入的一个字符,并按下列要求输出。 若该字符是数字,输出字符串“0~9”。 若该字符是大写字母,输出字符串“A~Z”。 若该字符是小写字母,输出字符串“a~z”。 若该字符是其他字母,输出字符串“!,@,…”。 补充完善程序,以实现其功能。 #include int main(void) { char c; 52 scanf( ); if (c>='0' && c<='9' else if ( ) printf("A-Z\n"); (c>='a' && c<='z') printf("a-z\n"); printf("!,@,…\n"); } (3)以下程序的功能是猜价格,用户输入自己估计的价格,程序判断其正确性。补充完 善程序,以实现其功能。 #include int main(void) { float a,b; printf("请主持人输入时尚手机的实际价格\n "); scanf("%f",&b); printf("\n\n 请观众猜时尚手机的价格\n "); scanf("%f",&a); if( ) printf("低了\n"); if( ) printf("猜对了!\n"); if( ) printf("高了\n"); } 4.编程题 (1)从键盘上输入3个整数,输出这3个整数的和、平均值(保留两位小数)、积、最小值 以及最大值。 (2)有一分段函数如下,要求用scanf函数输入x的值,求y值并在屏幕上输出。 y= 1-x3 x<5 x-1 5≤x<15 2x2-1 x≥15 ì . í .. .. (3)从键盘上输入一个0~6的数字,输出相应星期几的英文单词,其中,数字0对应 Sunday,数字1~6对应Monday~Saturday,如果输入的不是0~6的数字,则显示错误 信息。 实验6 循环结构程序设计 一、实验目的 (1)掌握循环结构程序设计的3种控制语句———while语句、do…while语句、for语句 的使用方法。 53 (2)了解用循环的方法实现常用的算法设计。 二、实验内容 1.程序运行 对配套教材第6章中的例题(例6-1~例6-30)选择性地输入、运行,领会循环结构程序 的编写规律,掌握while语句、do…while语句、for语句的使用方法。 2.改错题 (1)下面程序的功能是计算n!。纠正程序中存在的错误,以实现其功能。 #include int main(void) { int i,n,s; printf("Please enter n:"); scanf("%d",&n); for(i=1;i<=n;i++) s=s*i; //随着n 的增大,观察s 值的变化以查找问题 printf("%d!=%d\n",n,s); } (2)下面程序计算1+1/2+1/3+…+1/n的值。纠正程序中存在的错误,以实现其 功能。 #include int main(void) { int t,s,i,n; scanf("%d",&n); for(i=1;i<=n;i++) t=1/i; s=s+t; //观察s、t 的值的变化以查找问题 printf("s=%f\n",s); } (3)以下程序的功能是倒序打印26个英文字母。纠正程序中存在的错误,以实现其 功能。 #include int main(void) { char ch; ch='z'; while (ch!='a') { printf("%3d",ch); ch++; } } (4)以下程序的功能是输入一个大写字母,打印出一个菱形,该菱形的中间一行由此字 母组成,其相邻的上、下两行由它前面的一个字母组成,按此规律,直到字母A 出现在第一 54 行和最末行为止。纠正程序中存在的错误,以实现其功能。 例如,输入字母D,打印出以下图形。 A BBB CCCCC DDDDDDD CCCCC BBB A #include int main(void) { int i,j,k; char ch; scanf("%c",&ch); k=ch-'A'+1; for(i=1;i<=k;i++) { for (j=20;j>=i;j--) printf("%c",' '); for(j=1;j<=i-1;j++) printf("%c",'A'+i-1); printf("\n"); } k=ch-'A'; for(i=k;i>=1;i--) { for (j=20;j>=i;j--) printf("%c",' '); for(j=1;j<=2*i-1;j++) printf("%c",'A'+i-1); printf("\n"); } } 3.程序填空题 (1)编程求1! +3! +5! +7! +…+19! 的值。 #include int main(void) { float sum=0.0, j= ; int i; for(i=1;i<20;i++) { j*=i; if(i%2==0) ; sum+= ; } printf("sum=%e\n",sum); } 55 (2)假设有1020个西瓜,第一天卖了一半多两个,以后每天卖剩的一半多两个,求几天 后能卖完。补充完善程序,以实现其功能。 #include int main(void) { int day,x1,x2; day=0; x1=1020; while ( ) { x2= ; x1=x2; day++; } printf("day=%d\n",day); } (3)检查输入的算术表达式中的圆括号是否配对,并显示相应的判断结果。 分析:圆括号配对是指左括号必须先于右括号出现,左括号数必须等于右括号数。 #include int main(void) { int left,right;char c; printf("输入一个算术表达式\n"); left=0;right=0; //left 和right 分别代表统计的左、右括号数 for(c=0;(c=getchar())!='\n';){ if( ) left++; if( ) right++; if( ) break; } if ( ) printf("圆括号配对正确\n"); else printf("圆括号配对不正确\n"); } (4)用辗转相除法求两个正整数的最大公约数和最小公倍数。补充完善程序,以实现 其功能。 用辗转相除法求两个正整数的最大公约数的算法如下:①将两个数中大的那个数放在 m 中,小的放在n中;②求出m 被n除后的余数r;③若余数为0则执行步骤⑦,否则执行 步骤④;④把除数作为新的被除数,把余数作为新的除数;⑤求出新的余数r;⑥重复步骤 ③~⑤;⑦输出n,n即为最大公约数。 #include int main(void) { int r,m,n,k, ; scanf("%d%d",&m,&n); 56 if (m int main(void) { int i,j; for (i=0; ;i++) { j=i*10+6; if ( ) continue; printf("%d",j); } } 4.编程题 (1)计算1~100所有含8的数之和。 (2)编写程序,利用以下近似公式计算e的值,误差应小于10-5。 e=1+1/1! +1/2! +1/3! +…+1/n! (3)某学校有近千名学生,在操场上排队,若5人一行余2人,7人一行余3人,3人一 行余1人。编写程序,求该校的学生总人数。 (4)从键盘输入n个学生的学号和每人m 门课程的成绩,计算每个学生的总分及平均 分,输出内容包括每个学生的学号、总分和平均分。 实验7 数组及其应用 一、实验目的 (1)掌握一维数组和二维数组的定义、赋值和输入/输出方法。 (2)掌握字符数组和字符串数组的使用。 (3)掌握与数组有关的算法。 57 二、实验内容 1.程序运行 对配套教材第7章中的例题(例7-1~例7-32)选择性地输入、运行,领会使用数组编写 程序的方法,掌握与数组相关的一些基本算法。 2.改错题 (1)以下程序的功能是输入12个整数,按每行3个数输出这些整数,最后输出12个整 数的平均值。纠正程序中存在的错误,以实现其功能。 int main(void) { int a[12],av,i,n; for(i=0;i int main(void) { int n=10,i,sum=0; int a[n]; for (i=0;i<10;i++) { scanf("%d",a[i]); sum=sum+a[i]; } printf("sum=%d\n",sum); } (3)以下程序的功能是将字符串b连接到字符串a后面。纠正程序中存在的错误,以 实现其功能。 #include int main(void) { char a[]="wel",b[]="come"; int i,n=0; while (!a[n]) n++; for(i=0;b[i]!='\0';i++) a[n+i]=b[i]; a[n+i]='\0'; printf("%s\n",a); 58 } (4)以下程序的功能是找出一个二维数组中的鞍点,即该位置上的元素在该行上最大, 在该列上最小。当然,也可能没有这样的鞍点。纠正程序中存在的错误,以实现其功能。 #include #define N 4 #define M 4 int main(void) { int i,j,k,flag1,flag2,a[N][M],max,maxj; for(i=0;imax) { max=a[i][j]; maxj=j; } for(k=0,flag1=1;ka[k][maxj]) flag1=0; if (flag1) { printf("\nThe saddle point is :a[%d][%d]=%d\n",I,maxj,max); flag2=1; } } if (flag2) printf("\nThere is no saddle point in the Matrix\n"); } 3.程序填空题 (1)下面程序将十进制整数n转换成base进制(base进制数位都用数字或数表示),请 填空使程序完整。 #include int main(void) { int i=0,base,n,j,num[20]; scanf("%d",&n); scanf("%d",&base); do{i++; num[i]= ; n= ; }while(n!=0);