资源描述
实验手册使用及要求
实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。现将实验报告撰写的有关内容说明如下:
1、 实验前按实验要求手写程序或程序填空,并走查代码,有疑问处标记,上机时在C语言集成开发环境下输入并调试手写程序,分析运行结果。
2、 实验结束后填写通过后的源程序和对实验的总结。
3、 通过后的源程序可以手写也可以打印粘贴。
实验项目一览表
序 号
实验项目
实验性质
学 时
实验一
熟悉C语言编程环境
验证性
2
实验二
用C语言编写简单程序
验证性
2
实验三
分支结构程序设计
验证性
2
实验四
循环结构程序设计
验证性
4
实验五
函数程序设计
验证性
4
实验六
数组程序设计
验证性
2
实验七
指针程序设计
验证性
4
实验八
结构体程序设计
验证性
2
实验九
程序设计进阶
综合性
2
实验十
文件程序设计
综合性
4
学号: 姓名: 成绩:
实验一 熟悉C语言编程环境
实验目的:
1.熟悉C语言编程环境(VC++、Cfree、Turboc2.0等)
2.了解C程序的基本框架
3.理解程序调试的思想,能找出并改正C程序中的错误
实验内容:
1.1 建立自己的文件夹:在磁盘上建立一个文件夹,用于存放自己的C程序
1.2 编程示例
在屏幕上显示一个短句“Programming in C is fun!”(教师示例,学生模仿并创新,如输出汉字、特除字符等。学会使用编程环境VC++,启动、编辑、编译、运行、保存、关闭、打开)
1.3 编程
在屏幕上显示如下网格。
+---+---+
| | |
| | |
+---+---+
1.4 调试示例
改正下列程序中的错误,在屏幕上显示“Welcome to You !”。(掌握找错、改错的方法)
源程序:
# include <stdio.h>
int mian(void)
{
printf(Welcome to You! \n")
getchar();
return 0;
}
注:需要修改的语句直接在程序上标注并修改
实验总结:
学号: 姓名: 成绩:
实验二 用C语言编写简单程序
实验目的:
1.掌握算术表达式和赋值表达式的使用
2.掌握基本输出函数的使用
3.能够自己编程实现简单的数据处理
4. 熟练掌握简单if语句使用
5. 熟练掌握for语句的使用
6. 掌握简单C程序的查错方法、单步调试
实验内容:
2.1 调试以下程序,求华氏温度对应的摄氏温度。计算公式为:C=5*(f-32)/9
#include <stdoi.h>
int main(void)
{
int celsius; fahr;
scanf("%d ",fahr);
celsius = 5 * (fahr - 32) / 9;
printf("fahr = d, celsius = %d\n", fahr, celsius);
return 0;
}
注:需要修改的语句直接在程序上标注并修改
2.2 编写程序计算定期存款本利之和:
设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入,输出时保留两位小数。计算公式为:
deposit=capital(1+rate)n
2.3 计算身体质量指数
一个称为“身体质量指数”(BMI)的量用来计算与体重有关的健康问题的危险程度。BMI按下面的公式计算:
BMI=w/h2
其中w是以千克为单位的体重。h是以米为单位的身高。大约20至25的BMI的值被认为是“正常的”,编写一个应用程序,输入体重和身高,输出BMI,并判断是否正常。
2.4 水仙花数判断
输入一个三位数,判断是否是水仙花数,水仙花数是3位数,数本身的值恰好等于各位数字的立方和 如:153=13+53+33
实验总结:
学号: 姓名: 成绩:
实验三 分支结构程序设计
实验目的:
1.熟悉掌握关系表达式和逻辑表达式的使用
2.熟练掌握用嵌套的if语句和switch语句实现多分支结构程序设计
3.掌握使用断点调试程序的方法
实验内容:
3.1 按要求调试程序
输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。
include <stdio.h>
#include <math.h>
int main(void)
{ double a, b, c,d;
printf("Enter a, b, c \n");
scanf("%lf%lf%lf", &a, &b, &c);
d = b * b - 4 * a * c;
if(a==0){
if(b = 0){
if(c == 0)
printf("参数都为零,方程无意义!\n"); /*调试时设置断点*/
else
printf("a和b为0,c不为0,方程不成立\n");
}
else
printf("x = %0.2f\n", -c/b);
}
else
if(d >= 0) { /*调试时设置断点*/
printf("x1=%0.2f\n", (-b+sqrt(d))/(2*a));
printf("x2=%0.2f\n", (-b-sqrt(d))/(2*a));
}
else{
printf("x1=%0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
printf("x2=%0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
}
return 0; /*调试时设置断点*/
}
注:调试时按注释位置设置三个断点,单击Go按钮,输入2.1 8.9 3.5 ,观察变量值的情况。
第一次断点:a,b,c的值分别是:
第二次断点:d的值是:
第三次断点:运行窗口显示:
3.2 求三角形的面积和周长
输入三角形的三条边 a, b, c,如果能构成一个三角形,输出面积area 和周长perimeter(保留2 位小数);否则,输出“These sides do not correspond to a valid triangle”。
在一个三角形中,任意两边之和大于第三边。
三角形的面积计算公式:
其中:s = (a+b+c)/2
3.3 计算个人所得税
输入一个职工的月薪 salary,输出应交的个人所得税tax(保留2 位小数)。
tax = rate * (salary-3500) - deduction
当 salary <= 3500 时,rate = 0,deduction=0;
当 3500 < salary <= 5000时,rate = 3%,deduction=0;
当 8000 < salary <=12500 时,rate =20%,deduction=555;
当 12500 < salary <= 38500 时,rate =25%,deduction=1005;
当 38500 < salary <=58500 时,rate =30%,deduction=2755;
当 58500 < salary <= 83500 时,rate =35%,deduction=5505;
当 83500 < salary 时,rate =45%,deduction=13505;
3.4 计算出租车费
某市不同品牌出租车价格为:捷达5元起价,1公里内收起步价,1公里外按1.4元/公里收取;速腾7元起价,1公里内收起步价,1公里外按1.4元/公里收取;红旗10元起价,1公里内收起步价,1公里外按1.5元/公里收取。编写程序,从键盘输入乘车车型和乘车公里数,输出应付的车费。(采用switch语句实现车型选择)
实验总结:
学号: 姓名: 成绩:
实验四 循环结构程序设计
实验目的:
1.熟练掌握for、while、和do…while语句实现循环程序设计
2. 理解循环条件和循环体,以及三种循环语句的相同和不同之处
3.熟练掌握break、continue语句的使用
4.掌握使用“Debug”菜单调试程序的方法
实验内容:
4.1 按要求调试程序
改正下列程序中的错误,输入2个正整数m和n,输出它们的最小公倍数和最大公约数。
#include <stdio.h>
int main(void)
{
int m, n, j, k; /* j表示最小公倍数,k表示最大公约数 */
do{
printf("Input m: ");
scanf("%d", &m);
printf("Input n: ");
scanf("%d", &n);
}while(m<0||n<0);
j = m;
while(j % n != 0) /* 调试时设置断点 */
j = j + m;
k = (m * n) / j; /* 调试时设置断点 */
printf("最小公倍数是%d \n最大公约数是%d\n ", j, k);
return 0;
}
注:调试时按注释位置设置二个断点,单击Go按钮,输入3 7 ,观察变量值的情况。
第一次断点:m,n的值分别是:
第二次断点:j的值是:
若结果不对,停止调试,改正错误后,取消第一个断点,单击Go,到断点处,此时j的值是:
4.2 编写程序
输入一批正整数(以0或负数为结束标志),求其中的偶数和。
4.3编写程序
给一个不多于5位的正整数,要求:
a. 求出它是几位数;
b. 分别输出每一位数字;
c. 按逆序输出各位数字,例如原数为321,应输出123
4.4 统计素数并求和
输入 2 个正整数m 和n(1<=m,n<=500),统计并输出m 和n 之间的素数的个数以及这些素数的和(素数就是只能被1 和自身整除的正整数,1 不是素数,2 是素数)。
4.5 编写程序
用一张一元票换1分、2分和5分的硬币(至少各一枚),问有哪几种换法?各几枚?
4.6 猜数游戏
先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。
【思考】如果用scanf输入用户猜测的数据时,如果用户不小心输入了非法字符,如字符a,那么程序运行就会出错,用什么方法可以避免这样的错误发生呢?请编写程序验证方法的有效性。
实验总结:
学号: 姓名: 成绩:
实验五 函数程序设计
实验目的:
1.熟练掌握函数的定义和调用
2.熟练掌握使用函数编写程序
3.掌握函数的实参、形参和返回值的概念和使用
4. 掌握单步调试进入函数和跳出函数的方法
实验内容:
5.1 改错
改正下列程序中的错误,计算1!+2!+3!+4!+…+10!的值,要求定义并调用函数fact(n),计算n!,函数类型是double。
#include <stdio.h>
double fact(int n)
int main(void )
{
int i;
double sum;
for (i = 1 ; i < 10; i++)
sum = sum + fact(i); /*设置断点*/
printf("1!+2!+…+10!= %f\n", sum);
return 0;
}
double fact(int n);
{
int i;
double result;
for (i = 1 ; i <=n; i++)
fact(n)=fact(n)*i;
return result;
}
注:1. 需要修改的语句直接在程序上标注并修改
2. 设置断点,单步进入函数和从函数返回主调函数
5.2 求a+aa+aaa+aa⋯a
输入 2 个正整数a 和n, 求a+aa+aaa+aa⋯a(n 个a)之和。
要求定义并调用函数 fn(a,n),它的功能是返回aa⋯a(n 个a)。例如,fn(3,2)的返回值是33。
。
5.3 统计一个整数中数字的个数
要求定义并调用函数 countdigit(number,digit),它的功能是统计整数number 中数字digit的个数。例如,countdigit(10090,0)的返回值是3
5.4 判断素数
输入一个正整数 n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1 和自身整除的正整数,1 不是素数,2 是素数)。
要求定义并调用函数 prime(m)判断m 是否为素数。
5.5 输出 Fibonacci 序列
输入 2 个正整数m 和n(1<=m,n<=10000),输出m 和n 之间所有的Fibonacci 数。Fibonacci 序列(第1 项起):1 1 2 3 5 8 13 21 ......
要求定义并调用函数fib(n),它的功能是返回第n 项Fibonacci 数。例如,fib(7)的返回值是13。
例:括号内是说明
输入:
20 100 (m=20, n=100)
输出:
21 34 55 89 (20 到100 之间的Fibonacci 数)
实验总结:
学号: 姓名: 成绩:
实验六 数组程序设计
实验目的:
1.熟练掌握一维数组、二维数组编程方法
2. 熟练掌握字符串的存储和操作方法
3.熟练掌握排序算法
实验内容:
6.1改错
改正下列程序中的错误,输入一个正整数n(0<n<9)和一组(n个)有序的整数,再输入一个整数x,把x插入到这组数据中,使该组数据仍然有序。
#include <stdio.h>
int main( )
{
int i, j, n, x, a[n];
printf("输入数据的个数n:");
scanf("%d", &n);
printf("输入%d个整数:", n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("输入要插入的整数:");
scanf("%d", &x);
for(i = 0; i < n; i++){
if(x > a[i]) continue;
j = n - 1;
while(j >= i){ /* 调试时设置断点 */
a[j] = a[j+1];
j++;
} /* 调试时设置断点 */
a[i] = x;
break;
}
if(i == n) a[n]=x;
for(i = 0; i < n + 1; i++)
printf("%d ", a[i]);
putchar('\n');
return 0;
}
6.2 求平均值
输入一个正整数 n (1<n<=10),再输入n 个整数,输出平均值(保留2 位小数)。
6.3 交换最小值和最大值
输入一个正整数 n (1<n<=10),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。
6.4 排序
输入一个正整数 n (1<n<=10),再输入n 个整数,将它们从大到小排序后输出。
6.5 改错
改正下列程序中的错误,输入2个正整数m和n(m>=1,n<=6),然后输入该m行n列二维数组a中的元素,分别求出各行元素之和并输出。
#include <stdio.h>
int main( )
{
int a[6][6], i, j, m, n, sum;
printf("input m, n:");
scanf("%d%d",&m,&n);
printf("input array:\n");
for(i=0;i<m;i++) /* 调试时设置断点 */
for(j=0;i<n;j++)
scanf("%d",&a[i][j]);
sum=0;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
sum=sum+a[i][j];
printf("sum of row %d is %d\n",i,sum); /* 调试时设置断点 */
}
return 0;
}
6.6 编程找鞍点
输入 1 个正整数 n(1≤n≤6)和n 阶方阵a 中的元素,如果找到a 的鞍点(鞍点的元素值在该行上最大, 在该列上最小), 就输出它的下标, 否则,输出"NO"(设a 最多有1 个鞍点)。
6.7 改错
改正下列程序中的错误,输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。如“ABCD”输出为“DCBA”。
#include <stdio.h>
int main( )
{
int i, k, temp;
char str[];
printf("input a string: ");
i = 0;
while((str[i] = getchar( )) != '\n')
i++;
str[i] = '\0';
k = i - 1;
for(i = 0; i < k; i++){ /* 调试时设置断点 */
temp = str[i]; str[i] = str[k]; str[k] = temp;
k++;
} /* 调试时设置断点 */
for(i = 0; str[i] != '\0'; i++)
putchar(str[i]);
return 0;
}
6.8 统计大写辅音字母个数
输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数(除A、E、I、O、U以外的大写字母)。
实验总结:
学号: 姓名: 成绩:
实验七 指针程序设计
实验目的:
1.理解指针、地址和数组间的关系
2. 掌握通过指针操作数组元素的方法
3.掌握数组名作为函数参数的编程方式
4. 掌握通过指针操作字符串的方法
实验内容:
7.1 改错
改正下面程序中的错误。有n个整数,使前面各数顺序循环移动m个位置(m<n)。编写一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个整数。
#include <stdio.h>
void mov(int *, int, int);
int main()
{
int m, n, i, a[80], *p;
printf("Input n, m:");
scanf("%d%d",&n,&m);
for(p=a,i=0;i<n;i++)
scanf("%d",&p++);
mov(a,n,m);
printf("After move: ");
for(i=0;i<n;i++)
printf("%5d",a[i]);
return 0;
}
void mov(int *x, int n, int m)
{
int i,j;
for(i=0;i<m;i++){
for(j=n-1;j>0;j--)
x[j]=x[j-1]; /* 调试时设置断点 */
x[0]=x[n-1];
}
}
7.2 查找整数
定义一个函数 search(int list[],int n,int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1。在main函数中调用search。补充程序完成search功能。
#include <stdio.h>
int search(int list[],int n,int x);
int main()
{
int i, x, a[10], res;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
scanf("%d", &x);
res = search(a, 10, x);
printf("%d ", res);
return 0;
}
int search(int list[],int n,int x)
{
}
7.3 排序
定义函数void sort(int a[],int n),用选择法对数组a中的元素排序。自己定义main函数,并在其中调用sort函数。
7.4 改错
改正下面程序中的错误。输入5个字符串,输出其中最大的字符串。
#include <stdio.h>
#include <string.h>
int main( )
{
int i;
char str[80], max[80];
printf("Input 5 strings:\n");
scanf("%s",str);
max=str;
for(i=1; i<5; i++){
scanf("%s",str);
if (max<str) /* 调试时设置断点 */
max=str;
}
printf("Max is: %s \n", max);
return 0;
}
7.5 字符串复制
分别用字符数组和字符指针定义函数strmcpy(s,t,m),将字符串t中从m个字符开始的全部字符复制到字符串s中去。
实验总结:
学号: 姓名: 成绩:
实验八 结构程序设计
实验目的:
1.掌握结构体变量的基本使用方法
2. 掌握结构体数组的基本使用方法
3.掌握结构体指针的概念,以及结构指针作为函数参数的编程方法
实验内容:
8.1 调试
调试下面的程序,查看运行结果是否和题目要求相符。输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。
工资表
姓名
基本工资
浮动工资
支出
Zhang
1200
500
100
Wang
3500
1000
500
Zhao
2400
800
200
#include <stdio.h>
int main (void )
{
int i, n;
struct emp{
char name[10];
float jbg;
float fdg;
float zc;
} s[10];
printf("n=");
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%s%f%f%f", s[i].name, &s[i].jbg, &s[i].fdg, &s[i].zc);
for (i = 0; i < n; i++) /* 调试时设置断点 */
printf ("%5s,实发工资:%7.2f\n", s[i].name, s[i].jbg+s[i].fdg-s[i].zc);
return 0;
} /* 调试时设置断点 */
和题目要求是否相符?
8.2 日期换算
定义一个关于年、月、日的结构,并编写一函数计算某日是该年中的第几天?注意闰年问题。
8.3 成绩处理
输入一个正整数n,再输入n 个学生的学号和数学、英语、计算机成绩,要求
(1) 计算每一个学生的平均成绩。
(2) 计算每门课程的平均成绩。
(3) 输出平均成绩最高的学生的记录。
(4) 按平均成绩从高到低输出学生的成绩单(学号、数学、英语、计算机成绩和平均成绩)
实验总结:
学号: 姓名: 成绩:
实验九 程序设计进阶
实验目的:
1.了解结构化程序设计的基本思想
2. 掌握使用工程组织多个程序文件的方法
3.掌握函数嵌套、函数递归的编程方法
4. 理解指针与函数间的关系
实验内容:
9.1 按要求调试程序
编写一个简单加、减运算的计算器,输入计算式的格式为
整数常量 运算符 整数常量
先分别编写3个源程序文件,然后用建立工程的方法将这些文件组织起来。
源程序1
#include <stdio.h>
int main(void)
{
extern int Add(int a, int b);
extern int Sub(int a, int b);
int x, y, z;
char ch;
scanf("%d%c%d", &x, &ch, &y);
if(ch=='+')
z=Add(x,y);
else if(ch=='-')
z=Sub(x,y);
else
printf("运算符输入错误!\n");
printf("%d%c%d=%d\n", x, ch, y, z);
return 0;
}
源程序2
extern int Add(int a, int b)
{ int c;
c=a+b;
return c;
}
源程序3
extern int Sub(int a, int b)
{ int c;
c=a-b;
return c;
}
9.2 Fabonacci数列
用递归的方法编写 Fabonacci数列函数,返回值为长整型,并写出响应的主调函数。
9.3 学生成绩管理
输入若干个学生的信息(包括学号、姓名和成绩),输入学号为0时输入结束。建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。
实验总结:
学号: 姓名: 成绩:
实验十 文件程序设计
实验目的:
1. 掌握文件的基本概念
2. 掌握文本文件的打开和关闭操作
3. 掌握文本文件的顺序读、写方法
实验内容:
10.1 调试程序:
从键盘输入一行字符,写到文件a.txt中。记录系统给出的出错信息,并指出出错原因并改正。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{ char ch;
FILE fp;
if((fp = fopen("a.txt", "w")) != NULL){
printf("Can't Open File!");
exit(0);
}
while((ch = getchar()) !='\n' ) /* 调试时设置断点 */
fputc(ch, fp);
fclose(fp);
return 0;
} /* 调试时设置断点 */
10.2统计文件中单词的个数
统计一个英文文本文件中单词的个数,单词间空格或符号隔开。
10.3 综合应用程序
创建一个随机文件,用来存储银行账号、用户名、密码和余额信息,程序要求能够根据用户的账号和密码进入系统,进而可以查询账户的余额、存款、取款,当客户发生交易额时,能更新余额信息,程序操作流程如下图所示。账户信息包括:账号、用户名、密码和余额。
实验总结:
展开阅读全文