第二次作業:預備實驗---- C語言的函數數組指針結構體知識


這個作業屬於哪個課程 數據結構
這個作業要求在哪里 https://edu.cnblogs.com/campus/qdu/DS2020/homework/11213
這個作業的目標 復習C語言中函數、數組、指針、結構體與共用體等的概念,熟悉利用C語言進行程序設計的一般方法
學號 2018204150

預備實驗---- C語言的函數數組指針結構體知識

一、實驗目的

1、復習C語言中函數、數組、指針、結構體與共用體等的概念。

2、熟悉利用C語言進行程序設計的一般方法。

二、實驗預習

說明以下C語言中的概念
1、函數:函數是一個自我包含的完成一定相關功能的執行代碼段。我們可以把函數看成一個“黑盒子”,你只要將數據送進去就能得到結果,而函數內部究竟是如何工作的,外部程序是不知道的。外部程序所知道的僅限於輸入給函數什么以及函數輸出什么。函數提供了編制程序的手段,使之容易讀、寫、理解、排除錯誤、修改和維護。

2、數組:數組是一組數據的集合,它所包含的每一個數據叫做數組元素,所包含的數據的個數稱為數組長度,數組中的每個元素都有一個序號,這個序號從0開始,而不是從我們熟悉的1開始,稱為下標。使用數組元素時,指明下標即可,字符串也是一種數組。它們以ASCII的NULL作為數組的結束。

3、指針:不同數據類型所占用的內存單元數不等,如整型量占2個單元,字符量占1個單元,每個內存單元都有編號.這個編號也叫地址.就是我們所說的指針.內存單元的指針和內存單元的內容是兩個不同的概念.對於一個內存單元來說,單元的地址即為指針,其中存放的數據才是該單元的內容.在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量

4、結構體:結構體從本質上講是一種自定義的數據類型,只不過這種數據類型比較復雜,是由 int、char、float 等基本類型組成的。你可以認為結構體是一種聚合類型。在實際開發中,我們可以將一組類型不同的、但是用來描述同一件事物的變量放到結構體中。例如,在校學生有姓名、年齡、身高、成績等屬性,學了結構體后,我們就不需要再定義多個變量了,將它們都放到結構體中即可。

5、共用體:在進行某些算法的C語言編程的時候,需要使幾種不同類型的變量放到同一段內存單元中。也就是使用覆蓋技術,幾個變量互相覆蓋。這種幾個不同的變量共同占用一段內存的結構,在C語言中,被稱作“共用體”類型結構,簡稱共用體。

三、實驗內容和要求

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(){           /*輸出100以內所有素數*/

       int i; printf("\n");

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

              if(isprime(i)==1) printf("%4d",i);

       return 0;

}

運行結果:

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;

}

運行結果:

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)               /*在第i行找到鞍點*/

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

       }

       return 0;

}

運行結果:

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;

}

運行結果:

5、調試程序:設有一個教師與學生通用的表格,教師的數據有姓名、年齡、職業、教研室四項,學生有姓名、年齡、專業、班級四項,編程輸入人員的數據,再以表格輸出
代碼:

#include <stdio.h>

#define N 10

struct student{

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

       int age;       /*年齡*/

       char job;     /*職業或專業,用s或t表示學生或教師*/

       union {

int class1;           /*班級*/

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++){                        /*輸入n個人員的信息*/

              printf("\n請輸入第%d人員的信息:(name  age  job  class1/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.class1);

        else

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

       }

       printf("name    age    job    class1/office");

       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.class1);

        else

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

       }

}

輸入的數據:2

Wang 19 s 99061

Li 36 t computer
運行結果:

四、實驗小結

通過本次實驗,對c語言數組、指針方面進行了一次較為全面的復習,自己動手去寫程序,調試程序,比對運算結果,不但加強了對c語言的理解程度,而且加深了對它的印象,當然在進行實驗的過程中也發現了一些小問題,但也及時糾正,認識到了自己的不足。總而言之,這次實驗是一次很不錯的經歷,希望自己以后能繼續參加實驗,提高自我能力,豐富自我認知。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM