c语言程序设计实验报告模板
一、实验目的:
1、掌握C语言的数据类型和变量的声明。
2、掌握不同类型数据之间赋值的规律。
3、掌握C语言的运算符和表达式的使用。
4、熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容:
①输人程序: #includevoid 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'; d=3.56;e=-6.87; f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000; printf("a=%d,b=%d c1=%c,c2=%c d=%6.2f,e=%6.2f ",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.6f m=%ld,n=%ld p=%u,q=%u ",f,g,m,n,p,q); } ②运行此程序并分析结果 (2)按习题4. 8要求编写程序 题目为: 设圆半径r=l. 5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 用scanf输人数据,输出计算结果口输出时要有文字说明,取小数点后两位数字。
程序:
三、实验步骤:
①输人程序:
#include
void 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'; d=3.56;e=-6.87; f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000; printf("a=%d,b=%d c1=%c,c2=%c d=%6.2f,e=%6.2f ",a,b,c1,c2,d,e); printf("f=%15.6f,g=%15.6f m=%ld,n=%ld p=%u,q=%u ",f,g,m,n,p,q); }
②运行此程序并分析结果。
预计结果:
a=61,b=62
c1=a,c2=b
d=``3.56,e=`-6.87
f=````3157.890121,g=```````0.123456
m=50000,n=-60000
p=32768,q=40000(`代表空格)
结果:
g的输出看来是四舍五入了。
③在此基础上,将程序第9~14行改为:
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;
运行程序,分析结果。
p=a=m=50000;q=b=n=-60000;这两条语句将p、a、m的值和q、b、n的值都重新赋了相应的新值。除m、n外都是整型、无符号整型或字符型,因此输出会按数据类型强制截取,因此得到的值会不尽相同,但可以从理论上做出推测,但由于编译系统的不同,真正得到的结果也可能不尽相同。
④改用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);
输入的数据如下:
分析运行结果。
(说明:lf和ld格式符分别用于输人double型和long型数据)
⑤在④的基础上将printf语句改为:
printf("a=%d,b=%d c1=%c,c2=%c d=%15.6f,e=%15.6f ",a,b,c1,c2,d,e);
printf("f=%f,g=%f m=%ld,n=%ld p=%u,q=%u ",f,g,m,n,p,q);
运行程序:
⑥将p、q改用%o格式符输出。
⑦将scanf函数中的%1f和%ld改为%f和%d,运行程序并观察分析结果。
出现错误,提示为:浮点错误:超出范围。程序异常中止。 (2)按习题4. 8要求编写程序
题目为:
设圆半径r=l. 5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 用scanf输人数据,输出计算结果口输出时要有文字说明,取小数点后两位数字。 程序:
#include
void main()
{
float h,r,s,sq,vq,vz;
float pi=3.1415926;
printf("Please input the circinal r, and the cylindrical h:");
scanf("%f,%f",&r,&h);
l=2*pi*r;
sq=4*pi*r*r;
vq=4.0/3.0*pi*r*r*r;
vz=pi*r*r*h;
printf("circinal girth is: l=%6.2f ",l);
printf("circinal area is: s=%6.2f ",s);
printf("sphere surface area is: sq=%6.2f ",sq);
printf("sphere cubage is: vq=%6.2f ",vq);
printf("cylindrical cubage is: vz=%6.2f ",vz);
}
(3)编程序,用getchar函数读人两个字符给c1 ,c2,然后分别用putchar函数和printf输出这两个字符。 上机运行程序,比较用printf和putchar函数输出字符的特点。 程序如下: #includevoid main() { char c1,c2; printf("Please input tow letters: "); c1=get); c2=get); printf("Putchar is: "); putc1); putc2); printf(" "); printf("Printf is: "); printf("%c %c ",c1,c2);
}
可见有putchar输出的结果是一个字符一个字符顺序输出的。每个putchar函数只能输出一个字符,且只能输出字符,而printf可以输出多个数据,且为任意类
四、实验心得(体会):
通过本次C语言上机实验,我对顺序结构程序设计有了一定的了解。通过几个例题,我对顺序结构中scanf和printf语句的基本实用情况有了一定的理解。我相信这些都为后来的编程打下基础。对C语言学习,我会更加努力。
(一) 实验目的
(1) 熟悉和掌握结构的说明和引用、结构的指针、结构数组,以及函数中使用结构的方
法。
(2) 掌握动态存储分配函数的用法,掌握自引用结构和单向链表的创建、遍历、结点的
增删、查找等操作。
(3) 了解字段结构和联合的用法。
(二) 实验内容及要求
1.表达式求值的程序验证 设有说明:
char u[] = "UVWXYZ"; char v[] = "xyz"; struct T{ int x; char c; char *t;
}a[] = {{11, 'A', u}, {100, 'B', v}}, *p = a;
请先自己计算表2.1中表达式的值,然后编写程序并运行来加以验证。(各表达式相互无关)
2.源程序修改、替换
下面所给源程序的功能是:给定一批整数,以0作为结束标志且不作为结点,将其建成一个先进先出的链表。先进先出链表的头指针始终指向最先创建的结点(链头),先建结点指向后建结点,后建结点始终是尾结点。请完成以下工作:
(1) 源程序中存在什么样的错误(先观察执行结果)?对程序进行修改、调试。使之能
够正确完成指定任务。
(2) 修改替换creat_list函数,将其建成一个后进先出的链表。后进先出的链表的头指针
始终指向最后创建的结点(链头),后建结点指向先建结点,先建结点始终是尾结点。
源程序
#include
#includestruct s_list{ int data;
struct s_list *next; };
void creat_list(struct s_list *headp, int *p); int main(void) {
struct s_list *head = NULL, *p; int s[] = {1, 2, 3, 4, 5, 6, 7, 8, 0}; creat_list(head, s); p = head; while(p) {
printf("%d ", p -> data);p = p -> next; }
printf(" "); return 0; }
void creat_list(struct s_list *headp, int *p) {
struct s_list *loc_head = NULL, *tail; if(p[0] == 0); else {
loc_head = (struct s_list *)malloc(sizeof(struct s_list));loc_head -> data = *p++;tail = loc_head;while(*p){
tail -> next = (struct s_list *)malloc(sizeof(struct s_list)); tail = tail -> next; tail -> data = *p++;}
tail -> next = NULL; }
headp = loc_head; }
3.程序设计
编写并上机调试运行能实现以下功能的程序或函数:
(1)编写一个程序,实现以下功能:定义一个字段结构struct bits,它将一个8位无符号字节从最低位向最高位声明为8个字段,各字段依次为bit0, bit1, …… bit7,且bit0的优先级
最高。同时设计8个函数,第i个函数以biti(i = 0, 1,……7)为参数,并且在函数体内输出biti的值。将8个函数的名字存入一个函数指针数组p_fun。如果bit0为1,调用p_fun[0]指向的函数。如果struct bits中有多位为1,则根据优先级从高到低依次调用函数指针数组p_fun中相应元素指向的函数。8个函数中的第0个函数可以设计为 Void f0(struct bits b) {
Printf(“the function %d is called! ”, b); }
(3) 设计用单词链表建立一张班级成绩单,包括每个学生的学号、姓名、英语、高等数
学、普通物理、C语言程序设计四门课程的成绩,试用函数编程实现下列功能:
① 输入每个学生的各项信息。 ② 输出每个学生的.各项信息。 ③ 修改指定学生的指定数据项的内容。 ④ 统计每个同学的平均成绩(保留两位小数)。 ⑤ 输出各位同学的学号、姓名、四门课程的总成绩和平均成绩。 4.选做题
(1)对上述程序设计题中第(2)题的程序,增加按照平均成绩进行升序排序的函数,试写出用交换结点数据域的方法升序排序的函数,排序可用选择法或冒泡法。
(2)对选做题第(1)题,进一步写出用交换结点指针域的方法升序排序的函数。 (3)采用双向链表重做编程设计题中的第(2)题。
(三) 实验步骤及结果
1.表达式求值的程序验证的实验步骤及结果
表2.1 表达式值的计算
结果正确!
2.源程序修改、替换的实验步骤及结果
(1)改错:headp类型应为双重指针,即:void creat_list(struct s_list **headp, int *p); 同时第40行应该改为*headp = loc_head; 第12行改为creat_list(&head, s); 修改后的程序如下: #include#includestruct s_list{ int data;
struct s_list *next; };
void creat_list(struct s_list **headp, int *p); int main(void)
{
struct s_list *head = NULL, *p; int s[] = {1, 2, 3, 4, 5, 6, 7, 8, 0}; creat_list(&head, s); p = head; while(p) {
printf("%d ", p -> data);p = p -> next; }
printf(" "); return 0; }
void creat_list(struct s_list **headp, int *p) {
struct s_list *loc_head = NULL, *tail; if(p[0] == 0); else {
loc_head = (struct s_list *)malloc(sizeof(struct s_list));loc_head -> data = *p++;tail = loc_head;while(*p){
tail -> next = (struct s_list *)malloc(sizeof(struct s_list)); tail = tail -> next; tail -> data = *p++;}
tail -> next = NULL; }
*headp = loc_head; }
程序运行结果如图所示:
结果正确!
(2)建立一个后进先出的链表如下:
修改后程序如下: #include#includestruct s_list{ int data;
struct s_list *next; };
void creat_list(struct s_list **headp, int *p); int main(void) {
struct s_list *head = NULL, *p; int s[] = {1, 2, 3, 4, 5, 6, 7, 8, 0}; creat_list(&head, s); p = head; while(p) {
printf("%d ", p -> data);p = p -> next; }
printf(" "); return 0; }
void creat_list(struct s_list **headp, int *p) {
struct s_list * loc_head=NULL,*tail; struct s_list * temp; if(p[0]==0) ;
一、实验目的:
1.熟悉Win TC或者VC++ 6.0的软件环境,掌握使用其进行编辑、编译、连接和运行的方法。 2.通过运行简单的C程序,掌握C源程序的特点。
二、实验内容:(由学生选择WinTC或者VC之一完成相关实验) 1.运行WinTC程序,进入C程序设计环境。 2.建立工程文件 3.编辑源文件 4.编译、连接
(1)单文件源程序的编译、连接
源程序先经过编译,生成目标文件(.obj文件),然后将目标文件进行连接,生成可执行文件(.exe)。 如果编译、连接中发生错误,在Message窗口中显示出错信息,修改错误后,可重新编译、连接。 (2)多文件源程序的编译、连接
可以用长的源程序分割成几个文件,分别编译然后生成可执行文件。此时使用Project菜单。步骤: 第一步:有三个文件f1.c、f2.c、f3.c组成一个完整的C程序,分别建立三个文件,将f1.c、f2.c、f3.c三个文件保存到同一个文件夹中(如d: cproject)。 f1.c:
#include "stdio.h" extern a,b;
extern max(int x,int y); main() { int e
=1,f=2;
printf("%d ",max(a,b)); printf("%d ",max(e,f)); } f2.c: int a=3,b=4; f3.c:
int max(int x,int y ) {return x>yx:y;}
第二步:构造Project文件,在编辑状态下,编辑一个扩展名为.prj的文件,文件的内容为:
f1 f2 f3
第三步:构造EXE文件,按F9键即将三个文件编译、连接成一个EXE文件,文件名为wang.exe。 如果编译、连接出现错误,则必须进行修正,然后再编译。 5.运行程序
如果编译、连接完全正确,则可以用运行程序。
三、实验过程(依据上面示例,简要描述你使用WinTC或者其它编译器的过程)
河南高考排名243480左右排位理科可以上哪些大学,具体能上什么大学
广西高考排名212400左右排位理科可以上哪些大学,具体能上什么大学
广东高考排名85850左右排位物理可以上哪些大学,具体能上什么大学
陕西高考排名150120左右排位理科可以上哪些大学,具体能上什么大学
福建高考排名3220左右排位历史可以上哪些大学,具体能上什么大学
河北高考排名114880左右排位物理可以上哪些大学,具体能上什么大学
有关春节安全通知四篇
关于班主任自主招生推荐信八篇
合肥市5月国家职业资格统一鉴定报名通知
五年级数学教师述职报告(精选五篇)
五年级数学教师述职报告(精选五篇)
公司部门员工辞职报告7篇
电厂的实习报告三篇
工程技术部述职报告
在幼儿园的暑假工作实践报告范文
大学生消费状况调查报告模板
重庆高考排名14250左右排位历史可以上哪些大学,具体能上什么大学
河北高考排名141780左右排位历史可以上哪些大学,具体能上什么大学
贵州高考排名122910左右排位文科可以上哪些大学,具体能上什么大学
河南高考排名13840左右排位文科可以上哪些大学,具体能上什么大学
四川电影电视学院和沈阳大学哪个好 附对比和区别排名
考浙江东方职业技术学院要多少分山西考生 附2024录取名次和最低分
云南高考排名44990左右排位理科可以上哪些大学,具体能上什么大学
黑龙江高考排名95680左右排位理科可以上哪些大学,具体能上什么大学
安徽高考排名91690左右排位理科可以上哪些大学,具体能上什么大学
岳阳职业技术学院的医学检验技术专业排名怎么样 附历年录戎数线
文山学院和韶关学院哪个好 附对比和区别排名
海南高考排名4000左右排位综合可以上哪些大学,具体能上什么大学
沈阳科技学院和广州软件学院哪个好 附对比和区别排名
重庆交通大学的能源与动力工程专业排名怎么样 附历年录戎数线
山东高考排名438500左右排位综合可以上哪些大学,具体能上什么大学
广东高考排名49880左右排位物理可以上哪些大学,具体能上什么大学
辽宁财贸学院和新疆农业大学哪个好 附对比和区别排名
青海高考排名16830左右排位理科可以上哪些大学,具体能上什么大学
广东高考排名224680左右排位物理可以上哪些大学,具体能上什么大学
皖西学院和山西中医药大学哪个好 附对比和区别排名
语文教师学期述职报告范文
语言类实习报告汇总六篇
关于美丽家乡的社会实践报告
客服主管岗位竞聘报告(客服主管岗位竞聘报告优秀范文)
物流公司员工年终述职报告
行政管理专业实习报告范文三篇
护士长优秀述职报告
项目部个人述职报告
关于厨师辞职报告9篇
关于道路毕业实习报告四篇
关于养老的调查报告
学校教学副校长述职报告(精选9篇)
关于保密工作自查自评的报告
关于教师节的活动报告总结
中学教师职称的述职报告范文