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 本系统涉及的知识点
此程序涉及了老师讲授的多个知识点,包括:for、if、printf及scanf 等语句,顺序、选择、循环等结构。
2功能设计
2.1 算法设计
此程序需要实现的功能要求:
利用for、if、printf及scanf 等语句来实现所需功能。
输入矩阵a和b的元素之后,依次计算:
程序一:计算a+b矩阵;
程序二:计算a-b矩阵;
程序三:计算a*b矩阵;
程序四:计算a的转置矩阵;
程序五:计算a矩阵的最小值元素;
程序六:计算a矩阵的最大值元素;
程序七:计算a矩阵的主对角线元素之和;
程序八:计算a矩阵的副对角线元素之和;
程序九:计算a矩阵的上三角元素之和;
程序九:计算a矩阵的下三角元素之和;
2.2 部分模块流程图
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语言程序设计A 实验报告
实验名称 火车票订票系统
信息与通信学院 院(系)电子信息工程 专业
班 第2实验小组
作者
学号
实验日期 2011年12月29日
一.实验目的和要求
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语言程序编程的基本步骤、基本方法,开发了自己逻辑思维能力,培养了分析问题、解决问题的能力。
东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
《C语言程序设计》调研报告本着以人才市场需求变化为导向,适时调整专业结构和培养方案的原则,本课程对山东职业院校技能大赛、全国大学生…
C程序设计实验报告实验名称控制结构综合程序设计学时安排2课时实验类别上机操作型实验要求1人1组一实验目的1熟练掌握分支结构循环结构…
C课程设计报告题目小学算术运算测试设计者刘星刘俊良凌锋专业班级计算机网络0901班学号343337指导教师任长安所属系部计算机与信…
C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称数组实验一实验目…
C语言程序设计实验报告八专业计算机科学与技术班级卓越工程师班日期20xx年12月16日实验组别第一组成绩第八次实验指针实验指导教师…
高级语言程序设计实验报告班级学号姓名成绩实验日期年月日实验题目实验五数组程序设计实验目的实验内容包括算法说明用文字或流程图说明程序…