05 VC6.0上机指导--- C语言实验讲义

时间:2024.4.14

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

实验目的:

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

2.        掌握c语言程序设计的基本框架,能够编写简单的c程序。

3.        了解程序调试的思想,能找出并改正c程序中的语法错误。

实验内容:

1.        在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。

2.        调试示例,在屏幕上显示一个短句“Hello World!”。

源程序

#include <stdio.h>

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,在产生的工作区队话框中,选择“是”。

5)       连接(*.exe)

“编译”->“构件”或F7

6)       运行

“编译”->“执行”或Ctrl+F5

7)       关闭程序工作区

“文件”->“关闭工作区”

8)       打开文件

“文件”->“打开”

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

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

3.        编程,在屏幕上显示一个短句“this is my first c program.”。

4.        调试示例,在屏幕上显示一个短句“welcome to you!”。

源程序(有错误的程序)

#include <stdio.h>

void mian()

{

           printf(Welcome to You!\n”)

}

运行结果(改正后的运行结果)

Welcome to You!

操作步骤:

1)按照实验2中介绍的步骤1)~3)输入上述源程序并保存。

2)编译,“编译”->“编译”(Ctrl+F7),信息窗口中显示编译出错信息,如下图所示。

3)找出错误,在信息窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。

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

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

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

5)再次改正错误,在“}”前即printf()后加上“;”(英文状态),生新编译,显示正确

6)连接,“编译”->“构件”(F7),出现如下出错信息。

出错信息:缺少主函数。

7)改正错误,即把“mian”改为“main”后,重新连接,信息窗口显示连接正确。

8)运行,“编译”->“执行”(Ctrl+F5),观察结果是否与要求一致。

5.        改错,改正下列程序中的错误,在屏幕上显示以下3行信息。

****************

Welcome

****************

源程序(有错误的程序)

#include <stdio.h>

void main()

{

           Printf(“****************\n”);

           Printf(“   Welcome”)

           Printf(“****************\n”);

}

实验报告要求

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


 

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

实验目的:

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

2.        通过编程进一步理解和掌握运算符的确切含义和功能。

3.        理解和掌握运算符与运算对象的关系,优先级和结合方向。

4.        通过编程,掌握C语言的几种基本数据类型,int、char、flloat、double,以及由这些基本数据类型构成的常量和变量的使用方法。

5.        掌握基本输入/输出函数的使用方法,包括printf()、scanf()、getchar()、putchar()。

6.        掌握简单的C程序的查错方法。

实验内容:

一、输入程序,观察输出结果,并对输出结果作出合理的解释。

1./* e1.cpp */

#include<stdio.h>

void main()

{     float x;

                   double y;

                   x=213.82631;y=213.82631;

                   printf("%-4.2f,-6.2e\n",x,y);

}                                                                                       

输出结果:

         解释:

2./* e2.cpp */

         #include<stdio.h>

         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);

         }

         输出结果:

         解释:

3./*  e3.cpp */

    #include<stdio.h>

         void main()

         {        float a1,a2;

                   double b1,b2;

                   a1=3141.59;a2=0.000001;

                   b1=3141.59;b2=0.000001;

                   printf(“%f,%lf\n”,a1+a2,b1+b2);

         }

         输出结果:

    解释:                                                                                                                                                                                      

      

4. /* e4.cpp */

#include<stdio.h>

         void main()

         {     float x=5/2,y=5.0/2;

                   printf("x=%f,y=%f\n",x,y);

         }

         输出结果:

         解释:

二、编写程序。

1.  编程(c1.cpp)定义3个整型变量x,y,z和一个实型变量averge,计算并输出3个整数的平均值averge,其中x=y=1,z=0。观察运行结果。再将x,y,z和averge改为实型变量,再观察运行结果。理解整除和不同类型数据进行混合运算的转化规律,对结果进行合理的解释。

源程序:

输出结果:

解释:

2.  改写程序(c2.cpp),针对上一题要求,采用从键盘用scanf()函数输入x,y,z的值。要求输出结果的形式为averge=…。

源程序:

输出结果:

解释:

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

源程序:

        输出结果:

       

三、调示示例。

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

源程序(有错误)

#include<stdoi.h>

void main()

{   int celsius;fahr;

fahr=100;

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

printf("fahr=d,celsius=%d\n",fahr,celsius);

}

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”变量没有定义)

改正:将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 <stdio.h>

void main()

{

            int y;

            y=x*x;

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

      printf(“d*%d=%d”,y);

       }

       改正后的源程序:

实验报告要求

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


实验三  选择结构程序设计

实验目的

1、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);

2、学会正确使用逻辑运算符和逻辑表达式;

3、熟练掌握if语句和switch语句;

4、熟练掌握switch语句中break语句的作用。

实验内容

1.调试示例,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。

源程序(有错误的程序)

#include<stdio.h>

#include<math.h>

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)调试开始,设置三个断点(断点的作用,程序执行到断点处暂停,使用户可以观察当前的变量或其他表达式的值,然后继续运行),先把光标定位到要设置断点的位置,然后单击编译工具条上的Inert/Remove Breakpoint或F9,断点就设置好了,如果要取消断点,只要把光标放到要取消的断点处,单击,这个断点就取消了。

3)单击编译工具条(go F5),程序运行,等待输入一元二次方程a、b、c的值,输入a=2.1,b=8.9,c=3.5.

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

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

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位小数)。

输入输出示例:

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.编程,输入20##年的任一个月,输出这个月的天数,要求使用switch语句。

输入输出示例:

Input month of 2005: 10

20##年10月有31天

提示:

1)该程序应该运行13次,分别输入1-12月,以及除此之外的数

2)运行时调试跟踪月份的变化

3)编程时注意不同月份可以有相同的天数

思考:输入年和月,如何求该月的天数?

6.改错,对2个整数进行乘、除和求余运算。

输入输出示例:

输入x 运算符 y : 21 % 8

21 Mod 8 = 5

源程序(有错误的程序)

#include<stdio.h>

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窗口中观察变量值的变化。

实验报告要求

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


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

实验目的

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

2.理解循环条件和循环体,以及for、while和do-while语句的相同及不同之处

3.掌握嵌套循环程序设计

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

实验内容

1.调试示例:输入2个正整数m,n,输出它们的最小公倍数和最大公约数。

源程序(有错误的程序)

#include<stdio.h>

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”菜单,包括了调试工具栏中所有的调试工具,用户可以选择使用“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。

输入输出示例:

Input eps:0.00001

S = 0.866977

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

3.  编程,输入1个实数x,计算并输出下式的值,直到最后一项小于10-5。要求定义和调用函数fact(n)计算n的阶乘,以及定义和调用函数mypow(x,n)计算xn

输入输出示例:

X=2

S=3.761949

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

思考:如何计算的值。

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

输入输出示例:

输入一个整数:-12345

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

提示:n表示一个整数,则n%10取个位数,n=n/10去掉个位数,组成一个新数。

思考:如果要把每位数字转换为字符输出,如何编程。

5.  改错,输入2个整数,分别将其逆向输出。

输入输出示例:

123             -321

123的逆向是321

-321的逆向是-123

源程序(有错误的程序)

#include<stdio.h>

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%10;

   }

   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窗口输入不同变量的值来验证程序的正确性。

实验报告要求

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


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

实验目的

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

2.熟练掌握使用break、continue语句在循环程序设计中的实现

3.继续掌握VC++的程序调试方法

实验内容

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

源程序(有错误)

#include<stdio.h>

#include<math.h>

void main()

{  int i,j,k,m,n;

   printf(“输入正整数的个数n:”);

   scanf(“%d”,&n);

   printf(“输入%d个正整数\n”);

   for(j=0;j<k;j++)

   {  scanf(“%d”,&m);

      n=sqrt(m);

      for(i=2;i<n;i++)

        if(m/i==0) break;

      if(i>n)

        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

第二次运行:

输入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

实验报告要求

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


实验六  数组

实验目的

1.熟练掌握数组的定义和初始化

2.熟练掌握使用数组元素的引用

3.继续掌握排序算法

实验内容

1.调试,输入一个正整数n(0<n<=0)和一组(n个)有序整数,再输入一个整数x,把x插入到这组数据中,使该组数据仍然有序。

源程序(有错误的程序)

#include<stdio.h>

Void main()

{

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

   Printf(“输入数据的个数n:”);

   Scanf(“%d”,&n);

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

   For(i=0;i<n;i++)

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

   Printf(“输入要插入的整数:”);

   Scanf(“%d”,&x);

   For(i=0;i<n;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+1;i++)

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

Putchar(‘\n’);

}

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

输入数据的个数n:5

输入5个整数:1 2 4 5 7

输入要插入的整数:3

1 2 3 4 5 7

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

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

2.编程,输入1个正整数n(1<n<=10),再输入n个整数,将最小值与第1个数交换,最大值与最后1个数交换,然后输出交换后的n个数。

输入输出示例:

输入整数个数:5

输入5个整数:5 2 1 10 9

              1 2 5 9 10

提示:注意下标的变化。

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

3.编程,输入1个正整数n(1<n<=10),再输入n个整数,按绝对值从小到大排序后输出。

输入输出示例:

输入整数个数: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的每一行均除以该行的主对角元素,然后最大值,试编制程序。

实验报告要求

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


实验七  字符串

实验目的

1.熟练掌握字条数组的定义、初始化和元素引用

2.熟练掌握字符串的存储和操作

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

实验内容

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

源程序(有错误的程序)

#include<stdio.h>

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<k;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 20## Games of the 29th Olympiad!

8th International Symposium on Safety Science.

大写字母数:7

小定字母数:56

数字字符数:7

空格字符数:10

其他字符数:2

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

实验报告要求

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


实验八  结构数组

实验目的

1.掌握结构类型的定义

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

3.掌握结构数组的定义和使用

实验内容

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

工资表

源程序(有错误的程序)

#include<stdio.h>

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<n;i++)

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

    for(i=0;i<n;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)个点的坐标,计算各点之间的距离之和。

坐标点的类型定义和相应的数组定义为:

struct coordinative

{  float x;

   float y;

} point[10];

输入输出示例:

n=10

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

60,55  70,55  76,49  80,40  72,28

Distance=1029.56

思考:

1)如果不从键盘输入,如何用初始化的方式给结构数组赋值

2)如何求n个点之间的最短距离

3.编程,输入学生成绩登记表中的信息(如下表所示),按成绩从低到高排序后再输出成绩表,并求计算总分。

学生成绩登记表

输入输出示例(输入略):

3  Wang         73

9  Mao          78

8  Xu            82

2  Li           85

5  Zhen          86

7  Gao          87

1  Zhang 90

4  Ma            92

10  Liu             95

6  Zhao             100

Sum=868

4.编程,建立一个有5个学生成绩的结构记录,包括学号,姓名和4门课程成绩,输出他们的平均成绩,并按从低到高的顺序输出他们的信息。

输入输出示例(输出略):

1  Zhang         90 77 85 84

2  Li       85 87 76 82

3  Wang    73 65 72 70

4  Ma      92 95 88 91

5  Zhen     86 82 89 85

5.编程,输入n(3<n<=10)个职工的编号、姓名、基本工资、职务工资,输出其中“基本工资+职务工资”最少和最多的职工姓名。

输入输出示例:

n=5

1,林宏,1800,600

2,李涛,1700,550

3,王钢,2100,750

4,周航,1500,450

5,金明,2300,850

基本工资+职务工资最不的是:周航

基本工资+职务工资最多的是:金明

6.编程,建立一个有n(3<n<=10)个学生成绩的结构记录,包括学号、姓名和3门成绩,输入总分最高学生的姓名和总分。

输入输出示例:

n=5

1,黄岚,78,83,75

2,王海,76,80,77

3,沈强,87,83,76

4,张枫,92,88,78

5,章盟,76,81,75

总分最高的学生是:张枫,285分

实验报告要求

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


实验九  函数和程序结构

实验目的

1.熟练掌握递归函数的定义和调用

2.掌握全局变量的定义和使用

3.掌握static变量定义和使用

实验内容

1.调试,用递归函数计算xn的值

#include<stdio.h>

void main()

{ double x, root;

  int n;

  printf(“Input x,n:”);

  scanf(“%lf%d”,&x,&n);

  root=fun(n,x);

  printf(“Root=%.2f\n”,root);

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

double fun(int n,double x)

{  if(n==1)

     return 1;

   else

     return x*fun(n-1,x);

}

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

Input x,n:2 3

Root=8.00

2.编程,输出Fibonacci数列1,1,2,3,5,8,…的前20个数,每行输出5个。要求用递归函数计算Fibonacci数列。

输入输出示例:

1       1       2       3

5       8       13     21

。。。。。。

提示:Fibonacci数列可以表示为:fib(1)=1,fib(2)=1,fib(n)=fib(n-1)+fib(n-2)  (n>=3)

思考:如何用递归实现字符串的逆序存放,例如,将字符串”-16385”转换为”-58361”

3.编程,设u、v取值为区间[-20,20]的整数,找出使f(u,v)取最大值的u和v。f(u,v)=(3.8*u*u+6.2*v-2*u)/-1.2*6+3*v)。要求定义和调用函数计算f(u,v)的值。

输入输出示例:

Max_u=-20.00

Min_v=3.00

Max=877.00

4.编程,输入3个整数x、y、z,计算并输出s=x!+y!+z!。要求定义2个函数,一个是求阶乘的递归函数,另一个函数求累加和(使用static变量)。

输入输出示例:

Input x,y,z: 5  6  7

Sum=5580

实验报告要求

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


实验十  指针

实验目的

1.熟练掌握指针的定义和使用

2.掌握使用二维字符数组和指针数组处理字符串

3.熟练掌握指针作为函数参数,包括数组名作为函数的参数

4.熟练使用字符串处理函数strcmp、strcpy、strlen、strcat。

实验内容

1.调试,将5个字符串从小到大排序后输出。

源程序(有错误的程序)

#include<stdio.h>

#include<string.h>

void fsort(char cname[][6],int n)

{  int k,j;

   char tmp[6];

   for(k=1;k<n;k++)  /*调试时设置断点*/

     for(j=0;j<n-k;j++)

        if(cname[j]>cname[j+1])

        {  t=cname[j];

           cname[j]=cname[j+1];

           cname[j+1]=t;

        }

}

void main()

{  int i;

   char cname[5][6]={“wang”,”li”,”zhang”,”jin”,”xian”};

   fsort(cname,5);

   for(i=0;i<5;i++)

      printf(“%s \n”,cname[i]);

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

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

Jin

Li

Wang

Xian

Zhang

2.编程,输入n(3<n<=10)个数,输出这n个数中的最小值及其下标。要求定义和调用函数,寻找n个数中的最小值及其下标,函数的返回值类型是void,在函数中使用指针、数组各一次。

输入输出示例:

输入数组元素的个数:5

输入5个数:12  8  3  6  19

最小值是a[2]=3

思考:如何在二维数组中找出最大值、最小值及其对应的行列下标,要求定义函数实现。

3.编程,输入一个3╳4的数组,先找出每一行中的最大元素,再分别除该行中的所有元素,最后输出数组。要求:定义和调用函数处理数组中的元素,在函数中使用指针、数组各一次。

输入输出示例:

输入3╳4数组

1  2  3  4

5  6  7  8

9  10 11  12

0.25  0.50  0.75  1.00

0.63  0.75  0.88  1.00

0.75  0.83  0.92  1.00

提示:定义函数形参时,如果把二维数组定义为指针,调用时要用一级指针的地址。

思考:输入一个3╳4的数组,先找出每一行中绝对值最大的元素,再分别除该行中的所有元素,最后输出数组,试编制程序。

4.编程,输入6个字符串,先按从小到大的顺序输出这些字符串,再输出其中最大和最小的字符串,要求定义和调用函数。

输入输出示例:

输入6行字符串:

Hangzhou

Shanghai

Beijing

Nanjing

Guangzhou

Tianjing

字符串从小到大排列后:

Beijing

Guangzhou

Hangzhou

Nanjing

Shanghai

Tianjing

最短的字符串是Beijing

最长的字符串是Tianjing

提示:定义函数形参时,如果把二维数组定义为指针,调用时要用一级指针的地址

5.编程,把命令行中的字符串(由数字字符组成)转换为整数并累加输出(如:字符地串”test 12 348”转换为整数并累加,值为360)

输入输出示例:

test 12 34

sum=46

提示:

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

2)命令行参数都是字符串,不是数字。

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

6.编程,从键盘上输入一个3╳3的矩阵,求矩阵的主对角线和副对角线之和,要求定义和调用函数。

输入输出示例:

输入3╳3数组

8  6  12

5  9  10

7  11  5

Sum=41.00

实验报告要求

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


实验十一  函数和程序结构

实验目的

1.理解文件、缓冲文件和文件指针的概念

2.掌握文件的基本操作

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

实验内容

1.调试,从键盘输入一行字符,写到文件a.txt中。

源程序(有错误的程序)

#include<stdio.h>

#include<stdlib.h>

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中。

源程序文件hello.c

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

#include<stdio.h>        /*编译预处理命令*/

void main()                             /*主函数*/

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

  }

输入输出示例(没有键盘输入和屏幕输出):

New_hello.c中的内容应该是:(去除hello.c中的注释后)

#include<stdio.h>      

void main()                      

printf(“Hello World!\n”);

  }

提示:

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

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

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

实验报告要求

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

更多相关推荐:
C语言实验指导及报告模板

语言程序江西理工大学设计1C附件1实验报告模板C语言程序设计实验报告实验一简单的C程序教学班级冶金136学号01姓名张博课程教师胡春安实验教师胡春安完成时间20xx20xx学年第1学期江西理工大学2实验一简单的...

行政案例方法与实例实验指导书

前言行政案例分析课程的首要特点是强调理论联系实际的学习方法要求学生运用已学的行政学基本理论对当前行政管理领域的重特大事件公共政策规范等进行分析剖析该事件或该公共政策的问题成因探讨解决该问题的可能途径丰富对该类社...

VC++实验指导书

VC程序设计实验指导书张位勇湖南工学院前言VisualC实验环境介绍一VisualC简介VisualC是Microsoft公司的VisualStudio开发工具箱中的一个C程序开发包VisualStudio提供...

Web技术实验指导书

Web技术实验指导书内容简介Web技术是计算机专业学生的一门专业课程着重讲述Web编程的技术方法对于学生从事Web系统的研发使用和维护有重要意义本课程概念多内容涉及面广系统性强通过本课程的学习学生应能从软件硬件...

C_sharp实验指导书

实验指导实验一VS20xx集成开发环境一实验目的熟悉VS20xx开发环境掌握如何在此环境下开发简单的NET应用程序以及调试程序的基本操作技巧二实验要求123熟悉VSNET环境按照C规范正确写源程序能得到正确的程...

设计性实验论文范例与书指导

设计性实验论文范例与书指导,内容附图。

设计性实验论文范例与书指导

设计性实验论文范例与书指导,内容附图。

编译原理实验指导书

五邑大学计算机学院编译原理实验指导书五邑大学实验指导书编译原理实验开课系部计算机学院二0一三年九月1五邑大学计算机学院编译原理实验指导书编译原理课程实验指导书课程名称编译原理课程实验课程编号0800440课程性...

程序设计基础实验指导书

程序设计基础实验指导书内蒙古工业大学信息工程学院计算机系20xx年8月程序设计基础实验指导书程序设计基础实验指导书一课程基本信息二实验题目与安排三实验基本要求1实验前的准备工作非常重要上机前应认真把实验题目做一...

实训指导教师评语

武汉工程职业技术学院电子商务专业实训评语聂老师一实训期间个人表现1能积极主动联系实训单位并且为实训做好充分准备工作2能帮助其他同学联系实训单位且指导书写报告3尊敬师长团结他人能吃苦耐劳4在现场能坚持不迟到不早退...

指导教师评语

20xx年10月20日

通用技术实验室标语

思考影响人生双手改变世界教室黑板上面的标语一副创新无止境实践出真知设计改变生活技术创造未来细节决定成败态度决定一切培养创新精神提高实践能力教室两边的标语共四副

实验指导语(22篇)