VC++6.0上机指导 - C语言实验讲义

更新时间:2024-04-21 05:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 C语言的运行环境和运行过程(3学时)

实验二 简单的C程序设计和基本数据处理(3学时) 实验三 选择结构程序设计(3学时) 实验四 循环结构程序设计 (一)(3学时) 实验五 循环结构程序设计 (二)(3学时) 实验六 数组(3学时) 实验七 字符串 (1学时) 实验八 结构数组(3学时)

实验九 函数和程序结构(3学时) 实验十 指针(6学时)

实验十一 函数和程序结构(1学时) 附录 快捷键 共计32学时

实验一 C语言的运行环境和运行过程

实验目的:

1. 掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、

编译、连接和运行。

2. 掌握c语言程序设计的基本框架,能够编写简单的c程序。 3. 了解程序调试的思想,能找出并改正c程序中的语法错误。 实验内容:

1. 在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。 2. 调试示例,在屏幕上显示一个短句“Hello World!”。

源程序

#include void main() { printf(“Hello World!\\n”); }

运行结果: Hello World!

基本步骤:(要求熟练掌握) 1) 启动VC++

“开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”进入VC++编程环境。

2) 新建文件(*.cpp)

“文件”->“新建”,单击“文件”选项卡,选择“C++Source Files”,修改文件保存“目录”和“文件”(文件名),单击“确定”。

3) 编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态

下,同时注意大小写,一般都用小写)

在编辑窗口输入源程序,然后执行“文件”->“保存”或“文件”->“另存为” 4) 编译(*.obj) 用来检查语法错误

“编译”->“编译”或Ctrl+F7,在产生的工作区队话框中,选择“是”。

1

5) 连接(*.exe)

“编译”->“构件”或F7 6) 运行

“编译”->“执行”或Ctrl+F5 7) 关闭程序工作区

“文件”->“关闭工作区” 8) 打开文件

“文件”->“打开”

9) 查看C源文件、目标文件和可执行文件的存放位置。

源文件在保存目录下,目标文件和可执行文件在“保存目录\\Debug”中

3. 编程,在屏幕上显示一个短句“this is my first c program.”。 4. 调试示例,在屏幕上显示一个短句“welcome to you!”。

源程序(有错误的程序) #include void mian() { printf(Welcome to You!\\n”) }

运行结果(改正后的运行结果) Welcome to You! 操作步骤:

1)按照实验2中介绍的步骤1)~3)输入上述源程序并保存。 2)编译,“编译”->“编译”(Ctrl+F7),信息窗口中显示编译出错信息,如下图所示。 3)找出错误,在信息窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。

2

第4行,出错信息:Welcome是一个未定义的变量,但Welcome并不是变量,出错的原因是Welcome前少了一个双引号。

4)改正错误,重新编译,得下如下图所示出错信息。

出错信息:“}”前少了分号。

5)再次改正错误,在“}”前即printf()后加上“;”(英文状态),生新编译,显示正确 6)连接,“编译”->“构件”(F7),出现如下出错信息。

3

出错信息:缺少主函数。

7)改正错误,即把“mian”改为“main”后,重新连接,信息窗口显示连接正确。 8)运行,“编译”->“执行”(Ctrl+F5),观察结果是否与要求一致。 5. 改错,改正下列程序中的错误,在屏幕上显示以下3行信息。

**************** Welcome ****************

源程序(有错误的程序) #include void main() { Printf(“****************\\n”); Printf(“ Welcome”) Printf(“****************\\n”); }

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

#include void main()

{

printf(\ printf(\ printf(\

4

验证:

1、转义字符的使用 main() {

int a,b,c; a=5; b=6; c=7;

printf(\ printf(\}

2、向字符变量赋以整数 #include main() {

char a,b; a=120; b=121;

printf(\ printf(\ }

3、解释运行结果 #include main() {

char a,b;

a='a'; //A的ASCII =65 b='b'; //B的ASCII=66 a=a-32; //a的ASCII =97 b=b-32; //b的ASCII =98 printf(\ }

4、 给定一个大写字母,要求用小写字母输出。 #include int main ( ) {

char c1,c2;

c1=’A’; c2=c1+32; printf(\n\ printf(”%d\\n”,c2); return 0; }

5

5、#include // 这是编译预处理命令 int main( ) // 定义主函数 { // 函数开始 int a1,a2,b=2,c=7,d=5;

a1=(++b,c--,d+3); //对于给a1赋值的代码,有三个表达式,用逗号分开,所以最终的值

//应该是最后一个表达式的值,也就是(d+3)的值,为8 // ,所以a1的值为8

a2=++b,c--,d+3; //对于给a2赋值的代码,也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3; (这是因为赋值运算符比逗号运算符

// 优先级高)所以最终表达式的值虽然也为8,但a2=4(第2行代码运

算完时,b=3,即第3行代码运行时,b的值为3)

printf(\

printf(\ // 输出结果

return 0; // 使函数返回值为0 }

6、解方程,小数点对齐 #include #include int main ( )

{double a,b,c,disc,x1,x2,p,q; scanf(\

disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(\ return 0; }

a,b,c之间用空格分开,在printf函数中的格式声明7.2f,表示在输出x1和x2时,指定数据占7列,其中小数占2列。这样做的好处是:①可以根据实际需要来输出小数的位数,因为并不是任何时候都需要6位小数的。②如果输出多个数据,各占一行,而用同一个格式声明(如%7. 2f),即使输出的数据整数部分值不同,但输出时上下行必然按小数点对齐,使输出数据整齐美观。

“%d”表示按十进制整型输出;“%ld”表示按十进制长整型输出;

输出表列中给出了各个输出项,要求格式字符串和各输出项在数量和类型上应该一一对应。

s格式:用来输出一个串。有几中用法

%s:例如:printf(\输出\字符串(不包括双引号)。

%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。

%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左

6

补空格。

%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。 用%f输出实数,只能得到6位小数;

格式字符串的一般形式为:

[标志][输出最小宽度][.精度][长度]类型

.15f 数据宽度为20,其中小数15位。小数点占1位,整数还剩4位. %.0f 无小数位。 小结:

f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法: %f:不指定宽度,整数部分全部输出并输出6位小数。

%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。

%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。结果左对齐,右边填空格

%e:数字部分(又称尾数)输出6位小数,指数部分占5位。

printf(“.2e\\n”,123.456); //.2 2位小数,数据宽13位。“1.23e+002”占据了9列,所以它的前面会有4个空格:

7

实验二 简单的C程序设计和基本数据处理

实验目的:

1. 掌握C语言的运算符和表达式的正确使用以及C语言的几种基本数据类型和基本输入输

出函数的使用方法。

2. 通过编程进一步理解和掌握运算符的确切含义和功能。 3. 理解和掌握运算符与运算对象的关系,优先级和结合方向。

4. 通过编程,掌握C语言的几种基本数据类型,int、char、flloat、double,以及由这些基本

数据类型构成的常量和变量的使用方法。

5. 掌握基本输入/输出函数的使用方法,包括printf()、scanf()、getchar()、putchar()。 6. 掌握简单的C程序的查错方法。 实验内容:

一、输入程序,观察输出结果,并对输出结果作出合理的解释。 1./* e1.cpp */

#include void main() { float x; double y; x=213.82631;y=213.82631; printf(\

} 输出结果:213.83 -6.2e 解释:

2./* e2.cpp */ #include void main() { char ch; int k; ch=?a?;k=10; printf(“%d,%x,%o,%c”,ch,ch,ch,ch,k); printf(“k=%%d\\n”,k); } 输出结果:97.61.141.ak=%d 解释:

3./* e3.cpp */

#include void main() { float a1,a2; double b1,b2; a1=3141.59;a2=0.000001;

8

b1=3141.59;b2=0.000001; printf(“%f,%lf\\n”,a1+a2,b1+b2); } 输出结果:3141.590089 3141.5900001

解释:

yichu 4. /* e4.cpp */

#include void main() { float x=5/2,y=5.0/2; printf(\ } 输出结果:2.000000 2.500000 解释:

二、编写程序。

1. 编程(c1.cpp)定义3个整型变量x,y,z和一个实型变量averge,计算并输出3个整数

的平均值averge,其中x=y=1,z=0。观察运行结果。再将x,y,z和averge改为实型变量,再观察运行结果。理解整除和不同类型数据进行混合运算的转化规律,对结果进行合理的解释。 源程序:

#include

输出结果: 解释:

2. 改写程序(c2.cpp),针对上一题要求,采用从键盘用scanf()函数输入x,y,z的值。要

求输出结果的形式为averge=…。 源程序:

9

输出结果: 解释:

3. 输入3个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,把b原来的值

给c,把c中原来的值给a。 源程序:

#include main() {int a,b,c,t;

scanf(\t=b; b=a; a=c; c=t;

printf(\ }

输出结果:

三、调示示例。

1. 求华氏温度100。F对应的摄氏温度。计算公式:C=(5/9)(F-32),其中C表示摄

氏温度,F表示华氏温度。 源程序(有错误) #include void main()

{ int celsius;fahr;

fahr=100;

celsius=5*(fahr-32)/9;

printf(\}

1)输入源程序。

2)实验一中用菜单完成编译、连接和运行,现在介绍工具栏的使用方法。在工具栏或菜单栏上单击鼠标右键,出现如图所示的整个工具箱,在“编译”或“编译微型条”项前打上“√”。

图中第1个按钮为“Compile”(编译,Ctrl+F7),第2个按钮为“Build”(构件,F7),第4个按钮为“Build Execute”(执行,Ctrl+F5)。

3)单击“编译”工具条中的第1个按钮,出现第一个错误信息:

Cannot open include file: 'stdoi.h': No such file or directory (不能打开stdoi.h) 改正(应该是stdio.h)后,重新编译,新产生的第一个错误信息是: 'fahr' : undeclared identifier (“fahr”变量没有定义)

10

改正:将fahr前的分号改为逗号,重新编译,编译正确。 4)单击“编译”工具条中的第2个按钮,连接正确。 5)单击“编译”工具条中的第4个按钮,运行结果为 : fahr=d,Celsius=100

不符合题目的要求,仔细检查源程序,发现函数printf()中的d应为%d,改正的,重新连接和运行,运行结果与题目要求的结果一致,程序调试结束。

2. 改错,计算某个数x的平方y,并以算术公式的形式输出x和y的值.请不要删除源

程序中的任何注释。

输入输出示例(假设x的值为3): 9=3*3 3*3=9

#include void main() {

int y; y=x*x;

printf(“%d=%d*%d”,x); /* 输出 printf(“d*%d=%d”,y); }

改正后的源程序:#include void main() {

int x,y; y=x*x;

printf(\ /* 输出*/ printf(\ }

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

11

实验三 选择结构程序设计

实验目的

1、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”); 2、学会正确使用逻辑运算符和逻辑表达式; 3、熟练掌握if语句和switch语句;

4、熟练掌握switch语句中break语句的作用。 实验内容

1.调试示例,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。 源程序(有错误的程序) #include #include void main() {

double a,b,c,d;

printf(“输入一元二次方程 a=,b=,c=\\n”); scanf(“a=%lf,b=%lf,c=%lf”,&a,&b,&c); d=b*b-4*a*c; if(a==0) {

if(b=0) { if(c==0)

printf( “0==0参数对方程无意义!”); else

printf( “c!=0方程不成立”); } else

printf(“x=%0.2f\\n”,-c/b); } else

if(d>=0)

{ printf(“x1=%0.2f\\n”,(-b+sqrt(d))/(2*a)); printf(“x1=%0.2f\\n”,(-b-sqrt(d))/(2*a)); } else

{ printf(“x1=%0.2f+%0.2fi\\n”,-b/(2*a),sqrt(-d)/(2*a)); printf(“x1=%0.2f-%0.2fi\\n”,-b/(2*a),sqrt(-d)/(2*a)); } }

运行结果(改正后程序的运行结果) 输入一元二次方程 a= ,b= ,c= a=2.1, b=8.9, c=3.5 x1=-7.22 x2=-10.58

运行结果(有错误的程序的运行结果) 输入一元二次方程 a= ,b= ,c= a=2.1, b=8.9, c=3.5 x1=-7.22 x2=-10.58

对以上程序进行编译、连接、调试和运行如下:

1)执行“编译”->“构件”,对以上程序进行编译、连接,没有出现错误信息。

2)调试开始,设置三个断点(断点的作用,程序执行到断点处暂停,使用户可以观察当前的变量或其他表达式的值,然后继续运行),先把光标定位到要设置断点的位置,然后

12

单击编译工具条上的Inert/Remove Breakpoint或F9,断点就设置好了,如果要取消断点,

,这个断点就取消了。

只要把光标放到要取消的断点处,单击

3)单击编译工具条入a=2.1,b=8.9,c=3.5.

(go F5),程序运行,等待输入一元二次方程a、b、c的值,输

4) 程序运行到第一个断点,在Watch窗口输入变量名a,b,c观察执行到第一个断点时变量a,b,c的值是否和(2)中输入一致。

注意,变量可以在Watch1、Watch2、Wathc3、Watch4任何一个窗口输入,输入可以是变量,也可以是表达式。

13

5)假设我们在输入的时候,输错了变量a的值,我们可以在Watch窗口重新赋值,改变原来的值,如我们在Watch窗口中输入表达式a=0,则a的值就改变为0了。

单步执行,单击,箭头指向下一行,说明程序执行到这一行,再观察变量a,b,c的值,发现变量b的值已经改变,原来输入的是8.9,现在已改变为0,我们在2)中输入变量b的值是8.9,说明在程序的执行过程中肯定有一个地方改变了b的值,通过仔细观察、分析,发现if语句中误把相等“==”写成了赋值“=”,所以b=0了,单击(Stop Debugging(Shift+F5)停止调试,把源程序中的“=”改为”==”后,重新编译、连接,没有出现错误信息。

6)单击,重新开始调试,执行3)和4),此时,观察b的值没有改变,单击,结束本次调试。

7)单击,重新开始调试,观察结果的正确性。

2.编程,输入任意三个数n1,n2,n3,求其中最大的一个数。 输入输出示例: Input n1,n2,n3: 2 10.5 8 max=10.50

提示:模仿1,运行时调试程序,包括设置断点、在Watch窗口设置变量的值等。 思考:

1)如何求5个数中的最大的一个数

2)如果要在3个字符中找出最大的一个,如何修改程序

3.编程,输入x,计算并输出下列分段函数f(x)的值(保留2位小数)。

y=

x 2x-1 3x-11

x<1 1<=x<10 x>=10

输入输出示例: Input x: -2.5 f(-2.500000)=-2.5

提示:该程序应该运行3次,每次测试一个分支,即分别输入每个分段中的x值。 思考:假设x为整数,如何用switch计算上述分段函数。

4.编程,把百分制成绩转换成5级记分制,要求用switch语句。 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E 输入输出示例: Input Score: 86 86的等级为B 提示:

1)该程序应该运行6次,每次测试一种情况,即分别输入不同等级的成绩 2)在switch中使用break语句 思考:如何用if语句实现转换?

5.编程,输入2005年的任一个月,输出这个月的天数,要求使用switch语句。

14

输入输出示例:

Input month of 2005: 10 2005年10月有31天 提示:

1)该程序应该运行13次,分别输入1-12月,以及除此之外的数 2)运行时调试跟踪月份的变化

3)编程时注意不同月份可以有相同的天数 思考:输入年和月,如何求该月的天数?

6.改错,对2个整数进行乘、除和求余运算。 输入输出示例:

输入x 运算符 y : 21 % 8 21 Mod 8 = 5

源程序(有错误的程序) #include void main() { char sign; int x,y;

prnitf(“输入x 运算符 y:”); scanf(“%d%c%d”,&x,&sign,&y); if(sign=?*?)

printf(“%d * %d = %d\\n”,x,y,x*y); else if

printf(“%d * %d = %d\\n”,x,y,x*y); else if

printf(“%d * %d = %d\\n”,x,y,x*y); else

printf(“运算符输入错误”); }

提示:在程序调试中,在变量窗口和Watch窗口中观察变量值的变化。

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

15

实验四 循环结构程序设计 (一)

实验目的

1.熟练使用while、do-while语句实现循环程序设计

2.理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处 3.掌握嵌套循环程序设计

4.熟练掌握下拉菜单Debug的程序调试方法 实验内容

1.调试示例:输入2个正整数m,n,输出它们的最小公倍数和最大公约数。 源程序(有错误的程序) #include void main() { int m,n,j,k;

printf(“input m n\\n”);

while(scanf(“%d%d”,&m,&n),m<0 && n<0); j=m;

while(j/n!=0) j=j+m; k=(m*n)/j;

printf(“最小公倍数是%d\\n最大公约数是%d\\n”,j,k); }

运行结果(改正后程序的运行结果) Input m n: 3 7 最小公倍数是21 最大公约数是1

“编译”菜单中的调试命令和调试工具栏中按钮的功能是一样的,可以使用“编译”菜单来调试程序。

1)输入并保存上述程序后,再进行编译和连接,没有出现错误信息。 2)调试程序开始,设置3个断点,执行“编译”->“开始调试”->入 “-3 7”

去命令,运行程序,输

3)程序执行到第一个断点,变量窗口显示m=-3,n=7,说明有错。因为如果输入负数,必须重新输入,直到输入2个正数为止。

注意:此时菜单栏中新出现一个“Debug”菜单,包括了调试工具栏中所有的调试工具,用

16

户可以选择使用“Debug”菜单或调试工具栏来调试程序。作用相同。

4)单击图标或按组合键Shift+F5停止调试,通过仔细分析,发现循环条件中m<0 && n<0应该是m<0||n<0。

注意:此时,不一定要停止调试,用户可以在Watch窗口输入m=3,再继续调试。

5)把&&改为||,重新编译和连接,然后单击图标或组合键Ctrl+Shift+F5重新开始调试,再单击图标或F5键,输入-3 7后,箭头如果不动,说明需要重新输入数据。

6)重新输入数据3 7,程序执行到第一个断点,观察变量窗口,m=3,n=7,没有错误。 7)继续单击,程序运行到第2个断点,变量窗口显示最小公倍数j的值是3,显然错误,说明第1个断点到第2个断点之间有错误。

8)单击图标或按组合键Shift+F5停止调试,仔细分析程序,发现循环条件j/n!=0错误,因为只有被n除尽的j才是最小公倍数,循环条件应该是j%n!=0。

9)重新编译、连接,并取消第一个断点,再单击图标或组合键Ctrl+Shift+F5重新开始调试,再单击图标或F5键,程序运行到新的第一个断点。

10)变量窗口显示最小公倍数j的值是21,最小公倍数计算正确。

11)单击图标或F5键,程序运行到最后一个断点,变量窗口显示最大公约数k的值是1,最大公约数计算正确。

12)单击图标或按组合键Shift+F5停止调试。

2.编程,输入一批整数,先求出其中的偶数和及奇数和,然后输出偶数和与奇数和的差.

输入输出示例:

输入一批整数:10 11 20 33 Ctrl+Z Sub=-14

提示:从键盘输入Ctrl+Z,表示一批数据输入结束 思考:如何从输入的数中找出一个最小的数。 3.编程,输入1个正实数eps,计算并输出下式的值,十到最后一项的绝对值小于eps。

s?1?11111?????... 59131721输入输出示例: Input eps:0.00001 S = 0.866977

思考:如果条件改为前后2项的绝对值的差小于eps,如何编程。

3. 编程,输入1个实数x,计算并输出下式的值,直到最后一项小于10-5。要求定义和

调用函数fact(n)计算n的阶乘,以及定义和调用函数mypow(x,n)计算xn。

x2x4x6s?1????...

2!4!6!输入输出示例: X=2

S=3.761949

提示:输入不同的正整数和负整数验证结果

x2x3x4???...的值。 思考:如何计算s?1?2!3!4!

4. 编程,输入一个整数,求它的各位数字之和及位数。例如123的各位数字之和是6,

位数是3. 输入输出示例:

输入一个整数:-12345

17

-12345有5位数,各位数字之和是15

提示:n表示一个整数,则n取个位数,n=n/10去掉个位数,组成一个新数。 思考:如果要把每位数字转换为字符输出,如何编程。

5. 改错,输入2个整数,分别将其逆向输出。 输入输出示例: 123 -321 123的逆向是321 -321的逆向是-123

源程序(有错误的程序) #include int fun(int n) { int m,y; y=0; if(n<0) m=n; else m=-n; while (m==0) { y=y*10+m/10; M=m; }

if(n>=0) return y; else return –y; }

void main() { int n,m;

Scanf(“%d%d”,&n,&m);

Printf(“%d的逆向是%d\\t”,n,fun(n)); Printf(“%d的逆向是%d\\t”,m,fun(m)); }

提示:模仿1调试程序,在变量窗口中观察变量值的变化,读者还可以在Watch窗口输入不同变量的值来验证程序的正确性。

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

18

实验五 循环结构程序设计 (二)

实验目的

1.熟练掌握循环程序设计,包括嵌套循环

2.熟练掌握使用break、continue语句在循环程序设计中的实现 3.继续掌握VC++的程序调试方法 实验内容

1.调试示例,输入正整数的个数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

源程序(有错误) #include #include void main() { int i,j,k,m,n;

printf(“输入正整数的个数n:”); scanf(“%d”,&n);

printf(“输入%d个正整数\\n”); for(j=0;jn)

printf(“%d是一个素数!\\n”,m); else

printf(“%d不是一个素数!\\n”,m); } }

运行结果(改正后程序的运行结果) 输入正整数的个数:2 输入2个正整数 11

11是一个素数 15

15不是一个素数

按照前面学过的程序调试的方法,设置断点调试程序,找出程序的逻辑错误,得到正确的运行结果。

2.编程,输出101-115之间不能被3整除的数,每行输出5个。要求使用continue语句。

输入输出救命:

101 103 104 106 107 109 110 112 113 115

思考:输入一批整数(Ctrl+Z),输出其中不能被3整除的奇数。

3.编程,输入一个正整数,再输入n个整数,输出其中的最大值,输入的每个数都在100-200之间,如果某个输入数不在100-200之间,则只处理在该数这前输入的数据。

输入示例(共运行2次) 第一次运行: 输入n:5

输入5个整数:100 155 187 192 168 最大值是192 第二次运行:

19

输入n:6

输入6个整数:100 155 187 292 168 199 最大值是187

思考:如果输入n个浮点数(或字符),怎样找出其中的最大和最小的数(或字符)

4.编程,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第10天早上想再吃的时候,见只剩下一个桃子了。求第1天共摘了多少桃子?

输入输出示例:

第1天共摘了1534个桃子!

思考:把题目中的第10天改为第n天,多吃了一个桃子,改为多吃了2个桃子,如何编程。

5.在100-1500内找出所有的亲密数对,并输出每对亲密数对。 输入输出示例: (220,284)(284,220)(1184,1210)(1210,1184) 提示:若a和b为1对亲密数,则a的因子和等于b,b的因子和等于a,并且a不等于b。

6. 编程,找出200以内的所有完数,并输出其因子。一个数如恰好等于它的因子之和,

这个数称为完数,如6=1+2+3,其中1、2、3为因子,6为因子和。 输入输出示例: 1=1 6=1+2+3

28=1+2+4+7+14

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

20

实验六 数组

实验目的

1.熟练掌握数组的定义和初始化 2.熟练掌握使用数组元素的引用 3.继续掌握排序算法 实验内容

1.调试,输入一个正整数n(0 Void main() {

Int I,j,n,x,a[n];

Printf(“输入数据的个数n:”); Scanf(“%d”,&n);

Printf(“输入%d个整数:”,n); For(i=0;i

Scanf(“%d”,&a[i]);

Printf(“输入要插入的整数:”); Scanf(“%d”,&x); For(i=0;i

{ if(x>a[i]) continue; J=n-1; While(j>=i)

{ /*调试时设置断点*/ A[j]=a[j+1]; J++;

} /*调试时设置断点*/ A[i]=x; Break;

}

If(i==n) a[n]=x; For(i=0;i

运行结果(改正后程序的运行结果) 输入数据的个数n:5 输入5个整数:1 2 4 5 7 输入要插入的整数:3 1 2 3 4 5 7

提示:先找到插入点,从插入点开始,所有的数据顺序后移,然后插入数据;如果插入点在最后,则直接插入(说明插入的数排在该组数据中的最后)。

用前面学过的调试方法,调试本程序,使得程序能够得到正确的运行结果。

2.编程,输入1个正整数n(1

输入输出示例: 输入整数个数:5

输入5个整数:5 2 1 10 9 1 2 5 9 10 提示:注意下标的变化。

21

思考:如果输入的是实数,要求将绝对值最小的数与第1个数交换,绝对值最大的数与最后1个数交换,然后输出交换后的n个数,如何编程。

3.编程,输入1个正整数n(1

输入输出示例: 输入整数个数:10

输入10个整数:-11 2 8 5 -3 -16 9 7 6 10 排序后:2 -3 5 6 7 8 9 10 -11 -16

4.编程,平面上有n个点,求所有各点之间的最长距离。要求定义和调用函数计算距离。

输入输出示例: 输入点数:5

输入5个点的坐标: 1 2.5 3.2 3.7 6.5 2.3 5.1 0.6 3.6 1.2

最长距离是5.50

思考:如何求最短距离及所有距离之和。

5.编程,输入一个n行m列(n<=4,m<=4)的数组,先以n行m列的格式输出该数组,然后找出该数组中值最小的元素,输出该元素及其行下标和列下标。

输入输出示例:

输入数组行和列数n、m:2 3 输入2行3列的数组元素: 12 -7 15 -18 9 11

12.00 -7.00 15.00 -18.00 9.00 11.00 a[1][0]=-18.00 思考:

1)如果不从键盘输入数组元素,而是用初始化的方式给数组赋值,运行结果一样吗? 2)如何修改程序,求绝对值最大的元素?

3)将数组a的每一行均除以该行的主对角元素,然后最大值,试编制程序。

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

22

实验七 字符串

实验目的

1.熟练掌握字条数组的定义、初始化和元素引用 2.熟练掌握字符串的存储和操作

3.继续使用字符输入输出函数getchar()和putchar() 实验内容

1.调试,输入一个以回车结束的字符串(少于80个字符),将它的内容颠倒过来再输出。如”ABCD”颠倒为”DCBA”。

源程序(有错误的程序) #include void main() { int i,k,tmp; char str[];

printf(“input a string:”); i=0;

while((str[i]=getchar())!=?\\n?) i++; str[i]=?\\0?; k=i-1;

for(i=0;i

{ /*调试时设置断点*/ tmp=str[i]; str[i]=str[k]; str[k]=tmp; k++;

} /*调试时设置断点*/ for(i=0;str[i]!=?\\0?;i++) putchar(str[i]); }

运行结果(改正后程序的运行结果) welcome to you! !uoy ot emoclew

2.编程,输入一个以回车结束的字符串(少于80个字符),先输出其中的小写英文字母、空格和感叹号!,然后统计出字符的个数。

输入输出示例: thow hare young! how are you! n=12

3.编程,输入一个正整数n(n<=5),再输入n行字符(每个字符串少于80个字符),分别统计其中的大写英文字母、小写英字母、数字、空格和其他字符的个数。

输入输出示例: 输入字符串行数:2

Beijing 2008 Games of the 29th Olympiad!

8th International Symposium on Safety Science. 大写字母数:7 小定字母数:56 数字字符数:7 空格字符数:10 其他字符数:2

23

4.编程,输入一行加减运算的字符串(少于80个字符),计算加减运算的结果。 输入输出示例: 10+52-28 y=34 提示:

1)如果输入的字符串中包括数字和加减号以外的字符,提示输入错误。 2)把加减运算符两侧的字符串转换为整数,再运算 思考:

如果输入一个四则运算的字符串,如何计算结果。

5.编程,输入一个字符ch和一个以回车符结束的字符串(少于80个字符),统计字符串中与ch相同的字母个数。

输入输出示例: 输入一个字符:o

输入一个字符串:Studio Classroom 在字符串中与o相同的字母有3个!

7. 输入一个以回车结束的字符串(少于80个字符),把字符串中的所有数字字符(?0?-?9?)

转换为整数,去掉其他字符。例如,字符串”3A56BC”转换为整数后是356。 输入输出示例: Free82jeep5 825

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

24

实验八 结构数组

实验目的

1.掌握结构类型的定义

2.掌握结构变量的定义和结构成员变量的引用 3.掌握结构数组的定义和使用

实验内容

1.调试,输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。

工资表 姓名 基本工资 浮动工资 支出 Zhao Qian Zhou 240.00 360.00 560.00 400.00 120.00 150.00 75.00 50.00 80.00

源程序(有错误的程序) #include void main() { struct emp

{ char name[10]; float jbg; float fdg; float zc; }; int i,n; printf(“n=”); scanf(“%d”,&n); for(i=0;i

scanf(“%s%d%d%d”,emp[i].name,emp[i].&jbg,emp[i].&fdg,emp[i],&zc); for(i=0;i

printf(“%5s:%7.2f\\n”, emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i],zc); } /*调试时设置断点*/

运行结果(改正后程序的运行结果) n=3

Zhao 240 400 75 Qian 360 120 50 Zhou 560 150 80

Zhao实发数:565.00 Qian实发数:430.00 Zhou实发数:630.00

2.编程,输入平面上n(3

输入输出示例: n=10

63,22 56,25 50,30 42,37 53,45

25

提示:

1)在Dos命令方式下和在VC++环境下各运行一次。其中VC++下的运行方式是:执行“工程”->“设置”->“Debug”->程序变量中设置参数命令 2)命令行参数都是字符串,不是数字。

思考:如果命令行参数中包括文件名,要求从文件中读出数据,如何编程

6.编程,从键盘上输入一个3╳3的矩阵,求矩阵的主对角线和副对角线之和,要求定义和调用函数。 输入输出示例: 输入3╳3数组 8 6 12 5 9 10 7 11 5 Sum=41.00

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

31

实验十一 函数和程序结构

实验目的

1.理解文件、缓冲文件和文件指针的概念 2.掌握文件的基本操作

3.使用与文件操作有关的函数,如文件的打开、关闭以及读、写等

实验内容

1.调试,从键盘输入一行字符,写到文件a.txt中。 源程序(有错误的程序) #include #include void main() { char ch; FILE fp;

if((fp=fopen(“a.txt”,”w”))!=NULL) { printf(“can?t open file!”); exit(0); }

while((ch=getchar())!=?\\n?) /*调试时设置断点*/ fputc(ch,fp); fclose(fp);

} /*调试时设置断点*/

运行结果(改正后程序的运行结果) 高等院校

2.编程,从键盘输入5个同学的学号、姓名和数学成绩,写到文本文件f2.txt中,再从文件读出,显示在屏幕上。 输入输出示例(输出略): 3050811 黄军 78 3050812 董枫 82 3050813 高星 75 3050814 沈远 88 3050815 张涛 80

提示:程序运行后,打开文本文件f2.txt,检查写入文件中的数据是否正确。

3.编程,从键盘输入以下10个学生的学号、姓名,以及数学、语文和英语成绩,写到文本文件f3.txt中,再从文件中取出数据,计算每个学生的总成绩和平均分,并将结果显示在屏幕上。 输入输出示例略

提示:程序运行后,打开文本文件f3.txt,检查写入文件中的数据是否正确。 4.编程,将下列C源程序文件hello.c中的所有注释去掉后,存入另外一个文件new_hello.c中。

32

源程序文件hello.c

/*显示”Hello World!”*/ /*注释文本*/

#include /*编译预处理命令*/ void main() /*主函数*/ {

printf(“Hello World!\\n”); /*调用printf函数输出文字*/ }

输入输出示例(没有键盘输入和屏幕输出): New_hello.c中的内容应该是:(去除hello.c中的注释后) #include void main() {

printf(“Hello World!\\n”); } 提示:

1)在运行程序前,应该首先建立C源程序文件hello.c

2)运行程序时,不需要从键盘输入数据,也没有屏幕输出

3)程序运行后,打开文本文件new_hello.c,检查文件的内容是否与上面给出的信息一致

实验报告要求

将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。

附录 在vc6.0快捷键大全 -

F1:帮助 Ctrl + O:打开 Ctrl + P:打印 Ctrl + N:新建

Ctrl + Shift + F2:清除所有书签 Shift + F2:上一个书签 Alt + F2:编辑书签

Ctrl + F2:添加/删除书签 F12:转到定义

SHIFT + F12:转到参考

Ctrl +'数字+':显示下一个符号的定义或参考 Ctrl +'号':显示前面的符号定义或参考

Ctrl + J / K:寻找上一个/下一个预编译的条件

Ctrl + Shift + J / K:寻找上一个/下一个预编译的条件而这一次选择 Ctrl + End:文件结束

Ctrl + Shift + End:从当前位置选择从当前位置到结尾的文件 Ctrl +主页:文件头

Ctrl + Shift + Home:选择的文件头 Ctrl + / Alt键+ F9:编辑断点

33

Alt + F3/Ctrl + F:查找 F3:查找下一个

Shift键+ F3:查找上一个 Ctrl +] / Ctrl键+ E:寻找半括号

Ctrl + Shift +]:寻找一半的括号和选定的部分在方括号之间(包括支架) Ctrl + Shift + E:寻找下半个括号内的括号之间的部分(括号内) F4:寻找下一个错误/警告位置

Shift + F4:发现一个错误/警告的位置 Shift + Home:从当前位置到选择的行头 Shift + End:选择从当前位置到结束的行 Ctrl + L:剪切当前行

Ctrl + Shift + L:删除当前行

Alt + Shift + T:交换当前行和上一行 Ctrl + Alt + T:完成“列表框中

Shift键+下一页:选择从当前位置到下一个页面的位置 Shift键+上一页:选择从当前位置到上一页当前位置

Ctrl + Shift +空格键:Ctrl + Z / Alt键+退格键功能参数工具提示 Ctrl + Shift + Z / Ctrl + Y键:恢复

F8:当前位置:到选定的区域?头/尾(然后将光标移动或点击鼠标将选择)

Ctrl + Shift + F8:这个位置变成矩形选定区域的头/尾(再移动光标或点击鼠标将选择) Alt + F8:自动格式重排 Ctrl + G:跳转到

Ctrl + C /按Ctrl + INS:插入 Ctrl + V / Shift键+ INS:粘贴

Ctrl + U:选定的区域转换为小写 Ctrl + Shift + U:在选定的区域转换为大写 BR />按Ctrl + F8:当前行到选定区域的头/尾(然后向上和向下移动光标或鼠标选择固定的多线)

Ctrl + Shift + L:删除从当前位置到最后的行 Ctrl + Shift +8:所有的标签将恢复 Ctrl + T:显示变量类型

Ctrl +↑向上滚动 BR />按Ctrl +↓:向下滚动 CTRL + DEL:删除当前单词的分割(游标)

Ctrl + Backspace键:删除下半年字的一半(光标分割前) Ctrl +←:移动到前一个单词 Ctrl +→:向后移动一个字

Ctrl + Shift +←:选定当前位置到以前的一个词 Ctrl + Shift +→:选择当前位置的后一个词 Ctrl + Shift + T:字和最后一个字交换

34

本文来源:https://www.bwwdw.com/article/2g5p.html

Top