求最大公约数c语言实验心得,C语言编程实训报告(合集)

cout<

void main()//主函数主函数主函数主函数

{ int i,g; studentstu[3];while (i){i=menu(stu,3); switch(i) {case 1:Input(stu,3);cout<

cout<

cout<

cout<

四、、、、实训总结实训总结实训总结实训总结通过这两个礼拜的实训练习,让我收获很多,在实训的第一节课上,老师给我们一个关于学生成绩管理程序的执行文件,然后告诉我们它有什么功能,一一演示给我们看。最后对我们说我们这两个礼拜的实训作业就是运用我们之前所学过的知识来写出这个程序的源程序代码。在此之前我们都惊呆了,都说不会做。可是在老师悉心的教导下,我们先开始写好自己对这个题目的思路,然后一步一步往下做,一个一个程序的写。在做完题后我自己觉得其实正如老师所说的那样,那些知识我们都学过的,只是我们欠缺对知识的整合能力。虽然在完成作业的过程中遇到了很多不懂的地方,但是在老师的殷切指导下以及与同学的交流中,我最后还是完成了实训作业。让我的知识又得到了很大一步的提升,真希望以后多让我们做这种作业。这样的话我觉得学到的知识会更多,动手能力也提升的很快。

实 习 报 告

实习地点:201机房

实习时间:2014.12.1——2014.12.6 实习项目:单片机C语言编程实训 指导老师:骆

乐 姓

名:

级:电信3121

一、 实习内容 1.计算字符的ASCII码

编写一个程序,在终端输入一个字符,输出它的ASCII码。 解题思路:通常我们输出一个字符一般用printf("%c",c);的形式,因为输出格式规定的是"%c",因此表示以字符的形式输出,所以我们看到的是相对应的ASCII码的字符形式。

用char定义字符a,a的值为任意值。输出结果a=%d。 源代码:

#include int main() { char c; scanf("%c",&c); printf("Ascii=%d\nDCF14",c); getch(); } 程序截图:

2.嵌套if-else语句的妙用

学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办

法是:小羽60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序。对输入的成绩进行等级划分。

解题思路:先把头文件和主函数输入。定义score为整型变量,定义grade为字符型变量。定义score为任意值scanf(“%d”,score)。使用多分支条件语句,判断趁机的等级。

源代码:

#includevoid main () { int score; char grade; scanf("%d",&score); if(score>=90) grade='A'; else if(score>=80) grade='B'; else if(score>=70) grade='C'; else if(score>=60) grade='D'; else grade='E'; printf("score=%d,grade=%c,\nDCF 14",score,grade); getch();

}

程序截图:

3.判断日期

输入一个日期(年月日),输出这是某年的第几天。 源代码:

#include "stdio.h" void main() { int year,month,day; int cday; scanf("%d %d %d",&year,&month,&day); switch(month) { case 1: cday = 0; break; case 2: cday = 31; break; case 3: cday = 31+28; break; case 4:

cday = 31+28+31; break; case 5: cday = 31+28+31+30; break;

case 6: cday = 31+28+31+30+31; break; case 7: cday = 31+28+31+30+31+30; break; case 8: cday = 31+28+31+30+31+30+31; break; case 9: cday = 31+28+31+30+31+30+31+31; break; case 10: cday = 31+28+31+30+31+30+31+31+30; break; case 11: cday = 31+28+31+30+31+30+31+31+30+31; break;

case 12:

cday = 31+28+31+30+31+30+31+31+30+31+30;

break; } cday += day;

if( (year % 4 ==0 && year % 100 !=0 || year % 400 == 0) && month > 2) { cday += 1; } printf("%d,\n DCF 14 ",cday);

getch(); }

程序截图:

4.打印特殊图案

请设计一个程序,实现在屏幕上输出一个下面的图案 解题思路:直接输入编程,但要注意*间的空格。 源代码:

#includevoid main() { printf("

* \n * * * \n* * * * *\n ,DCF 14 \n"); getch(); }

程序截图:

5.求两个数的最大公约数和最小公倍数

编写一个程序计算两个正整数的最大公约数和最小公倍数

源代码:

#include

int main(int argc,int *argv[]) { int num1,num2,temp; int a,b; a > b; printf("please input 2 number:"); scanf("%d,%d",&num1,&num2); if (num1 < num2) { temp = num1; num1 = num2; num2 = temp; } a = num1; b = num2; while (b) { temp = a % b; a = b; b = temp; }

printf("the zuidagongyuehsu:%d,the zuixiaogongbeishu:%d\n",a,num1 * num2 / a); printf("%d\n,dcf 14 \n"); system("pause"); return 0; getch(); }

程序截图:

6.猴子吃桃问题

有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个;第二天又将剩下的桃子吃了一半,有多吃了一个;按照这样的吃法每天都吃前一天剩下的桃子的一半又一个。到了第10天,就只剩一个桃子。问题:这只猴子第一天摘了多少个桃子。 源代码:

#include

void main() { int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; } printf("total=%d\n dcf 14",x1); getch(); }

程序截图:

7.谁在说谎

3个嫌疑犯在法官面前各执一词,甲说:已在说谎;已说:甲在说谎;丙说:甲已两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,睡说的是真话呢?

源代码:

#include

int main(int argc, char *argv[]) {

int a,b,c;

for(a=0; a<2; a++)

for(b=0; b<2; b++)

for(c=0; c<2; c++)

if((a&&!b || !a&&b) && (b&&!c || b&&c) && (c &&a+b == 0 || !c&&a+b != 0))

printf("j told a %s\n",a?"truth":"lie");

printf("y told a %s\n",b?"truth":"lie");

printf("b told a %s\n",c?"truth":"lie");

printf("%d\n dcf 14\n" );

getch(); }

程序截图:

设计题目及要求设计题目及要求设计题目及要求设计题目及要求

1.综合应用实例——学生成绩管理 编写一个菜单驱动的学生成绩管理程序。实现如下管理功能:

(1) 能输入并显示 n 个学生的 m 门考试科目的成绩、总分和平均分。

(2) 按总分进行排序。

(3) 按学号进行排序。

(4) 任意输入一个学号,能显示该学生的姓名、各门功课的成绩

(5) 将输入的学生成绩数据保存到文件中。

(6) 从文件中读出学生成绩数据。

具体要求如下:

1 )先用静态的数据结构(结构体数组)来存储和管理 n 个学生的学号、姓名、成绩等信息,进行编程。

2 )排序函数是一个具有多种排序方式的、通用的、排序程序,即不仅可以实现成绩的升序排序,还可以实现成绩的降序排序。

3 )程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

4 )输出菜单形式如下:

1.输入学生记录

2.浏览学生记录

3.修改学生记录

4.排序 0.退出 请选择(0-4):

5) 排序菜单形式如下: 排序方式:1.按总分升序排序 2.按总分降序排序3.按学号排序 0.返回主菜单 请选择:

二二二

二、、、、算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤算法分析及实现步骤

总体算法分析的思路就是用调用函数来实现每个小程序的作用,首先是确定头文件,定义学生成绩结构体类型,用结构体函数实现。然后在函数执行过程中调用主菜单函数,紧接着被调用函数返回一个值给主函数,由返回来的值确定主函数应该执行下面的哪个步骤,再用一个while语句控制下面的几个步骤的循环,里面再嵌套switch语句来控制对每个小菜单程序的执行。例如:当调用函数返回“1”时,经过switch语句的判断之后就会执行相应的程序,最后,又会返回到主菜单程序中。其它的都一样。当调用函数返回的值是“4”时,此时因为排序里面还有一个排序的子菜单,所以此时这里我又用了一个switch语句来实现对排序程序的控制,也就是说在switch语句里面再嵌套switch语句。对排序程序进行的控制。等到跳出排序程序的时候,其它的都和之前的选择那样。其中,浏览每个学生信息的函数先计算出每个学生的平均成绩然后用for语句来实现每个学生信息的循环输入。修改学生信息的函数里面也用到了for语句,先找到相同的学号,然后在修改后循环执行。后来的排序程序都选用冒泡法来执行。当然一切程序都是从主函数开始执行。

三三三

三、、、、源程序代码源程序代码源程序代码源程序代码

#include

struct student//定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型定义学生成绩结构体类型

{

intno;charname[8];

floateng,phy,math,sum,ave;};

int menu(student s[],int n)//主菜单函数主菜单函数主菜单函数主菜单函数

{

int k;

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>k;

returnk;} void Input(student s[],int n)//输输输输入入入入函数函数函数函数

{

int i;

cout<

for(i=0;i{

cout<>s[i].no>>s[i].name>>s[i].eng>>s[i].phy>>s[i].math; s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;}}

void Ave(student s[],int n)//浏览每个学生浏览每个学生浏览每个学生浏览每个学生信息的信息的信息的信息的函数函数函数函数

{

int i; for(i=0;i{ s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;

}

cout<

for(i=0;icout<

}

int Sort(student s[],int n)//排序的子菜单排序的子菜单排序的子菜单排序的子菜单函数函数函数函数

{

int y;

cout<

cout<

cout<

cout<

cin>>y;

returny;

}

void change(student s[],int n)//修改学生信息的函数修改学生信息的函数修改学生信息的函数修改学生信息的函数

{

int i,j;

cout<

cin>>j;

for(i=0;i{

cout

cout<>s[i].no>>s[i].name>>s[i].eng>>s[i].phy>>s[i].math; s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;

}}

voidzpxs(student s[],int n)// 按总分升序按总分升序按总分升序按总分升序排序排序排序排序的函数的函数的函数的函数

{

int i,j;studenttemp; for(i=0;i{

s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3;s[i].sum=s[i].eng+s[i].phy+s[i].math;}

for(i=0;i{ for(j=0;js[j+1].sum)

{ temp=s[j]; s[j]=s[j+1]; s[j+1]=temp;

}}

cout<

for(i=0;icout<

}

voidzpxj(student s[],int n)//按总分降序排序按总分降序排序按总分降序排序按总分降序排序的函数的函数的函数的函数

{

int i,j;studenttemp; for(i=0;i{s[i].ave=(s[i].eng+s[i].phy+s[i].math)/3; s[i].sum=s[i].eng+s[i].phy+s[i].math;}

for(i=0;i{ for(j=0;jfor(i=0;icout<

voidxhpxs(student s[],int n)//按学号升序排序按学号升序排序按学号升序排序按学号升序排序的函数的函数的函数的函数

{int i,j;studenttemp; for(i=0;ifor(i=0;i{for(j=0;js[j+1].no) {temp=s[j]; s[j]=s[j+1];s[j+1]=temp;}}cout<

for(i=0;icout<

void main()//主函数主函数主函数主函数

{ int i,g; studentstu[3];while (i){i=menu(stu,3); switch(i) {case 1:Input(stu,3);cout<

cout<

cout<

cout<

四、、、、实训总结实训总结实训总结实训总结通过这两个礼拜的实训练习,让我收获很多,在实训的第一节课上,老师给我们一个关于学生成绩管理程序的执行文件,然后告诉我们它有什么功能,一一演示给我们看。最后对我们说我们这两个礼拜的实训作业就是运用我们之前所学过的知识来写出这个程序的源程序代码。在此之前我们都惊呆了,都说不会做。可是在老师悉心的教导下,我们先开始写好自己对这个题目的思路,然后一步一步往下做,一个一个程序的写。在做完题后我自己觉得其实正如老师所说的那样,那些知识我们都学过的,只是我们欠缺对知识的整合能力。虽然在完成作业的过程中遇到了很多不懂的地方,但是在老师的殷切指导下以及与同学的交流中,我最后还是完成了实训作业。让我的知识又得到了很大一步的提升,真希望以后多让我们做这种作业。这样的话我觉得学到的知识会更多,动手能力也提升的很快。

在这个星期里,我们在专业老师带领下进行了C语言程序实训练习。一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用的技能!

首先,在实训中的第一步是编写一个图书管理系统的程序,虽然我们已经对C语言这门课学习了一学期,对其有一定了解,但运用起来十分困难,通过到网上查资料,调试等,终于编写好此程序。虽然只是一个程序,但所用的知识却都是我们本学期学习的重点知识。在做题的过程中让我们把这些知识复习了一遍,强化了知识!

其次,平时我们学C语言几乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们将所学知识运用于解决实际问题的机会,也让我们感受到了编写软件程序的乐趣。但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用! 再次,通过实训,让我了解到在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序运行出想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。同时,我也了解到了编程需要很大的耐心,因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,所以每次我们都需要一点点去调试,然后找到正确的方法、格式。 虽然为了编写这个程序浪费了很多时间,也很累。但是却让我了解了图书的管理系统,不再像以前那样感觉好奇。而且也学会了简单的编

程,对以后生活有很大的用处。通过实训,我们有能力自己确定其他的专题进行编程,可以丰富我们的知识以及见识。

通过这次为数几天的C语言实训,让我们了解了更多知识。也巩固了我们的知识理论,熟练的掌握了C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握系统使用。对我们将来到社会工作有很大的帮助。同时他也让我知道,只要努力,任何东西都不会太难。

C语言排序比较

目 录

一、 目的概述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3

二、 实验(设计)仪器设备和材料清单。。。。。。。。。。。。。。。。。。3

三、 项目分析和设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3

四、 项目关键代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6

五、 项目调试和运行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12

六、 实训设计的心得体会。。。。。。。。。。。。。。。。。。。。。。。。。。。。。16

C语言课程实训设计报告

一、 目的概述

我这次实训的项目主要是排序法的编写,运行和比较,主要有直接插入排序,选择排序法,冒泡排序法,快速排序法;由主函数对这四个排序法分别进行调用,用最小的时间空间资源利用率得出正确的排序结果。通过比较得出四种排序算法的优劣,以及在那种情况下该使用哪种排序法才最为简便。

二、实验(设计)仪器设备和材料清单

1.硬件:PC机

2.软件:turboc 2.0,visula c++ 6.0

三、项目分析和设计

这个项目的程序可分为几个板块来做,每个板块有每个板块的作用,通过不同程序的不同作用相互调用即可实现整个程序的运行,这个项目程序主要可以分为以下几个板块: 1.抽象数据类型定义

InsertSort(RECNODE*r,int n)// 插入排序// BubleSort(RECNODE *r,int n) //冒泡排序// QuickSort(RECNODE*r,int start,int end)//快速排序// SeleSort(RECNODE*r,int n)// 选择排序// ShellSort(RECNODE *r,int n)//希尔排序// HeapSort(RECNODE*r,int n)//堆排序// 2.子程序及功能要求

1)用Void 来定义6个排序的子程序 Void InsertSort(RECNODE*r,int n) Void BubleSort(RECNODE *r,int n) Void QuickSort(RECNODE*r,int start,int end) Void SeleSort(RECNODE*r,int n) Void ShellSort(RECNODE *r,int n) Void HeapSort(RECNODE*r,int n) 2

(2)使用switch语句,当用户从键盘输入一个数字时,则选择对应的排序算法。 scanf("%d",&p); switch(p) { case 1: case 2: case 3: case 4: case 5: case 6: case 0:break; default:printf("输入错误!请重新输入!\n");break; } 3.各程序模块之间的调用关系

主函数(main)调用switch模块,按照用户的要求,通过switch语句,再调用相应的排序算法模块。 4 详细设计

4.1设计相应的数据结构 typedef struct { int key; \ 定义关键字类型为整数类型 }RECNODE; #define MAXSIZE 150 \ 一个用作示例的小顺序表的最大长度 4.2主要模块的算法描述

int main() \ 主模块 { RECNODE a[MAXSIZE]; int len,p; do { printf("**********************\n"); \ 显示界面 printf("* 菜 单 *\n"); 3

printf("**********************\n"); printf("* 1---直接排序 *\n"); printf("* 2---冒泡排序 *\n"); printf("* 3---快速排序 *\n"); printf("* 4---选择排序 *\n"); printf("* 5---堆排序 *\n"); printf("* 6---希尔排序 *\n"); printf("* 0---退出 *\n"); printf("**********************\n"); printf("\n请在上述序号中选择一个并输入: "); scanf("%d",&p); switch(p) \ switch子模块 { case 1:len=MakeList(a); UndealoutList(a,len); InsertSort(a,len); \ 插入排序子模块 DealoutList(a,len); break; case 2:len=MakeList(a); UndealoutList(a,len); BubleSort(a,len); \ 冒泡排序子模块 DealoutList(a,len); break; case 3:len=MakeList(a); UndealoutList(a,len); QuickSort(a,1,len); \ 快速排序子模块 DealoutList(a,len); break; case 4:len=MakeList(a); UndealoutList(a,len); SeleSort(a,len); \ 选择排序子模块 DealoutList(a,len); break; case 5:len=MakeList(a); UndealoutList(a,len); HeapSort(a,len); \ 堆排序子模块 DealoutList(a,len); break; case 6:len=MakeList(a); UndealoutList(a,len); ShellSort(a,len); \ 希尔排序子模块 DealoutList(a,len); 4

break; case 0:break; \ 跳出switch子模块 default:printf("输入错误!请重新输入!\n");break; } }while(p!=0); }

四、项目关键代码

#include "stdlib.h" #define MAXSIZE 150 #include typedef struct { int key; }RECNODE; int b,t; int MakeList(RECNODE *r) { int j,k; printf("\n请输入初始数据(每个数据以空格隔开,-1结束):k=0; scanf("%d",&j); while(j!=-1) { k++; r[k].key=j; scanf("%d",&j); } return k; } void UndealoutList(RECNODE *r,int n) { int i; printf("\n未排序前的数据 : "); for(i=0;i");

for(i=0;ivoid BubleSort(RECNODE *r,int n) //冒泡排序// { int i,j; b=0,t=0; RECNODE temp; for(i=1;i=i;j--) if(r[j+1].keyelse b++; t++; } } int Partition(RECNODE*r,int*low,int*high)//一躺快速排序// { int i,j; static int w=0; RECNODE temp; i=*low; j=*high; temp=r[i]; do { while((r[j].key>=temp.key)&&(i{ int i; static int q=0; if(start

你可能感兴趣的:(求最大公约数c语言实验心得)