实验一 C语言的运行环境和运行过程
实验一 C语言的运行环境和运行过程
【目的与要求】
1(了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使
用该系统。
2(了解在该系统上如何编辑、编译、连接和运行一个C程序。
3(通过运行简单的C程序,初步了解C源程序的特点。
【上机内容】
【基础知识】
通过课堂上学习,我们对C语言已有了初步了解,对C语言源程序结构有了总体的认识,那么如何在机器上运行C语言源程序呢,任何高级语言源程序都要“翻译”成机器语言,才能在机器上运行。“翻译”的方式有两种,一种是解释方式,即对源程序解释一句执行一句;另一种是编译方式,即先把源程序“翻译”成目标程序(用机器代码组成的程序),再经过连接装配后生成可执行文件,最后执行可执行文件而得到结果。
C语言是一种编译型的程序
语言,它采用编译的方式将源程序翻译成目的程序(机器代码)。运行一个C程序,从输入源程序开始,要经过编辑源程序文件(?C)、编译生成目标文件(?obj)、连接生成可执行文件(?exe)和执行四个步骤。
下面主要介绍Turbo C下运行C语言源程序。
Turbo C是美国Borland公司推出的IBM PC系列机的C语言编译程序。它具有方便、直观、易用的界面和丰富的库函数。它向用户提供了集成环境,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,使用十分方便。
1 Turbo C工作环境介绍
一个C语言程序的实施是从进入Turbo C的集成环境开始的,而进入C语言的环境,一般有两种途径:从DOS环境进入和从Windows环境进入。
(1) 从DOS环境进入:
在DOS命令行上键入:
C>CD \TC?(指定当前目录为TC子目录)
C>TC? (进入Turbo C环境)
这时进入Turbo C集成环境的主菜单窗口,屏幕显示如下图所示。
(2) 从Windows环境进入:
在Windows 95/98环境中,如果本机中已安装了Turbo C,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。或者从开始菜单中找到“运行”,在运行对话框中键入“C:\TC\TC”,“确定”即可。
需要说明的是,以上两种方式有一个共同的前提,即Turbo C的安装路径为C:\TC,如果你的计算机中Turbo C的安装路径不同的话,在上述方式中改变相应路径即可。
刚进入TC环境时,光带覆盖在“File”上,整个屏幕由四部分组成,依次为:主菜单、编辑窗口、信息窗口和功能提示行(或称快速参考行)。
? 主菜单
显示屏的顶部是主菜单条,它提供了8个选择项:
File 处理文件(装入、存盘、选择、建立、换名存盘、写盘),目录操作(列表、改变工作目录),
退出Turbo C,返回DOS状态。
Edit 建立、编辑源文件。
Run 自动编辑、连接并运行程序。
Compile 编辑、生成目标文件组合成工作文件。
Project 将多个源文件和目标文件组合成工作文件。
Option 提供集成环境下的多种选择和设置(如设置存储模式、选择编参数、诊断及连接任选项)以及
定义宏;也可记录Include、Output及Library文件目录,保存编译任选项和从配置文件加载任选项。
Debug 检查、改变变量的值、查找函数,程序运行时查看调用栈。选择程序编译时是否在执行代码中
插入调试信息。
Break/Watch 增加、删除、编辑监视表达式,及设置、清除、执行至断点。
在主菜单中,Edit选项仅仅是一条进入编辑器的命令。其他选项均为下拉式菜单,包含许多命令选项,使
用方向键移动光带来选择某个选项时,按回车键,表示执行该命令,若屏幕上弹出一个下拉菜单,以提供
进一步选择。
? 编辑窗口
编辑窗口是在主菜单下,信息窗口之上的区域,其顶行中间有“Edit”标志。在此窗口中可以建立、编辑一个源文件。功能键F5可以扩大编辑窗口到整个屏幕,或恢复分屏式环境。
进入编辑窗口的方式有两种:
(A)按F10功能键,激活主菜单,然后用光标移动键将光带移到“Edit”上,按回车键,或者在激活主菜单后直接按字母键E,均可进入编辑窗口;
(B)按Alt+E无条件的进入编辑窗口。
进入编辑窗口后,编辑窗口的名字是高亮度的,表示它是活动窗口。窗口的顶部第一行是状态行,给出有关正在被编辑文件的信息,如当前光标所在的行、列;编辑模式(插入/改写);正在编辑文件的文件名等等,当需要编辑修改时,在编辑窗口中灵活地使用光标移动键以及编辑命令即可达到预期的效果。常用的编辑命令见下表:
命令 功能
Home 将光标移到行首
End 将光标移到行尾
Ins 插入/改写两种状态的切换
Del 删除光标所在的字符
PgUp 向上翻页正文
PgDn 向下翻页正文
? ? 光标左右移动
? ? 删除光标所在的行
Ctrl+Y 删除光标所指的一个单词
Ctrl+T 放弃操作
Ctrl+U 删除光标左边字符
Backspac 设置(开始)块头标志
Ctrl+KB 设置(结尾)块尾标志
Ctrl+KK 块搬动到光标处
Ctrl+KV 块拷贝到光标处
Ctrl+KC 块删除
取消块定义 Ctrl+KY
Ctrl+KH
在插入模式下(用Ins键转换)向编辑窗口内输入代码,按回车键结束一行(TC编辑器不能自动换行)。一行最多为248个字符,窗口宽77列,当一行内字符多于77列时,窗口随着字符的输入而左右移动,若发现有错误,可移动光标到出错处更正之;再按一次Ins键,屏幕转换成为替换模式,输入的字符将替换光标所在位置的字符。
? 信息窗口
编译和调试源程序时,信息窗口显示诊断信息、警告、出错信息、错误在源程序中的位置。功能键F5可以扩大和恢复信息窗口,按F6或Alt+E,光标从信息窗口跳到编辑窗口。
? 功能键提示行
屏幕低行是功能键提示行,显示当前状态下功能键(俗称Turbo C热键)的作用,见下表。应当注意,在不同状态下功能键的作用是不同的。正确使用功能键可以简化操作。
热键 简单说明
F1 Help,以分页的形式显示帮助信息
F2 保存当前正在编辑窗口中的文件
装入一个文件。按F3,屏幕上弹出一个输入框,F3
输入要装入的文件名
Zoom,缩放活动窗口
F5
Switch,活动窗口开关,按F6键,光标从编辑
F6 窗口跳到信息窗口,或从信息窗口跳到编辑窗口
Trace,跟踪到函数中
F7 Step,单步跟踪,但不进入函数内部
F8 Make,对当前文档进行编辑、连接
F9 Menu,激活主菜单,光标跳到主菜单
F10
2 Turbo C环境中运行C语言源程序的步骤
(1) 编辑源文件
在主菜单下,直接按Alt+F键,或按F10后将光带移到“File”选项上,按回车键,在“File”下面出现一个下拉菜单,菜单中有以下选项:
Load F3 表示加载或装入一个文件
Pick Alt+F3 从指定的文件列表中选择文件装入编辑器。
New 表示新文件,缺省文件名为NONAME.C。
Save F2 将正在编辑的文件存盘。
Write to 将正在编辑的文件写入指定的文件中,若文件名已存在,则重写。
Directory 表示文件目录。
Change Dir 改变驱动器及目录
OS shell 进入Turbo C命令行模式,命令EXIT可返回集成环境
Quit Alt+x 退出Turbo C,返回DOS状态。
建立一个新文件,可用光标移动键将“File”菜单中的光带移到“New”处,按回车键,即可打开编辑窗口。此时,编辑窗口是空白的,光标位于编辑窗口的左上角,屏幕自动处于插入模式,可以输入源程序。屏幕右上角显示缺省文件名为NONAME.C,编辑完成之后,可用F2或选择“Save”或“Write to”进行存盘操作,此时系统将提示用户将文件名修改成为所需要的文件名。
(2) 源程序的编译、连接
直接按F9键,或将菜单“Compile”中的光带移到“Make EXE file”项上,按回车键,就可实现对源程序的编译、连接。若有错误,则在信息窗口显示出相应的信息或警告,按任意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。修改后,再按F9键进行编辑、连接。如此反复,直到没有错误为止,即可生成可执行文件。
注意:C程序的连接是在编译后自动完成的。
(3) 执行程序
直接按Ctrl+F9键,即可执行.EXE文件;或在主菜单中(按F10进入主菜单)将光带移到“Run”选项,按回车键,弹出一个菜单,选择“Run”选项,回车。
这时并不能直接看到输出结果。输出结果是显示在用户屏幕上,在TC屏幕上看不到,直接按复合键Alt+F5,或选择“Run”菜单中的“User Screen”选项,即可出现用户屏幕,查看输出结果。按任意键返回TC集成环境。
另外,选择“Run”菜单下的“Run”项,或直接按Ctrl+F9键,可将C程序的编译、连接、运行一次性完成,即第3步中包含有第2步的工作。
如果程序需要输入数据,则在运行程序后,光标停留在用户屏幕上,要求在用户输入数据,数据输入完成后程序继续运行,直至输出结果。
如果运行结果不正确或其他原因需要重新修改源程序,则需重新进入编辑状态。修改源程序,重复以上步骤,直到结果正确为止。
(4) 退出Turbo C集成环境
退出Turbo C环境,返回操作系统状态。可在主菜单选择“File”菜单的“Quit”选项,或者直接按Alt+x。 在执行退出Turbo C环境时,系统将检查一下当前编辑窗口的程序是否已经存盘,若未存盘,系统将弹出一个提示窗口,提示是否将文件存盘,若按“Y”则将当前窗口内的文件存盘后退出;若按“N”则不存盘退出。
【一般示例】
【例1】编程实现在屏幕上显示如下三行文字
Hello, world !
Wolcome to the C language world!
Everyone has been waiting for.
在Turbo C的集成环境下,键入如下源文件。敲Alt+F组合键打开File菜单,File菜单中Write to选项可将默认noname.c文件名改为任意文件名。程序example.c如下:
main()
{
printf("Hello,World!\n");
printf("Wolcome to the C language world!\n"); printf("Everyone has been waiting for.\n"); }
然后用Ctrl+F9编辑执行example.c,用Alt+F5查看结果,即在屏幕上显示题目要求的三行文字。按回车键
重新返回Turbo C的编辑环境。注意,在运行程序之前最好先存盘。
【例2】输入并运行程序,写出运行结果。 main()
{
int a,b,sum;
a=123;b=456;
sum=a+b;
printf(“sum is %d\n”,sum);
}
运行方法同上,最后结果为:sum is 579。 【例3】
输入并运行程序,写出运行结果。
main()
{
int a,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d”,c);
}
int max(int x,int y)
{
int z;
if (x>y) z=x;
else z=y;
return(z);
}
这个程序的功能是对于任意输入的两个整数,输出较大的那个数。所以程序运行之后,光标将停留在用户屏幕
上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5”。
【作业】
1(输入并运行例题中程序,熟悉调试C程序的的方法与步骤。 2(写出一个C程序的构成。
3(参照例题,编写一个C程序,输出以下信息:
****************************
Hello,World~
****************************
4(编写一个C程序,输入a、b、c三个数,输出其中最大者。试想,如果求四个数中的最大者,则程序该如
何编写。
返回C语言首页
C语言 手机铃声 最新手机铃声 手机铃声排行榜 手机来电铃声 短信铃声
实验二 C语言的基础知识 【目的与要求】
1(掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以
上类型数据输出时所用的格式转换符。
2(学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算
符的使用。
3(进一步熟悉C程序的编辑、编译、连接和运行的过程。
【上机内容】
【一般示例】
【例1】输入并运行下程序,写出运行结果。
mian()
{
char c1 , c2;
c1=97;c2=98;
printf(“%c %c”, c1, c2);
}
在此基础上
1)加一个printf语句,并运行之。
printf(“%d,%d”, c1, c2 );
2)再将第二行改为:
int c1, c2;
再使之运行。
3)再将第三行改为:
c1=300; c2=400;
再使之运行,分析其运行结果。
在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。
【例2】分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
main()
{
char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’; printf(“a%c b%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c %c”,c4,c5);
}
在该程序中,主要考查对转义字符的掌握情况。 【例3】
分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
main()
{
int i , 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()
{
int i , j ;
i=8; j=10;
printf(“%d,%d”, i++, j++); }
3)在2)的基础上,将printf语句改为: printf(“%d,%d”, ++ i, ++ j ); 4)再将printf语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
5)程序改为:
main()
{
int i , 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);
}
此程序主要考查自加、自减运算符以及复合运算符的用法。
【作业】
1(要讲“China”译成密码,密码规律是:用原来的字母后面第5个字母代替原来的字母。例如,字母“A”
后面第5个是“F”,用“F”代替“A”。因此,“China”应译为“Hmnsf”。请编一程序,用赋初值的方法
使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使其分别变
为’H’、’m’、’n’、’s’、’f’,并输出。
2(求下面算术表达式的值。
(1)x+a%3*(x+y)%2/4
设x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
先自己分析,再试着用程序求解,看得到的结果是否一致。
3(写出下面表达式运算后a的值,设原来a=10。设a和n已定义成整型变量。 (1)a+=a (2)a-=2
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a
先自己分析,再试着用程序求解,看得到的结果是否一致。
返回C语言首页
C语言 手机铃声 最新手
实验三 简单的C程序设计
【目的与要求】
1(理解C语言程序的顺序结构
2(掌握常用的C语言语句,熟练应用赋值、输入、输出语句。
【上机内容】
【一般实例】
【例1】按格式要求输入/输出数据
#include "stdio.h"
main()
{
int a,b;
flost x,y;
char c1,c2;
scanf(“a=%d,b=%d”,&a,&b);
scanf(“%f, %e”,&x,&y);
scanf(“&c &c”,&c1,&c2);
printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”,a,b,x,y,c1,c2);
}
运行该程序,必须按如下方式在键盘上输入数据
a=3,b=7 ?
8.5,71.82 ?
a A ?
请同学们写出输出结果
【例2】输入三角形三边长,求三角形面积。 #include “math.h”
main()
{
float a,b,c,s,area;
scanf(“%f ,%f,%f”,&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%f”,area); }
【例3】已知圆半径,圆柱高,求圆周长,圆柱体积。
main()
{
float r,h,l,v,pi;
pi=3.1415926;
scanf(“%f,%f”,&r,&h);
l=2*pi*r;
v=pi*r*r*h;
printf(“圆周长为:%6.2f\n”,l);
printf(“%圆柱体积为:6.2f”,v);
}
【例4】输入一个摄氏温度,要求输出华氏温度。公式为f=5/9*c+32. main()
{
float c,f;
scanf(“%f”,&c);
f=5.0/9*c+32;
printf(“%5.2f\n”,c);
}
【作业】
1. 已知圆半径r=1.5,圆柱高h=3, 求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
2. 输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32).
实验四 选择结构程序设计 【目的与要求】
1(了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);
2(学会正确使用逻辑运算符和逻辑表达式;
3( 熟练掌握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()
{
int a,b,c,max; /*定义四个整型变量*/
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
if (a>=b)
max=a; /*a>=b*/
else
max=b; /*a
max)
max=c; /*c是最大值*/
printf("max=%d",max);
}
若输入下列数据,分析程序的执行顺序并写出运行结果 (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=2
【例2】输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90): A
80至90分(包括80):B
70至80分(包括70):C
60至70分(包括60):D
60分以下: E
方法一:(用if嵌套`)
分析:
由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大
于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成
绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判
断输入的成绩是否在0~100之间。
#include"stdio.h"
main()
{
int score;
char grade;
printf("\nplease input a student score:");
scanf("%f",&score);
if(score>100||score<0)
printf("\ninput error!");
else
{ 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("\nthe student grade:%c",grade);
}
}
输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小
于0和大于100的数据。
方法二:用switch语句
分析:
switch 语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch
语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同
特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。
#include"stdio.h"
main()
{
int g,s;
char ch;
printf("\ninput a student grade:");
scanf("%d",&g);
s=g/10;
if(s<0||s>10)
printf("\ninput error!");
else
{ switch (s)
{ case 10:
case 9: ch='A'; break;
case 8: ch='B'; break;
case 7: ch='C'; break;
case 6: ch='D'; break;
default: ch='E';
}
printf("\nthe student scort:%c",ch);
}
}
输入测试数据,同方法一一样调试程序并写出结果。 【例3】有一函数:
x x<1
y= 2x-1 1==10
用scanf函数输入x的值(分别为x<1,1~10,>=10三种情况),求y值。
分析:y是一个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。
main()
{
int x,y;
printf(“please input x :”);
scanf(“%d”,&x);
if (x<1)
{
y=x;
printf(“y=%d\n”,y); }
else if (x<10)
{
y=2*x-1;
printf(“y=%d\n”,y); }
else
{
y=3*x-11;
printf(“y=%d\n”,y); }
【作业】
1. c语言如何表示“真”与“假”,系统如何判断一个量的“真”与“假”,
2. 写出下面各逻辑表达式的值。设a=3,b=4,c=5
(1) a+b>c&&b= =c
(2) a||b+c&&b-c
(3) ~(a>b)&&!c||1
(4) !(x=a)&&(y=b)&&0
(5) !(a+b)+c-1&&b+c/2 3. 有3个整数a、b、c,由键盘输入,输出其中最大的数。
4(有一函数:
x x<1
y= 2x-1 1==10
写一程序,输入x, 输出y。
5(给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80~89为B, 70~79分为C,60~69
分为D,60分以下为E。
6( 给一个不多于5位的正整数,要求:
a. 求出它是几位数;
b. 分别打出每一位数字;
c. 按逆序打出各位数字,例如原数为321,应输出123。 7(输入4个整数,要求按由小到大的顺序输出。
实验五 循环结构程序设计 【目的与要求】
熟练掌握while、do—while和for三种循环语句的应用。 【上机内容】
【一般示例】 【例1】求5~ main()
{
int n,t;
n=1;
t=1;
while(t<=5) {
n=n*t;
t=t+1;
}
printf(“%d”,n);
}
【例2】求和s=1!+2!+3!
main()
{
int n,s=0,t=1; for(n=1;n<=3;n++) {
t=t*n;
s=s+t;
}
printf(“%d”,s); }
【例3】求和s=1!+3!+5!
main()
{
int s=0,t,i,j; for(i=1;i<=3;i++)
{
t=1;
for(j=1;j<=2*i-1;j++)
t=t*j;
s=s+t;
}
printf(“%d”,s); }
【例4】求和s= 3+33+333
main()
{
int s=0,t=3,i; for(i=1;i<=3;i++) {
s=s+t;
t=10*t+3;
}
printf(“%d”,s); }
【例5】有一数列:2/1,3/2,5/3,8/5,„求出这个数列的前10项之和。
main()
{
int n,t,;
float a=2,b=1,s=0; for(n=1;n<=10;n++) {
s=s+a/b;
t=a;
a=a+b;
b=t;
}
printf(“%f”,s); }
【例6】打印500以内的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数本身。
main()
{
int i,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(“ %d”,n); }
}
【例7】一个数如果恰好等于它的因子之和,这个数就称为完数。求100之内的所有完数。
main()
{
int n,s,j;
for(n=1;n<=100;n++) {
s=0;
for(j=1;jn);其次,算法:使
k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替
n,n代替m,重复以上过程,直到k值为0。 #include"stdio.h"
main()
{
int m,n,k,result;
printf("Enter two numbers:");
scanf("%d,%d",&m,&n);
if(m>0&&n>0) /*限定两个正整数*/ {
do
{
k=n%m;
if(k= =0)
result=m;
else
{
n=m;
m=k;
}
}while(k>0); /*循环取余求出最大公因子*/ printf("The greatest common divistor is:%d\n",result); }
else printf("Nonpositive values not allowed\n"); }
【例2】用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。 #include “math.h”
main()
{
float x,x0,f,f1; x=1.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)>=1e-5); printf(“%6.2f”,x); }
【例3】打印下列图案 *
***
*****
*******
main()
{ int i,j;
for(i=1; i<=4;i++) {for(j=1;j<= 4-i;j++) printf(“ ”);
for(j=1;j<=2*i-1;j++) printf(“*”);
printf(“\n”);
}
}
【例4】判断m是否是素数。 程序:
#include main()
{
int m,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(“%d is a prime number\n”,m); else
printf(“%d is not a prime number\n”,m); }
【作业】
1(输入两个正整数m和n,求其最大公约数和最小公倍数。
2(求Sn=a+aa+aaa+„+aa„a 之值,其中a是一个数字。例如:2+22+222+2222+22222(此时n=5),
n由键盘输入。
3(求和1~+2~+3~+4~+„20~
4( 打印100-999之间所有的“水仙花数”。“水仙花数”是一个三位数,其各位数立方和等于该数
本身。
5( 一个数如果恰好等于它的因子之和,这个数就称为完数。求1000之内的所有完数。
6( 有一数列:2/1,3/2,5/3,8/5,„求出这个数列的前20项之和。 7( 用迭代法求x= ?a 。求平方根的迭公式为
xn+1=1/2(xn+a/xn)
要求前后两次求出的x的差的绝对值小于10-5
8( 用牛顿迭代求方程2x3-4x2+3x-6=0在1.5附近的根。 9( 打印下列图案
*
***
*****
***
*
机铃声
实验六 一维数组 【目的与要求】
1(掌握一维数组的定义、赋值和输入输出的方法;
2(掌握字符数组的使用;
3(掌握与数组有关的算法(例如排序算法)。
【上机内容】
【一般示例】
【例1】在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。 分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参
考。
方法一:起泡排序
从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换
位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直
到第(N-1)遍比较后就可以完成排序。 源程序如下:
#define N 10
#include"stdio.h"
main()
{
int a[N],i,j,temp;
printf("please input %d numbers\n",N); for(i=0;ia[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
printf("the array after sort:\n"); for(i=0;ia[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");
}
【例3】输入一串字符,计算其中空格的个数。
#include
main( )
{char c[30];
int i,sum=0;
gets(c);
for(i=0;imax) {max= a[i][j]; r=i;
c=j;
}
printf(“max=%d , row =%d , colum=%d \n”,max , r, c);
}
【例2】打印以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
main()
{char a[5]={' * ' , ' * ' , ' * ' , ' * ' , ' * '};
int i,j,k;
char space=' ';
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个*号*/ }
}
【例3】求矩阵下三角形元素之和。 #define N 6
main()
{int i,j,sum=0;
int a[N][N]={0};
printf("input 5×5 data:\n");
for(i=1;iv)
{
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)
int u,v,h;
{
return(u*v/h); }
main()
{
int u,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); }
这是一个十分典型的算法,同学们一定要认真分析、学习。
【例2】写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。
源程序如下:
/*起泡法排序*/
#define N 10
char str[N];
main()
{
int i,flag;
for (flag=1; flag = =1;) {
printf(“\n输入字符串,长度为10:\n”);
scanf(“%s”,&str);
if (strlen(str)>N)
printf(“超过长度,请重输~”); else
flag = 0;
}
sort(str);
printf(“\n排序结果:”): for (i=0;istr[i+1])
{
t=str[i]; str[i]=str[i+1]; str[i+1]=t; }
}
【例3】用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。求x在1附
近的一个实根。求出根后,由主函数输出。
源程序如下:
/*牛顿迭代法解方程*/ #include “math.h” float solut(a,b,c,d) float a,b,c,d;
{
float x=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()
{
float a,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(上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。 main()
{
int x,y;
printf("%d\n",sum(x+y));
int sum(a,b);
{
int a,b;
return(a+b);
}
}
2(定义一个函数,功能是计算n个学生的成绩中,高于平均成绩的人数,并作为函数值。用主函数来调用它,统计50个学生成绩中,高于平均成绩的有多少人,
3(编写一个对n个数据从大到小的排序C函数,再编写一个计算最后得分的C函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为参赛选手的最后得分。并在主函数中调用它们对有n个评委评分,m个选手参赛的最后得分,从大到小排序输出。
4(编写一个计算n!的函数,用主函数调用它,使之输出7阶杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
杨辉三角形是二项展开式(a+b)n的系数,共有n+1项,n=0,1,„。杨辉三角形在数学上具有重要的意义,在高中阶段已学过,系数是按照公式:am= ,其中am是展开式中的第m项系数。 5(编写一个程序,包括主函数和如下子函数。
(1) 输入10个无序的整数;
(2) 用起泡方法从大到小排序;
(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。
分析:input函数完成10个整数的录入。sort函数完成起泡法排序,search函数完成输入数的查找。
返回C语言首页
C语言 手机铃声 最新手机铃声 手机铃声排行榜 手机来电铃声 短信铃声
实验九 文件 目的与要求】
1(掌握文件和文件指针的概念以及文件的定义方法。 2(了解文件打开和关闭的概念和方法。
3(掌握有关文件的函数。
【上机内容】
【一般示例】
【例1】对data.dat文件写入100条记录。
#include
main()
{FILE *fp;
int i;
float x;
fp=fopen("date.dat","w"); for(i=1;i<=100;i++)
{scanf("%f",&x);
fprintf(fp,"%f\n",x); }
fclose(fp);
}
【例2】设有一文件cj.dat存放了50个人的成绩(英语、计算机、数学),存放格式为:每人一行,
成绩间由逗号分隔。计算三门课平均成绩,统计个人平均成绩大于或等于90分的学生人数。
#include
main()
{FILE *fp;
int num;
float x , y , z , s1 , s2 , s3 ; fp=fopen ("cj.dat","r");
{fscanf (fp,"%f,%f,%f",&x,&y,&z); s1=s1+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 *fp1,*fp2;
float x,y,z;
fp1=fopen("cj.dat","r");
fp2=fopen("stud","w");
while(!feof(fp1))
{
fscanf (fp1,"%f,%f,%f",&x,&y,&z); printf("%f,%f,%f,%f\n",x,y,z,x+y+z); fprintf(fp2,"%f,%f,%f,%f\n",x,y,z,x+y+z);
}
fclose(fp1);
fclose(fp2);
}
【作业】
1. 有 5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。 2. 将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu_sort”中。
返回C语言首页
C语言 手机铃声 最新手机铃声 手机铃声排行榜 手机来电铃声 短信铃声
实验十 综合练习
【目的与要求】
1(要求学生能够运用所学过的基础语法知识和基本编程技能进行综合练习。 2(独立完成3套模拟试题。
【上机内容】
模拟试题一 一、选择题(每题1分 共15分)
1(设x,y为float型变量,则下列()为不合适的赋值语句 A ++x; B y=(float)3;
C x=y=0; D x*=y+8;
2(若x为int 变量,则执行下列语句x的值为() x=65535;
printf(“%d\n”,x);
A 65535 B 1
C 无定值 D -1
3(下面()不正确的转义符()
A ‘\t’ B ‘\a’
C ‘\081’ D ‘\n’
4(在C语言中,char类数据在内存中是以()形式存储的 A原码 B反码
C 补码 D ASCII码
5(以下变量名()是合法的。
A break B $123
C lotus_2_3 D
6(判断char型变量c1是否为小写字符的最简单且正确的表达式()。 A ‘a’<=c1<=’z ‘ B (c1<=a)&&(c1<=z)
C (‘a’<=c1)&&(‘z’>=c1) D (c1>=’a’)&&(c1<=’z’) 7(在C语言中,int,char,float所占用的内存。 A 均为2个字节 B 由用户自己定义 C PC 机为2,1,4 D 2,2,4 8(. 若有说明int x,y,下面程序()不能实现以下函数关系
-1 x<0
y= 0 x=0
1 x>0
A if (x<0) y=-1;else if (x==0) y=0;else y=1; B y=-1; if (x!=0) if (x>0) y=1;else y=0;
C y=0; if (x>=0) { if (x>0) y=1;} else y=-1; D if (x>=0) if (x>0) y=1;else y=0; else y=-1; 9(while (!x)中(!x)与下面条件()等价 A x= =0 B x= =1
C x!=1 D x!=0
10( 以下不是无限循环的语句为()。 A for (y=0,x=1;x>=++y;x++);
B for (;;x++);
C while (1) { x++;}
D for (i=10;;i--) sum+=i;
11( 若有以下语句,则下面()是正确的描述。 Char x[]=”12345”;
Char y[]={‘1’,’2’,’3’,’4’,’5’}; A x,y完全相同。
B x,y不相同。
C x数组长度小于y数组长度。
D x,y字符串长度相等。
12( 为了判断两个字符串s1 和s2是否相等,应当使用()。 A if (s1= =s2) B if (s1=s2)
C if (strcpy(s1,s2)) D if (strcmp(s1,s2)= =0)
13( C程序中函数返回值的类型是由()决定。 A return语句中的表达式类型。
B 调用该函数的主调函数类型。
C 调用函数时临时决定。
D 定义函数时所指定的函数类型。
14 若 int t, a=5,b=6,w=1,x=2,y=3,z=4,则经过 t=(a=w>x)&&(b=y>z)计算后变量t ,a, b的值分
别为()
A 0,0,0 B 0,0,6
C 1,0,0 D 1,0,6
15 如果变量grade的值为1, 则运行下列程序段后输出结果为() switch(grade)
{ case 1:printf(“a\n”); case 2:printf(“b\n”); case 3:printf(“c\n”); }
A a B a
b
c
C abc D ab
二(写出下列程序的运行结果(每题3分,共15分)
1( main()
{
int i,j,k;
char space=’ ‘;
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”); }
}
2(main()
{
int n=0;
while(n++<=2)
printf(“%d\t”,n); printf(“%d\n”,n); }
3( main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,t;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
for (i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf(“%4d ”,a[i][j]); printf(“\n”);
}
}
4( #include “string.h”
main()
{
char string1[20]=”abcd”; char string2[]=”\\cd\t”; strcat(string1,string2); printf(“%d”,strlen(string1)); }
5( main()
{
int count ,sum, x;
count=sum=0;
do { scanf(“%d”,&x); if (x%2!=0) continue; count++; sum+=x;
} while (count<5);
printf(“sum=%d”,sum);
}
假设输入的数据为:3 6 -2 9 10 11 8 12
}
三 编程(共70分)
1(编写一个程序,输入一个字符串,按反序存放后再输出该字符串。(10分) 2(写一个程序,能分别统计出从键盘上输入的字符串中小写字符的个数、数字字符的个数和其他字符的个数。输入的字符串以“~”作为结束标记。(10分)
3(编写一个求4个数中的最大数(要求用函数实现求最大数)。(10分)
4(青年歌手参加歌曲大奖赛,有5个评委对她的进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。(13分)
5(编程求3~100之间所有的素数及其个数 。(12分)
6(已知在一个ASCII“stud.dat”中,有10个学生的记录,每条记录有4项数据,第1项为学号(int型),第2、3、4项为成绩(float型),编写一个程序从该文件中将这些学生的数据读出来,计算每个人的平均成绩,然后在将原有数据和计算出的平均成绩写到另外一个ASCII“aver.dat”中。(15分)
模拟试题二 一、选择题(每题2分 共26分)
1( 以下几个语句执行后i,j,k的值分别为() int i,j,k;
i=j=0;
k=1;
if (i>j?(j--):(i--)) k++;
A 1,9,1 B 1,0,2
C -1,0,1 D 0,0,2
2( int i=0,j=0;
int a=2,b=4,c=5,d=6;
表达式(i=a-b)&&(j=c-d)的结果是() A 1 B 0
C -2 D -1
3(若给定条件表达式(m)?(a++):(a--),则表达式m()
A 等价于(m==0) B 等价于(m==1) C 等价于(m!=0) D 等价于(m!=1) 4 下列程序运行结束后,n的值为() n=2;
do { n=n+n;
n--;
} while (n<20);
A 21 B 22
C 33 D 24
5(已知数组a[3][4],若给a[1][2]赋值5 ,下列操作正确的是()
A a=5 B *a[1]=5
C a[2]={0,5,3,4} D *(a[1]+2)=5 6(文件包含的含义是指()
A 定义常量 B 定义变量
C 引入已说明的函数 D 引入标准函数
7(以下变量命名合法的是()
A M.john B $123
C lotus1_2_3 D
8(下面关于”A”的说法正确的是() A 它代表一个字符常量 B 它代表一个字符串常量
C 它代表一个字符a D 它代表一个变量 9(以下语句执行后变量c的结果是() int a=7,b=2;
float c;
c=a/b;
A 3.5 B 3
C 3.0 D 1
10( 设定如下变量,则表达式5+’b’+i*f-d/e-‘a’的结果是()
int i;
float f;
double d;
long int e;
A 浮点型 B 长整型
C 整型 D 双精型
11( 以下不正确的定义语句是() A double x[5]={2.0,4.0,6.0,8.0,9.0}; B int y=[5]={0,1,3,5,7,9};
C char c1[ ]={‘1’,’2’,’3’,’4’,’5’}; D char c2[ ]={‘\x10’,’\x1’,’\x8’}; 12(指出哪一个不是C语言的赋值语句() A int a=1,b=3; B i++;
C a=b=5; D y=int(i);
13( 以下哪一个是无限循环的语句为()。 A for (y=0,x=0;x>=++y;x++);
B for (x=1;;x++);
C i=15; while (x>10) { x--;} D for (i=10;i>5;i--) sum+=i; 二(写出下列程序的运行结果(每题3分,共15分)
1(#include “stdio.h” main()
{
int i;
for (i=1;i<=5;i++)
{ if (i%2) printf(“*”); else continue ;
printf(“#”);
}
printf(“$\n”);
}
2( main()
{
int i;
void function(void); for (i=0;i<3;i++) function();
}
void function(void) {
int i=1,j=1;
static int k=1;
i++;j++;k++;
printf(“%d,%d,%d”,i,j,k);
}
3( float x=1.0,y=2.0,z; main()
{
double fun(void); z=fun();
printf(“%f,%f,%f\n”,x,y,z);
}
double fun(void) {
int y,z;
x=y=z=3.0;
return(x+y+z); }
4(main()
{
int i=1,k=0;
while (i--) k=k+k;
printf(“k=%d\n”,k);
}
5(main()
{
int i,sum;
i=1;
for(sum=1;i<=5;i++,sum--)
sum*=sum;
printf(“%d”,sum);
}
三 编程(共59分)
1(设有一个字符串“This is a computer” ,请编程求字符“i”首次出现的位置。(8分)
2( 试编程求3*3二维数组中最大元素及其所在的行、列位置。(12分) 3(编写程序,计算并输出下面级数在求和过程中第一次出现和数大于999时的奇数项部分和OS2。(其
中^表示幂运算)
1*2-2*3+3*4-4*5+„„+(-1)^(n-1)*n*(n+1)+ „„(13分)
4(有一张由9个学生每人8个数据组成的二维数据表。编写程序,要求将学生的总成绩按降序(由大到小)排列,计算并输出总分第二名学生的平均成绩。(13分)
姓名 学号 年龄 政治 语文 数学 计算机 体育 总分
李明 1 19 81 89 99 98 87
张力 2 16 89 90 95 80 90
王英 3 17 91 77 88 95 78
赵锐 4 18 79 84 95 93 96
周密 5 15 95 92 98 99 93
吴川 6 17 78 88 85 86 80
孙康 7 14 91 85 94 82 88
郑重 8 15 90 92 94 90 95
胡琴 9 16 75 85 87 94 90
5(已知在正文文件da1.dat中,每个记录只有两项数据,第一项为一整数表示学生的学号,第二项为形如xx.x的一个实数,试统计计算并向文件t2.dat输出60分以上(含60分)的人数占总人数的比例R。(13分)
模拟试题三
一 选择题(每题2分 共20分)
1(下面关于”A”的说法正确的是() A 一个字符常量 B一个字符串常量 C 一个字符a D一个字符变量
2(使用字符串函数时,必须将()头文件包含在主程序中
A“stdio.h” B”string.h”
C “math.h” D”stdlib.h”
3(下面关于‘\\’的说法不正确的是() A转义字符 B起换行作用
C能用于输出语句 D也能用于打印机 4(C程序是由()构成
A数据文件 B文本文件
C 函数 D主函数和其他函数
5(下列关于函数的说法哪些是错误的()
A可以单独执行
B可以嵌套调用
C可以定义在主函数之前或之后
D数组可以作为函数的参数
6(一般情况下,C语言是以()表示运算结果为逻辑真。
A F B T
C 1 D 0
7(以下变量名()是合法的。
A continue B $123
C lotus_2_3 D
8(一个C语言程序总是从()开始执行的。 A 主过程 B主函数
C子函数 D按书写顺序
9(PC机中,C语言的int,char,float所占用的内存为()字节。
A 1, 2, 4 B 2,2,2
C 2,1,4 D 2,2,4
10. 若k为float型,则下列程序执行结果为()
k=2.0;
while (k!=0)
{printf(“%d”,k);
k--;}
printf(“\n”);
A 无限多次 B 0次
C 1次 D 2次
二 按题目要求填空完善下列程序(每题6分,共24分)
1( 按逆序输出一个字符串 Void reversr(str)
Char str[];
{
int len.i;
char c;
len=?;
for (i=0;i;i++) { c=?;
str[i]=str[len-i-1]; ?=c;
}
}
#include main()
{
char string[256]; gets(string);
reverse(string); puts(string);
}
2(输出Fibonacci数列的前15项,要求每行输出5项。
#define M 15
main()
{
int fib[M];
int i,
fib[0]=1;fin[1]=1; for (i=2;i。 (12分)
[提示] 推算公式:
s=yy-1+(yy-1)/4-(yy-1)/100+(yy-1)/400+dd
w=s-7*(s/7)
其中yy是年份数,dd是yy年元旦到日期d的总天数,w是星期序数,w=0,1,2,„ 3(编写程序:有两个正整数a和b,已知a*b=2048,求a、b各为何值时,a+b的值最小。(11分) 4(编写程序,找出一个4位数的完全平方数,该数减去1111后,结果仍是一个完全平方数。(完全平方数是一个整数,它是另一个整数的平方。例如25是5的平方,则25是一个完全平方数。)(10分)
5(已知在正文文件test.txt中存放有120个记录,每个记录中只有一个数。在文件中,从第一个数开始,每四个数为一组,第一个数为不同商场的代号(顺序号),其余三个数代表三类商品的营业额(万元)。编写程序,统计计算并向文件t2.dat输出各商场的总营业额
(13分)