实验一熟悉C 语言上机环境
一、实验目的
1、了解和使用VC集成开发环境
2、理解简单的C程序结构
3、了解用VC开发Win32控制台程序的过程
二、实验内容和步骤
1、启动Microsoft Visual C++。
2、了解VC界面、菜单、工具栏,了解各个菜单和工具的功能。
3、编写简单的Win32控制台应用程序。
(1)首先创建一个项目(project)。项目中存放所创建应用程序的所有信息:源文件、
资源文件、编译连接设置等。创建项目的步骤为:
从主菜单中选择File|New,将显示出New对话框。
选择Projects标签,并从列表中单击Win32 Console Application。
在“Location”编辑框中输入工作目录名称。
在对话框的右上角的“project name”编辑框内键入项目的名字,系统将自动为项目分配一个默认的目录。
系统将显示一个询问项目类型的程序向导,选择“an empty project”。
单击Finish或OK结束配置,创建应用程序。
在左边的工作区窗口中将出现项目的名字。工作区窗口有FileView标签。
FileView显示构成项目的各个文件,选择某一文件将会在右边的文档显示区显
示文件内容。
(2)编辑一个C程序。用下面的方法在创建的项目中添加一个C文件:
在主菜单上选择File|New。
在New对话框中选择File标签,单击“C++ Source File”。
选中Add to Project复选框。
在右边的File name编辑框中为文件指定一个名字,如Hello.c。注意一定带有扩展名c。
新的空白文件将自动打开,显示在文档显示区。在文件中输入以下内容:
//hello world example
#include
void main()
{
printf(“hello\n”);
}
保存源文件。单击工具栏中的”save”图标,或者选择File|Save保存文件。
(3)编译、连接得到可执行程序
选择主菜单的Build|Build Hello.exe来编译项目(也可以按功能键F7)。如果输入的内容没有错误,那么,在屏幕下方的输出窗口将会显示:
hello.exe –0 error(s), 0 warning(s)
如果在编译时得到错误或警告,再次检查源文件,改正错误。
(4)运行程序。有三种方式:
在开发环境中运行程序。选择Build|Execute hello.exe(或者Ctrl+F5)。程序运行以后将显示一个类似于DOS的窗口,在窗口中输出一行“hello”,紧接着在
下面显示“Press any key to continue”,这句话是系统提示按任意键退出当前运
行的程序,回到开发环境中。按任意键,窗口关闭,退回到VC开发环境。
在DOS环境下运行程序。打开DOS窗口,改变工作路径到项目目录,该目录是创建目录时指定的。可以在工作区窗口中选择项目名称,然后选择菜单
View|Properties,将显示出项目路径。切换到debug子目录下,运行hello.exe,
程序将输出:?hello?。
在Windows环境下运行程序。打开资源管理器,找到程序所在的目录,运行。
4、编写一个求两个数的最大值的C程序,进行编译、链接和执行。
5、输入如下程序:
#include
/*返回n的阶乘*/
int Factorial(int n)
{
int i;
int Result;
Result = n;
for (i == 0; i < n; i++)
Result *= i;
return Result;
}
void main()
{
printf("What value?");
scanf("%d",&n);
printf("%ld",Factorial(n));
}
(1)编译该程序,是否有错误?修改这些错误。
(2)在某一行上设置位置断点,并执行,观察效果。
(3)利用调试工具调试该程序,查看是否有问题?
实验二 C 语言数据类型与数据运算的应用
一、实验目的和要求
1、进一步了解用C语言编写程序的基本过程与方法。
2、掌握C语言基本数据类型、各种类型的运算符及表达式、转义字符等的使用方法。
二、实验内容及其步骤(其步骤参考课后习题答案)
1、验证教材中给出的各例题的结果。
2、输出课后习题3.2中各小程序的结果,验证一下与你想的结果是否一致。
3、完成下列编程:(习题3.3)(任选四题)
(1)定义整型变量a的值为5,请编制程序分别按十进制、八进制和十六进制输出a的值。(2)编制程序实现:从键盘输入一个实数,分别按小数形式(保留2位小数)和指数形式(尾数部分保留2位有效数字)输出该实数的值。
(3)编制程序定义char型变量ch1和ch2值均为’a’,依次按字符、十进制、八进制和十六进制整数的形式输出它们的值,要求每个变量各占一行。
(4)编写程序实现:从键盘输入长方体的长、宽、高,然后求其表面积和体积。
(5)编写程序实现:从键盘输入圆的半径r,计算并输出该圆的面积和周长。
(6)编制程序实现:从键盘输入三个顶点的坐标(x1,y1)、(x2,y2)、(x3,y3),假设它们可以构成三角形,求其面积。
实验三 C 语言标准库函数的应用
一、实验目的和要求
1、进一步掌握用C语言编写程序的基本过程与方法。
2、掌握C语言常用标准库函数的使用方法。
二、实验内容及其步骤
1、执行下列程序,观察输出结果。
#include
main()
{
char c='a';
int a=123,b=-4567;
float x=123.456;
printf("c=%c\n",c);
printf("c=%c,%d,%o,%x\n",c,c,c,c);
c='\105';
printf("%c\n",c);
printf("%3s,%7.2s,%.4s,%-5.3s\n\n","sun", "sun", "sun", "sun");
printf("a=%d,b=%d\n",a,b);
printf("a=%4d a=%04d a=%-4d\n",a,a,a);
printf("a=%2d a=%02d a=%-2d\n",a,a,a);
printf("b=%8d b=%08d b=%-8d\n",b,b,b);
printf("b=%3d b=%03d b=%-3d\n",b,b,b);
printf("a=%8ld,a=%-8ld,b=%8ld,b=%-8ld\n\n",a,a,b,b);
printf("%f,\t%e,\t%g\n",x,x,x);
printf("%5.2f,\t %6.3e,\t%7.4g\n",x,x,x);
printf("%10.3e,\t%010.1e,\t%015.5e\n",x,x,x);
}
2、用输入函数正确输入数据,观察程序执行结果。
#include
main()
{
char s[20];
char c;
int a,b;
float x;
printf("please input a string:");
gets(s);
puts(s);
printf("please input a char:");
c=getchar();
putchar(c);
putchar('\n');
printf("Please input two integers:");
scanf("%d %d",&a,&b);
printf("a=%d,b=%d\n",a,b);
printf("Please input one float data:");
scanf("%f",&x);
printf("%f,%e,%g\n",x,x,x);
}
3、编程,测试C语言常用字符串运算函数。
参考程序:
#include
# include "stdio.h"
main( )
{
char s1[30], s2[15];
printf("please input two string:\n");
gets(s1);
gets(s2);
puts(s1);
puts(s2);
strcat(s1,s2);
puts(s1);
strupr(s2);
puts(s2);
strcpy(s1,s2);
puts(s1);
printf("compare s1 with s2 =%d\n",strcmp(s1,s2));
printf("%d\n",strlen(s1));
}
4、编程,测试C语言常用数学运算函数。
参考程序:
#include
#include
int main(void)
{ int n1 =-123;
float n2 =-321.00;
printf("number1: %d absolute value: %d\n", n1, abs(n1));
printf("number2: %f absolute value: %f\n",n2,fabs(n2));
double result, x1 = 4.0;
result = exp(x1);
printf("(e ^ %lf) = %lf\n", x1, result);
double x2 = 2.0, y = 3.0;
printf("%lf ^ %lf is %lf\n", x2, y, pow(x2, y));
double x3 =9.3721;
result = log(x3);
printf("The natural log of %lf is %lf\n", x3, result);
double x4 = 800.8860;
result = log10(x4);
printf("The common log of %lf is %lf\n", x4, result);
double x=0.5;
result = sin(x);
printf("The sin of %lf is %lf\n", x, result);
result = asin(x);
printf("The arc sin of %lf is %lf\n", x, result);
result = cos(x);
printf("The cos of %lf is %lf\n", x, result);
result = acos(x);
printf("The arc cosine of %lf is %lf\n", x, result);
result = tan(x);
printf("The tan of %lf is %lf\n", x, result);
result = atan(x);
printf("The arc tangent of %lf is %lf\n", x, result);
x = 4.0;
result = sqrt(x);
printf("The square root of %lf is %lf\n", x, result);
double number=100.16;
double down, up;
down = floor(number);
up = ceil(number);
printf("original number %5.2lf\n", number);
printf("number rounded down %5.2lf\n", down);
printf("number rounded up %5.2lf\n", up);
x1 = 5.0, y = 2.0;
result = fmod(x1,y);
printf("The remainder of (%lf / %lf) is \ %lf\n", x1, y, result);
return 0;
}
实验四控制结构程序设计
一、实验目的
1、熟悉分支、循环结构。
2、熟悉逻辑表达式、条件表达式及其求值。
3、熟练应用C控制结构实现分支、循环程序设计。
4、进一步熟悉VC的调试方法。
二、实验内容和步骤(其步骤参考课后习题答案)
1、从键盘上输入三个数,输出它们的最大值。
2、假设某个国家使用九级超额累计税率计算缴纳个人所得税,具体如下:扣除1600元的费用后,余额:
(1)不超过500元的,按5%计提
(2)超过500到2000部分,按10%计提
(3)超过2000到5000部分,按15%计提
(4)超过5000到20000部分,按20%计提
(5)超过20000到40000部分,按25%计提
(6)超过40000到60000部分,按30%计提
(7)超过60000到80000部分,按35%计提
(8)超过80000到100000部分,按40%计提
(9)超过100000部分,按45%计提。
试设计一个程序,对于用户输入的月收入额度,计算应交税款。
3、下面是一个计算e的近似值(使误差小于给定的δ)的程序。
#include
Void main()
{
double e=1.0,x=1.0,y,detax;
int i=1;
printf(“\n please input enter a error:”);
scanf(“%lf”,&detax);
y=1/x;
while(y>=detax)
{
x=x*I;
y=1/x;
e=e+y;
++i;
}
printf(“%12.10lf”,e);
}
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:
不进入循环;
只循环一次;
进入死循环(程序将永远循环下去)。
(3)在程序中增加一条语句,以计算循环执行了多少次。
(4)将while语句中的条件y>=detax,分别换成y>detax,y=detax,y 观察程序运行发生的变化。 (5)将上述程序改为do-while格式。 4、编写C程序,输出九九乘法表(按◣◢◤◥四种不同的形状输出)。 5、对于百鸡问题,利用课本上所讲的不同方法进行计算,体会各个方法效率的差异。 实验五数组应用综合实验 一、实验目的 1、掌握一维数组、二维数组的定义、初始化和引用方法; 2、掌握字符数组的定义、初始化和使用方法; 3、熟练与数组有关的常见算法。 二、实验内容与步骤(其步骤参考课后习题答案) 1、分析并测试以下程序片断的输出结果 int a[3]={1,4},b[3]; char str1[]={…A?,…B?,…C?}; char str2[]={…A?,…B?,…\0?,…C?…\0?…\0?}; float aver; printf(“%d\n”,a[3]); aver=(a[0]+a[1]+a[2])/3; printf(“%f\n”,aver); printf(“%d\n”,b[0]); scanf(“%d%d”, &b[1] ,&b[2]); b[3]=b[1]+b[2]; printf(“%d\n”,b[3]); printf(“str1:\n%s”,str1); printf(“str2:\n%s”,str2); 2、用改进的冒泡算法对N个数由小到大排序。(习题6.4) 3、用插入法对N个数由小到大排序。(习题6.5) 4、用筛选法求0--100内的素数。(习题6.6) 5、不引入新矩阵,对一个方阵实现其自身的转置。 6、输出杨辉三角形的前10行。(习题6.11) 7、编程实现strcmp函数的功能。(习题6.16) 8、编程实现strcpy函数的功能。(习题6.17) 实验六函数应用综合实验 一、实验目的 1、掌握C语言函数定义及调用的规则。 2、理解参数传递的过程。 3、掌握变量的作用域、生存期。 二、实验内容与步骤(其步骤参考课后习题答案) 1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。#include void main() { int,y; printf(“%d\n”,sum(x+y)); } int sum(a,b) { int a,b; return(a+b); } 2、输入课本例7.5,利用单步跟踪方式进行调试,观察程序执行过程。 3、分析程序运行结果。输入下列程序运行,分析得到的结果。 #include int n = 0; int func(int x = 10); void main() { int a,b; a = 5; b = func(a); printf("\nlocal a=%d, local b=%d, global n=%d.\n",a,b,n); a++; b = func(a); printf("\nlocal a=%d, local b=%d, global n=%d.\n",a,b,n); func(); } int func(int x ) { int a=1; static int b=10; a++; b++; x++; n++; printf("\nlocal a=%d, local b=%d, parameter x=%d.\n",a,b,x); return a+b; } 实验七指针应用综合实验 一、实验目的 1、掌握指针的概念、定义、引用和初始化方法。 2、掌握各种类型的指针变量的定义并掌握其相关操作。 3、掌握运用指针操作数组和字符串的方法与技巧。 4、了解指向指针的指针,灵活运用指针作函数参数和返回值。 二、实验内容与步骤(其步骤参考课后习题答案) 1. 完成课后习题9.1,9.2,9.4的验证。 2. 编写一个函数int strreverse(char *str1, char *str2),对输入的字符串str2,将其逆序放入 字符串str1中,其返回值为str1的长度。(习题9.2) 3. 编写一个函数int strcatch(char *str1, char *str2),将字符串str2连接到str1的尾部,其返回 值为连接后str1的长度。(习题9.3) 1.假设有三门课程四个学生,要求编程求各门课程的平均分,并查找各门课程不及格的学 生及其成绩。(习题9.7) 2.使用字符指针编写一个函数以实现库函数中的strcmp(str1,str2)函数之功能。 (习题9.11.1) 6.定义一个返回一维数组中最大值的指针函数,并在主函数中调用之,然后输出结果。 (习题9.12) 实验八结构体应用综合实验 一、实验目的 1、掌握结构体类型与结构体变量的定义、引用和初始化方法。 2、掌握链表的概念和相关操作。 3、了解共用体和枚举类型的概念及它们的使用方法。 二、实验内容与步骤(其步骤参考课后习题答案) 1、分析并测试以下两个程序的输出结果。 程序1(习题10.10) #include void main() { union { int a; int b; }s[3],*p; int n=1,k; for(k=0;k<3;k++) { s[k].a=n; s[k].b=s[k].a*2; n+=2; } p=s; printf("%d,%d\n",p->a,++p->a); } 程序2(习题10.12) #include void main() { enum workday { mon,tue,wed,thr,fri }; enum workday d=thr; printf("%d\n",d); printf("%c\n",d); printf("%s\n",d); } 2、结构体变量的成员包括年、月、日,输入日期并计算该日是当年中第几天。(习题10.1) 3、使用指针变量输入学生姓名、学号及三门课的成绩,计算各自的平均成绩。(习题10.2) 4、编写函数统计链表中结点的个数。(习题10.5) 5、编写函数查找指定学号的结点在链表中第一次出现的位置,未找到则返回0。(习题10.6) 6、编写函数删除链表中指定位置的结点。(习题10.7) 实验九文件操作综合实验 一、实验目的 1、掌握文件打开的fopen函数和文件关闭的fclose函数的使用方法。 2、掌握以二进制方式和以文本方式读写文件的区别。 3、掌握按字符读写文件操作的fgetc函数和fputc函数的使用方法。 4、熟悉按字符串读写文件操作的fgets函数和fputs函数的使用方法。 5、掌握按块读写文件操作的fread函数和fwrite函数的使用方法。 6、熟悉格式化读写文件操作的fprintf函数和fscanf函数的使用方法。 二、实验内容和步骤(其步骤参考课后习题答案) 1、上机调试课后练习题1。 2、上机调试课后练习题5。 3、上机调试课后练习题2或课后练习题3(任选一题)。