C语言与软件技术基础用户自己建立数据类型实验报告

时间:2024.4.27

C语言与软件技术基础

实 验 报 告

课程名称

指导老师

班 级 实验名称 实验时间 姓 名 实验地点 提交时间 座 号

一、实验目的和要求

1、掌握结构体类型变量的定义和使用。

2、掌握结构体类型数组的概念和应用。

3、了解链表的概念和操作方法。

二、实验环境和方法

实验方法:

(一)综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

(二)结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

(三)根据实验内容,编译程序。

实验环境:Windows xp Visual C++6.0

三、实验内容及过程描述

实验内容:编译以下题目的程序并调试运行。

1、有5个学生,每个学生的数据包括学号、姓名、3门课成绩。从键盘输入5个学生数据,要求输出3门课程平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分)。 2、13个人围城一圈,从第1个人开始顺序报号1、2、3.凡报到“3”者退出圈子,找出最后留在圈子中的人原来的号。要求用链表实现。

3、建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

实验步骤:

① 进入Visual C++ 6.0集成环境。

② 输入自己编好的程序。

③ 检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。

④ 进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。

⑤ 运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正确,应运行多次,分别检查在不同情况下结果是否正确。

以下是各题源代码:

1、有5个学生,每个学生的数据包括学号、姓名、3门课成绩。从键盘输入5个学生数据,要求

输出3门课程平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分)。 #include<stdio.h> struct Student {int num; char name[10]; float score[3]; float total; float ave; }stu[10]; int main() { void input(struct Student stu[]); void max(struct Student stu[]); void print(struct Student stu[]); input(stu); print(stu); max(stu); return 0; } void input(struct Student stu[]) {int i,j; for(i=0;i<10;i++) {printf("请输入第%d位学生信息:\n",i+1); printf("学号:"); scanf("%d",&stu[i].num); printf("姓名:"); scanf("%s",stu[i].name); for(j=0;j<3;j++) {printf("第%d门成绩:",j+1); scanf("%f",&stu[i].score[j]); } printf("\n"); stu[i].total=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]); stu[i].ave=stu[i].total/3; } } void print(struct Student stu[]) {int i,j; printf("*******************所有学生成绩************************\n"); printf("学号\t姓名\t 第一门 第二门 第三门 总分 平均分\n"); for(i=0;i<10;i++) { printf("\nNO.%d\t%s\t",stu[i].num,stu[i].name); for(j=0;j<3;j++) { printf("%8.2f ",stu[i].score[j]); } printf("%8.2f %8.2f\n",stu[i].total,stu[i].ave); } } void max(struct Student stu[]) {int i,j,M=0; for(i=0;i<10;i++) { if(stu[i].total>stu[M].total) M=i; } printf("****************成绩最高的学生******************\n");

printf("****************成绩最高的学生******************\n");

printf("学号\t姓名\t 第一门 第二门 第三门 总分 平均分\n");

printf("NO.%d\t%s\t",stu[M].num,stu[M].name);

for(j=0;j<3;j++)

{

printf("%8.2f ",stu[M].score[j]);

}

printf("%8.2f %8.2f\t\n",stu[M].total,stu[M].ave);

}

2、13个人围城一圈,从第1个人开始顺序报号1、2、3.凡报到“3”者退出圈子,找出最后留在圈子中的人原来的号。要求用链表实现。

#include<stdio.h> #define N 13 struct person {int number; int nextp; }link[N+1]; int main() {int i,count,h; for(i=1;i<=N;i++) {if(i==N) link[i].nextp=1; else link[i].nextp=i+1; link[i].number=i; } printf("\n"); count=0; h=N; printf("退出圈子的号数为:\n"); while(count<N-1) {i=0; while(i!=3) {h=link[h].nextp; if(link[h].number) i++; } printf("%4d",link[h].number); link[h].number=0; count++; } printf("\n最后留下来的号数为:"); for(i=1;i<=N;i++) if(link[i].number) printf("%3d",link[i].number); printf("\n"); return 0; }

3、建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

#include <stdio.h> #include <malloc.h> #define LEN sizeof(struct student) struct student //定义结构体 { char num[6]; //学号 char name[8]; //姓名 char sex[2]; //性别 int age; //年龄 struct student *next; //结构体指针 } stu[10]; //结构体变量 int main() { struct student *p,*pt,*head; int i,length,iage,flag=1; int find=0; //找到待删除元素 find=1,否则find=0 while (flag==1) {printf("输入链表长度(<10):"); scanf("%d",&length); if (length<10) flag=0; } //建立链表 for (i=0;i<length;i++) {p=(struct student *) malloc(LEN); if (i==0) head=pt=p; else pt->next=p; pt=p; printf("学号:"); scanf("%s",p->num); printf("姓名:"); scanf("%s",p->name); printf("性别:"); scanf("%s",p->sex); printf("年龄:"); scanf("%d",&p->age); } p->next=NULL; p=head; printf("\n 学号 姓名 性别 年龄\n"); //显示 while(p!=NULL) {printf("%4s %8s %6s%6d\n",p->num,p->name,p->sex,p->age); p=p->next; } // 删除 printf("请输入要删除的年龄:"); //输入待删年龄 scanf("%d",&iage); pt=head; p=pt; if (pt->age==iage) //链头是待删元素 {p=pt->next; head=pt=p; find=1; } else //链头不是待删元素 pt=pt->next; while (pt!=NULL) {if (pt->age==iage) {p->next=pt->next;

C语言与软件技术基础用户自己建立数据类型实验报告

{p->next=pt->next; find=1; } else // 中间结点不是待删元素 p=pt; pt=pt->next; } if (!find) printf(" 找不到年龄为 %d的对象.",iage); p=head; printf("\n 学号 姓名 性别 年龄9\n"); //显示结果 while (p!=NULL) {printf(" %4s %8s",p->num,p->name); printf("%6s%6d\n",p->sex,p->age); p=p->next; } return 0; }

四、实验结果:

1、有5个学生,每个学生的数据包括学号、姓名、3门课成绩。从键盘输入5个学生数据,要求输出3门课程平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分)。

运行结果:

以上是输入数据,以下是输出结果:

C语言与软件技术基础用户自己建立数据类型实验报告

2、13个人围城一圈,从第1个人开始顺序报号1、2、3.凡报到“3”者退出圈子,找出最后留在圈子中的人原来的号。要求用链表实现。

C语言与软件技术基础用户自己建立数据类型实验报告

3、建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

C语言与软件技术基础用户自己建立数据类型实验报告


第二篇:数据类型、运算符和表达式(C语言实验报告)


仲恺农业工程学院实验报告纸

信息学院(院、系) 专业 班 C语言程序设计 课 实验目的:

(1) 掌握C语言数据类型,熟悉基本类型变量的定义、赋值和运算。

(2) 熟悉C程序的编辑、编译、链接和运行过程。

实验内容与总结:

1、 运行下面程序,分析实验结果。

#include <stdio.h>

void main()

{

float x=2.5,y=4.7;

int a=7,b;

float result;

result=x+a%3*(int)(x+y)%2/4; /*赋值语句1*/

printf("result1=%f\n",result);

a=2;b=3;x=3.5;y=2.5;

result=(float)(a+b)/2+(int)x%(int)y; /*赋值语句2*/

printf("result2=%f\n",result);

}

分析:

(1)、result=x+a%3*(int)(x+y)%2/4;语句求值过程分析如下:

a%3=1;(int)(x+y)=7;result=x+a%3*(int)(x+y)%2/4=2.5+1*7%2/4=2.5+1/4=2.500000 因为float result,所以输出结果有六位小数。

(2)、result=(float)(a+b)/2+(int)x%(int)y; 语句求值过程分析如下:

(float)(a+b)/2=(2+3)/2=2.500000;(int)x%(int)y=3%2=1,所以result=3.500000.

(3)、该实验中表达式求值所用到的知识点包括:

①单精度浮点型变量float,有效数学为6~7位;

②基本整型int;

③程序内printf函数中的“%f”是输出浮点数时指定的格式符,作用是指定该实数以小数形式输出;

④取商符号“/”, 取余符号“%”;

⑤转义字符\n,作用是换行,将当前位置移到下一行开头。

2、 译码:教材P67-3.7

程序:

#include<stdio.h>

void main()

{

char c1='C',c2='h',c3='i',c4='n',c5='a';

c1+=4;

c2+=4;

c3+=4;

c4+=4;

c5+=4;

printf("Password is %c%c%c%c%c\n",c1,c2,c3,c4,c5);

}

(1)、程序编制要点:

①指定字符变量,初值分别’C’,’h’,’i’,’n’,’a’;

②经过运算,使C变为G,h变为l,i变为m,n变为r,a变为e;

③输出结果:China 译成 Glmre。

(2)该题目涉及的知识点和难点:

①字符变量char的使用;

②复合的赋值运算符“+=”, c+=4是表示c=c+4,

③程序内printf函数中的“%c”是输出字符时指定的格式符,作用是指定该实数以字符形式输出; ④“;”的使用。

3、 输入一个三位整数,然后构成其反向三位数,并将其输出。

程序:

#include<stdio.h>

void main()

{

int a,b,c,x,y;

printf("请输入一个三位整数 x=");

scanf("%d",&x);

a=x/100;

b=(x-a*100)/10;

c=x-a*100-b*10;

y=c*100+b*10+a;

printf(“%d\n",y);

}

(1)、程序编制要点:

①输入一个三位数x,取出它的个位数a,十位数b,百位数c;

②将反向三位数y等于个位数*100+十位数*10+百位数,则y=c*100+b*10+a

③x变成了y。

(2)、该题目涉及的知识点和难点:

①基本整型int,scanf函数的使用;

②一个三位数的个位数、十位数、百位数的取值方法。

程序代码和运行情况描述:

前两个程序我都写的都没问题,但有时忘记了“;”的输入,导致程序出错,根据编程工作区的最下面小窗口的出错提示改正后,程序就可行了。

第三个输入三位数的实验我编写的程序出现了问题。开始的时候,我把个位数、十位数、百位数的取值方法理解错了,编写出来的结果程序没有错,但就是运行不了。经过老师和同学的帮忙,我改正了错误的地方,再调试时,程序就可以运行了。

更多相关推荐:
计算机软件技术基础上机实验报告

一单链表实验内容单链表的定义创建插入和删除操作将数据显示出来源程序includeltstdiohgtdefinenull0defineslnodestructnodeslnode定义结构体intdataslno...

软件技术基础实验报告

软件技术基础实验报告,内容附图。

软件技术基础实验报告1

软件技术基础实验报告说明1按模板内容整理文档总结实验报告2打印上交实验报告

软件技术基础实验报告1

软件技术基础实验报告实验一vc60基本环境与应用学院电气工程学院班级自动化1104姓名马士杰学号20xx13040118实验一vc60基本环境与应用实验题目熟悉vc60的实验环境实验目的初步操作建立vc工程的方...

软件技术基础上机实验报告

电子科技大学软件技术基础上机实验报告上机实验三实验名称ex31includequotstdiohquotincludequotstdlibhquotdefinetrue1definefalse0typedefs...

软件技术基础实验报告

目录实验一简易计算器实验3一实验目的3二实验设备及器件3三实验内容31对象32对象的属性33事件3四实验代码31创建新工程32设计窗体33运行调试程序34保存文件35生成可执行文件3五实验代码3实验二成绩录入系...

计算机软件技术基础实验报告

计算机软件基础实验报告实验一一元多项式的相加一实验的目的与要求1熟悉单链表的一些操作2掌握采用链表结构实现一元多项式的相加的算法二实验任务1分别建立两个单链表来表示两个多项式2对单链表进行插入删除操作3对一元多...

机器人控制技术基础实验报告

华北电力大学实验报告实验名称机器人控制技术基础课程名称机器人控制技术基础实验人李丙伦机械070520xx04030125曾庭机械070620xx04030153庞尔军机械070620xx04030196成绩指导...

软件基础实验报告

计算机软件技术基础实验报告姓名XXX班级XX0X01学号30X05050XX1实验一线性表1建立单向链表表长任意2可交互输出单链表中的内容3编写算法计算出自己所建单链表的长度并输出4删除自己所建单链表中的第K个...

计算机软件技术基础实验报告

计算机软件技术基础实验报告姓名班级0801105学号日期20xx125班级0801105学号姓名第5周星期三910节成绩一实验目的参照给定的线性表顺序表类和链表类的程序样例验证给出的线性表的常见算法二实验要求1...

太原理工大学 计算机软件技术基础 线形顺序表的插入与删除 实验报告

太原理工大学现代科技学院计算机软件技术基础课程实验报告专业班级学号姓名指导教师实验名称线形顺序表的插入与删除同组人专业班级学号姓名成绩实验目的与要求:理解和掌握线性表的顺序存储结构,使用C语言根据相应算法编写一…

《大学计算机基础》实验报告模板

大学计算机基础专业班级课程教师项目名称实验时间20xx20xx1实验报告姓名实验教师大学计算机基础实验一微型计算机组成和键盘操作练习实验内容1结合实验机型了解微型计算机的硬件组成2微型计算机的启动实验要求了解微...

软件技术基础实验报告(35篇)