南昌大学实验报告 C语言的编程环境_第1页
南昌大学实验报告 C语言的编程环境_第2页
南昌大学实验报告 C语言的编程环境_第3页
南昌大学实验报告 C语言的编程环境_第4页
南昌大学实验报告 C语言的编程环境_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

南昌大手

实验报告

实验课程:_________________

学生姓名:_________________

学号:_________________

专业班级:_________________

2015年5月22日

目录

一、实验一............................页码3

二、实验二............................页码6

三、实验三............................页码8

四、实验四..................................页码16

五、实验五...........................页码24

六、实验六........................................页码37

南昌大学实验报告

学生姓名:―学号:专业班级:

实验类型:口验证口综合口设计口创新实验日期:实验成绩:

实验1C语言的编程环境

一.实验目的

I.初步了解c程序的编译、连接和运行的过程。

2.掌握和理解C程序的结构。

二.实验内容

1.使用TC

2.运行一个简单的C程序

三.实验环境

PC微机;

DOS操作系统或Windows操作系统;

TurboC程序集成环境。

四.实验步骤

1.启动TurboC

如果用户计算机系统已经安装了TurboC编译系统,则在DOS命令状态下键

入命令tc。进入TurboC集成环境后,首先在屏幕上显示TurboC主菜单窗口。

在该窗口,有8个菜单条目。每一个菜单的意义如下:

File处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包

括列表、改变工作目录),退出系统及调用DOSo

Edit建立、编辑源文件。

Run控制运行程序。如果程序已经编译连接好,且Debug/SourceDebugging

以及Option/Compi1er/Codegeneration/OBJDebugInformation开关置为On,

则可以用此菜单初始化调试阶段。

Compile编译并生成目标程序与可执行文件。

Project允许说明程序中包含哪些文件的管理条目。

Options可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及

连接任选项)及定义宏;也可以记录IncludeOutput及Library文件目录,保

存编译任选项和从配置文件加载任选。

Debug检查、改变变量的值,查找函数,程序运行时查看调用栈。选择程序

编译时是否在执行行代码中插入调试信.息。

Break/Watch增加、删除、编辑监视表达式,及设置、清除、执行至断点。

特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。而选择

Edit项目后,只是进入编辑器。

为了从主菜单中选择所需要的功能,可以用以下两种方式之一:

(1)按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、

右光标移动键(一与一)选择需要的菜单,然后按回车(Enter)键。

(2)直接按Alt+主菜单条目中的首字母(分别为F,E,R,C,P,0,D,B),

此时就会出现相应的子菜单。例如,按Alt+F表示选择文件子菜单(File)o

当出现子菜单时,其中某个条目是高亮度的,此时可以利用上、下光标移动

键(t与I)来移动该高亮度线,从而选择所需要的功能。在菜单调用时,按

Esc键后将直接返回到活动窗口。

2.输入程序

输入以下程序

Sinclude<stdio.h>

main()

(

printf("Howareyou!");

)

3.运行程序

按Ctrl+F9运行程序,如果没有报错,可以按Alt+F5查看运行结果,再按

空格键回到编辑窗口。

4.保存文件

按F2键,弹出一个对话框,在对话框中输入文件名,如:examl.c。

5.退出TC程序

按Alt+X键,弹出对话框,提示是否真的要退出TC,如果输入Y就会退出

TCo

6.打开已经存在的文件

(1)首选启动TC。

(2)按F3,弹出对话框。

(3)在该对话框中,输入文件名即可。

五.思考题

总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。

南昌大学实验报告

学生姓名:―学号:专业班级:

实验类型:□验证口综合口设计口创新实验日期:实验成绩:

实验2数据类型、运算符和表达式

一.实验目的

1.了解c语言中数据类型的意义;

2.掌握不同数据类型之间的赋值的规律;

3.学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是

是++和一运算符的使用。

4.进一步熟悉C程序的编辑环境。

二.实验内容

1.用printf函数来输入表达式运行结果

2.观察实验步骤中表达式的结果

三.实验环境

PC微机

DOS操作系统或Windows操作系统

TurboC程序集成环境

四.实验步骤

1.当x=5,y=6,z=7时

x<y

y>x

x!=y

x==z-2

x=x-2

x>=z

x<=z

以上表达式的值l;l;l;l;3;o;l.

2.当x=0,y=-l,z=l时

x&&y

x||y

y&&z

yz

x&y

x|y

以上表达式的值

五.思考题

1.和J="有什么区别?

2.和“&&”、“|”和“||"有什么区别?

答1"=”是赋值运算符,而“==”是关系运算符。且“==”的优先

级高于“=”,运算时,“==”自左至右结合,但“=”自右至左结合。

2是按位与运算符;而“&&”是逻辑与运算符,“是按位

或运算符;而“II”是逻辑或运算符。

南昌大学卖族报告

学生姓名:―学号:专业班级:

实验类型:口验证口综合口设计口创新实验日期:实验成绩:

实验3控制语句

一.实验目的

1.熟练掌握if、if…else、if…elseif语句和switch语句格式及使用方

法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分

支选择结构。

2.熟练掌握while语句、do...while语句和for语句格式及使用方法,

掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环

结构。

3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进

一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

二.实验内容

1.选择结构程序设计;

2.if语句的使用;

3.使用switch语句实现多分支选择结构;

4.三种循环语句的应用;

5.循环结构的嵌套;

6.break和continue语句的使用。

三.实验环境

PC微机

DOS操作系统或Windows操作系统

TurboC程序集成环境

四.实验步骤

1.编程实现:输入一个整数,将其数值按照①小于10,②10〜99,③100〜

999,@1000以上四个类别分类并显示。

要求:

(1)将变量定义为整型。

(2)输入整数前,利用puts()/printf()给出提示信息。

(3)输出结果时要有必要的说明,例如:输入358时,显示358is100

to999o

(4)该程序利用if语句实现。

运行程序,分别输入9,21,321,4321数据检查输出信息的正确性。

#include<stdio.h>

main()

intx;

printf(nPleaseinputanumber:\nH);

scanf(H%dn,&x);

printf(M%disH,x);

if(x<IO)printfC'lessthan10\nn);

elseif(x<100)printf(n10to99\n");

elseif(x<1000)printf("100to999\nu);

elseprintf("morethan1000\n");

return0;

}

【结果及截图】

答:运行程序,分别输入9,21,321,4321,截图如下:

Pleaseinputanumber:

9

9islessthan10

Pleaseinputanumber:

21

21is10to99

Pleaseinputanumber:

321

321is100to999

Pleaseinputanumber:

4321

4321ismorethan1000

2.编写程序:根据公式1=器+5+*+……+*,输出11的值。

要求:

(1)变量”为单精度类型,n为整型;

(2)计算当n的取值分别为20,50,100,200时的“值,说明什么

问题?

(3)修改程序,不给出n值,而改为求口值,直到最后一项的数值小

于10,为止。

(4)对修改后的程序,输出口值以及总的项数n。输出格式为:门=值;

n=值。

#include<stdio.h>

#include<math.h>

main()

(

intn,N;

floatpi,sum=0;

printf(HPleaseinputanumber:\nN=H);

scanf("%d'\&N);

for(n=I;n<=N;n++)

sum+=1.0/(n*n);

pi=sqrt(6*sum);

printf("pi=%f',pi);

return0;

)

修改后的程序:

#include<stdio.h>

#include<math.h>

main()

(

intn=0;

floatpi,sum=0;

do

n++;

sum+=1.0/(n*n);

}while(1.0/(n*n)>=1e-4);

pi=sqrt(6*sum);

printf("pi=%f;n=%d",pi,n);

return0;

【结果i及截图】

答:计算当N的取值分别为20,50,100,200时,截图如下:

Pleaseinputanumber:

N=20

pi=3.094670

Pleaseinputanunber:

N=50

pi=3.122627

Pleaseinputanumber:

N=100

pi=3.132077

Pleaseinputanumber:

N=200

pi=3.136827

【结果ii及截图】

hpi=3.132077;n=100

3.从键盘输入一个0〜1000之间的任意整数,输出该整数的所有因子(例

如:输入12,其因子为1,2,3,4,6,12)o

要求:

(1)采用while循环语句实现。

(2)输出格式为:Input:12

Output:1,2,3,4,6,12

#include<stdio.h>

main()

intnum,i=2;

printf("Input:;

scanf(,&num);

printf("Output:ln);/*第一个因式为1*/

while(i<1000)

{

if(num%i==0)printf(",%d",i);

i++;

}

return0;

)

【结果及截图】

答:输入30,得其因式为1,2,3,5,6,10,15,30,截图如下:

Input:30

Output:1,2,3,5,6,10,15,30

4.编程实现:由用户从键盘输入一串字符(以回车键结束),统计其中数

字、大、小写字母、空格、其它字符的个数。

要求:

(1)通过键盘输入字符。

(2)给出相应的输入/输出信息提示。并按照数字、大写字母、小写字

母、空格、其它字符数的顺序输出结果。

If语句

#include<stdio.h>

main()

(

intnum;

printf("Input:");

scanf("%d'\&num);

if(num<0llnum>1OO)printf(nThenumberiswrong!");

elseif(num<=59)printf(,'EH);

elseif(num<=69)printf(,'Du);

elseif(num<=79)printf(nCn);

elseif(num<=89)printf("Bn);

elseprintf(,'A,');

return0;

)

Switch语句

#include<stdio.h>

main()

(

intnum,n;

printfCInput:");

scanf(H%d",&num);

n=num/I0;

switch(n)

(

case0:

case1:

case2:

case3:

case4:

case5:printf("En);break;

case6:printf(',D,,);break;

case7:printf("C");break;

case8:printf(nBn);break;

case9:

case10:printf("A");break;

default:printf(Herror!");

return0;

5.计算并输出1000以内最大的10个素数以及它们的和。

要求:

(1)在程序内部加必要的注释。

(2)由于偶数不是素数,可以不考虑对偶数的处理。

(3)虽然在1000以内的素数超过10个,但是要对1000以内不够10个素

数的情况进行处理。

(4)输出形式为:素数1+素数2+素数+…+素数10=总和值。

#include<stdio.h>

#include<math.h>

voidmain()

(

intnum,i,sum=0,count=0;

for(num=999;count!=10;num-=2)

{for(i=2;i<sqrt(num);i4-+)

{if(num%i==O)break;}

if(i>=sqrt(num))

{count++;

sum+=num;

printf(n%d+",num);}

)

printf("\b=%du,sum);

)

【结果及截图】

97+991+983+977+971+96?+961+953+94?+941=9688

五.思考题

1.对于多分支选择结构何时使用if语句的嵌套,何时使用switch语句?

2.小结三种形式的循环使用的区别。

南昌大学实验报告

学生姓名:―学号:专业班级:

实验类型:口验证□综合□设计口创新实验日期:实验成绩:

实验4函数

—.实验目的

1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。掌握

实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用

及递归调用的设计方法;

2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;

3.在编程过程中加深理解函数调用的程序设计思想。

二.实验内容

1.多模块的程序设计与调试的方法;

2.函数的定义和调用的方法;

3.用递归方法进行程序设计。

三.实验环境

PC微机

DOS操作系统或Windows操作系统

TurboC程序集成环境

四.实验步骤

1.编写一个函数primeNum(intnum),它的功能是判别一个数是否为素数。

如果num是素数,返回该数;否则返回0值。

要求:

(1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的

信息。输出格式为:numisprime或numisnotprime。

(2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查

结果是否正确。

c\TC

pleaseinputonnnun:0

0isnotprime.

pleaseinputonnnun:l

1isnotprime.

pleaseinputonnnum:2

2isnotprine.

pleaseinputonnnun:5

5isprime.

pleaseinputonnnun:9

9isprime.

pleaseinputonnnun:13

13isprime.

pleaseinputonnnun:59

59isprime.

pleaseinputonnnum:121

121isprime.

2.编写函数computNum(intnum),它的功能是计算任意输入的一个正整

数的各位数字之和,结果由函数返回(例如:输入数据是123,返回值为6)。

要求:num由主函数输入,调用该函数后,在主函数内输出结果。

3.编写函数,mulNum(inta,intb),它的功能是用来确定a和b是否是整

数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。

要求:

(1)在主函数中输入一对数据a和b,调用该函数后,输出结果并加以相

应的说明。例如:在主函数中输入:10,5,则输出:10ismultipleof5.

(2)分别输入下面几组数据进行函数的正确性测试:1与5、5与5、6与2、

6与4、20与4、37与9等,并对测试信息加以说明。

FileEditRunCompilePxojectOptionsDebugBreak/viatch

“Edit一

Line1Col1InsertIndentTabFillUnindent*D:PXJ3.C

ttinclude<stdio.h>

uoidnainO

<intnulNum<intint>;

inta,b;

printf<Mpleaseiinput2digits:M>;

scanFU'/A;

if〈mulNum〈a,b)〉

printf<M\nzdismultipleofNd.\n”,a»b);

elseprintf(^zdisn,tmultipleofzd.\nM,a,b>;

>

intmulNun<inta,intb>

<if<a<b>return0;

else

<if<azb==0>return1;

elsereturn0;

Watch

pleaseiinput2digits:1,5

iisn'tmultipleof5.

pleaseiinput2digits:5,5

5ismultipleof5.

pleaseiinput2digits:6^.2

6ismultipleof2.

pleaseiinput2digits,4

Gisn'tmultipleof4.

pleaseiinput2digits:20,4

20ismultipleof4.

pleaseiinput2digits:37,9

37isn/tmultipleof9.

4.编写一个计算组合数的函数combinNum(intm,intn)。计算结果由函数

返回。

计算组合数的公式是:

c(m,n)=m!/(n!*(m-n)!)

要求:

(1)从主函数输入m和n的值。对m>n、m<n和m=n的情况作分别处理后

调用函数combinNum(m,n),在主函数内输出结果值。

(2)对m>n、m<n和m=n的情况各取一组数据进行测试,检查程序的正确

性。

(3)修改程序,把两个函数分别放在两个程序文件中,作为两个文件进行

编译、链接和运行。

pleaseinput

pleaseinput

Floatingpointerror:Ouerflow.

pleaseinput

c<15,ll>=1364.999878

pleaseinput

thedateisurong.

修改后:

Edit=

Line1Col1InsertIndentTabFillUnindentD:PXJ4

ttinclude<stdio-h>

uoidnainO

<externfloatconbinNun<int,int>;

intm.n;

printf<°\npleaseinputm-n:”〉;

M,,

scanf<zdJ.zd,8tnJ.&n>;

if<n<n>printf<M\nthedateiswrong.M>;

elseif<m==n>printf<u\nc<Xd.Zd>=0u,R,n>;

MMJ

elseprintf<\nc<Zd,Zd>=Zf,n,n,conbinNun<m,n>>;

)

ttinclude<stdio.h>

floatconbinNunCintintn>

<floatN,a=l,b=l,c=l;

inti;

for<i=l;i<=n;i++>a=a*i;

for<i=l;i<=n;i++>b=b*i;

for<i=l;i<=<n-n>;i++>c=c*i;

z=a/<b*c>;returnz;

pleaseinput,n,D:2,G

thedateicwi、()ng.

pleaseinput

c(5Q=0

pleaseinputn,n:9,6

000000

5.整数a,b的最大公约数是指既能被a整除又能被b整除的最大整数。整

数a,b的最小公倍数是指既是a的倍数又是b的倍数的最小整数。编写两个函数,

一个函数gcd()的功能是求两个整数的最大公约数,另一个函数mul()的功能是

求两个整数的最小公倍数。

要求:

(1)两个整数在主函数中输入,并在主函数中输出求得的最大公约数和最

小公倍数。

(2)首先将两个整数a和b作为实参传递给函数gcd(),求出的最大公

约数后,由函数gcd()带值返回主函数,然后将最大公约数与两个整数a、b

一起作为实参传递给函数mul。,以此求出最小公倍数,再由函数mul()带

值返回主函数。

(3)修改函数gcd。,函数gcd()采用递归调用的编写方法,两个整数

a和b的最大公约数的递归公式是:

如果b=0,那么gcd(a,b)=x,否贝Ugcd(a,b)=gcd(b,a%b)o然

后将最大公约数与两个整数a、b一起传递给函数mul(),求出最小公倍数,

再由函数mul()将最小公倍数返回主函数。

(4)修改程序,采用全局变量的处理方法,将最大公约数和最小公倍数都

设为全局变量,分别用函数gcd()和函数mul()求最大公约数和最小公倍数,

但其值不是由函数返回,而是通过全局变量在函数之间传递的特性将结果反映在

主函数中。

returnb;

>

intnul<inta,intb,intc>

<return<a*b/c>;

卜ILfcXl:______________________________________________________

pleaseinputaabdb:4569

themaxcommondiuisoris3.

thelowestconnonmultipleis1035.pleaseinputaabdb:515

themaxconnondiuisoris5.

thelov/estcommonmultipleis15.

修改后:

〈【JietaixrunLompiJLesojectuptionsvemi!

‘-Edit一

Line9Col11InsertIndentTabFillUnindent*

ttinclude<stdio.h>

uoidnainO

<intgcd<int,int>;

intnuKint,int,int>;

inta,b,c,z;

printf<M\npleaseinputaabdb:u>;

scanf<MzdzdM,&a,&b>;

c=gcd<aJ.b>;

printf<MthemaxconnondivisorisZd.M,c>;

z=mul<a^b,c>;

printf<°\nthelowestcommonmultipleiszd.M,z>;

>

intgcd<inta,intb>

<intc;

i£<b==0>c=a;

elsec=gcd<b,azb>;

returnc;

intnul<inta,intb,intc>

<return<a*b/c>;

〉一

运行结果:

pleaseinputaabdb:424

themaxcommondiuisoris4.

thelowestcommonmultipleis24.

pleaseinputaabdb:38

themaxcommondivisoris1.

thelowestcommonmultipleis24.

修改后:

riLeEditmmri*ojectuptionsuemig"eaK/waecii

,Edit

Line10Col12InsertIndentTabFillUnindent*D:PXJ-5.3

ttinclude<stdio.h>

intc=0,z=0;

uoidmainO

<intgcd<int„int>;

uoidnul<int,int>;

inta,b;

printf<M\npleaseinputaabdb:M>;

scanf<°zdzd'\&aJ.&b>;

gcd<aJ.b>;

mulXa.b〉;

printf<Mthenaxcommondiuisoriszd.M,c>;

printf<M\nthelowestcommonmultipleiszd.".N);

>

intgcd<inta,intb>

<

if<b==0>c=a;

elsec=gcd<bJ.aXb>;

uoidnuKinta„intb>

<z=a*b/c;

〉一

运行结果:

pleaseinputaabdb:36

thenaxcommondiuisoris3.

thelowestconnonmultipleis6.

pleaseinputaabdb:82

thenaxconnondiuisoris2.

thelowestconnonmultipleis8.

五.思考题

1.小结函数的定义及调用方法;

2.小结函数中形参和实参的结合规则;

3.编写和调试包含多模块的程序时,容易出现什么样的错误?根据自己的

实践总结一下。

小结:通过这次实验,我学会了函数的定义及调用方法,编写包含多模块的程序时,要记得写函

数的类型标识符,从被调函数中带回一个函数值一定要用return语句,调用函数之前要写函

数声明。要分清局部变量与全局变量,生用慎用全局变量,全局变量不要与局部变量同名,

定义的函数和主函数中都要记得定义你所用到的变量的类型。这次实验我发现自己对函数的

递归调用不熟悉,以后还要多加练习。

南昌大学卖睑报告

学生姓名:―学号:专业班级:

实验类型:口验证口综合口设计口创新实验日期:实验成绩:

实验5数组

一.实验目的

1.掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、

数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/

输出。

2.掌握字符数组与字符串的使用方法。理解字符数组与其它数组的区别、

理解字符串及其特点。掌握常用的字符串处理库函数的用法并清楚对字符串的简

单处理。

3.掌握与数组相关的算法,包括排序算法和查找算法等。

二.实验内容

有关数组的程序设计

三.实验环境

PC微机

DOS操作系统或Windows操作系统

TurboC程序集成环境

四.实验步骤

1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。

要求:

(1)数组为整型数组(10个元素)。

(2)使用scanf函数实现数组元素的输入。在输入前给出必要的提示。

(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大

值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。

(4)如果现改为20个元素的数组,怎样修改程序?修改程序后,运行程序

进行检查。如果需要数组元素不断改变,应怎样修改程序?

#include<stdio.h>

voidmain()

inta[10],i,j,k,max,min;

printf("请输入10个数:\n");

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

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

printf("原始数据:");

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

printf(n%dH,a[i]);

printf(n\nn);

max=a[0];/*初始化max和min*/

min=a[0];

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

(

if(a[i]>=max)

max=a[i];

if(a[i]<=min)

min=a[i];/*找最大值和最小值*/

)

printf("最大值为)

for(i=0;i<10;++i)/*应对有多个最值的情况*/

if(a[i]==max)

printf("第%d个

printf("数,%d\n",max);

printf("最小值为");

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

if(a[i]==min)

printf("第%d个",i+1);

printf("数,%d",min);

)

修改为20个元素的方案:

将程序中所有的10改为20即可。如果数组元素不断改变,只需将代码中的

10改成元素个数即可。

C:\C>sy5-l

请输入10个数:

43296018

愿:4320

K第4.^

B:取6^

:c>

\c-

2.编程实现:在给定的字符串中查找满足条件的第一个字符。

要求:

(1)字符串采用初始化的方式处理。

(2)通过scanf函数读入一个任意字符。

(3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串

中的位置以及相应的说明。如果不存在该字符,则要给出相应的信息。

#include<stdio.h>

#include<string.h>

voidmain()

(

intj,n;

chari;

charc[]={"Iamastudent"};/*初始化字符串*/

printf("给定字符串为:%s\n请输入要查找的字符:”,c);

scanf("%c",&i);

n=strlen(c);/*得到函数给定字符串的长度*/

for(j=O;j<n;++j)

if((int)c[j]==(int)i)

(

printf("字符串中满足条件的第一个字符为第%d个字符

",j+l);break;/*找到符合条件的第一个字符,结束循环*/

)

if(j>=n)

printf("字符串中不存在满足条件的字符!");

QQcmd

,-

\c定

95符-W2.4a

的a/m

要I.

又1

符.

\c定-2

道O

要r

串5

存^

C:不

\c

3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由

n决定的二维整型数组(nxn),形成nxn阶矩阵,将矩阵中最大元素所在

的行和最小元素所在的行对调后,再输出该矩阵(注意:数组不允许动态定义)。

例如:原始数据:n=4结果数据:

12348111416

3591035910

81114161234

1527615276

要求:

(1)本题中所涉及到的循环都采用for语句。

(2)在输入/输出时进行必要的说明。

(3)对输入的2〜10之间的整数(例如4)以n=4的格式输出。

(4)输入一•个nxn矩阵(假定最大值与最小值不在同一行上),输出原

始矩阵数据(按上述矩阵形式)。

(5)查找最大值与最小值,将矩阵中最大元素所在的行和最小元素所在的

行对调,输出对调后的矩阵数据。

(6)修改程序,对最大值与最小值可能出现在一行上的情况做出说明。

(7)对n为3,4,5时,输入数组元素是要注意哪些问题?执行程序,检

查程序的正确性。

#include<stdio.h>

voidmain()

|

intn,j,k,z,x,max,min,a[10][10];

printf("请输入一个2到10之间的数:");

scanf("%d",&n);

printf("请输入一个n*n数组:\n");

for(j=O;j<n;++j)

for(k=0;k<n;++k)

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

printf("原始数组为:n=%d\n",n);

for(j=O;j<n;++j){

for(k=0;k<n;++k)

printf("%5d",a[j][k]);/*输出原始数组*/

printf("\n");/*输出n个数后换行,使数组为n*n的格式*/}

max=a[0][0];/*初始化最大值和最小值*/

min=af0][0];

z=0;x=0;

for(j=O;j<n;++j)

for(k=0;k<n;++k)

if(a[j]fk]>max)

(

max=a[j][k];

z=j;/*得到最大值的行数*/

}

for(j=O;j<n;++j)

for(k=0;k<n;++k)

if(a[j]fk]<min)

(

min=a[j][k];

x=j;/*得到最小值的行数*/

)

for(j=O;j<n;++j){

k=a[z]fj];

a[z][j]=a[x][j];

a[x][j]=k;/*交换最大值所在行和最小值所在行*/}

printf("结果数据:\n");

for(j=O;j<n;++j)/*输出结果*/]

for(k=0;k<n;++k)

printf("%5d",a|j][k]);

printf("\n");}

修改程序得到最大值和最小值所在行,只需在程序末尾加上语句:

printf("最大值在第%d行,最小值在第%d行”,z,x);

在输入数组元素时要注意尽量不要重复出现最大值和最小值,程序会以最值

中第一个出现的值作为最值。

4.编程实现“折半查找”的过程。折半查找的处理过程是:在一个数据已

排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结

束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组

的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数

组的后半部,此后只需在数组的后半部继续进行折半查找。

要求:

(1)设定一个数组存放20个数据,用赋初值的方法在程序中给出(假设这

些数据已排序)。

(2)用scanf函数输入一个要找的数。

(3)对查找的结果给出相应的说明,如果找到该数,则给出该数是数组中

第几个元素。如果该数不在数组中,则输出“无此数”信息。

(4)任意输入一些数据,检查程序的正确性。

(5)修改程序,设定输入的数据是无序的,采用scanf函数的形式输入,

首先要对这些无序的数据进行排序,然后再采用“折半查找”。最后通过测试几

组差别较大的数据检查程序的正确性。

(6)修改程序,改为函数调用的形式。编写一个选择法排序函数,对无序

数据进行排序;编写一个查找函数对已排好序的数据进行查找。在主函数中输入

数据(无序),调用上述函数,输出结果。

#include<stdio.h>

voidmain()

(

inta[20];

intn,j,i,k;

printf("给定的数组为:\n");

for(n=0;n<20;++n){

a[n]=2*n+3;/*给定数组的初始化*/

printf(n%d",a[n]);}

printf(n\nn);

printf("请输入要查找的数:”);

scanf(n%dH,&j);

intm=20;

for(n=0;nv=m;)/*折半查找*/{

i=(n+m)/2;

if(a[i]<j)

n=i+l;

elseif(a[i]>j)

m=i-l;

elseif(a[i]=j){

printf("该数在数组的第%d位上",i+l);break;}/*输出找到的数,结束循环

*/}

if(n>m)

printf("无此数)

If回3^1

”Y

C:>s组

379—15192123252729313335373941

裔向

曩17

人11

查17

组8

Y

C:>s组

的95

3791317192123252729313335373941

找打15

请11

Y

95组

>s为

C:的

给:

3791-12123252729313335373941

11勺15

曩17

请3

-上

该P

按要求修改后的程序为:

#include<stdio.h>

voidarr();/*声明排序函数*/

intsea(intj);/*声明折半查找函数*/

inta[20];/*定义全局变量*/

voidmain()

(

intn,j,i,h;

printf("请输入20个数据:\n");

for(n=0;n<20;++n)

(

scanf("%d",&a[n]);/*输入无序的20个数据*/

)

arr();/*调用排序函数*/

printf("\n请输入要查找的数:");

scanf("%d",&j);

h=sea①;/*调用折半查找函数*/

if(h==O)

printf("无此数

else

printf("该数在已排序数组的第%d位”,h);

)

voidarr()/*排序函数*/

(

intz,n;

for(intn=0;n<20;++n)

for(intk=0;k<19-n;++k)

if(a[k]>a[k+l])

(

z=a[k];

a[k]=a[k+l];

a[k+l]=z;

)

printf("将数组排序,得:\n");

for(n=0;n<20;++n)

printf("%d",a[n]);/*输出已排序的数组*/

}

intsea(intj)

(

intn,i,h,m=20;

for(n=0;n<=m;)

i=(n+m)/2;

if(a[i]<j)

n=i+1;

elseif(a[i]>j)

m=i-l;

elseif(a[i]=j){

h=i+l;break;}/*找到该数后停止循环*/

)

if(n>m)

h=0;

returnh;/*返回h值*/

5.编程实现:三个学生、五门课程的成绩分别存放在4义6矩阵的前3X5

列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。计算单科

的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。输入/输出

格式举例如下:

Input(输入成绩):

6587685678<cr>

8394678591<cr>

7175698489<cr>

Output(输出结果):

658768567870.5

839467

温馨提示

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

评论

0/150

提交评论