扬州大学电子实习实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件技术基础实验报告书

姓名:陆建霞

学号:131402117

班级:电子1301

指导老师:华继钊

扬州大学信息工程学院

二〇一四年六月

一、

实验准备:掌握指针的使用与赋值。仔细读了题目,分析了题意。

实验目的:从键盘输入三个整数,在屏幕上按从小到大次序打印输出。(用If 语句编程(两种方案:1、交换存储位置;2、不改变输入变量的值))。

实验过程:

(1).

#include "stdio.h"

main()

{int a,b,c,m;

printf("input three numbers\n");

scanf("%d%d%d",&a,&b,&c);

if(a>b)

{t=a,a=b,b=t;} //交换a,b的值

if(a>c)

{t=a,a=c,c=t;} //交换a,c的值

if(b>c)

{t=b,b=c,c=t;} //交换b,c的值

printf("%d,%d,%d\n",a,b,c);

getch();

}

(2).

#include "stdio.h"

main()

{int *p1,*p2,*p3,*p,a,b,c;

printf("input three numbers\n");

scanf("%d%d%d",&a,&b,&c);

p1=&a; //把3个整数分别赋给3个指针变量

p2=&b;

p3=&c;

if(*p1>*p2)

{p=p1;p1=p2;p2=p;} //a>b,交换a和b的值

if(*p1>*p3)

{p=p1;p1=p3;p3=p;} //a>c,交换a和c的值

if(*p2>*p3)

{p=p2;p2=p3;p3=p;} //b>c,交换b和c的值

printf("a=%d,b=%d,c=%d\n",a,b,c); //交换前

printf("%d,%d,%d",*p1,*p2,*p3); //交换后

getch();

}

调试结果:(1)输入:1 9 4

输出:1 4 9

(2)输入:1 9 4

输出:1 4 9

结果分析:赋地址时,不要求左值原来必须指向某个内存单元。而赋数据则要求指针必须指向某个内存单元,给其赋值只是填充了该内存单元的内容。

二、

实验准备:掌握冒泡、选择、插入这三种排序。

实验目的:输入十个整数,排序后按从小到大在屏幕上打印输出。(冒泡、选择、插入;比较这三种算法的优劣)。

实验过程:

1、冒泡法:

#include

main()

{int s[10],t,i,j,x;

printf("input 10 numbers:\n");

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

scanf("%d",&s[t]);

for(i=0;i<9;i++) //外循环控制排序趟数,n个数排n-1趟

for(j=0;j<9-i;j++)//内循环每趟比较的次数

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

{ t=s[j];

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

s[j+1]=t;} //相邻两关键字记录若逆序,则交换

printf("the result is:\n ");

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

printf("%-4d",s[j]);

printf("\n");

getch();

}

2、选择

#include "stdio.h"

void sort(int a[],int n)

{ int i,j,t,m;

for(i=0;i

{t=i; //假设当前趟的第一个数为最值,记在t中

for(j=i+1;j

{if(a[t]>a[j]) //若其后有比最值更大的

{t=j;} //则将其下标记在t中

}

if(t!=i) //若t不为最初的i值,说明在其后找到比其更大的数

{m=a[i];a[i]=a[t];a[t]=m;} // 则交换最值和当前序列的第一个数

}

}

void main()

{ int a[10],i;

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

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

sort(a,10);

for(i=0;i<10;i++) printf("%3d",a[i]);

}

3、插入法:

# include

main()

{ int a[10],i,j,t;

printf("Please input 10 numbers: ");

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

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

for(i=1;i<10;i++) //外循环控制趟数,n个数从第2个数开始到最后共进

行n-1次插入

{t=a[i]; //将待插入数暂存于变量t中

for(j=i-1;j>=0&&t

a[j+1]=a[j]; //若未找到插入位置,则当前元素后移一个位置

a[j+1]=t; } /找到插入位置,完成插入/

printf("array is:\n");

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

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

getch();

}

调试结果:输入:1 8 7 6 5 4 3 2 9 0

输出:0 1 2 3 4 5 6 7 8 9

结果分析:

冒泡排序基本思想:对无序表进行扫描,当发现相邻两个关键字逆序时就进行交

换,第一次扫描后就将最大关键字记录沉到底部,而关键字较小的记录则像气泡

一样逐渐上浮,然后对剩下的记录再进行扫描,直到某次扫描时不再发生交换,

则排序完成。

选择排序基本思想:每趟是选出一个最值确定其在结果序列中的位置,确定元

素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可

进行降序排序或升序排序。算法分析:定义外部n-1次循环,假设第一个为最

值,放在参数中,在从下一个数以后找最值若后面有比前面假设的最值更大的就

放在k中,然后在对k进行分析。若k部位最初的i值。也就是假设的i不是最

值,那么就交换最值和当前序列的第一个数。

插入排序基本思想:每趟从无序序列中取出第一个数插入到有序序列的合适位

置,元素的最终位置在最后一趟插入后才能确定位置。也可是先用循环查找插入

位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后

移一个位置,最后完成插入。该算法的特点是在寻找插入位置的同时完成元素的

相关文档
最新文档