C语言程序设计实验报告

更新时间:2023-10-25 00:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计实验报告

学院 数学与信息技术 班级 11软工转本1 学号 11130730 姓名 史 稳 瑶 指导教师 田 丰 春

实验1 简单程序设计

1. 实验目的

(1) 熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。 (2) 通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 输入三个整数,请把这三个数由小到大输出。试编写多种方法。 (3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1) C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。 (2) 用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。

(3) system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。

4. 常见错误

(1) 数据声明或语句后面缺少分号。 (2) 对被调函数没有声明。

(3) 没有main函数或者有多个main函数。

5. 程序代码

#include int main() {

float a,b,c,t;

printf(\请输入三个数:\ scanf(\ if(a>b) {

t=a;a=b;b=t;} if(a>c)

{t=a;a=c;c=t; }

if(b>c)

{t=b;b=c;c=t; }

printf(\}

6. 实验结果

7. 心得体会

刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且\\n斜杠会写反,有时会忘记声明函数。

实验2 顺序结构程序设计

1. 实验目的

(1) 掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。 (2) 掌握数据的输入输出的方法,能正确使用各种格式控制符。 (3) 掌握算术运算符和赋值运算符。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。 (3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1) 用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。 (2) scanf函数中的格式控制后面应当是变量地址,而不是变量名。

4. 常见错误

(1)变量没有定义,直接使用。

(2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。 (3) printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。 (4) scanf函数的地址表列因该是变量地址,而不是变量名。

(5) scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6) 没有在对应的位置输入与这些字符相同的字符。

5. 程序代码

#include

int main() {

float h,r,l,s,sq,vq,vz; float p=3.141526;

printf(\请输入圆半径r,圆柱高h\ scanf(\

l=2*p*r; //圆周长 s=r*r*p; //圆面积 sq=4*p*r*r; //圆球表面积 vq=4.0/3.0*p*r*r*r; //圆球体积 vz=p*r*r*h; //圆柱体积 printf(\圆周长为: l=%6.2f\\n\ printf(\圆面积为: s=%6.2f\\n\ printf(\圆球表面积为: sq=%6.2f\\n\ printf(\圆球体积为: vq=%6.2f\\n\ printf(\圆柱体积为: vz=%6.2f\\n\ return 0; }

6. 实验结果

7. 心得体会

这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。

实验3 选择结构程序设计

1. 实验目的

(1) 了解C语言表示逻辑变量的方法 (2) 学会正确使用关系运算符和逻辑运算符。 (3) 熟练掌握if语句和switch语句。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。

90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E

(3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1) 注意关系运算符==和复制运算符=的区别。 (2) if和else的匹配原则。

(3) 在switch语句中正确使用break。

4. 常见错误

(1) 赋值运算符=和关系运算符等号=搞混。 (2) 在if语句为复合语句时,忘记写{}。 (3) if语句出现嵌套时,没正确配对。 (4) switch语句中,没正确使用break。

5. 程序代码

#include

int main() {

float score; char grade;

printf(\请输入学生成绩:\ scanf(\

while(score>100 || score<0) {

printf(\输入有误,请重新输入!\ scanf(\ }

switch ((int)(score/10)) {

case 10:

case 9:grade='A';break; case 8:grade='B';break; case 7:grade='C';break; case 6:grade='D';break; case 5: case 4:

6. 实验结果

7. 心得体会

有时候函数没定义就使用,有时候会定义函数,然后没有使用,定义函数时,形参没规定类型。函数调用时,实参前加类型。会把形参与实参搞混

实验7 指针的应用

1. 实验目的

(1) 熟练掌握指针的定义、赋值和使用。

(2) 掌握用指针引用数组的元素、熟悉指向数组的指针的使用。 (3) 熟练掌握字符数组与字符串的使用,掌握指针数组。 (4) 掌握指针函数与函数指针的用法。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 有一个班4个学生,5门课程。①求第1门课程的平均分;②找出两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。 (3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1) 列指针变量的定义、赋值以及利用它引用数组元素。 (2) 行指针变量的定义、赋值以及它在二维数组中的使用。 (3) 函数指针变量的定义、赋值和利用它进行函数调用。

4. 常见错误

(1) 混淆变量值和变量地址。

(2) 指针变量没有初始化,就利用该指针变量引用变量。

(3) 利用指针变量引用一维数组元素和二维数组元素或地址时,引用的方法不对。 (4) 函数指针概念清楚。 (5) 混淆行指针变量和指针数组。

5. 程序代码

#include int main() {

void avsco(float *,float *);

void avcour1(char (*)[10],float *);

void fali2(char course[5][10],int num[],float *pscore,float aver[4]); void good(char course[5][10],int num[4],float *pscore,float aver[4]); int i,j,*pnum,num[4];

float score[4][5],aver[4],*pscore,*paver; char course[5][10],(*pcourse)[10]; printf(\ pcourse=course; for (i=0;i<5;i++)

scanf(\

printf(\ printf(\

for (i=0;i<5;i++)

printf(\ printf(\

pscore=&score[0][0]; pnum=&num[0];

for (i=0;i<4;i++) {

scanf(\ for (j=0;j<5;j++)

scanf(\}

paver=&aver[0]; printf(\

avsco(pscore,paver);

avcour1(pcourse,pscore); printf(\

fali2(pcourse,pnum,pscore,paver); printf(\

good(pcourse,pnum,pscore,paver); return 0; }

void avsco(float *pscore,float *paver)

{

int i,j;

float sum,average; for (i=0;i<4;i++) {

sum=0.0;

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

sum=sum+(*(pscore+5*i+j)); average=sum/5;

*(paver+i)=average; } }

void avcour1(char (*pcourse)[10],float *pscore) {

int i;

float sum,average1; sum=0.0;

for (i=0;i<4;i++)

sum=sum+(*(pscore+5*i)); average1=sum/4;

printf(\}

void fali2(char course[5][10],int num[],float *pscore,float aver[4]) {

int i,j,k,labe1;

printf(\ printf(\ for (i=0;i<5;i++)

printf(\ printf(\ for (i=0;i<4;i++) {

labe1=0;

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

if (*(pscore+5*i+j)<60.0) labe1++; if (labe1>=2) {

printf(\ for (k=0;k<5;k++)

printf(\ printf(\ } } }

void good(char course[5][10],int num[4],float *pscore,float aver[4]) {

int i,j,k,n;

printf(\

printf(\ for (i=0;i<5;i++)

printf(\ printf(\ for (i=0;i<4;i++) {

n=0;

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

if (*(pscore+5*i+j)>85.0) n++; if ((n==5)||(aver[i]>=90)) {

printf(\ for (k=0;k<5;k++)

printf(\ printf(\ } } }

6. 实验结果

7. 心得体会

指针这章有点小混乱 混淆变量值和变量地址。会忘记给指针变量没有初始化,就利用该指针变量引用变量。数组元素或地址有些模糊

实验8 结构体的应用

1. 实验目的

(1) 掌握结构体变量、结构体数组以及结构体指针的定义和使用。 (2) 掌握动态存储分配函数的用法和单向链表的创建、输出等操作。 (3) 掌握用typedef定义类型。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 编写建立链表的函数creat,输出链表的函数print,删除链表中节点的函数del,插入节点的函数insert,再编写一个主函数,先后调用这些函数,在主函数中指定需要删除和插入的节点的数据。 (3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1) 结构成员引用的三种方法。 (2) 链表节点数据类型的定义。

(3) malloc函数用于动态分配存储空间,它的返回值类型是void *,在实际使用中一般需要强类型转换成多需要的类型。该函数的声明在stdlib.h头文件中。 (4) 链表操作中,节点指针域的使用。

4. 常见错误

(1) 引用结构体成员时,成员运算符.和指向运算符->的使用混淆。 (2) 链表操作过程中不能正确利用指针域进行操作。 (3) 不能正确使用typedef声明新类型名。

5. 程序代码

#include #include

#define LEN sizeof(struct Student) struct Student {

long num; float score;

struct Student *next; };

int n;

int main() //主函数 {

struct Student *creat();

struct Student *del(struct Student *,long);

struct Student *insert(struct Student *,struct Student *); void print(struct Student *);

本文来源:https://www.bwwdw.com/article/n892.html

Top