第二次作业 预备实验

C语言的函数数组指针结构体知识

这个作业属于哪个课程 [https://edu.cnblogs.com/campus/qdu/DS2020]
这个作业的要求在哪里 [http://edu.cnblogs.com/campus/qdu/DS2020/homework/11213]
这个作业的目标 C语言的函数数组指针结构体知识

实验目的

  1、复习C语言中函数、数组、指针、结构体与共用体等的概念。
  2、熟悉利用C语言进行程序设计的一般方法。

实验预习

  说明以下C语言中的概念
  - 函数:函数是一段可以重复使用的代码,用来独立地完成某个功能。
  - 数组:数组(Array)就是一些列具有相同类型的数据的集合,这些数据在内存中依次挨着存放,彼此之间没有缝隙。
  - 指针:所谓指针,也就是内存的地址;所谓指针变量,也就是保存了内存地址的变量。
  - 结构体:一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。
  - 共用体:共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。

实验内容和要求

  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;
  }

  //输出100以内的素数
  int main()
  {
        int i;
        print("\n");
        for(i=2;i<100;i++)
        {
              if(isprime(i)==1)printf("%4d",i);
        }
        return 0;
  }
  ~~~

  输出结果:   2   3   5   7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97
  

  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;
  }
  ~~~
  
  输出结果:
  the original Array is:
     0   1   2   3   4   5   6   7   8   9
  the changed Array is:
     9   8   7   6   5   4   3   2   1   0


  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++)

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

                for ( j = 0; j < M;j++)
                    if (a[j][k]<a[i][k])break;
          if(j == M)
              printf("%d,%d,%d\n",a[i][k],i,k);        
      }
      return 0;
  }
     ~~~
  输出结果:
  
  请输入二维数组的数据:
  4 3 21 1
  1 2 3 1
  4 5 6 7
     4   3  21   1
     1   2   3   1
     4   5   6   7

  3,1,2

  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;
  }
  ~~~

  输出结果:
     1   3   5   7
     9  11  13  15
    17  19  21  23      

  5、 调试程序:设有一个教师与学生通用的表格,教师的数据有姓名、年龄、职业、教研室四项,学生有姓名、年龄、专业、班级四项,编程输入人员的数据,再以表格输出。

  ~~~
  #include <stdio.h>

  #define N 10

  struct student{
      char name[8]; //姓名
      int age; //年龄
      char job; //职业或专业,用s或t表示学生或教师
      union{
          int class; //班级
          char office[10]; //教研室
      }depa;
  }stu[N];
  int main(){
      int i;int n;
      printf("\n请输入人员数(<10);\n");
      scanf("%d",&n);
      for(i=0;i<n;i++){
          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.class);        
          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("%s %3d %3c %d\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.class);
          else
              printf("%s %3d %3c %s\n",stu[i].name,stu[i].age,stu[i].job,stu[i].depa.office);            
      }
  }
  ~~~

  输出结果
  请输入人员数(<10);
  2

  请输入第1人员的信息:(name age job class/office)
  Wang 19 s 99061

  请输入第2人员的信息:(name age job class/office)
  Li 36 t computer
  
  name age job class/office
  Wang  19   s 99061
  Li  36   t computer
posted @ 2020-09-22 16:11  野香蕉  阅读(108)  评论(0编辑  收藏  举报