c语言程序设计实验指导书1
(30页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
19.9 积分
C 语 言 程 序 设 计实验指导书电子工程学院2008-2实验一 C 程序的运行环境和编辑、调试、运行简单 C 程序一、实验目的1. 了解 Turbo C 的基本操作方法,学会独立使用该系统。2. 掌握在该系统上如何编辑、编译、运行一个 C 程序。二、实验内容及步骤1. 进入 C 的工作环境1)在 Windouws 环境下: “开始”→“程序” →“MS-DOS” 屏幕上进入 MS-DOS 窗口2)在 Dos 环境下: 键入命令 c:\> cd c:\tc↙c:\tc> tc↙屏幕上出现 Turbo C 的工作环境2. 熟悉 Turbo C 的工作环境了解 Edit 窗口与 Message 窗口了解主菜单的 8 个菜单项File Edit Compile Project Option Debug break/watch3. 输入并运行一个简单的程序File→New 输入源程序:main(){printf("This is a C program.\n");printf("OK\n");}按 F9 进行编译和连接,观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。按 Run→Run(或按 Ctrl+F9) 编译、连接、运行一起完成。按 Run→User screen(或按 Alt+F5) 察看运行结果。按任一键从用户屏切换回 TC 窗口。4. 输入并编辑第二个 C 程序File→New输入源程序:main ( ){int a,b,sum; a=123; b=456; sum=a+b;printf("sum is %d\n", sum);}编辑、运行、调试该程序。5. 编辑、运行、调试自己编写的程序(至少一个程序)如:输入上底、下底和高,计算梯形面积。观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。用 File→Save (或 F2)保存程序(程序名为 a1.c)三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 编译过程中出现的错误信息。5. 总结讨论本次实验的结果和收获。实验二 数据类型、运算符和表达式一、实验目的1. 掌握 C 语言的各种类型及其定义方法,赋值方法。2. 掌握不同类型之间赋值的规律。3. 学会使用各种算术运算符,特别是自加自减运算符。4. 进一步熟悉 C 程序的编辑、编译、连接和运行的过程。二、实验内容及实验步骤1. 练习一个有关字符和整型的程序。main(){char c1,c2;c1=97;c2=98;printf("%c %c\n",c1,c2); /*以字符形式输出*/printf("%d %d\n",c1,c2); /*转换为整数形式输出*/}2. 转义字符的练习。main(){ printf("---------------*\r*\n");printf("\tOA\bK\n");printf("#---------------#\n");printf("\tABC\tDEF\tGHI\n");printf("\t123\t456\t789\n");}对照输出,理解转义字符的含义。3. 自加自减程序的练习。main(){ int a=5,b=3,c1,c2;a++;--b;c1=++a+b;c2=c1---a/b;b=++a+b+c1--+c2;printf("a=%d\nb=%d\nc1=%d\nc2=%d\n",a,b,c1,c2);}4. 各种类型混合运算的例子main(){ int a=7,b=3; char c1=’a’,c2=66;float x=12.25;double y=1.3333333333;long d=5432789;a=x+b*x+y/2-d%(c1-c2);printf("a=%d, b=%d,c1=%c\n",a,b,c1);printf("d=%ld, x=%f, y=%10.2f\n",d,x,y);}5. 上机改错题:请指出以下 C 程序的错误所在(1) main();float r,s;r=5.0;s=3.14159*r*r;printf("%f\n",s)(2)main{ float a,b,c,v;a=2.0; b=3.0; c=4.0v=a*b*c;printf("%f\n",v)}6. 调试、运行自己编写的程序。(1) 已知圆半径 r=1.5,圆柱高 h=3, 求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。(2)输入一个华氏温度,要求输出摄氏温度。公式为 c=5/9*(f-32).三、实验报告要求写明1. 实验目的2. 实验内容及步骤3. 编写的程序(题目,经调试、运行后正确的程序) 4. 编译过程中出现的错误信息。5. 总结讨论本次实验中的问题和收获i++和 ++ i 的区别,i--和 --i 的区别各种类型混合运算时的类型转换实验三 顺序和分支结构的程序设计一、实验目的1. 掌握 C 语言中使用最多的一种语句——赋值语句的使用方法。2. 掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。3. 熟练掌握 if 语句和 switch 语句。二、实验内容及实验步骤1. 掌握各种格式转换符的正确使用方法(1)输入程序main(){int a, b;float d, e;char c1, c2;double f, g;long m, n;unsigned int p, q;a = 61; b = 62;c1 = ’a’; c2 = ’b’;f = 3157.890121; g = 0.123456789;d = f; e = g;p = a = m = 50000; q = b = n = -60000;printf("a=%d, b=%d\nc1=%c, c2=%c\nd=%6.2f, e=%6.2f\n", a, b, c1, c2, d, e);printf("f=%15.6f, g=%15.12f\nm=%ld, n=%ld\np=%u, q=%u\n", f, g, m, n, p, q);}(2)运行此程序并分析结果。(3)改用 scanf 函数输入数据而不用赋值语句,scanf 函数如下:scanf("%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u",&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);输入的数据如下:61,62,a,b,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000↙(说明:lf 和 ld 格式符分别用于输入 double 型和 long 型数据)分析运行结果。(4)在(3) 的基础上将 printf 语句改为:printf("a=%d, b=%d\nc1=%c, c2=%c\nd=%15.6f, e=%15.12f\n", a, b, c1, c2, d, e);printf("f=%f, g=%f\nm=%d, n=%d\np=%d, q=%d\n", f, g, m, n, p, q);运行程序。2. 字符的输入输出#includemain(){char a,b;a=’g’;b=getchar();putchar(a);putchar(b);}3. 以下程序多处有错。若指定必须按下面的形式输入数据,并且必须按下面指定的形式输出数据,请对该程序做相应的修改。main{ double a,b,c,s,v;printf(input a,b,c: \n);scanf("%d %d %d",a,b,c);s=a*b;v=a*b*c;printf("%d %d %d",a,b,c);printf("s=%f\n", s, "v=%d\n",v);}当程序执行时,屏幕的显示和要求输入形式如下:input a,b,c:2.0 2.0 3.0 此处的 2.0 2.0 3.0 是用户输入的数据a=2.000000,b=2.000000,c=3.000000 此处是要求的输出形式s=4.000000,v=12.0000004. 编辑、运行、调试自己编写的程序给出一个百分制成绩,要求输出成绩等级 A、B、C、D、E。90 分以上为 A,80-89分为 B,70-79 分为 C,60-69 分为 D,60 分以下为 E。事先编好程序,要求分别用 if 语句和 switch 语句实现。运行程序,并检查结果是否正确。三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 编译过程中出现的错误信息。5. 总结讨论本次实验的结果和收获。实验四 循环结构的程序设计一、实验目的1. 熟练掌握 while 循环语句的应用。2. 熟练掌握 do—while 循环语句的应用。3. 熟练掌握 for 循环语句的应用。4. 理解三者的区别和联系。二、实验内容及实验步骤1. 求 5!main(){int n,t;n=1;t=1;while(tmax){max=a[i][j];r=i;c=j;}printf("max=%d ,row=%d ,colum=%d \n",max,r,c);}3. 测试、运行自己编写的程序。(1)编写程序,将数组中所有奇数放在另一个数组中返回。(2)输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对插在最前、插在最后、插在中间三种情况运行程序,以便验证程序是否正确。(3)求两个矩阵之和。三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 编译过程中出现的错误信息。5. 总结讨论本次实验的结果和收获。实验六 数组(二)一、实验目的掌握字符数组的使用。二、实验内容及实验步骤1. 输入一串字符,计算其中空格的个数。#include "stdio.h"#include "string.h"main( ){char c[30];int i,sum=0;gets(c);for(i=0;ic&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0)printf("area=%-7.2f\n",area(a,b,c)); }/* 以下是计算任意三角形面积的函数 */float area(float a,float b,float c){float s,area_s;s=(a+b+c)/2.0;area_s=sqrt(s*(s-a)*(s-b)*(s-c));return(area_s);}2. 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。main(){int x,y;printf("%d\n",sum(x+y));int sum(a,b);{int a,b;return(a+b);}}3. 测试、运行自己编写的程序。(1)编写函数,对传送过来的三个数选出最大数和最小数,并通过形参传回调用函数。(2)写出两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。(3)写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 思考题的解决方法。5. 总结讨论本次实验的结果和收获。实验八 C 程序的函数(二)一、实验目的1. 掌握自定义函数的一般结构及定义函数的方法。2. 掌握形参、实参、函数原型等重要概念。3. 掌握函数声明、函数调用的一般方法。二、实验内容及实验步骤1. 菜单程序。编写一个菜单程序,运行后首先在屏幕显示如下菜单,当输入数值 1 后,调用显示“&”图案的函数程序;输入数值 2 后,调用显示“$”图案的函数程序;输入数值 3 后结束程序。*********************************** Menu section ** 1. Design(&) ** 2. Design($) ** 3. Exit ***********************************参考程序/* 菜单程序 */#include "stdio.h"void design1();void design2();main(){int op; /* 以下代码生成菜单 */printf("\n*************************************"); printf("\n* Menu section *");printf("\n* 1. Design(&) *");printf("\n* 2. Design($) *");printf("\n* 3. Exit *");printf("\n*************************************");printf("\nPlease enter selection:"); scanf("%d",&op);if(op==1)design1();else if(op==2)design2();}/* 以下是显示 &图案的函数 */void design1(){int i; char str[31]="&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&";for(i=1;i#define PI 3.1415926void main(){float l,s,r,v;printf("input radius:");scanf("%f",&r);l=2.0*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v);}(2)在宏定义中引用已定义的宏名 #include #define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rvoid main(){printf("L=%f\nS=%f\n",L,S);}(3)使用带参数的宏 #include #define PI 3.1415926#define S(r) PI*r*rvoid main(){ float a,area;a=3.6; area=S(a);printf("r=%f\narea=%f\n",a,area);}(4)通过宏展开得到若干个结果#include #define PI 3.1415926#define CIRCLE(R,L,S,V) L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R void main(){float r,l,s,v;scanf("%f",&r);CIRCLE(r,l,s,v);printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f\n",r,l,s,v); }2. 利用条件编译实现:如果输入两个实数,则交换后输出;如果输入的是三个实数,则只输出其中最大的数.三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 思考题的解决方法。5. 总结讨论本次实验的结果和收获。实验十 C 程序的指针(一)一、实验目的1. 掌握指针和指针变量的概念。2. 掌握简单指针变量的定义和基本使用方法。3. 熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。4. 了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法。5. 了解指针与字符串的关系,能熟练使用指针处理字符串。二、实验内容及实验步骤1. 用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量 p1,p2,p3,使 p1 指向三个数的最大者,p2 指向次大者,p3 指向最小者,然后按由小到大的顺序输出这三个数。参考程序/* 用指针访问简单变量的程序 */#include "stdio.h"main(){int a,b,c,temp;int *p1,*p2,*p3;printf("请输入三个整数值(a,b,c):\n");scanf("%d,%d,%d",&a,&b,&c);p1=&a; /* 使指针 p1 指向简单变量 a */p2=&b; /* 使指针 p2 指向简单变量 b */p3=&c; /* 使指针 p3 指向简单变量 c */if(*p1=p;q--) /* 元素后移 */*(q+1)=*q;*p=n; /* 插入数据 */printf("\n 插入数据后的数列:\n");for(p=a,i=0;is2,则返回它们二者第一个不相同的 ASCII 码值(如“BOY”与“BAD”的第二个字母不相同, “O”与“A”之差为 79-65=14) ;如果 s1>s2,则输出正值;如果 s12) /* 闰年处理 */ if(d.year%400==0||d.year%100!=0&&d.year%4==0)sum+=1;printf("Total: %d\n",sum);}程序调试:① 运行程序,输入一个合法日期数据,察看并分析程序结果。② 运行程序,输入一个月份非法的日期数据,察看并分析程序结果。③ 运行程序,输入一个日子非法的日期数据,察看并分析程序结果。④ 完善程序,使得在任何情况下,都能输出一个合理的结果。⑤ 用结构体指针改写上面的程序。2. 学生成绩问题。有 10 个学生,每个学生的数据包括学号、姓名、3 门课的成绩。从键盘输入 10 个学生数据,要求打印出每门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3 门课的成绩、平均分数)。参考程序/* 学生成绩问题程序 */#include "stdio.h"#define N 10struct student /* 定义结构体数据类型 */{char num[5]; /* 学号(不超过 4 位) */char name[10]; /* 姓名(不超过 9 位) */int score1; /* 成绩 1 */int score2; /* 成绩 2 */int score3; /* 成绩 3 */};main(){struct student stu[N]; /* 定义结构体数组 */int max=0,sum1=0,sum2=0,sum3=0;int i,k=0,total,ave1,ave2,ave3,average;for(i=0;imax){max=total;k=i;} /* 第 k 个结构体元素为最高分学生数据 */ }ave1=sum1/N;ave2=sum2/N;ave3=sum3/N;average=(stu[k].score1+stu[k].score2+stu[k].score3)/3;printf("The average score of this class are:\n");printf("score1=%d, score2=%d, score3=%d\n",ave1,ave2,ave3);printf("The student of maxscore is:\n"); printf("num:%s,name:%s,score1:%d,score2:%d,score3:%d,average:%d\n",stu[k].num,stu[k].name,stu[k].score1,stu[k].score2,stu[k].score3,average);}程序调试:先用三个学生的数据调试程序(将程序中符号常量 N 定义为 3):① 运行程序,输入三个学生的数据:学号不超过 4 字符,以回车键结束;姓名不超过 9 字符,以回车键结束;成绩数据之间用逗号分隔,以回车键结束。察看并分析程序结果。② 运行程序,输入的学号或姓名信息超过规定长度,察看并分析程序结果。用三个学生的数据调试通过后,再用 10 个学生数据进行测试。三、实验报告要求写明:1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 思考题的解决方法。5. 总结讨论本次实验的结果和收获。实验十三 编程综合练习一、实验目的1. 掌握 C 程序设计语言的相关知识,提高 C 程序的编程技巧;2. 学会使用文件相关函数进行编程综合练习。二、实验内容及实验步骤1. 文本文件显示。用任何一种方法先创建一个文本文件 string.txt,编写程序将该文件的内容显示出来。参考程序/* 显示文本文件的程序 */#include "stdio.h"main(){FILE *fp;char ch;if((fp=fopen("string.txt","r"))==NULL){printf("cannot open source file.\n");exit(1);}while(!feof(fp)){ch=fgetc(fp);putchar(ch);}fclose(fp);}程序调试① 建立 string.txt 文本文件。② 运行程序,察看并分析程序的运行结果。③ 删除 string.txt 文本文件后,运行程序,察看并分析程序的运行结果。2. 文件复制。编写一个文本文件复制函数,并在主函数 main()中调用它,将上面建立的文本文件 string.txt 复制到文件 backup.txt 中。参考程序/* 文件复制程序 */#include"stdio.h"void copy(char *,char *); /* 文件复制函数原型说明 */main(){char *source="string.txt";char *target="backup.txt";copy(source,target);} void copy(char *source,char *target){FILE *fp_s,*fp_t;if((fp_s=fopen(source,"r"))==NULL) /* 以读方式打开源文件 */{printf("cannot open source file.\n");exit(1);} if((fp_t=fopen(target,"w"))==NULL) {printf("cannot open target file.\n");exit(1);} while(!feof(fp_s))fputc(fgetc(fp_s),fp_t);fclose(fp_s);fclose(fp_t);return;}程序调试运行程序后,用文本编辑软件打开 backup.txt 文件察看结果。也可以使用上面的文本文件显示程序察看结果。3. 用文件存储学生数据。有 5 个学生,每个学生有 3 门课的成绩,从键盘输入数据(包括学生号、姓名、3 门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud 中。设 5 名学生的学号、姓名和 3 门课成绩如下:99101 Wang 89 98 6799103 Li 60 80 9099106 Fun 75 91 9999110 Ling 80 50 6299113 Yuan 58 68 7l参考程序/* 用文件存储学生数据程序 */#include "stdio.h"#define N 5struct student /* 定义学生结构体数据类型 */{char num[10];char name[8];int score[3];float ave;};main(){struct student stu[5];int i,j;FILE *fp;float sum;for(i=0;i
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。