程序设计实验心得

时间:2024.4.21

编程的心得体会

作业要求:

考试总分排序。

(1) 从文件(.txt)读入你班10个学生的有关信息:学号(int),姓名 (字符数组),三门课成绩(int数组)。要求用结构体数组存放学生 信息。

(2) 求各个学生的总成绩。

(3)按总分成绩从高到低的顺序将学生的各信息(学号、姓名、三门课成 绩、总成绩)输出到另一文件(.txt)中保存。

程序设计实验心得

程序设计实验心得

作业目的:

主要考察我们对结构体的认识,数组的掌握,文件操作的掌握。

本程序涉及定义一个结构体,字符数组,int数组,冒泡法排序,文本文件的读入,创建,输出。

#include<stdio.h>

#include<stdlib.h>

struct student

{

int id;

char name[20];

int score[3];

int total;

}st[10],t; //结构体变量的定义

main()

{

FILE *fp;

int i=0,j;

fp=fopen(“d:\\chengji.txt”,”r”);//文本文件的打开

if(fp==NULL)

{ printf(“file open error!\n”);

exit(0);

}

else

printf(“file open ok!\n”); //文本文件是否正确打开的判断

while(!feof(fp))

{

fscanf(fp,”%d %s %d %d %d”,&st[i].id,st[i].name,&st[i].score[0],&st[i].score[1],&st[i].score[2]);

st[i].total=st[i].score[0]+st[i].score[1]+st[i].score[2];

i++;

} //从文本文件读取10个学生的成绩并计算总成绩

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

for(j=i+1;j<10;j++)

{

if(st[i].total<st[j].total)

{

t=st[i];

st[i]=st[j];

st[j]=t;

}

} //冒泡法排序10个学生的成绩

fclose(fp); //关闭文本文件

fp=fopen(“d:\\chengjic.txt”,”w”);

if(fp==NULL)

{ printf(“file open error!\n”);

exit(0);

}

else

printf(“file open ok!\n”); //打开输入的文本文件

fprintf(fp,”学号 姓名 成绩1 成绩2 成绩3 总成绩 \n”);

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

fprintf(fp,”%-6d %-8s %-4d %-4d %-4d %-4d\n”,st[i].id,st[i].name,st[i].score[0],st[i].score[1],st[i].score[2],st[i].total); //数据输出

}程序设计实验心得

程序设计实验心得

程序设计实验心得

不同之处:

我认为我的程序与一般的程序没有太多想法不同的地方。若要说的话就是在读取数据时,在打开文本文件时,先判断文本文件能否正确打开。同时算出学生的总成绩,没有另外用一个循环来算总成绩。输出信息到文本文件时,用了一个表头,下方的数据设置与表头对齐。

改进之处:

还需改进之处就是文本文件的打开位置与文件名能由用户来决定。排序方法还可以继续改进,现在的冒泡法需要很繁琐的运行,若数据较多时,运算时间就会很长。可以用一些高级的排序方法,来减短时间。

心得体会:

在编程的时候还犯了一些错误。比方说字符数组与整型数组在赋值时,老是在字符数组与整型数组前,哪个该加地址符搞混淆。有时候在行尾,忘记加分号。

在写文件操作时,有时会忘记一些指令。一些指令会打错。有时会忘记数组是从0开始的。

编程并不需要去死记硬背一些指令,而是去理解。学习一年的编程,会发现C语言还是有规律可循的,一些指令在理解的基础上去编,会发现很简单。

我感觉编程是一个需要耐心的工作,你在编程的过程会遇到各种各样的困难,如果你没有耐心,你就很容易打退堂鼓,那你做不好编程这件事。你要有耐心,知道有错误后,就得从头到尾反复地看,去发现错误。所以编程是一个培养一个人耐心的过程。

编程也是一个让人变得更严谨的过程,使人的思维更加缜密。因为你必须毫无差错地发一个指令,计算机才会去执行。你必须一步一步,稳打稳扎地去做,不得有半点马虎,也不能偷工减料。编程也会激发人的思维,使人的思维更加活跃。你必须自己想算法去做,久而久之,会发现很有创造性。

有人会说,编程是一个枯燥乏味的过程,但我不完全赞同,编程的过程是一个创造的过程,当你编完后,再运行成功了,你会感觉非常的快乐,特别有成就感。

经过一年的学习,我发现学习C语言,让我学会和懂得了很多。


第二篇:程序设计实践实验报告


程序设计实践实验报告

实 验 报 告

课程名称 ___ 程序设计实践__

实验项目 _______子程序设计

实验仪器 PC __

系 别_ 计算机科学与工程

专 业 软件工程

班级/学号 B软工0701/**

学生姓名 _ XX

实验日期 20XX-3-26_

成 绩

指导教师 _XX_

实验二 子程序设计

一、实验目的

1.   学习和掌握参数传递的方法;

2.学习和掌握递归调用;

3.了解goto语句的使用;

4.了解降低嵌套深度的方法;

5.了解复杂度的度量。

二、实验要求

1.通过编程实现,学习和理解参数传递和递归调用的使用。

2.使用goto语句编写程序,用非goto语句改写程序;

3.了解减少嵌套层次和度量复杂度的方法。

三、实验内容和结果

1.   参数传递

(1)创建控制台应用程序项目(CLR)。定义函数swap,swap函数有两个整型形参x,y,swap的功能为交换x和y的值,并依次显示出交换后的x,y的值。主函数定义两个整型变量a,b,并赋不同的初值,依次显示a和b的值,调用swap函数,a,b作为实参,再在主函数中依次显示a和b的值。(值传递)

编写并运行以上程序,分析运行结果,思考值传递中是否会改变实参的值。

(2)创建控制台应用程序项目,修改(1)中程序,使 swap函数的参数为两个指向整型的指针,swap函数中交换指针所指向的内容;主函数中调用swap函数,交换整型变量a和b的值。

编写并运行修改后的程序,比较与(1)中程序运行结果的不同之处及原因。

(3)创建控制台应用程序项目,修改(1)中程序,采用引用方式传递函数的参数。

编写并运行修改后的程序,比较与(1)、(2)中程序运行结果的异同以及(2)、(3)程序中改写的难易程度。

int swap1(int x,int y){int temp;

temp=x;

x=y;

y=temp;

return 0;} //实参传递函数

int swap2(int &x,int &y){int temp;

temp=x;

x=y;

y=temp;

return 0;}//形参传递函数

int swap3(int *x,int *y){int temp;

temp=*x;

*x=*y;

*y=temp;

return 0;}//指针传递函数

int main()

{

int a,b;

Console::WriteLine ("plesae input a and b interger:");

a=Int32::Parse(Console::ReadLine());

b=Int32::Parse(Console::ReadLine());

Console::WriteLine ("实参传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap1(a,b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ("-------------------");

Console::WriteLine ("形参传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap2(a,b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ("++++++++++++++++");

Console::WriteLine ("指针传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap3(&a,&b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ( "%%%%%%%%%%%%%%%%%" );

Console::ReadLine();

return 0;

}

2.递归调用

使用递归时,请注意如下原则:a.确认递归能够停止(子程序中至少含有一条非递归的路径);b.把递归限制在一个子程序内;c.留心栈空间;使用递归前,先考虑可否用其他方式编写程序,可能效果更好。

创建控制台应用程序项目,用递归方式计算阶乘,编写计算阶乘的函数,输入参数n,函数返回值为n的阶乘。编写程序并运行结果。(注意溢出)

创建控制台应用程序项目,用循环方式去计算阶乘。编写程序并运行结果。(注意溢出)

long double digui(long double n)

{

if(n==0||n==1)

{return(1);}

else

{return (digui(n-1)*n);}

}//递归函数

long double xhuan(long double n)

{

long double x=1;

if(n==0||n==1)

{return(1);}

else

{

for(int i=1;i<=n;i++)

{

x=x*i;

}

}

return x;

}//循环函数

int main(array<System::String ^> ^args)

{

Console::WriteLine("please input an integer n:");

long double n=Int32::Parse(Console::ReadLine());

while(n<0)

{Console::WriteLine("n<0,please reinput an integer n:");

n=Int32::Parse(Console::ReadLine());

}

Console::WriteLine("循环输出阶乘n!="+xhuan(n));

Console::WriteLine("递归输出阶乘n!="+digui(n));

Console::ReadLine();

return 0;

}

3.goto语句

(1)创建控制台应用程序项目,编写和运行如下程序。主函数如下:

int data;

int isend;

do

{

Console::WriteLine("please input two number ");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

if (isend==0){

goto LOOP_EXIT;}

Console::WriteLine("no exit");

}while(data!=-1);

LOOP_EXIT:

Console::ReadLine();

isend不为0时,data为-1:

isend不为0时, data不为-1:

isend为0:

(2)将上述程序改写为没有goto语句的如下程序

int data;

int isend;

Console::WriteLine("please input two number");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

while((isend!=0)&&(data!=-1))

{

Console::WriteLine("no exit");

Console::WriteLine("please input two number");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

}

Console::ReadLine();

isend不为0,data为-1:

isend不为0,data不为-1:

isend为0:

比较结果与(1)的不同。

当isend不为0,data为-1时两次显示结果不同,第二次没有“no exit”字样

(3)将(1)中程序改写为没有goto的程序,且运行结果要求与(1)中一致。

(4)编写并运行下列带goto语句的程序

int a[4];

for(int i=0;i<4;i++)

{

Console::WriteLine("please input number");

a[i]= Int32::Parse(Console::ReadLine());

}

if (a[0]==0)

{

Console::WriteLine("a0=0");

goto END_PROC;

}

if (a[1]==0)

{

Console::WriteLine("a1=0");

goto END_PROC;

}

if (a[2]==0)

{

Console::WriteLine("a2=0");

goto END_PROC;

}

if (a[3]==0)

{

Console::WriteLine("a3=0");

goto END_PROC;

}

END_PROC:

Console::WriteLine("end_proc");

Console::ReadLine();

执行goto语句:

不执行goto语句:

(5)改写(4)中程序,要求利用嵌套的if-else语句消除goto的代码,得到与(4)相同的运行结果。

int main(array<System::String ^> ^args)

{

int a[4];

for(int i=0;i<4;i++)

{

Console::WriteLine("please input number");

a[i]= Int32::Parse(Console::ReadLine());

}

if (a[0]==0)

Console::WriteLine("a0=0");

else

{

if (a[1]==0)

Console::WriteLine("a1=0");

else

{

if (a[2]==0)

Console::WriteLine("a2=0");

else

{

if (a{[3]==0)

Console::WriteLine("a3=0");

}

}

}

END_PROC:

Console::WriteLine("end_proc");

Console::ReadLine();

return 0;

}

结果:

观察用if嵌套的程序与使用goto语句的程序的代码特点。

4. 嵌套层次控制

(1)运行以下程序

int a[4];

for(int i=0;i<4;i++)

{

Console::WriteLine("please input number");

a[i]= Int32::Parse(Console::ReadLine());

}

if (a[0]==0)

{

Console::WriteLine("a0=0");

if (a[1]==0)

{

Console::WriteLine("a1=0");

if (a[2]==0)

{

Console::WriteLine("a2=0");

if (a[3]==0)

{

Console::WriteLine("a3=0");

}

}

}

}

Console::ReadLine();

结果:

(2)用重复测试的非嵌套代码重写上程序,减少嵌套深度。

提示:if语句部分可以用如下思路来重写

using namespace System

int main(array<System::String ^> ^args)

{

int a[4];

for(int i=0;i<4;i++)

{

Console::WriteLine("please input number");

a[i]= Int32::Parse(Console::ReadLine());}

if ((a[0]==0)&& (a[1]==0)&& (a[2]==0))

{

Console::WriteLine("a0=0");

Console::WriteLine("a1=0");

Console::WriteLine("a2=0");

if (a[3]==0)

{

Console::WriteLine("a3=0");}

}

else

{

if((a[0]==0)&& (a[1]==0))

{

Console::WriteLine("a0=0");

Console::WriteLine("a1=0");

if(a[2]==0)

{

Console::WriteLine("a2=0");}

}

else

{

if(a[0]==0)

{

Console::WriteLine("a0=0");

if(a[1]==0)

{

Console::WriteLine("a1=0");}

}

}

}

Console::ReadLine();

return 0;

}

截图:

思考(2)中的代码与(1)中的代码相比的优缺点。

一中代码量较少,但是难度增加,二中代码量多,难度减少

(3)调试和运行如下程序。

int quantity;

quantity= Int32::Parse(Console::ReadLine());

if (quantity<30){

if(quantity<20){

if(quantity<10){

Console::WriteLine("quantity <10");

}

else{

Console::WriteLine("20> quantity>=10");

}

}

else{

Console::WriteLine("30> quantity>=20");

}

}

else{

Console::WriteLine("quantity>=30");

}

(4)使用if-else if-…else改写程序(3),减少(3)中的嵌套深度。

int main(array<System::String ^> ^args)

{

int quantity;

Console::WriteLine("please input number");

quantity= Int32::Parse(Console::ReadLine());

if (quantity <10)

Console::WriteLine("quantity<10");

else if(quantity<20)

Console::WriteLine("10<=quantity<20");

else if(quantity<30)

Console::WriteLine("20<=quantity<30");

else

Console::WriteLine("quantity>=30");

Console::ReadLine();

return 0;

}

四.总结

通过本次训练,对c#语言有较大了解,心得有一个,就是每个程序右面应该有一个输入语句,以便观察运行结果,本次感悟最深的是if语句和循环语句等。希望多实践

更多相关推荐:
实验设计报告心得体会大全

部分学生的反应实验心得体会在做测试技术的实验前我以为不会难做就像以前做物理实验一样做完实验然后两下子就将实验报告做完直到做完测试实验时我才知道其实并不容易做但学到的知识与难度成正比使我受益匪浅在做实验前一定要将...

实验设计报告的各种心得体会

实训心得体会为期一周的高频电子线路实训就这样告一段落了我们通过这一周紧锣密鼓的实训我们对于通信电子电路的这门课程又有了更直观更深刻的了解首先我们在实训的第一天和第二天对于高频小信号调谐放大器场效应管谐振放大器集...

实验设计与数据处理心得

实验设计与数据处理心得体会刚开始选这门课的时候我觉得这门课应该是很难懂的课程首先我们做过不少的实验了当然任何自然科学都离不开实验大多数学科化工化学轻工材料环境医药等中的概念原理和规律大多由实验推导和论证的但我觉...

各类实验总结几心得体会

一在做XXX的实验前我以为不会难做就像以前做物理实验一样做完实验然后两下子就将实验报告做完直到做完测试实验时我才知道其实并不容易做但学到的知识与难度成正比使我受益匪浅在做实验前一定要将课本上的知识吃透因为这是做...

机构创新设计实验心得体会

机构创新实验心得体会机自101李希东20xx10301146转眼间机构创新实验结束了,但通过这次实践性的实验让我学习到了许多东西,其中最重要的就是团队合作是非常重要的,这种东西决定着做事的快慢以及做出的事的成败…

普通物理设计性实验心得体会

普通物理设计性实验心得体会在所有的物理课堂中,我喜欢的是物理实验。理论总是枯燥,专业课堂往往让人昏昏欲睡。但是实验课堂总让我感觉新鲜而有趣,各种实验现象又非常吸引好奇心极强的我前往探索。相比大一的普通物理实验课…

数电设计实验心得体会

通过本学期的数字电路理论学习让我对数字电路原理有了一定的了解,而通过数字电路设计让我对数字电路有了进一步的了解,并在实验过程中逐渐学会了将理论与实际相结合。通过自己所学的理论与实际生活中遇到的小问题和小玩具相结…

DSP实验报告集合(程序)+心得体会 2

三实验原理浮点数的表达和计算是进行数字信号处理的基本知识产生正弦信号是数字信号处理中经常用到的运算C语言是现代数字信号处理表达的基础语言和通用语言写实现程序时需要注意两点1浮点数的范围及存储格式2DSP的C语言...

开放性实验学习心得

开放性实验学习心得第一次接触到开放性实验觉得与平时必修课的实验有很大不同较之必修课的有机实验我们做的开放性试验所接触的实验器材更先进同时开放新实验对实验报告的书写与平时的实验报告相比也有很高的要求在很大程度上锻...

QC实验室设计心得

QC实验室设计心得我本人曾参与设计过一个约3700平方米的药品QC实验室历时三年数不清多少次几十稿的讨论为此把一些心得体会写出来在蒲公英小一班微信群和大家共同交流能给大家在以后工作中如有机会遇到实验室设计时能有...

数据结构课程设计 实验报告 心得体会 C++

专业班级姓名学号设计时间指导教师排序算法比较分析08软件工程2班汪伟08010xxxxx20xx91520xx927杨薇薇课程设计报告的内容一题目排序算法比较1设计目的1掌握各种排序的基本思想2掌握各种排序方法...

完成Java面向对象程序设计实验课的心得体会

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习让我更加了解到Java学习的重要性在实验课上我们完成多个实验在这个阶段的学习中我从认识到熟悉而后到能够自主运用通过对Java的了...

实验设计心得(43篇)