高程实验指导书模板_第1页
高程实验指导书模板_第2页
高程实验指导书模板_第3页
高程实验指导书模板_第4页
高程实验指导书模板_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。数学与计算机科学学院《高级语言程序设计》实验指导书2月20日目录实验一熟悉TURBOC的上机过程 1实验二数据类型、运算符和表示式 5实验三最简单的C程序设计 8实验四选择结构程序设计 11实验五循环结构程序设计 13实验六数组 16实验七函数 23实验八指针 28实验九结构体与共享体 32实验十文件 33附件:《高级语言程序设计》实验报告 34实验一熟悉TurboC的上机过程一、实验目的1.了解所用的计算机系统的基本操作方法,学会独立使用该系统。

2.熟悉TurboC的运行环境,了解在该系统上如何编辑、编译、链接和运行一个C程序。

3.经过运行简单的C程序,初步了解C程序的特点。二、实验类型:演示三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容(1)检查所用的计算机系统

是否已安装了C编译系统并确定它所在的子目录。如果使用的是Windows和TurboC,能够按以下步骤进行操作:

单击Windows桌面上的”开始”按钮,从菜单中选中并单击”查找(F)”,在其右面的下拉菜单中选择”文件或文件夹(F)”,屏幕上出现”查找”窗口,在”名称”栏中输入文件名”tc.exe”,然后单击”开始查找”按钮,系统会自动在指定的范围内导找所需的文件,如如果找到,就会显示出文件路径(例如,C:\tc),应当使”搜索”栏中的内容为”C:\”,表示从根目录开始寻找,即搜索整个C盘。

(2)进入C的工作环境

①单击桌面上的”开始”按钮,从菜单中选择”程序”,单击它然后在其下拉菜单中选择”MS-DOS”,屏幕上出现窗口。

②用DOS命令cd,使当前目录改变为用户专用的子目录(例如C:\tc\ZHANG)。

③用dir命令,检查用户目录中已有哪些文件。

④调用Turboc,一般情况下Turboc所有的目录为C:\tc。调用TurboC的命令一般为,C:\tc\tc。此时屏幕上出现TurboC的工作环境。

(3)熟悉TurboC集成环境

①了解和熟悉编辑(Edit)窗口和信息(Message)窗口的作用。试一下能否向信息窗口输入程序。按功能键F5,观察它有什么作用,再按一次F5,再观察它有什么作用。按F6,观察它有什么作用;再按一次F6,再观察它有什么作用。

②按功能键F10,并按回车键,观察”File”菜单,了解它们的作用和用法。用键盘上的”→”键,分别选中Edit、Run、Compile、Project、Option、Break/watch,观察它们的菜单,大致上了解它们的作用(但不必要求全部深入了解,以后用到时再深入了解)。

③选择File菜单中的New并按回车键,在编辑窗口中随意输入几行字符,观察窗口顶部左端line和col后面数字的变化。

(4)输入并运行一个简单的程序

①再选择File菜单中的New并按回车键,使编辑窗口变成空白。

②输入下面的程序(教材第1章1.1例)。

main()

{

printf(”ThisisaCprogram.\n”);

}

③按功能键F9进行编译和连接,观察屏幕上显示的编译信息。如果出现”出错信息”,则应找出原因并改正之,再进行编译。

④如果编译无错误,按Ctrl和F9键使程序运行,按Alt和F5键,切换到用户屏,观察分析运行结果。

(5)输入并编辑一个C程序

①再选择File→New,使编辑窗口变成空白。

②输入以下程序(教材第1章1.2例,但故意漏打或打错几个字符)。

main()

{

inta,b,sum;

a=123;b=456;

sum=a+b;

print("sumis%d\n",sum);

}

③按F9进行编译,仔细分析编译信息窗口和Message窗口,可能显示有多个错误,逐个修改,直到不出现错误。请与教材上的程序对照。

④运行程序,分析运行结果。

(6)输入并运行一个需要在运行时输入数据的程序

①清空编辑窗口,输入下面的程序。

main()

{

inta,b,c;

printf("inputa&b:");

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

c=max(a,b);

printf("max=%d",c);

}

intmax(intx,inty)

{

intz;

if(x>y)z=x;

elsez=y;

return(z);

}

②编译并运行,在运行时从键盘输入整数2和5,然后按回车键,按Alt和F5键,观察运行结果。

③将程序中的第2行改为:

inta;b;c;

再进行编译,观察其结果。

④将子程序max的第3,4两行合并为一行,即

if(x>y)z=x;elsez=y;进行编译和运行,分析结果。五、实验总结1.结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。

2.整理上机步骤,总结经验和体会。

3.完成实验报告和上交程序。实验二数据类型、运算符和表示式一、实验目的1,掌握C语言数据类型,熟悉如何定义整型、字符型、实型变量,以及对它们赋值的方法,了解以上数据类型输出时所使用的格式转换符号。2,学会使用C的有关运算符,以及包含这些运算符号的表示式,特别是自加(++)和自减(——)运算符的使用。3,进一步熟悉C程序的编辑、编译、连接和运行的过程。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容输入以下程序,并编译、运行,分析运行结果:main(){charc1,c2;c1=97;c2=98;printf(″%c,%c″,c1,c2);printf(″%d,%d″,c1,c2);}(1)运行以上程序,分析为什么会输出这些信息。(2)再将第二行改为:intc1,c2;再运行程序。看运行时输出什么信息,为什么?再将第三行改为:c1=197;c2=198;再运行,并分析结果。输入并运行以下程序:main(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(″%d,%d,%d,%d″,i,j,m,n);}编译和运行程序,注意i,j,m,n各变量的值。分别作以下改动并运行:将第四行改为:m=i++;n=++j;编译和运行程序,分析结果程序改为:main(){inti,j;i=8;j=10;printf(″%d,%d″,i++,j++);}编译和运行程序,分析结果在(2)的基础上,将printf语句改为:printf(″%d,%d″,++i,++j);编译和运行程序,分析结果再将printf语句改为:printf(″%d,%d,%d,%d″,i,j,i++,j++);编译和运行程序,分析结果程序改为:main(){inti,j,m=0,n=0;i=8;j=10;m+=i++;n-=--j;printf(″i=%d,j=%d,m=%d,n=%d″,i,j,m,n);}3.先判断以下程序的输出结果,在运行验证。main(){inta=110,b=017;printf(″%x,%d\n″,a++,++b);}4.补充完整以下程序,将从键盘输入的任意大写字母转换为小写字母,将小写字母转换为大写字母。main(){charc;scanf(″%c″,&c);.......printf(″%c″,c);}五、实验总结1.结合上课内容,对上述程序先阅读,然后上机并调试程序,并对实验结果写出你自己的分析结论。

2.整理上机步骤,总结经验和体会。

3.完成实验报告和上交程序。实验三最简单的C程序设计一、实验目的1、掌握C语言程序输入、输出的方法和格式。2、本实验可在学习教材第三章后进行。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容1.写出下列程序的输出结果。

要求:先写出输出结果,然后利用程序验证。

#include"stdio.h"

main()

{inta=65,b=67,c=67;

floatx=67.8564,y=-789.124;

charC='A';

longn=1234567;

unsignedu=65535;

putchar('\n');

putchar('\t');

putchar(C+32);

putchar(a);

putchar('\n');

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

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

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

printf("%f,%f\n",x,y);

printf("%-10f,%-10f\n",x,y);

printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);

printf("%e,%10.2e\n",x,y);

printf("%c,%d,%o,%x\n",c,c,c,c);

printf("%ld,%lo,%lx\n",n,n,n);

printf("%u,%o,%x,%d\n",u,u,u,u);

printf("%s,%5.3s\n","COMPUTER","COMPUTER");

}2.根据输入,写出下列程序的输出结果。

要求:先写出输出结果,然后利用程序验证。

#include"stdio.h"main()

{chara;

intb;

floatc;

a=getchar();

putchar(a);

putchar('\t');

putchar(a>='a'&&a<='z'?a-32:a);

putchar('\n');getchar();

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

printf("a=%cb=%dc=%.2f\n",a,b,c);getchar();

scanf("a=%cb=%dc=%f",&a,&b,&c);

printf("a=%db=%cc=%.2f\n",a,b,c);

}

输入:a↙

输出:

输入:b□65□3.1234↙

输出:

输入:a=b□b=65□c=3.1234↙

输出:3、输入并编辑下面的程序main(){inta,b;floatc,d;longe,f;unsignedintu,v;charc1,c2;scanf(”%d,%d”,a,b);scanf(”%f,%f”,c,d);scanf(”%ld,%ld”,e,f);scanf(”%o,%o”,u,v);scanf(”%c,%c”,c1,c2);printf(”\n”);printf(”a=%7d,b=%7d\n”,&a,&b);printf(”c=%10.2f,d=%10.2f\n”,&c,&d);printf(”e=17ld,f=%17ld\n”,&e,&f);printf(”u=%o,d=%o\n”,&u,&v);printf(”c1=%c,d=%c\n”,&c1,&c2);这个程序有语法错误吗?为什么?2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=6,v=58765,c1=’a’,c2=’b’分析运行结果。特别注意输入c1,c2的值是什么?什么原因?3、将输入e和f的语句改为:scanf(”%d,%d”,&e,&f);再用上述测试数据测试并分析结果。4、将输入u、v的语句改为:scanf(”%d,%d”,&u,&v);再用上述测试数据测试并分析结果。5、将输出e,f的语句改为:printf(”e=%17d,f=%17d\n”,e,f);再用上述测试数据测试并分析结果。6、将输出u、v的语句改为:printf(”u=%u,v=%u\n”,u,v);或printf(”u=%d,v=%d\n”,u,v);再用上述测试数据测试并分析结果。7、请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。8、在scanf(”%c,%c”,&c1,&c2);语句之前加一个语句:getchar();9、验证转义字符\n与\r的意义有何不同。五、实验总结1、总结在printf函数中能够使用的各种格式指定符,并给出样例。2、总结在printf函数中能够使用的各转义字符及其功能。实验四选择结构程序设计一、实验目的1、了解条件与程序流程的关系.2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。3、了解C语句表示逻辑量的方法(以0代表”假”以1代表”真”);4、学会正确使用逻辑运算符和逻辑表示式;5、熟练掌握if语句和switch语句。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容1、题目已知三个数a,b,c,找出最大值放于max中。分析:由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。第一次比较a和b,把大数存入max中,因a,b都可能是大值,因此用if语句中if——else形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为a,b,c中的最大值。(2)、实验步骤若输入下列数据,分析程序的执行顺序并写出运行结果(1)a=1,b=2,c=3(2)a=2,b=1,c=3(3)a=3,b=2,c=1(4)a=3,b=1,c=2(5)a=3,b=3,c=2(6)a=2,b=1,c=22.运输公司对用户计算运费。距离越远,每公里运费越低,标准如下:

s<250km无折扣

250<=s<5002%折扣

500<=s<10005%折扣

1000<=s<8%折扣

<=s<300010%折扣

3000<=s15%折扣

设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费计算公式为:f=p*w*s*(1-d),编写程序计算运费。

要求:(1)使用switch/case语句。3、题目输入某学生的成绩,经处理后给出学生的等级,等级分类如下:90分以上(包括90):A80至90分(包括80):B70至80分(包括70):C60至70分(包括60):D60分以下:E方法一:(用if嵌套`)分析:由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。方法二:用switch语句分析:switch语句是用于处理多分支的语句。注意,case后的表示式必须是一个常量表示式,因此在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,另外都是E类。则由此可得把score除十取整,化为相应的常数。输入测试数据,同方法一一样调试程序并写出结果。五、实验总结

1.整理上机步骤,总结经验和体会。

2.完成实验报告和上交程序。实验五循环结构程序设计一、实验目的熟悉用while语句,do-while语句和for语句实现循环的方法。掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容编写程序并上机调试运行。(代码先不给出)1,输入两个正整数,求其中最大公约数和最小共倍数。#include"stdio.h"voidmain(){intx,y,n,z;scanf("%d%d",&x,&y);z=x*y;if(x>y){n=x;x=y;y=n;}while(y%x!=0){n=y%x;y=x;x=n;}printf("最大公约数是%d",x);printf("最小公倍数是%d",z/x);}2,输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。#include"stdio.h"voidmain(){charc;intyw=0,sz=0,kg=0,qt=0;scanf("%c",&c);while(c!='\n'){{if(c>='A'&&c<='Z'||c>='a'&&c<='z')yw++;elseif(c>='0'&&c<='9')sz++;elseif(c=='')kg++;elseqt++;}scanf("%c",&c);}printf("字母个数为%d,数字个数为%d,空格个数为%d,其它字符为%d",yw,sz,kg,qt);}3,输出九九表。1234567891234567892468101214161836912151821242748121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281#include"stdio.h"voidmain(){inti,j;for(i=1;i<10;i++)printf("%5d",i);printf("\n");for(i=1;i<10;i++){for(j=1;j<10;j++)printf("%5d",i*j);printf("\n");}}4,求输入的十个整数中正数的个数及其平均值。5,两个乒乓球队进行比赛,各出三人。甲队为A、B、C3人,乙队为X、Y、Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说她不和X比,C说她不和X、Z比,请编写找出3对赛手的名单。(提示:用循环和判断实现)五、实验总结

1.整理上机步骤,总结经验和体会。

2.完成实验报告和上交程序。实验六数组一、实验目的1、掌握数组定义的规则。2、掌握C语言数组的基本用法。3、掌握一维数组的定义、赋值和输入输出的方法;4、掌握字符数组的使用;5、掌握与数组有关的算法(例如排序算法);6、掌握二维数组的定义、赋值和输入输出的方法;7、掌握字符数组的使用;8、掌握与数组有关的算法(例如排序算法)。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容(5之后的题目作为阅读程序要求)1、编写程序,测试下列数组的定义方式是否正确(1)main(){intn;scanf(”%d”,&n);inta[n];……}(2)main(){constintn=10;inta[n];}(3)#include<stdio.h>#defineM10main(){inta[M];}(4)main(){inta[2+2*4];}(5)#include<stdio.h>#defineM2#defineN8main(){inta[M+N];}经过这一实验,能够说明什么问题?2、运行下面的C程序,根据运行结果,能够说明什么?main(){intnum[5]={1,2,3,4,5};intii;for(i=0;i<=5;i++)printf(”%d”,num[i]);}3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。4、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,KenThompson上台的第一句话是:”我是一个程序员,在我的1040表上,我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下:chars[]={‘\t’,‘0’,‘\n’,‘}’,‘;’,‘\n’,‘\n’,‘/’,‘*’,‘\n’,/*(213linesdeleted)*/0};/**Thestringisa*representationofthebody*ofthisprogramfrom‘0’*totheend*/main(){inti;printf(”char\ts[]={\”};for(i=0;s[i];i++)printf(”\t%d,\n”,s[i]);printf(”%s”,s);}请上机运行这个程序,指出它的功能和运行结果。5、在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。方法一:起泡排序从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就能够完成排序。源程序如下:#defineN10#include"stdio.h"main(){inta[N],i,j,temp;printf("pleaseinput%dnumbers\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++)for(j=0;j<N-1-i;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}printf("thearrayaftersort:\n");for(i=0;i<N;i++)printf("%5d",a[i]);}方法二:选择排序首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。#include"stdio.h"#defineN10main(){inta[N],i,j,r,temp;printf("pleaseinput%dnumbers\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++){r=i;for(j=i+1;j<N;j++)if(a[j]<a[r])r=j;if(r!=i){temp=a[r];a[r]=a[i];a[i]=temp;}}printf("thearrayaftersort:\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");}6、青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。main(){inti,j,min;floattemp,ave=0;floata[11];printf("\n输入评委所打的分数:\n");for(i=1;i<=10;i++)scanf("%f",&a[i]);for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}for(i=2;i<=9;i++)/*注意i值的变化范围*/ave=ave+a[i];printf("选手所得最后分数:%6.1f",ave/8);printf("\n");}7、输入一串字符,计算其中空格的个数。#include<stdio.h>main(){charc[30];inti,sum=0;gets(c);for(i=0;i<strlen(c);i++)if(c[i]=='')sum=sum+1;printf("空格数为:%d\n",sum);}8、有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。#defineM3#defineN4main(){intmax,i,j,r,c;staticinta[M][N]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};max=a[0][0];for(i=0;i<M;i++)for(j=0;j<N;i++)if(a[i][j]>max){max=a[i][j];r=i;c=j;}printf(”max=%d,row=%d,colum=%d\n”,max,r,c);}9、打印以下图案:*************************main(){chara[5]={'*','*','*','*','*'};inti,j,k;charspace='';for(i=0;i<5;i++)/*输出5行*/{printf("\n");/*输出每行前先换行*/printf("");/*每行前面留5个空格*/for(j=1;j<=i;j++)printf("%c",space);/*每行再留1个空格*/for(k=0;k<5;k++)printf("%c",a[k]);/*每行输入5个*号*/}}10、求矩阵下三角形元素之和。#defineN6main(){inti,j,sum=0;inta[N][N]={0};printf("input5×5data:\n");for(i=1;i<N;i++){printf("Inputthe%dlinedata:\n",i);for(j=1;j<N;j++)scanf("%d",&a[i][j]);}for(i=1;i<N;i++){for(j=1;j<N;j++)printf("%5d",a[i][j]);printf("\n");}for(i=1;i<N;i++)for(j=1;j<=i;j++)sum=sum+a[i][j];printf("sum=%d\n",sum);}五、实验总结1.整理上机步骤,总结经验和体会。

2完成实验报告和上交程序。实验七函数一、实验目的1、掌握C语言函数定义及调用的规则。2、理解参数传递的过程。3、掌握C语言函数的声明及函数的递归调用。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容(3之后的作阅读要求)1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。main(){int,y;printf(”%d\n”,sum(x+y));intsum(a,b){inta,b;return(a+b);}}2、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。3、写一函数,是给定的一个二位数组(4×4)转置,即行列互换。源程序如下:/*矩阵的转置*/#defineN4intarray[N][N];convert(array)intarray[4][4];{inti,j,t;for(i=0;i<N;i++)for(j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}main(){inti,j;printf(”输入数组元素:\n”);for(i=0;i<N;i++)for(j=0;j<N;j++)scanf(”%d”,&array[i][j]);printf(”\n数组是:\n”);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(”%5d”,array[i][j]);printf(”\n”);}conver(array);printf(”转置数组是:\n”);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(”%5d”,array[i][j]);printf(”\n”);}}本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。4、写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。源程序如下:#include"stdio.h"hcf(u,v)intu,v;{inta,b,t,r;if(u>v){t=u;u=v;v=t;}a=u;b=v;while((r=b%a)!=0){b=a;a=r;}return(a);}lcd(u,v,h)intu,v,h;{return(u*v/h);}main(){intu,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%d\n",h);l=lcd(u,v,h);printf("L.C.D=%d\n",l);}这是一个十分典型的算法,同学们一定要认真分析、学习。5、写一函数,用”起泡法”对输入的10个字符按由小到大顺序排序。源程序如下:/*起泡法排序*/#defineN10charstr[N];main(){inti,flag;for(flag=1;flag==1;){printf(”\n输入字符串,长度为10:\n”);scanf(”%s”,&str);if(strlen(str)>N)printf(”超过长度,请重输!”);elseflag=0;}sort(str);printf(”\n排序结果:”):for(i=0;i<N;i++)printf(”%c”,str[i]);}sort(str)charstr[N];{inti,j;chart;for(j=1;j<N;j++)for(i=0;(i<N-j)&&(str[i]!=’\0’);i++)if(str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}}6、用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。源程序如下:/*牛顿迭代法解方程*/#include”math.h”floatsolut(a,b,c,d)floata,b,c,d;{floatx=1,x0,f,f1;do{x0=x;f=((a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;}while(fabs(x-x0)>=1e-5);return(x);}main(){floata,b,c,d;printf(”\n输入方程的系数a,b,c,d\n”);scanf(”%f,%f,%f,%f”,&a,&b,&c,&d);printf(”\n方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0”,a,b,c,d);printf(”\nX=%10.7f\n”,solut(a,b,c,d));}在此题目中,方程的系数是未知的,这是与以前我们用牛顿迭代法的时候不同的地方。但原理、算法是相同的,这里我们用函数来求方程的根。也就是把牛顿迭代法用函数的形式表现出来。五、实验总结

1.整理上机步骤,总结经验和体会。

2.完成实验报告和上交程序。3、讨论参数的传递的几种形式。实验八指针一、实验目的1、熟悉指针的正确用法。2、本实验可在学习了教材第10.3节之后运行。3、了解指针参数的特殊性。4、掌握函数、指针、数组的用法。5、实验可在学习了教材第六章后进行。二、实验类型:验证三、实验环境多媒体计算机、WINDOWSXP系统或纯DOS系统、turboc2.0以上或VisualC++编译平台。四、实验内容1、指出下面程序错误的原因。main(){intx=10,y=5,*px,*py;px=py;px=&x;py=&y;printf(”*px=%d,*py=%d,*px,*py);}2、下面的程序试图有如下运行结果:whichstyleyouwantto:Capital(c)oruncapital(a):c↙COMPUTERWhichsytleyouwantto:Capital(c)oruncapital(a):u↙computer请调试下面的程序,使其有如上执行结果。#include<stdio.h>main(){chars*;charc;printf(”whichstyleyouwantto:ln”);printf(”capital(c)oruncapital(a):”);c=getchar();if(c=’c’)strcpy(s,”COMPUTER”);elsestrcpy(s,”computer”);put(s);}分析出错原因。3.下面的程序能获得上述运行结果吗?main(){char*S=”COMPUTER”;charc;printf(”whichstyleyouwantto\n”);printf(”capital(c)oruncapital(u);”);c=getchar();if(c=’c’)put(s);else{s=”computer”;puts(s);}}分析出错原因。4.设计一个C程序,用以测试下列各表示式的运算。(1)y=*px++(2)y=*++py(3)y=(*py)++(4)y=--*ppx++5、想使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的?swap(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p;}main(){inta,b;scanf(”%d,%d”,&a,&b);pt1=&a;pt2=&b;if(a<b)swap(pt1.pt2);printf(”%d,%d\n”,*pt1,*pt2);}上机调试此程序。如果不能实现题目要求,指出原因,并修改之。6、下面的程序。注意其中的复杂声明语句;int(*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论