C语言程序设计实验指导书自己写V2.docx
《C语言程序设计实验指导书自己写V2.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书自己写V2.docx(82页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验指导书自己写V2
《程序设计基础》实验指导书
(第一版)
(14~26学时)
信息学院
《程序设计基础》教研组
2011年3月1日
前言
C语言是现代最流行的通用程序设计语言之一,它既具有高级程序设计语言的优点,又具有低级程序设计语言的特点,既可以用来编写系统程序,又可以用来编写应用程序。
因此,C语言正在被迅速地推广和普及。
上机实验是该课程教学的一个重要环节,因此要求学生做一定数量的上机实验。
本指导书可增强同学上机实验的针对性。
整个教学和实验中,采用VC++6.0作为实验环境,强调学生切实培养动手实践能力,掌握调试程序的方法,通过调试理解C语言程序运行的过程以及C语言的语法规则,为后续的课程设计,计算机等级考试及其他应用做好充分的准备。
本实验指导书通过大量的实例,循序渐进地引导学生做好各章的实验。
根据实验教学大纲,共选择编写了13个实验,其中必做11个,选做2个。
每个实验内容结构如下:
(1)实验学时
(2)实验目的
(2)预习要求
(4)实验内容
(5)实验注意事项
(6)思考题
其中思考题属于扩展应用部分,学生可以根据自己的学习情况选择完成。
在实验之前,要求学生对实验作好预习工作。
在实验中,学生根据实验指导中的内容进行验证与总结,然后再去完成实验内容中安排的任务。
一般要求准备好相关代码,实验课中最好以调试和讨论为主。
实验结束后,应及时提交实验报告,报告具体内容可根据实验内容和实验要求进行增删。
实验报告一般要求包含:
(1)实验题目
(2)设计思路或算法分析
(3)流程图
(4)程序源代码
(5)程序运行结果及分析
(6)存在的问题。
实验一 C程序的运行环境和简单C源程序的调试
一、实验学时
2学时
二、实验目的
(一)掌握在VisaulC++环境如何编辑、编译和运行C源程序;
(二)掌握C语言的各种数据类型以及整型、字符型、实型变量的定义;
(三)掌握C语言中有关算术运算符及表达式的使用。
三、预习要求
熟悉C程序的书写规则、上机调试步骤;熟悉C语言的数据类型;熟悉C语言表达式的构成、运算规则等内容。
(一)VisualC++6.0集成开发环境简介
由于这些年C++语言程序的普及,VisualC++6.0集成开发环境作为一种功能强大的程序编译器也被相当多的程序员所使用,使用VisualC++也能够完成C语言的编译。
由于VisualC++集成开发环境运行于Windows下,对于习惯于图形界面的用户来说是比较易学的,因此,简要介绍一下如何用VisualC++来完成C语言程序的设计。
VisualC++也有多种版本,本书中使用比较普及的VisualC++6.0集成开发环境。
(二)VisualC++6.0集成开发环境安装
VisualC++中文版集成开发环境的安装比较简单,在输入SETUP执行后,可以按照提示信息完成程序安装,在这里不再详述。
四、实验内容
(一)创建一个新的文件夹
为了方便管理自己的C语言程序,在启动VisualC++6.0集成开发环境前,首先在E盘创建一个新的文件夹,以便存放自己的C语言程序。
(二)启动VisualC++6.0集成开发环境
如图1-1所示,单击“开始”→“程序”→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0,就可以启动VisualC++6.0集成开发环境。
启动后的VisualC++6.0集成开发环境如图1-2所示。
(三)开始一个新程序
1.创建文件
单击主菜单中的“文件”→“新建”菜单命令,弹出“新建”对话框,在“新建”对话框中选择“文件”选项卡。
在左边列出的选项中,选择“C++SourceFile”;在右边的相应对话框中,输入文件名称“c1-1.c”及保存的位置,如图1-3所示。
单击“确定”按钮。
图1-1启动VisualC++6.0的方法
图1-2VisualC++6.0中文版集成开发环境
图1-3创建新的C源文件
进入VisualC++6.0集成环境的代码编辑窗口,如图1-4所示。
图1-4VisualC++6.0集成环境的代码编辑窗口
2.代码编辑
在VisualC++6.0代码编辑窗口中,输入如下所示的源代码,完成后如图1-4中所示。
程序代码:
/*c1-1.cC语言的第一个程序*/
#include"stdio.h"
voidmain()
{
printf("*\n");
printf("***\n");
printf("*****\n");
}
3.程序的编译、连接与运行
将C语言源代码编译成计算机能执行的目标代码。
单击主菜单下的“组建”→“编译[c1-1.c]”(或者是工具栏上的按钮或按快捷键Ctrl+F7),此时将弹出一个对话框,询问是否创建一个项目工作区,选择“是(Y)”。
VisualC++6.0集成开发环境会自动在c1-1.c文件所在文件夹中建立相应的项目文件。
编译时,在下方的输出框中将显示出相应的编译说明,如图1-5所示。
如果代码编译无误,最后将显示:
c1-1.obj-0error(s),0warning(s)
这说明编译没有错误(error)和警告(warning),生成目标文件c1-1.obj,程序编译顺利完成。
目标文件(.obj)不能被计算机直接执行,接下来将目标文件(.obj)和相关的库函数或目标程序连接成为可执行程序(.exe)。
图1-5VisualC++6.0集成环境下编译源程序
单击主菜单下的“组建”→“批组建”命令,将弹出如图1-6所示的对话框。
图1-6VisualC++6.0集成环境下批组建对话框
确保选中“c1-1-Win32Release”复选框,这样生成的可执行文件才是发行版的程序,否则生成的是调试(Debug)版的程序。
单击“创建”按钮,生成可执行文件c1-1.exe。
如果在“批组建”对话框中选中了两个复选框,可以看到程序中生成了两个c1-1.exe可执行文件,一个文件为调试版本,存储在与c1-1.c同一文件夹下的Debug文件夹中;另一个是发行版本,保存在与c1-1.c同一文件夹下的Release文件夹中。
这一步只是为了生成发行版的程序文件,只有在程序准备发行时才需要执行这种编译。
在通常情况下,可以单击主菜单下的“组建”→“组建[c1-1.exe]”(或工具栏按钮或按快捷键F7),直接生成调试版本程序就可以了。
编译、连接完成后,c1-1.exe已经是一个独立的可执行程序,可以在Windows资源管理器中直接执行,也可以在VisualC++6.0集成开发环境中运行。
单击主菜单下的“组建”→[执行c1-1.exe](或工具栏按钮或按快捷键Ctrl+F5),此时弹出一个控制台程序窗口,程序正确运行,如图1-7所示。
按任意键后返回VisualC++6.0集成开发环境。
图1-7VisualC++6.0集成环境下程序运行结果
4.关闭工作空间
当第1~3步工作完成后,应该将工作保存下来,并关闭工作空间,以便做下一个新的程序。
单击主菜单下的“文件”→“保存全部”,然后再单击“文件”→“关闭工作空间”菜单命令,询问确认要关闭所有文档窗口,选择“是(Y)”。
(四)按照(三)的操作,输入下面的程序,运行并查看输出结果。
/*c1-2.cC语言的第二个程序*/
#include"stdio.h"
voidmain()
{
intc,a=3,b=5;
c=a+b;
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
(五)打开已有的文件
在打开已有的文件时一定要先确认关闭了工作空间,然后单击主菜单下的“文件”→“打开”命令,选择(三)创建的c1-1.c文件,然后打开。
(六)重新开始一个新的程序
关闭所有工作空间,点击VisualC++6.0窗口的关闭按钮即可退出VisualC++6.0集成环境,按照
(二)、(三)再次进入VisualC++6.0集成环境,输入以下程序:
/*c1-3.cC语言的第三个程序*/
#include"stdio.h"
voidmain()
{inta=38;
printf("%d,%5d,%-5d\n",a,a,a);
printf("%d,%o,%x,%u\n",a,a,a,a);
}
注意观察两个printf函数语句输出结果有何不同?
(七)在VisualC++6.0集成环境,输入以下程序:
/*c1-4.cC语言的第四个程序*/
#include"stdio.h"
voidmain()
{longinta=32767;
printf("a=%ld\t",a);
printf("a=%u\t",a);
printf("a=%d\n",a);
}
将程序中的a改为a=65535,并再次运行程序,观察结果。
(八)在VisualC++6.0集成环境,,输入以下程序:
/*c1-5.cC语言的第五个程序*/
#include"stdio.h"
voidmain()
{charc1=97,c2=98;
inta=97,b=98;
printf("%3c,%3c\n",c1,c2);
printf("%d,%d\n",c1,c2);
printf("\n%c%c\n",a,b);
}
观察程序运行结果,掌握int与char类型数据的互通性。
(九)在VisualC++6.0集成环境,输入以下程序:
/*c1-6.cC语言的第六个程序*/
#include"stdio.h"
voidmain()
{inta,b;a=2;
b=1%a;
printf("%d\n",1/a);
printf("b=%d\n",b);
printf("%f%f\n",(float)(1/a),(float)b);
}
观察程序运行结果,从中掌握类型转换运算符的使用。
(十)在VisualC++6.0集成环境,输入以下程序:
/*c1-7.cC语言的第七个程序*/
#include"stdio.h"
voidmain()
{inti,j;
i=3;j=4;
printf("%d,%d\n",i++,++j);
printf("%d,%d\n",i,j);
printf("%d,%d\n",-i++,-++j);
}
观察程序运行结果,从中掌握自加自减运算符的使用。
(十一)在VisualC++6.0集成环境,输入以下程序
/*c1-8.cC语言的第八个程序*/
#include"stdio.h"
voidmain()
{inta,b;a=5;
a-=a*a;
printf("a=%d\n",a);
b=(a=3*5,a*4,a+5);
printf("a=%d,b=%d\n",a,b);
}
观察程序运行结果,从中掌握复合赋值运算符、逗号运算符的使用。
(十二)下面程序,计算输出当x=2.5,a=7,y=4.7时,表达式
x+a%3*(int)(x+y)%2/4的运算结果z的值。
/*c1-9.cC语言的第九个程序*/
#include"stdio.h"
voidmain()
{_________a=7;
floatx=2.5,y=4.7,z ;
z=x+a%3*(int)(x+y)%2/4;
printf("z=%f\n",z);
}
程序不完整,请删除横线后填空并运行程序。
五、实验注意事项
(一)在VisualC++6.0集成环境中,如何对C程序进行创建、运行、查看结果和退出。
VisualC++6.0集成环境等操作可以通过菜单、按钮、热键实现。
另外,在源程序文件编辑过程中,还可以进行复制、移动、删除等常用文件编辑操作。
注意C程序的编辑与显示结果界面是两个不同的界面。
(二)由于C程序运行必须从main函数开始,因此一个C程序要有一个main函数,且只能有一个main函数。
当一个程序运行结束之后,一定要先“文件”→“关闭工作空间”,然后再开始创建一个新的C程序。
(三)在程序的输入过程中:
1.要注意区分大小写;
2.要注意程序中需要空格的地方一定要留空格(如inta=3,b=5;中的int和a之间必须留空格);
3.注意“\”与“/”的区别。
4.所定义的变量的类型与输入的数据的类型要一致,输出时的格式一定要满足数据的大小。
5.注意实验内容(十二)中当运算对象均为整数时“/”运算符的使用,“%”运算符两边一定是整型数据。
6.注意自加和自减运算符的运算规则,仔细分析实验内容(十)中程序的输出结果。
六、思考题
(一)有如下程序:
#include"stdio.h"
voidmain()
{inta=-1;
printf("%d,%o,%x,%u\n",a,a,a,a);
}
printf语句的运行结果是_______________。
(二)有如下程序:
#include"stdio.h"
voidmain()
{charc1=97,c2=98;inta=97,b=98;
printf("%3c,%3c\n",c1,c2);
printf("%d,%d\n",c1,c2);
printf("%c%c\n",a,b);
}
最后一个printf语句的运行结果是_______________。
(三)有如下程序:
#include"stdio.h"
voidmain()
{inti,j;i=3;j=4;
printf("%d%d\n",i++,++j);
printf("%d,%d\n",i,j);
printf("%d,%d\n",-i++,-++j);
}
最后一个printf语句的运行结果是_______________。
(四)程序填空:
#include"stdio.h"
voidmain()
{_________a=7;
floatx=2.5,y=4.7,z;
z=x+a%3*(int)(x+y)%2/4;
printf("z=%f\n",z);}
程序中空格处应填_______________。
实验二 数据类型、运算符和表达式
一、实验目的
(1)了解C语言数据类型的意义,掌握基本数据类型变量的特点和定义方法。
(2)学会使用C的算术运算符,以及包含这些运算符的算术表达式。
(3)掌握自加(++)和自减(--)运算符的使用。
(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验要点
基本数据类型包括整型、字符型、实型。
三、实验要求
(1)上机前先阅读和编写以下要调试的程序。
(2)上机输入和调试程序并存在磁盘上。
(3)检查实验结果是否正确。
四、实验内容
(以下内容在实验报告中的实验预习报告内容中完成)
1.调试程序,分析输出结果
(1)输入并运行以下程序。
main()
{floata,b;
a=123456.789e5;
b=a+20;
printf("a=%f,b=%f\n",a,b);
}
将第二行改为:
doublea,b;
重新运行该程序,分析运行结果。
说明:
由于实型变量的值是用有限的存储单元存储的,因此其有效数字的位数是有限的。
float型变量最多只能保证7位有效数字,后面的数字是无意义的,不能准确表示该数。
(2)输入并运行以下程序。
main()
{charc1,c2;
c1=97;c2=98;
printf("%c%c\n",c1,c2);
printf("%d%d\n",c1,c2);
}
①将第二行改为:
intc1,c2;再运行。
②再将第三行改为:
c1=300;c2=400;再运行,分析运行结果。
说明:
字符型数据可作为整型数据处理,整型数据也可以作为字符型数据处理,但应注意字符数据只占一个字节,它只能存放0-255范围的整数。
2.完成以下填空,并把程序调通,写出运行结果。
下面的程序计算由键盘输入的任意两个整数的平均值:
main()
{intx,y;
;
scanf(“%d,%d”,&x,&y);
;
printf("Theaverageis:
%f",a);
}
3.指出以下程序的错误并改正,上机把程序调通
main();
{inta;
a=5;
printf(“a=%d,a)
}
4.编写程序并上机运行
要将“China”译成密码,译码规律是:
用原来字母后面的第3个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Fklqd”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为‘C’、‘h’、‘i’、‘n’、‘a’,经过运算,使c1、c2、c3、c4、c5分别变为‘F’、‘k’、‘l’、‘q’、‘d’、,并输出。
输入程序,并运行该程序。
分析是否符合要求。
五、思考与总结
(1)总结各种整型变量的取值范围。
(2)总结各种实型变量的有效数字位数和取值范围。
(3)总结算术运算符和自加、自减运算符的优先级与结合性。
实验三选择结构程序设计
一、实验学时
2学时
二、实验目的
(一)掌握C语言关系表达式和逻辑表达式的运算和使用;
(二)正确使用条件控制语句(if语句、switch语句)进行选择结构程序设计。
三、预习要求
(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式;
(二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套;
(三)switch语句的形式。
四、实验内容
(一)分析下面程序,掌握关系及逻辑表达式的运算规则。
/*c3-1.c关系及逻辑表达式运算规则*/
#include"stdio.h"
voidmain()
{inta=3,b=5,c=8;
if(a++<3&&c--!
=0)b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}
注意该程序中的条件判断表达式a++<3&&c--!
=0是一个逻辑表达式,关系表达式a++<3的值为假,因此后一部分c--!
=0就不再计算。
试比较下列各部分运行结果。
#include"stdio.h"
voidmain()
{inta=3,b=5,c=8;
if(a++<3&&c--!
=0)b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
inta=3,b=5,c=8;
if(c--!
=0&&a++<3)b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
inta=3,b=5,c=8;
if(a++<3||c--!
=0)b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
inta=3,b=5,c=8;
if(c--!
=0||a++<3)b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);}
(二)输入下面两段程序并运行,掌握case语句中break语句的作用。
1./*c3-2.c*//*c3-3.c*/
/*不含break的switch*//*含break的switch*/
#include"stdio.h"#include"stdio.h"
voidmain()voidmain()
{inta,m=0,n=0,k=0;{inta,m=0,n=0,k=0;
scanf("%d",&a);scanf("%d",&a);
switch(a)switch(a)
{case1:
m++;{case1:
m++;break;
case2:
case2:
case3:
n++;case3:
n++;break;
case4:
case4:
case5:
k++;case5:
k++;
}}
printf("%d,%d,%d\n",m,n,k);printf("%d,%d,%d\n",m,n,k);
}}
分别从键盘上输入1、3、5,写出程序运行的结果。
(三)完善程序,从键盘上输入x的值,按下式计算y的值。
编程提示:
注意逻辑表达式的正确表达方法,数学中的1≤x<10应使用C语言的逻辑表达式(x>=1&&x<10)来表示。
下面是用多分支选择结构实现本题的程序结构:
/*c3-4.cif语句实现的多分支结构*/
#include"stdio.h"
voidmain()
{定义变量;
输入x;
if(_______________)//按y=x为变量y赋值;
elseif(_______________)//按y=2x-1为变量y赋值;
else
_______________//按y=3x-11为变量y赋值;
printf("y=%f\n",y);
}
注意:
在赋值语句中2x应该写成2*x。
(四)编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。
90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。
编程提示:
1.先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩;
2.输入百分制成绩;
3.将百分制成绩按10分,分档作为switch语句中括号内的表达式;
4.按case10:
case9:
case8:
case7:
case6:
default:
这六种匹配情况分别选择不同的入口;
5.输出转换后的等级成绩。
(五)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。
/*c3-5.c分支结构中的复合语句*/
#include"stdio.h"
voidmain()
{inta,b,t;
t=0;
scanf("%d,%d",&a,&b);
if(a>b)
{t=a;
a=b;
b=t;
}
printf("a=%d,b=%d\n",a,b);
}
(六)编写程序,给出一个不多于3位的正整数n,要求:
(1)求出它是几位数;
(2)分别打印出每一位数字(数字之间加一个空格);(3)按逆序打印出各位数字(数字之间加一个空格)。
编程提