Die C-Sprache speichert Zahlen in umgekehrter Reihenfolge in einem Array (Grundlegende Programmierübungen der C-Sprache, 3 Fragen – Hinweise)

Vorwort

Der Titel dieses Artikels sind Grundübungen von C, Zeigerteil. Bevor Sie diese Übungen durchführen, müssen Sie sicherstellen, dass Sie sich mit den Hinweisen vertraut gemacht haben.
Dieser Artikel kann verwendet werden, um Ihren Eindruck nach dem Erlernen von Hinweisen zu vertiefen, und kann auch für Übungen nach der Schule im College verwendet werden.

Thema

Frage 1

Schreiben Sie eine Funktion, die ein ganzzahliges Array und die Länge des Arrays als Parameter akzeptiert und die Elemente im Array in umgekehrter Reihenfolge speichert.

Beispiel für den Import:
{1,2,3,4,5,6
Beispiel für den Import:
6 5 4 3 2 1

Fügen Sie hier eine Bildbeschreibung ein

Einfaches Code-Framework

#include <stdio.h>
void reverseArray(int *arr, int length);
int main(void)
{
    
    
    int arr[] = {
    
    1, 2, 3, 4, 5, 6};
    reverseArray(arr, 6);
    for (int i = 0; i < 6; i++)
    {
    
    
        printf("%d ", arr[i]);
    }

    getchar();
    getchar();
    return 0;
}
void reverseArray(int *arr, int length)
{
    
    
    //在此处编写你的答案
}

Frage 2

Schreiben Sie ein Programm, um ein ganzzahliges Array mit einer Länge von 10 zu definieren. Geben Sie 10 ganze Zahlen über die Tastatur ein und speichern Sie sie in einem Array.
Schreiben Sie eine Funktion, die einen Zeiger auf ein Array und die Länge des Arrays als Parameter akzeptiert, die Summe aller Elemente im Array berechnet und das Ergebnis zurückgibt.
Rufen Sie diese Funktion in der Hauptfunktion auf, um die Summe aller Elemente im Array zu berechnen und auszugeben.
Fügen Sie hier eine Bildbeschreibung ein

Testfall

Wenn Sie dieses Programm ausführen, können Sie die folgenden zwei Sätze von Testdaten zur Überprüfung eingeben:

Eingabe:
2 4 6 8 10 12 14 16 18 20
Ausgabe:
Alle Elemente in der array Die Summe ist: 110

Eingabe:
-1 0 1 2 3 4 5 6 7 8
Ausgabe:
Alles in der Array Die Summe der Elemente beträgt: 35

Frage 3

Schreiben Sie ein Programm, das ein ganzzahliges Array mit einer Länge von 5 definiert. Geben Sie über die Tastatur 5 Ganzzahlen ein und speichern Sie sie in einem Array. Schreiben Sie dann eine Funktion, die einen Zeiger auf ein Array und die Länge des Arrays als Argumente akzeptiert, den Index des größten Werts im Array berechnet und diesen Index zurückgibt. Rufen Sie abschließend diese Funktion in der Hauptfunktion auf, um den Index des Maximalwerts im Array zu berechnen und auszugeben.
Fügen Sie hier eine Bildbeschreibung ein

Testfall

Wenn Sie dieses Programm ausführen, können Sie die folgenden zwei Sätze von Testdaten zur Überprüfung eingeben:

Eingabe:
1 2 3 4 5
Ausgabe:
Der Index des Maximalwerts im Array ist: 4

Eingabe:
-3 0 9 -2 6
Ausgabe:
Der Index des Maximalwerts in Das Array ist :2

Referenzantwort

Frage 1

Antwort 1

void reverseArray(int *arr,int length)
{
    
    
    int i,temp;
    for(i=0;i<length/2;i++)
    {
    
    
        temp=arr[i];
        arr[i]=arr[length-i-1];
        arr[length-i-1]=temp;
    }
}
analysieren

Verwenden Sie eine for-Schleife, um die erste Hälfte des Arrays zu durchlaufen. In der Schleife wird eine temporäre Variable temp verwendet, um den Wert des aktuellen Elements zu speichern, und dann werden die beiden Elemente ausgetauscht, die dem Anfang und dem Ende des Arrays entsprechen. Weisen Sie insbesondere arr[i] den Wert von arr[i] zu und weisen Sie dann arr[i] den Wert von temp zu, um den Austausch der beiden Elemente abzuschließen.

Die Beendigungsbedingung der Schleife ist i < Länge/2, da nur die erste Hälfte des Arrays durchlaufen werden muss und die Elemente in der zweiten Hälfte während des Austauschvorgangs in umgekehrter Reihenfolge angeordnet wurden.

Antwort 2

void reverseArray(int *arr, int length)
{
    
    
    int left = 0;
    int right = length - 1;

    while (left < right)
    {
    
    
        // 交换元素
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;

        // 移动指针
        left++;
        right--;
    }
}
analysieren

Anders als im vorherigen Code wird hier eine While-Schleife verwendet, um den Zweck der umgekehrten Reihenfolge zu erreichen.

In der Beurteilungsbedingung der Schleife repräsentiert links den linken Zeiger des aktuell durchlaufenen Array-Elements und rechts den rechten Zeiger des aktuell durchlaufenen Array-Elements. Nur wenn links kleiner als rechts ist, sind Elementaustausch- und Zeigerbewegungsvorgänge erforderlich. Dies liegt daran, dass das mittlere Element des Arrays bereits ausgerichtet ist, wenn sich der linke und der rechte Zeiger treffen.

Innerhalb des Schleifenkörpers wird eine temporäre Variable temp verwendet, um den Wert des Elements zu speichern, auf das der aktuelle linke Zeiger arr[left] zeigt. Weisen Sie dann den Wert des Elements, auf das der rechte Zeiger arr [right] zeigt, dem linken Zeiger arr [left] zu und weisen Sie schließlich den Wert der temporären Variablen temp dem rechten Zeiger arr [right] zu, um den Austausch abzuschließen zwei Elemente.

Verwenden Sie anschließend left++ und right--, um den linken Zeiger und den rechten Zeiger jeweils um ein Bit in die Mitte zu bewegen, treten Sie in die nächste Schleife ein und setzen Sie die Elementaustausch- und Zeigerbewegungsoperationen fort, bis links nicht mehr kleiner als rechts ist, und die Schleife endet.

Auf diese Weise werden die Elemente des gesamten Arrays in umgekehrter Reihenfolge angeordnet. Im Vergleich zum vorherigen Code ist diese Methode prägnanter und erfordert nur eine While-Schleife, um die umgekehrte Reihenfolge abzuschließen.

Frage 2

Antwort 1

#include <stdio.h>
#define LEN 10
int arrSum(int arr[],int len);
int main()
{
    
    
    int arr[LEN],sum;
    for(int i=0;i<10;i++)
    {
    
    
        scanf("%d",&arr[i]);
    }
    sum=arrSum(arr,LEN);
    printf("数组中所有元素的和为:%d\n",sum);
    getchar();
    getchar();
    return 0;
}
int arrSum(int arr[],int len)
{
    
    
    int sum=0;
    for(int i=0;i<len;i++)
    {
    
    
        sum+=arr[i];
    }
    return sum;
}

Antwort 2

#include <stdio.h>

// 计算数组中所有元素的和
int sumOfArray(int *arr, int length)
{
    
    
    int sum = 0;
    for (int i = 0; i < length; i++)
    {
    
    
        sum += *(arr + i);
    }
    return sum;
}

int main()
{
    
    
    int arr[10];
    for (int i = 0; i < 10; i++)
    {
    
    
        scanf("%d", &arr[i]);
    }

    int sum = sumOfArray(arr, 10);

    printf("数组中所有元素的和为:%d\n", sum);
    getchar();
    getchar();
    return 0;
}

Frage 3

Antwort 1

#include <stdio.h>
# define LEN 5
int maxIndex(int arr[],int len);
int main()
{
    
    
    int arr[LEN];
    for(int i=0;i<LEN;i++)
    {
    
    
        scanf("%d",&arr[i]);
    }
    int index=maxIndex(arr,LEN);
    printf("数组中最大值的索引为:%d\n",index);
    getchar();
    getchar();
    return 0;
}
int maxIndex(int arr[],int len)
{
    
    
    int index=0;
    for (int i = 1; i < len; i++)
    {
    
    
        if(arr[i]>arr[index])
            index=i;
    }
    return index;    
}

Antwort 2

#include <stdio.h>

int findMaxIndex(int *arr, int length)
{
    
    
    int maxIndex = 0;

    for (int i = 1; i < length; i++)
    {
    
    
        if (*(arr + i) > *(arr + maxIndex))
        {
    
    
            maxIndex = i;
        }
    }

    return maxIndex;
}

int main()
{
    
    
    int arr[5];

    for (int i = 0; i < 5; i++)
    {
    
    
        scanf("%d", &arr[i]);
    }

    int maxIndex = findMaxIndex(arr, 5);

    printf("数组中最大值的索引为:%d\n", maxIndex);
    getchar();
    getchar();
    return 0;
}

Andere Artikel

Linkbeschreibung zum C#-Übungsfragekonstruktor hinzufügen
Grafische Benutzeroberfläche zum Schreiben in C-Sprache

Supongo que te gusta

Origin blog.csdn.net/weixin_44499065/article/details/133710807
Recomendado
Clasificación