数据结构实验之C 语言的函数数组指针结构体知识

简介: 本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。

一、实验目的

1、复习 C 语言中函数、数组、指针、结构体与共用体等的概念。

2、熟悉利用 C 语言进行程序设计的一般方法。

二、实验预习

说明以下 C 语言中的概念

1、 函数:相对独立的函数模块,可以通过调用的方式使用。

2、 数组:把具有相同类型的若干变量按有序的形式组织起来的整体。

3、指针:存储器的一个字节称为一个内存单元,内存单元的编号也叫做地址,于是这个地址就叫做指针。

4、结构体:由若干成员组成的构造类型,内存占用为整体。

5、共用体:由若干成员组成的构造类型,内存占用为最大的一个成员。

三、实验内容和要求

1、调试程序:输出 100 以内所有的素数(用函数实现)。

#include<stdio.h>

int isprime(int n){

    int m;

    for(m=2;m*m<=n;m++)

    if(n%m==0) return 0;

    return 1;

}

int main(){

    int i;

    printf("\n");

    for(i=2;i<100;i++)

          if(isprime(i)==1)

          printf("%4d",i);

    return 0;

}运行结果:

image.gif 编辑

2、 调试程序:对一维数组中的元素进行逆序排列。

#include<stdio.h>

#define N 10

int main(){

int a[N]={0,1,2,3,4,5,6,7,8,9},i,temp;

printf("\nthe original Array is:\n ");

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

    printf("%4d",a[i]);

for(i=0;i<N/2;i++)

    {temp=a[i];

    a[i]=a[N-i-1];

    a[N-i-1]=temp;}

printf("\nthe changed Array is:\n");

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

printf("%4d",a[i]);

return 0;

}运行结果:

image.gif 编辑

3、 调试程序:在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该

元素即为该二维数组的一个鞍点。要求从键盘上输入一个二维数组,当鞍点存在时,把鞍点

找出来。

#include<stdio.h>

#define M 3

#define N 4

int main(){

int a[M][N],i,j,k;

printf("\n 请输入二维数组的数据:\n");

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

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

    scanf("%d",&a[i][j]);

for(i=0;i<M;i++) /*输出矩阵*/

    {for(j=0;j<N;j++)

          printf("%4d",a[i][j]);

          printf("\n");

    }

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

    k=0;

    for(j=1;j<N;j++) /*找出第 i 行的最大值*/

    if(a[i][j]>a[i][k])

          k=j;

    for(j=0;j<M;j++) /*判断第 i 行的最大值是否为该列的最小值*/

    if(a[j][k]<a[i][k])

          break;

    if(j==M)

    printf("%d,%d,%d\n",a[i][k],i,k);

    }

return 0;

}运行结果:

image.gif 编辑

4、 调试程序:利用指针输出二维数组的元素。

#include<stdio.h>

int main(){

int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int *p;

for(p=a[0];p<a[0]+12;p++){

if((p-a[0])%4==0) printf("\n");

printf("%4d",*p);

}

return 0;}

运行结果:

image.gif 编辑

5、 调试程序:设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室

四项,学生有姓名、年龄、专业、班级四项,编程输入人员的数据,再以表格输出。

#include <stdio.h>

#define N 10

struct student{

    char name[8]; /*姓名*/

    int age; /*年龄*/

    char job; /*职业或专业*/

    union{

          int cl; /*班级*/

          char office[10]; /*教研室*/

    }depa;

}stu[N];

int main(){

int i,n;

printf("\n 请输入人员数(<10):\n");

scanf("%d",&n);

for(i=0;i<n;i++){ /*输入 n 个人员的信息*/

    printf("\n 请输入第%d 人员的信息:(name age job class/office)\n",i+1);

    scanf("%s %d %c",stu[i].name, &stu[i].age, &stu[i].job);

    if(stu[i].job=='s')scanf("%d",&stu[i].depa.cl);

    else

    scanf("%s",stu[i].depa.office);

}

printf("name age job class/office\n");

for(i=0;i<n;i++){ /*输出*/

    if(stu[i].job=='s')

    printf("%4s %3d %2c    %d\n",stu[i].name, stu[i].age, stu[i].job, stu[i].depa.cl);

    else

    printf("%4s %3d %2c    %s\n",stu[i].name, stu[i].age, stu[i].job, stu[i].depa.office);

}

return 0;

}

输入的数据:

2

Wang 19 s 99061

Li 36 t computer

运行结果:

image.gif 编辑

四、实验小结

实验一:、

素数的判断条件可以为:

  1. i<=n/i
  2. i*i<=n
  3. i<sqrt(n)

在这里我希望用第一种,因为相比较之下2和3的速度较慢,该函数中使用平方是因为,只要看较小的除数存不存在就可以判断是否是素数,减少了循环次数。

实验二:

使用“define“,即宏定义,方便之后数据的修改。程序在编译阶段进行宏替换。

实验3:

使用双循环创建并输出二维数组

先找到行最大的情况下

判断该数是否为该列的最小,若不是,则去下一行寻找。

实验四:

二位数组实际上也是线性存储的。

实验五:

代码将结构体中使用共用体,可以灵活的根据职业的不同来选择不同地点。

class是用来定义类,不可以作为变量名

五、教师评语

目录
相关文章
|
2月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
42 6
|
2月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
2月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
2月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
2月前
|
存储 数据管理 编译器
揭秘C语言:高效数据管理之数组
揭秘C语言:高效数据管理之数组
|
2月前
|
C语言 C++
保姆式教学C语言——数组
保姆式教学C语言——数组
19 0
保姆式教学C语言——数组
|
2月前
|
C语言
数组栈的实现(C语言描述)
本文介绍了如何在C语言中使用数组来实现栈的数据结构,包括栈的创建、入栈、出栈、获取栈顶元素、检查栈是否为空、获取栈的大小以及销毁栈等操作,并提供了相应的函数实现。
37 1
|
2月前
|
C语言
顺序表数组法构建(C语言描述)
如何使用C语言通过数组方法构建有序顺序表,包括顺序表的创建、插入、删除和打印等。
21 2
|
2月前
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
|
2月前
|
C语言
C语言数组
C语言数组
21 0