C语言程序设计报告

C程序设计报告

矩阵运算

学院:地质与环境学院

专业:资源勘查工程0901

姓名:王甲

学号:0909030119

目录

1.设计任务书

1.1题目

1.2设计要求

1.3程序涉及的知识点

2.功能设计

2.1算法设计

2.2部分模块流程图

3.程序代码设计

3.1源代码

3.2运行结果

4.运行结果

5.程序设计总结

6.致谢

7.参考文献

1设计任务书

1.1 题目

矩阵运算

1.2 设计要求

此程序为矩阵运算的相关程序,用来计算包括两矩阵的加、减、乘运算,求矩阵的转置矩阵、最大值元素、最小值元素及对角线元素之和等运算。

1.2 本系统涉及的知识点

此程序涉及了老师讲授的多个知识点,包括:forifprintfscanf 等语句,顺序、选择、循环等结构                                                                                                                    

2功能设计

2.1 算法设计

此程序需要实现的功能要求:

利用forifprintfscanf 等语句来实现所需功能。

输入矩阵ab的元素之后,依次计算:

程序一:计算a+b矩阵;

程序二:计算a-b矩阵;

程序三:计算a*b矩阵;

程序四:计算a的转置矩阵;

程序五:计算a矩阵的最小值元素;

程序六:计算a矩阵的最大值元素;

程序七:计算a矩阵的主对角线元素之和;

程序八:计算a矩阵的副对角线元素之和;

程序九:计算a矩阵的上三角元素之和;

程序九:计算a矩阵的下三角元素之和;

2.2 部分模块流程图

 

文本框: scanf("%4d",&a[i][j]);


3 程序源代码

3.1源代码

#include"stdio.h"

void main()

{

 int a[3][3],b[3][3],c[3][3],

 int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0;

 printf("矩阵运算\n");

 printf("\n");

 printf("请输入a矩阵元素:\n");

 for(i=0;i<3;i++)   /*通过二重循环给a矩阵的元素赋值*/

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

     scanf("%4d",&a[i][j]);

 printf("a矩阵:\n");

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

 {

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

    printf("%6d",a[i][j]);

  printf("\n");

 }

 printf("\n");

 printf("请输入b矩阵元素:\n");

 for(i=0;i<3;i++)   /*通过二重循环给b矩阵的元素赋值*/

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

   scanf("%4d",&b[i][j]);

 printf("b矩阵:\n");

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

 {

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

    printf("%6d",b[i][j]);

  printf("\n");

 }

 printf("\n");

 printf("程序一:计算a+b矩阵\n");   /*计算a+b矩阵并输出*/

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

 {

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

  {c[i][j]=a[i][j]+b[i][j];

   printf("%6d",c[i][j]);}

  printf("\n");

 }

 printf("\n");

 printf("程序二:计算a-b矩阵\n");   /*计算a-b矩阵并输出*/

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

 {

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

  {c[i][j]=a[i][j]-b[i][j];

   printf("%6d",c[i][j]);}

  printf("\n");

 }

 printf("\n");

 printf("程序三:计算a*b矩阵\n");   /*计算a*b矩阵(c矩阵)并输出*/

 for(i=0;i<3;i++)   /*最外层循环控制c矩阵的行数*/

   for(j=0;j<3;j++)   /*次外层循环控制c矩阵的列数*/

   {for(k=s=0;k<3;k++)   /*计算c矩阵的每个元素的值*/

    s+=a[i][k]*b[k][j];

    c[i][j]=s;}

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

 {

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

  printf("%6d",c[i][j]);

  printf("\n");

 }

 printf("\n");

 printf("程序四:计算a的转置矩阵\n");   /*计算a的转置矩阵并输出*/

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

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

     c[j][i]=a[i][j];

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

 {

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

     printf("%6d",c[i][j]);

   printf("\n");

 }

 printf("\n");

 printf("程序五:计算a矩阵的最小值元素\n");   /*计算a矩阵的最小值元素min并输出*/

 min=a[0][0];

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

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

     if(a[i][j]<min)

    min=a[i][j];

 printf("min=%d\n",min);

 printf("\n");

 printf("程序六:计算a矩阵的最大值元素\n");   /*计算a矩阵的最大值元素max并输出*/

 max=a[0][0];

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

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

     if(a[i][j]>max)

    max=a[i][j];

 printf("max=%d\n",max);

 printf("\n");

 printf("程序七:计算a矩阵的主对角线元素之和\n");   /*计算a矩阵的主对角线元素之和sum1并输出*/

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

 {

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

     if(i==j)

      sum1+=a[i][j];

 }

 printf("sum1=%d\n",sum1);

 printf("\n");

 printf("程序八:计算a矩阵的副对角线元素之和\n");   /*计算a矩阵的副对角线元素之和sum2并输出*/

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

 {

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

     if(i+j==2)

      sum2+=a[i][j];

 }

 printf("sum2=%d\n",sum2);

 printf("\n");

 printf("程序九:计算a矩阵的上三角元素之和\n");   /*计算a矩阵的上三角元素之和sum3并输出*/

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

 {

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

     if(i<j||i==j)

      sum3+=a[i][j];

 }

 printf("sum3=%d\n",sum3);

 printf("\n");

 printf("程序十:计算a矩阵的下三角元素之和\n");   /*计算a矩阵的下三角元素之和sum4并输出*/

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

 {

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

     if(i>j||i==j)

      sum4+=a[i][j];

 }

 printf("sum4=%d\n",sum4);

 printf("\n");

 printf("运算完毕!\n");   /*运算完毕*/

 printf("\n");

}

4运行结果

运行结果如图所示:

5程序设计总结

这次“矩阵运算”的程序设计不仅让我对C语言的熟悉程度上升到了另一个高度,更加熟练的运用C语言,而且在一定意义上对面向对象设计的理解更加深刻了,是我学习C语言的过程中一次进步。在这个过程中,我对编程语言有了一个新的认识。当看着一个个矩阵运算的结果出现在自己面前时,心中泛起激动的涟漪,原来编程也不是那么遥不可及,编程也富有趣味性,并且从中能让我收获更多的实践知识,挺高自己学习C语言和编程的能力。

6致谢

     感谢张老师的认真教授和耐心讲解。

7参考文献

1】龚尚福,《C/C++语言程序设计》 中国矿业大学出版社 2007.2

 

第二篇:C语言程序设计实验报告

C语言程序设计A 实验报告

实验名称 火车票订票系统

信息与通信学院 院(系)电子信息工程 专业

         班 第2实验小组

作者

学号

实验日期 20111229

.实验目的和要求

1.列车原始信息可以从文件导入或者控制台录入,包括车次、票数等;

2.客户可以按车次进行列车信息查询;

3.客户对某一天订票,订票成功后当日的票数能被更改;

4.客户能够退票;

5. 程序能够输出菜单,用户按照提示操作并最终能够得到相应操作结果;

6.熟练掌握并运用结构体。

.实验内容

   #include<stdio.h>

#include<string.h>

struct Piao

{

char b[4];

 int shu;

}abc[30]={{"t1",55},{"t2",68},{"t3",15},

{"t1",55},{"t2",68},{"t3",15},

{"t1",5},{"t2",28},{"t3",35},

{"t1",51},{"t2",48},{"t3",35},

{"t1",55},{"t2",68},{"t3",15},

{"t1",5},{"t2",28},{"t3",35},

{"t1",55},{"t2",68},{"t3",15},

{"t1",5},{"t2",28},{"t3",35},

{"t1",51},{"t2",48},{"t3",35},

{"t1",45},{"t2",28},{"t3",11}};

/* 定义数组结构体,并输入原始班次和票数*/

void banci()//定义查询班次的函数

{

   int j,c;

   char s[32];

   printf("请输入日期,1月");

   scanf("%d",&c);

   printf("请输入班次");

   scanf("%s",s);

   if(c>11)

          j=-1;

     else

        if(strcmp(s,"t1")==0)

             j=0;

            else

               if(strcmp(s,"t2")==0)

                 j=1;

            else

         if(strcmp(s,"t3")==0)

            j=2;

         else

                  j=-2;

                switch(j)

                {

                case -2:printf("很抱歉,没有你所要查询的班次\n");break;

                case -1:printf("很抱歉,还不能查询1月%d号的车票\n",c);break;

                default:printf("1月%d日班次%s的车票还有%d\n",c,s,abc[(c-1)*3+j].shu);

                }

}

 void dingpiao()//定义订票函数

{

    int j,c,f,i;

     char s[54];

     printf("请输入日期,1月");

     scanf("%d",&c);

     printf("请输入班次");

    scanf("%s",s);

 printf("请输入数量");

   scanf("%d",&i);

     if(c>11)

     printf("很抱歉,还不能购买1月%d号的车票\n",c);

      else

         if(strcmp(s,"t1")==0)

          j=0;

            else

               if(strcmp(s,"t2")==0)

                   j=1;

            else

         if(strcmp(s,"t3")==0)

            j=2;

      else

        printf("很抱歉,没有你所要查询的班次\n");

   if(i<abc[(c-1)*3+j].shu)

   f=abc[(c-1)*3+j].shu-i;

     else

          f=0;

     abc[(c-1)*3+j].shu=f;

   switch(f)

   {

   case 0:printf("很抱歉,票数不够\n");break;

   default:printf("以订票成功,1月%d号班次%s所剩票数%d\n",c,s, abc[(c-1)*3+j].shu);

   }

}

void tuipiao()//退票函数

{

  int j,c,i;

  char s[24];

   printf("请输入日期,1月");

   scanf("%d",&c);

   printf("请输入您所要退票的班次");

   scanf("%s",s);

   printf("请输入票数");

   scanf("%d",&i);

       if(c>11)

          printf("很抱歉,系统无法识别\n");

           else

           if(strcmp(s,"t1")==0)

              j=0;

             else

               if(strcmp(s,"t2")==0)

                 j=1;

             else

          if(strcmp(s,"t3")==0)

            j=2;

        else

          printf("很抱歉,系统中无该班次\n");

       abc[(c-1)*3+j].shu=abc[(c-1)*3+j].shu+i;

    printf("以退票成功,1月%d号班次%s所剩票数%d\n",c,s,abc[(c-1)*3+j].shu);

 }

void guanyu()

{

       printf("   制作小组         \n ");

    printf("        \n ");

       printf("               \n");

    printf("             \n");

    printf("            \n");

}

void tuichu()

       printf("您已经退出系统\n");

}

void ab()

{

      printf("系统无该选项\n");

}

void main()

{  int i;

  printf("                              火车订票系统               \n");

  printf("                    *********************************    \n");

  printf("                              1,查看班次(t1,t2,t3)          \n");

  printf("                              2,火车订票                 \n");

  printf("                              3,退票                     \n");

  printf("                              4,制作小组                 \n");

  printf("                              5,退出系统                 \n");

  printf("                    ********************************    \n");

  do

  {

  printf("                           请输入你要选择的功能");

  scanf("%d",&i);

  switch(i)

  {

   case 1: banci();break;

   case 2: dingpiao();break;

   case 3: tuipiao();break;

   case 4: guanyu();break;

   case 5: tuichu();break;

   default:ab();break;

  }

 }while(i!=5);

}

实验结果:

.分析与总结

分析:火车订票系统是利用了一下几种语法:

1:利用了函数的调用。我们先是把每个功能分开了编译,如void banci()//定义查询班次的函数,void dingpiao()//定义订票函数等等,然后用函数调用把整个函数调来使用,这样使得程序更加简单易懂,增加了可读性。

2:程序模块化。因为是使用函数调用,所以每个功能都是单独的一个程序。这样做出错的机会更小。如果出错,也便于检查是哪里出错。

3:使用数组结构体。在程序的开头我们用结构体,把字符串char b[4]和int shu合成一体。并用数组abc[30]作为结构体的参数名。把原始的班次和票数输入进去。这样以便调用。

4:在编写各个程序时多次用了if判断语句,for循环语句,switch条件判断语句。使得函数简单易懂。

5:程序在编写时把定义的函数放在开头处,而把主函数放在末尾,这样就可以免去在函数调用时区声明函数。使程序更加简洁。

总结:从拿到题目到整个编程的过程中,遇到或多或少的错误,我们发现了我们的不足之处,对以前学过的知识理解不够深,掌握得不够牢固,比如正如本题要求的结构体……通过了本小组成员的共同探讨,终于把问题一一克服,编出了该程序。回顾本次课程设计,我们从中学到了很多的东西,不仅可以巩固了以前所学到的知识,而且还可以提升自己的编程能力。通过了本次实验,我们明白了一个系统菜单和提示信息非常重要,如没有它们,用户根本不知道怎么运用你所设计的系统。同时也明白了理论和实际相结合时很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考能力。学会了设计一个简单的系统要注意哪些方面,也使我们知道了自己哪些方面做得还不够。

我们总结出了一点点的经验如下:

1.       要对系统的功能和要求做出详细的分析,并合理分解成几个模块;

2.       对分解出来的模块进行独立设计;

3.       设计之前要构想分析运行界面显示情况;

4.       针对构想出来的界面进行程序的编写。

心得体会:通过这次程序设计,增加了我们对软件技术的了解,在学习C语言的过程中也学到和巩固了许多计算机应用基本知识。在具体操作中对所学过的C语言理论知识得到巩固加强,达到实训目的,也发现了自己的不足之处,为以后我们学习C语言奠定基础,同时体会到C语言具有的语句简洁、使用灵活、执行效率高等特点。通过实际操作,学会C语言程序编程的基本步骤、基本方法,开发了自己逻辑思维能力,培养了分析问题、解决问题的能力。

相关推荐