版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
匚语言实验一c语言的运行环境和运行过程【目的与要求】了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。了解在该系统上如何编辑、编译、连接和运行一个C程序。通过运行简单的C程序,初步了解C源程序的特点。【上机内容】【基础知识】通过课堂上学习,我们对C语言已有了初步了解,对C语言源程序结构有了总体的认识,那么如何在机器上运行C语言源程序呢?任何高级语言源程序都要“翻译”成机器语言,才能在机器上运行。“翻译”的方式有两种,一种是解释方式,即对源程序解释一句执行一句;另一种是编译方式,即先把源程序“翻译”成目标程序(用机器代码组成的程序),再经过连接装配后生成可执行文件,最后执行可执行文件而得到结果。C语言是一种编译型的程序设计语言,它采用编译的方式将源程序翻译成目的程序(机器代码)。运行一个C程序,从输入源程序开始,要经过编辑源程序文件(・C)、编译生成目标文件(・obj)、连接生成可执行文件(・exe)和执行四个步骤。下面主要介绍TurboC下运行C语言源程序。TurboC是美国Borland公司推出的IBMPC系列机的C语言编译程序。它具有方便、直观、易用的界面和丰富的库函数。它向用户提供了集成环境,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,使用十分方便。TurboC工作环境介绍一个C语言程序的实施是从进入TurboC的集成环境开始的,而进入C语言的环境,一般有两种途径:从DOS环境进入和从Windows环境进入。(1)从DOS环境进入:在DOS命令行上键入:OCD\TCZ(指定当前目录为TC子目录)OTCZ(进入TurboC环境)这时进入TurboC集成环境的主菜单窗口,屏幕显示如下图所示。(2)从Windows环境进入:在Windows95/98环境中,如果本机中已安装了TurboC,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。或者从开始菜单中找到“运行”,在运行对话框中键入“C:\TC\TC”,“确定”即可。需要说明的是,以上两种方式有一个共同的前提,即TurboC的安装路径为C:\TC,如果你的计算机中TurboC的安装路径不同的话,在上述方式中改变相应路径即可。刚进入TC环境时,光带覆盖在“File”上,整个屏幕由四部分组成,依次为:主菜单、编辑窗口、信息窗口和功能提示行(或称快速参考行)。<![endif]>①主菜单显示屏的顶部是主菜单条,它提供了8个选择项:File处理文件(装入、存盘、选择、建立、换名存盘、写盘),目录操作(列表、改变工作目录),退出TurboC,返回DOS状态。Edit建立、编辑源文件。Run 自动编辑、连接并运行程序。Compile编辑、生成目标文件组合成工作文件。Project 将多个源文件和目标文件组合成工作文件。Option 提供集成环境下的多种选择和设置(如设置存储模式、选择编参数、诊断及连接任选项)以及定义宏;也可记录Include、Output及Library文件目录,保存编译任选项和从配置文件加载任选项。Debug检查、改变变量的值、查找函数,程序运行时查看调用栈。选择程序编译时是否在执行代码中插入调试信息。Break/Watch增加、删除、编辑监视表达式,及设置、清除、执行至断点。在主菜单中,Edit选项仅仅是一条进入编辑器的命令。其他选项均为下拉式菜单,包含许多命令选项,使用方向键移动光带来选择某个选项时,按回车键,表示执行该命令,若屏幕上弹出一个下拉菜单,以提供进一步选择。②编辑窗口编辑窗口是在主菜单下,信息窗口之上的区域,其顶行中间有“Edit”标志。在此窗口中可以建立、编辑一个源文件。功能键F5可以扩大编辑窗口到整个屏幕,或恢复分屏式环境。进入编辑窗口的方式有两种:(A)按F10功能键,激活主菜单,然后用光标移动键将光带移到“Edit”上,按回车键,或者在激活主菜单后直接按字母键E,均可进入编辑窗口;(B)按Alt+E无条件的进入编辑窗口。进入编辑窗口后,编辑窗口的名字是高亮度的,表示它是活动窗口。窗口的顶部第一行是状态行,给出有关正在被编辑文件的信息,如当前光标所在的行、歹!J;编辑模式(插入/改写);正在编辑文件的文件名等等,当需要编辑修改时,在编辑窗口中灵活地使用光标移动键以及编辑命令即可达到预期的效果。常用的编辑命令见下表:命令 功能Home将光标移到行首End将光标移到行尾Ins插入/改写两种状态的切换Del删除光标所在的字符PgUp向上翻页正文PgDn向下翻页正文——光标左右移动tI删除光标所在的行Ctrl+Y删除光标所指的一个单词Ctrl+T放弃操作Ctrl+U删除光标左边字符Backspac设置(开始)块头标志Ctrl+KB设置(结尾)块尾标志Ctrl+KK块搬动到光标处Ctrl+KV块拷贝到光标处
Ctrl+KC块删除Ctrl+KY取消块定义Ctrl+KH在插入模式下(用Ins键转换)向编辑窗口内输入代码,按回车键结束一行(TC编辑器不能自动换行)。一行最多为248个字符,窗口宽77歹U,当一行内字符多于77列时,窗口随着字符的输入而左右移动,若发现有错误,可移动光标到出错处更正之;再按一次Ins键,屏幕转换成为替换模式,输入的字符将替换光标所在位置的字符。③信息窗口编译和调试源程序时,信息窗口显示诊断信息、警告、出错信息、错误在源程序中的位置。功能键F5可以扩大和恢复信息窗口,按F6或Alt+E,光标从信息窗口跳到编辑窗口。④功能键提示行屏幕低行是功能键提示行,显示当前状态下功能键(俗称TurboC热键)的作用,见下表。应当注意,在不同状态下功能键的作用是不同的。正确使用功能键可以简化操作。热键简单说明F1Help,以分页的形式显示帮助信息F2保存当前正在编辑窗口中的文件F3装入一个文件。按F3,屏幕上弹出一个输入框,输入要装入的文件名Zoom,缩放活动窗口F5Switch,活动窗口开关,按F6键,光标从编辑F6窗口跳到信息窗口,或从信息窗口跳到编辑窗口Trace,跟踪到函数中
F7Step,单步跟踪,但不进入函数内部F8Make,对当前文档进行编辑、连接F9Menu,激活主菜单,光标跳到主菜单F10TurboC环境中运行C语言源程序的步骤(1)编辑源文件在主菜单下,直接按Alt+F键,或按F10后将光带移到“File”选项上,按回车键,在“File”下面出现一个下拉菜单,菜单中有以下选项:LoadF3 表示加载或装入一个文件PickAlt+F3从指定的文件列表中选择文件装入编辑器。PickAlt+F3从指定的文件列表中选择文件装入编辑器。New 表示新文件,缺省文件名为NONAME.C。SaveF2 将正在编辑的文件存盘。Writeto 将正在编辑的文件写入指定的文件中,若文件名已存在,则重写。Directory 表示文件目录。ChangeDir 改变驱动器及目录OSshell进入TurboC命令行模式,命令EXIT可返回集成环境QuitAlt+x退出TurboC,返回DOS状态。建立一个新文件,可用光标移动键将“File”菜单中的光带移到“New”处,按回车键,即可打开编辑窗口。此时,编辑窗口是空白的,光标位于编辑窗口的左上角,屏幕自动处于插入模式,可以输入源程序。屏幕右上角显示缺省文件名为NONAME.C,编辑完成之后,可用F2或选择“Save”或“Writeto”进行存盘操作,此时系统将提示用户将文件名修改成为所需要的文件名。(2)源程序的编译、连接直接按F9键,或将菜单“Compile”中的光带移到“MakeEXEfile”项上,按回车键,就可实现对源程序的编译、连接。若有错误,则在信息窗口显示出相应的信息或警告,按任意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。修改后,再按F9键进行编辑、连接。如此反复,直到没有错误为止,即可生成可执行文件。注意:C程序的连接是在编译后自动完成的。(3)执行程序直接按Ctrl+F9键,即可执行.EXE文件;或在主菜单中(按F10进入主菜单)将光带移到“Run”选项,按回车键,弹出一个菜单,选择“Run”选项,回车。这时并不能直接看到输出结果。输出结果是显示在用户屏幕上,在TC屏幕上看不到,直接按复合键Alt+F5,或选择“Run”菜单中的“UserScreen"选项,即可出现用户屏幕,查看输出结果。按任意键返回TC集成环境。另外,选择“Run”菜单下的“Run”项,或直接按Ctrl+F9键,可将C程序的编译、连接、运行-•次性完成,即第3步中包含有第2步的工作。如果程序需要输入数据,则在运行程序后,光标停留在用户屏幕上,要求在用户输入数据,数据输入完成后程序继续运行,直至输出结果。如果运行结果不正确或其他原因需要重新修改源程序,则需重新进入编辑状态。修改源程序,重复以上步骤,直到结果正确为止。(4)退出TurboC集成环境退出TurboC环境,返回操作系统状态。可在主菜单选择“File”菜单的“Quit”选项,或者直接按Alt+x。在执行退出TurboC环境时,系统将检查一下当前编辑窗口的程序是否已经存盘,若未存盘,系统将弹出一个提示窗口,提示是否将文件存盘,若按“Y”则将当前窗口内的文件存盘后退出;若按"N"则不存盘退出。【一般示例】【例1】编程实现在屏幕上显示如下三行文字Hello,world!Wo1cometotheClanguageworld!Everyonehasbeenwaitingfor.在TurboC的集成环境下,键入如下源文件。敲Alt+F组合键打开File菜单,File菜单中Writeto选项可将默认noname,c文件名改为任意文件名。程序example.c如下:printf("Hello,World!\n");printf(/zWelcometotheC1anguageworld!\n,z);printf(z,Everyonehasbeenwaitingfor.\n");)然后用Ctrl+F9编辑执行example”,用Alt+F5查看结果,即在屏幕上显示题目要求的三行文字。按回车键重新返回TurboC的编辑环境。注意,在运行程序之前最好先存盘。【例2】输入并运行程序,写出运行结果。main()(inta,b,sum;a=123;b=456;sum=a+b;printf("sumis%d\nw,sum);)运行方法同上,最后结果为:sumis579O【例3】输入并运行程序,写出运行结果。main(){inta,b,c;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);)这个程序的功能是对于任意输入的两个整数,输出较大的那个数。所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5"。【作业】.输入并运行例题中程序,熟悉调试c程序的的方法与步骤。.写出一个C程序的构成。.参照例题,编写一个C程序,输出以下信息:Hello,World!.编写一个C程序,输入a、b、c三个数,输出其中最大者。试想,如果求四个数中的最大者,则程序该如何编写。返回C语言首页C语言手机铃声最新手机铃声手机铃声排行榜手机来电铃声短信铃声匚语言实验二C语言的基础知识【目的与要求】.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(-)运算符的使用。.进一步熟悉C程序的编辑、编译、连接和运行的过程。【上机内容】【一般示例】【例1】输入并运行下程序,写出运行结果。mian()(charcl,c2;cl=97;c2=98;printf("%c%c”,cl,c2);在此基础上1)加一个printf语句,并运行之。printf(“%d,%d”,cl,c2);2)再将第二行改为:intcl,c2;再使之运行。3)再将第三行改为:cl=300;c2=400;再使之运行,分析其运行结果。在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。【例2】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。main()(charcl='a',c2='b',c3='c',c4='\101',c5='\116';printf(Ma%cb%c\tabc\nw,cl,c2,c3);printf("\t\b%c%cn,c4,c5);)在该程序中,主要考查对转义字符的掌握情况。【例3】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(“%d,%d,%d,%d”,i,j,m,n);)分别作以下改动之后,先分析再运行:1)将第四行改为:m=i++;n=++j;2)程序改为:main()(inti,j;i=8;j=10;printf("%d,%d",i++,j++);}3)在2)的基础上,将printf语句改为:printf(<<%d,%dM,++i,++j);4)再将printf语句改为:printf("%d,%d,%d,%d”,i,j,i++,j++);5)程序改为:inti,j,m=O,n=O;i=8;j=10;m+=i++;n-=一j;printf("i=%d,j=%d,m=%d,n=%d",i,j,m,n);)此程序主要考查自加、自减运算符以及复合运算符的用法。【作业】.要讲“China”译成密码,密码规律是:用原来的字母后面第5个字母代替原来的字母。例如,字母“A”后面第5个是“F",用“F”代替“A”。因此,“China”应译为“Hmnsf”。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为‘C'、'h'、'i'、'n'、'a',经过运算,使其分别变为‘H'、'm'、'n'、's'、'伊,并输出。.求下面算术表达式的值。x+a%3*(x+y)%2/4设x=2.5,a=7,y=4.7(float)(a+b)/2+(int)x%(int)y设a=2,b=3,x=3.5,y=2.5先自己分析,再试着用程序求解,看得到的结果是否一致。3.写出下面表达式运算后a的值,设原来a=10。设a和n已定义成整型变量。a+=a (2)a-=2a*=2+3 (4)a/=a+aa%=(n%=2),n的值等于5 (6)a+=a-=a*=a先自己分析,再试着用程序求解,看得到的结果是否一致。C语言手机铃声最新手匚语言实验三简单的c程序设计【目的与要求】.理解C语言程序的顺序结构.掌握常用的C语言语句,熟练应用赋值、输入、输出语句。【上机内容】【一般实例】【例1】按格式要求输入/输出数据ttinclude"stdio.h"main()(inta,b;flostx,y;charcl,c2;scanf("a=%d,b=%d",&a,&b);scanf(a%f,%e”,&x,&y);scanf(u&c&c”,&cl,&c2);printf(aa=%d,b=%d,x=%f,y=%f,cl=%c,c2=%c\n>,,a,b,x,y,cl,c2);运行该程序,必须按如下方式在键盘上输入数据a=3,b=7/8.5,71.82/aA/请同学们写出输出结果【例2】输入三角形三边长,求三角形面积。#include"math,h”main(){floata,b,c,s,area;scanf(a%f ,&a,&b,&c);s=l.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%f”,area);}【例3】已知圆半径,圆柱高,求圆周长,圆柱体积。main()(floatr,h,1,v,pi;pi=3.1415926;scanf("%f,%f”,&r,&h);l=2*pi*r;v=pi*r*r*h;printf(“圆周长为:%6.2f\n",1);printf("%圆柱体积为:6.2f”,v);【例4】输入一个摄氏温度,要求输出华氏温度。公式为f=5/9*c+32.main()(floatc,f;scanf("%f",&c);f=5.0/9*c+32;printf("%5.2f\n",c);)【作业】.已知圆半径r=L5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。.输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32).匚语言实验四选择结构程序设计【目的与要求】.了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);.学会正确使用逻辑运算符和逻辑表达式;.熟练掌握if语句和switch语句。【上机内容】【一般示例】【例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中的最大值。#include"stdio.h〃main()(inta,b,c,max; /*定义四个整型变量*/scanf(aa=%d,b=%d,c=%d”,&a,&b,&c);if(a>=b)max=a; /*a>=b*/elsemax=b; /*a〈b*/if(c>max)max=c;/*c是最大值*/max=c;printf("max=%d”,max);若输入下列数据,分析程序的执行顺序并写出运行结果a=l,b=2,c=3a-2,b=l,c=3a=3,b=2,c=la=3,b=l,c=2a=3,b=3,c=2a=2,b=l,c=2【例2】输入某学生的成绩,经处理后给出学生的等级,等级分类如下: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之间。#include"stdio.h"intscore;chargrade;printf(z/\npleaseinputastudentscore:z,);scanf&score);if(score>100|score<0)printf(z,\ninputerror!z,);else{if(score>=90)grade=,A';else{if(score>=80)grade='B';else{if(score>=70)grade='C,;else{if(score>=60)grade=,D';elsegrade='E';)))printf('\nthestudentgrade:%c,z,grade);输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。方法二:用switch语句分析:switch语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0、100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。#include/zstdio.h"main()intg,s;charch;printf(z/\ninputastudentgrade:z,);scanf(〃%d〃,&g);s=g/10;if(s<0|s>10)printf(z,\ninputerror!z,);else{switch(s){case10:case9:ch='A';break;case8:ch='B';break;case7:ch='C';break;case6:ch='D';break;default:ch='E';)printf("\nthestudentscort:%c”,ch);)}输入测试数据,同方法一一样调试程序并写出结果。【例3】有一函数:xx<ly=2x-ll=<x<103x-llx>=10用scanf函数输入x的值(分别为x<l,T10,>=10三种情况),求y值。分析:y是一个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。main()(intx,y;printf("pleaseinputx:scanf("%d",&x);if(x<l)y=x;printf("y=%d\n”,y);}elseif(x<10)(y=2*xT;printf("y=%d\n",y);}else{y=3*xTl;printf(“y=%d\n”,y);}【作业】.c语言如何表示“真”与“假”?系统如何判断一个量的“真”与“假”?.写出下面各逻辑表达式的值。设a=3,b=4,c=5a+b>c&&b==ca||b+c&&b~c!(a〉b)&&!c1!(x=a)&&(y=b)&&0!(a+b)+c-l&&b+c/2.有3个整数a、b、c,由键盘输入,输出其中最大的数。.有一函数:xx<ly=2x-ll=<x<103x-llx>=10写一程序,输入x,输出y。.给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80、89为B, 70〜79分为C,60~69分为D,60分以下为E。.给一个不多于5位的正整数,要求:a.求出它是几位数;b.分别打出每一位数字;c.按逆序打出各位数字,例如原数为321,应输出123。.输入4个整数,要求按由小到大的顺序输出。匚语言实验五循环结构程序设计【目的与要求】熟练掌握while、do—while和for三种循环语句的应用。【上机内容】【一般示例】【例1】求5!main(){intn,t;n=l;t=l;while(t<=5){n=n*t;t=t+l;printf("%d”,n);[例2]求和s=l!+2!+3!main(){intn,s=0,t=l;for(n=l;n<=3;n++)(t=t*n;s=s+t;)printf("%d",s);}[例3]求和s=l!+3!+5!main()ints=0,t,i,j;for(i=l;i<=3;i++)t=l;for(j=l;j<=2*i-l;j++)t=t*j;s=s+t;)printf("%d",s);)[例4]求和s=3+33+333main(){ints=0,t=3,i;for(i=l;i<=3;i++)t=10*t+3;}printf("%d",s);)【例5】有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。main(){intn,t,;floata=2,b=l,s=0;for(n=l;n<=10;n++){s=s+a/b;t=a;a=a+b;b=t;printf("%f",s);)【例6】打印500以内的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。main(){inti,j,k,n;for(n=100;n<=500;n++)(i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf(u%d”,n);【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。求100之内的所有完数。main(){intn,s,j;for(n=l;n<=100;n++)(s-0;for(j^l;j<n;j++)if(n%j==0)s=s+j;if(s-=n)printf("髯d”,s);【典型示例】【例1】计算两个数的最大公约数;分析:首先,随机输入两个数m,n(默认m>n);其次,算法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。#include"stdio.h"main(){intm,n,k,result;printf("Entertwonumbers:/z);scanf("%d,%d",&m,&n);if(m>0&&n>0)/*限定两个正整数*/{dok=n%m;if(k==0)result=m;else{n=m;m=k;)}while(k>0);/*循环取余求出最大公因子*/printf(z,Thegreatestcommondivistoris:%d\n/z,result);}elseprintf(^Nonpositivevaluesnotallowed'n");}【例2】用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。ttinclude"math,h”main()floatx,xO,f,fl;x=l.0;do{x0=x;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;)while(fabs(x-x0)>=le-5);printf("%6.2f",x);}【例3】打印下列图案****main(){inti,j;for(i=l;i<=4;i++){for(j=l;j<=4-i;j++)printf("");for(j=l;j<=2*i-l;j++)printf("*");printf("\n");)}【例4】判断m是否是素数。程序:ttinclude<math.h>main()intm,i,k;scanf("%d",&m);k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf(isaprimenumber\nn,m);elseprintf("%disnotaprimenumber\n,,,m);}【作业】.输入两个正整数m和n,求其最大公约数和最小公倍数。.求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),n由键盘输入。.求和1!+2!+3!+4!+-20!.打印100-999之间所有的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。.一个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。.有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前20项之和。.用迭代法求x=Vao求平方根的迭公式为xn+l=l/2(xn+a/xn)要求前后两次求出的x的差的绝对值小于10-5.用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。.打印下列图案*******机铃声匚语言实验六一维数组【目的与要求】.掌握一维数组的定义、赋值和输入输出的方法;.掌握字符数组的使用;.掌握与数组有关的算法(例如排序算法)。【上机内容】【一般示例】【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。方法一:起泡排序从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(NT)次比较后,最大的数已放在最后,第二遍只需考虑(NT)个数,以此类推直到第(N-1)遍比较后就可以完成排序。源程序如下:ttdefineN10#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-l;i++)for(j=0;j<N-l-i;j++)if(a[j]>a[j+U)temp=aLj];a[j]=a[j+l];a[j+l]=temp;printf(/zthearrayaftersort:\n,z);for(i=0;i<N;i++)printf("%5d",a[i]);)方法二:选择排序首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的值从小到大的顺序排列为止。#include“stdio.h"ttdefineN10main()(inta[N],i,j,r,temp;printf("pleaseinput%dnumbers'n'',N);for(i=0;i<N;i++)scanf&a[i]);for(i=0;i<N-l;i++){r=i;for(j=i+l;j<N;j++)if(a[j]<a[r])r=j;if(r!=i)temp=a[r];a[r]=a[i];a[i]=temp;}}printf(z,thearrayaftersort:\n,z);for(i=0;i<N;i++)printfa[i]);printf('\n");}【例2】青年歌手参加歌曲大奖赛,有10个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分,其中排序部分这里用选择法实现。main(){inti,j,min;floattemp,ave=0;floata[ll];printfC\n输入评委所打的分数:\n");for(i=l;i<=10;i++)scanf("%f”,&a[i]);for(i=l;i<=9;i++){min=i;for(j=i+l;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];aEmin]=temp;for(i=2;i<=9;i++)/*注意i值的变化范围*/ave=ave+a[i];printf(“选手所得最后分数:%6.If",ave/8);printf("\n");}【例3】输入一串字符,计算其中空格的个数。ftinclude<stdio.h>main(){charc[30];inti,sum=0;gets(c);for(i=O;i<strlen(c);i++)if(c[i]=')sum-sum+1;printf("空格数为:%d\n”,sum);【作业】.已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,lo要求改为1,4,5,6,8。.有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。.编一程序,将两个字符串连接起来,不要用strcat函数。匚语言实验七二维数组【目的与要求】.掌握二维数组的定义、赋值和输入输出的方法;.掌握字符数组的使用;.掌握与数组有关的算法(例如排序算法)。【上机内容】【一般示例】【例1】有一个3X4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。ttdefineM3ttdefineN4main(){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);【例2】打印以下图案:*4**|c*|c*|c*jcmain(){chara[5]={'*','*','*','*','*'};inti,j,k;charspace='';for(i=0;i<5;i++)/*输出5行*/{printfCW);A输出每行前先换行*/printf("");/*每行前面留5个空格*/for(j=l;j<=i;j++)printf("%c”,space);/*每行再留1个空格*/for(k=0;k<5;k++)printf("%c",a[k]);/*每行输入5个*号*/}}【例3】求矩阵下三角形元素之和。ttdefineN6main(){inti,j,sum=0;inta[N][N]={0};printf("input5X5data:\n");for(i=l;i<N;i++){printf(z,Inputthe%dlinedata:\n",i);for(j=l;j<N;j++)scanf("%d”,&a[i][j]);)for(i=l;i<N;i++){for(j=l;j<N;j++)printf("%5d",a[i][j]);printf('\n");)for(i=l;i<N;i++)for(j=l;j<=i;j++)sum二sum+a[i][j];printf("sum=%d\n”,sum);)【作业】.求一个3X3矩阵对角线元素之和。.打印出以下的杨辉三角形(要求打印出10行)。111121133114641151010513.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。实验八函数【目的与要求】.掌握c语言函数的定义方法、函数的声明及函数的调用方法。.了解主调函数和被调函数之间的参数传递方式。【上机内容】【一般示例】【例1】写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。源程序如下:mian(){intnumber;printf(“请输入一个正整数:\n");scanf("%d”,&number);if(prime(number))printf(a\n%d是素数.",number);elseprintf("\n%d不是素数.",number);intprime(number)/*此函数用于判别素数*/intnumber;{intflag=l,n;for(n=2;n<number/2&&flag==l;n++)if(number%n==0)flag=0;return(flag);)判断素数的算法,我们在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里我们要注意函数的定义、声明的方法和格式。【例2】写一函数,是给定的一个二位数组(4X4)转置,即行列互换。源程序如下:/*矩阵的转置*/^defineN4intarray[N][N];convert(array)intarray[4][4];(inti,j,t;for(i=0;i<N;i++)for(j=i+l;j<N;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;))mainOinti,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(a%5dw,array[i][j]);printf("\n");)}本例题用数组作为函数参数,大家要注意数组作为函数参数时的用法。【典型示例】【例1】写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。源程序如下:ttinclude"stdio.h"hcf(u,v)intu,v;inta,b,t,r;if(u>v)t=u;u-v;v-t;while((r-b%a)!=0)return(a);led(u,v,h)intu,v,h;return(u*v/h);main()intu,v,h,1;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”,1);}这是一个十分典型的算法,同学们一定要认真分析、学习。【例2】写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。源程序如下:/*起泡法排序*/ttdefineN10charstr[N];main()(inti,flag;for(flag=l;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(a%cw,str[i]);}sort(str)charstr[N];{inti,j;chart;for(j=l;j<N;j++)for(i=0;(i<N-j)&&(str[i]!=,\0');i++)if(str[i]>str[i+l])t=str[i];str[i]=str[i+1];str[i+l]=t;【例3】用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。源程序如下:/*牛顿迭代法解方程*/#include"math,h”floatsolut(a,b,c,d)floata,b,c,d;{floatx=l,xO,f,fl;do|xO=x;f=((a*xO+b)*xO+c)*xO+d;f1=(3*a*x0+2*b)*xO+c;x=xO-f/f1;}while(fabs(x-xO)>=le-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(a\nX=%10.7f\nM,solut(a,b,c,d));}在此题目中,方程的系数是未知的,这是与以前我们用牛顿迭代法的时候不同的地方。但原理、算法是相同的,这里我们用函数来求方程的根。也就是把牛顿迭代法用函数的形式表现出来。【作业】.上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。main()intx,y;printf("%d\n”,sum(x+y));intsum(a,b);{inta,b;return(a+b);.定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人?.编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。.编写一个计算n!的函数,用主函数调用它,使之输出7阶杨辉三角形:11121133114641151010511615201561172135352171杨辉三角形是二项展开式(a+b)n的系数,共有n+1项,n=0,1,…。杨辉三角形在数学上具有重要的意义,在高中阶段已学过,系数是按照公式:am=,其中am是展开式中的第m项系数。5.编写一个程序,包括主函数和如下子函数。(1)输入10个无序的整数;(2)用起泡方法从大到小排序;(3)要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。分析:input函数完成10个整数的录入。sort函数完成起泡法排序,search函数完成输入数的查找。返回C语言首页C语言手机铃声最新手机铃声手机铃声排行榜手机来电铃声短信铃声匚语言实验九文件目的与要求】.掌握文件和文件指针的概念以及文件的定义方法。.了解文件打开和关闭的概念和方法。.掌握有关文件的函数。【上机内容】【一般示例】【例1】对data,dat文件写入100条记录。ttinclude<stdio.h>main(){FILE*fp;inti;floatx;fp=fopen("date,dat","w");for(i=l;i<=100;i++){scanf&x);fprintf(fp,/,%f\n,/,x);}fclose(fp);)【例2】设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为:每人一行,成绩间由逗号分隔。计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。#include<stdio.h>niain(){FILE*fp;intnum;float,x,y,z,si,s2,s3;fp-fopen("cj.dat","r");{fscanf(fp,"%f,%f,%f",&x,&y,&z);sl=sl+x;s2-s2+y;s3=s3+z;if((x+y+z)/3>=90)num-num+1;}printf("分数高于90的人数为:%.2d",num);fclose(fp);【例3]统计上题cj.dat文件中每个学生的总成绩,并将原有数据和计算出的总分数存放在磁盘文件“stud”中。#include"stdio.h〃main()(FILE*fpl,*fp2;floatx,y,z;fpl=fopen(z,cj.dat〃,〃r〃);fp2=fopen("stud","w");while(!feof(fpl)){fscanf(fpl,z,%f,%f,%f〃,&x,&y,&z);printf(〃%f,%f,%f,%f\n〃,x,y,z,x+y+z);fprintf(fp2,"%f,%f,%f,x,y,z,x+y+z);fclose(fpl);fclose(fp2);}【作业】.有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件ustu_sortn中。返回C语言首页C语言手机铃声最新手机铃声手机铃声排行榜手机来电铃声短信铃声匚语言实验十综合练习【目的与要求】.要求学生能够运用所学过的基础语法知识和基本编程技能进行综合练习。.独立完成3套模拟试题。【上机内容】模拟试题一一、选择题(每题1分共15分).设x,y为float型变量,则下列()为不合适的赋值语句A++x;By=(float)3;Cx=y=0;Dx*=y+8;.若x为int变量,则执行下列语句x的值为()x=65535;printf("%d\n",x);A65535B1C无定值D-1.下面()不正确的转义符()A<\t,B'\a'C1081'D<\n,.在C语言中,char类数据在内存中是以()形式存储的A原码B反码C补码DASCII码.以下变量名()是合法的。AbreakB$123Clotus_2_3D<temp>.判断char型变量cl是否为小写字符的最简单且正确的表达式()。A'a'<=cl<=,z'B(cl<=a)&&(cl<=z)C(<a,<=cl)&&( >=cl)D(cl>=,a')&&(cl<='z').在C语言中,int,char,float所占用的内存。A均为2个字节B由用户自己定义CPC机为2,1,4D2,2,4有说明intx,y,下面程序()不能实现以下函数关系-1x<0y=0x=01x>0Aif(x<0)y=l;elseif(x==0)y=O;elsey=l;By=-l;if(x!=0)if(x>0)y=l;elsey=0;Cy=0;if(x>=0){if(x>0)y=l;}elsey=-l;Dif(x>=0)if(x>0)y=l;elsey=0;elsey=-l;.while(!x)中(!x)与下面条件()等价Ax==0Bx==1Cx!=lDx!=0.以下不是无限循环的语句为()oAfor(y=0,x=l;x>=++y;x++);Bfor(;;x++);Cwhile(1){x++;}Dfor(i=10;;i-)sum+=i;.若有以下语句,则下面()是正确的描述。Charx口=”12345”;Chary[]={T,'2','3','4','5'};Ax,y完全相同。Bx,y不相同。Cx数组长度小于y数组长度。Dx,y字符串长度相等。.为了判断两个字符串si和s2是否相等,应当使用()oAif(sl==s2)Bif(sl=s2)Cif(strcpy(si,s2))Dif(strcmp(sl,s2)==0).C程序中函数返回值的类型是由()决定。Areturn语句中的表达式类型。B调用该函数的主调函数类型。C调用函数时临时决定。D定义函数时所指定的函数类型。若intt,a=5,b=6,w=l,x=2,y=3,z=4,则经过t=(a=w>x)&&(b=y>z)计算后变量t,a,b的值分别为()A0,0,0B0,0,6C1,0,0D1,0,615如果变量grade的值为1,则运行下列程序段后输出结果为()switch(grade){case1:printf("a\n");case2:printf("b\n");case3:printf("c'n");)AaBabcCabcDab写出下列程序的运行结果(每题3分,共15分)main()inti,j,k;charspace='for(i=0;i<=5;i++){for(j=i;j〈=i;j++)printf("%c”,space);for(k=0;k<=5;k++)printf("%c",,*');printf(“\n”);))main()(intn=0;while(n++<=2)printf("%d\t",n);printf("%d\n",n);main()(inta[3][3]={1,2,3,4,5,6,7,8,9};inti,j,t;for(i=0;i<3;i++)for(j=0;j<3;j++){t=a[i][j];a[i][j]=a[j]⑴;a[j][i]=t;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");#include“string,h”main()charstringl[20]=^abed”;charstring2口=”\\cd\t”;strcat(stringl,string2);printf(,strlen(stringl));main()intcount,sum,x;count=sum=0;do{scanf("%d",&x);if(x%2!=0)continue;count++;sum+=x;}while(count<5);printf("sum=%d”,sum);)假设输入的数据为:36-291011812)三编程(共70分).编写一个程序,输入一个字符串,按反序存放后再输出该字符串。(10分).写一个程序,能分别统计出从键盘上输入的字符串中小写字符的个数、数字字符的个数和其他字符的个数。输入的字符串以“!”作为结束标记。(10分).编写一个求4个数中的最大数(要求用函数实现求最大数)。(10分).青年歌手参加歌曲大奖赛,有5个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。(13分).编程求3~100之间所有的素数及其个数。(12分).已知在一个ASCH“stud.dat”中,有10个学生的记录,每条记录有4项数据,第1项为学号(int型),第2、3、4项为成绩(float型),编写一个程序从该文件中将这些学生的数据读出来,计算每个人的平均成绩,然后在将原有数据和计算出的平均成绩写到另外一个ASCII“aver.dat”中。(15分)模拟试题二一、选择题(每题2分共26分).以下几个语句执行后i,j,k的值分别为()inti,j,k;i=j=0;k=l;if(i>j?(j—):(i—))k++;A1,9,1B1,0,2C-1,0,1D0,0,2.inti=0,j=0;inta=2,b=4,c=5,d=6;表达式(i=a-b)&&(j=c-d)的结果是()C-2D-1.若给定条件表达式(m)?(a++):(a-),则表达式m()A等价于(m==0)B等价于(m==l)C等价于于!=0)D等价于于!=1)4下列程序运行结束后,n的值为()n=2;do{n=n+n;n一;}while(n<20);A21B22C33D24.已知数组a[3][4],若给赋值5,下列操作正确的是()Aa=5B*a[l]=5Ca[2]={0,5,3,4}D*(a[l]+2)=5.文件包含的含义是指()A定义常量B定义变量C引入已说明的函数D引入标准函数.以下变量命名合法的是()AM.johnB$123Clotusl_2_3D<temp>.下面关于“A”的说法正确的是()A它代表一个字符常量B它代表一个字符串常量C它代表一个字符aD它代表一个变量.以下语句执行后变量c的结果是()inta=7,b=2;floatc;c=a/b;A3.5B3C3.0D1.设定如下变量,则表达式5+'b'+i*f-d/e-匕'的结果是()floatf;doubled;longinte;A浮点型B长整型C整型D双精型.以下不正确的定义语句是()Adoublex[5]={2.0,4.0,6.0,8.0,9.0};Binty=[5]={0,1,3,5,7,9};Ccharcl[]={T,'2','3','4','5'};Dcharc2[]={'\xl0','\xl','\x8'};.指出哪一个不是C语言的赋值语句()Ainta=l,b=3;Bi++;Ca=b=5;Dy=int(i);.以下哪一个是无限循环的语句为()oAfor(y=0,x=0;x>=++y;x++);Bfor(x=l;;x++);Ci=15;while(x>10){x一一;}Dfor(i=10;i>5;i--)sum+=i;二.写出下列程序的运行结果(每题3分,共15分)ttinclude"stdio.h"main()(inti;for(i=l;i<=5;i++){if(i%2)printf("*");elsecontinue;printf("#");printf("$\n");main()inti;voidfunction(void);for(i=0;i<3;i++)function();}voidfunction(void)(inti=l,j=l;staticintk=l;i++;j++;k++;printf("%d,%d,%d”,i,j,k);floatx=l.0,y=2.0,z;main()(doublefun(void);z=fun();printf("%f,%f,%f\n”,x,y,z);)doublefun(void)(inty,z;x=y=z=3.0;return(x+y+z);ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《仪器分析实验》大学教材笔记
- 为支撑引领新型工业化蓄势赋能
- 高中化学知识点归纳与分类突破:综合实验设计与评价
- 2024年高考化学二轮复习:离子反应(练习)
- 公司周年方案策划5篇
- 暑假实习小结(4篇)
- 开学安全第一课心得体会300字(31篇)
- 广告公司劳务合同范例9篇
- 心理健康教育培训心得体会
- 庆祝国庆节75周年领导致辞(3篇)
- 《道德与法治》三年级学情分析
- 校园禁烟承诺书(12篇)
- 国家开放大学《计算机网络》课程实验报告实验六-计算机网络综合性实-
- 学校教育统计工作计划方案
- 二十世纪中国文学经典与电影-知到答案、智慧树答案
- 湘少版英语五年级下册全册教案(教学设计)
- 缺血性心肌病
- 1960年文教群英会表彰名单
- 体育教师生涯发展展示
- 老旧小区物业管理方案
- 2021新教科版科学三年级上册教案全册,含教学反思
评论
0/150
提交评论