【C/PTA】Spezielle Zeigerübungen (2)

Dieser Artikel kombiniert PTA-Spezialübungen, um den Lesern dabei zu helfen, Zeiger zu meistern, die Fragen als Hauptkommentar aufzufrischen und die Ideen im Code zu verstehen, ohne zu sehr ins Detail zu gehen.

6-1 Das Problem von Hühnern und Kaninchen im selben Käfig

„Sun Zi Suan Jing“ berichtet: „Heute sind Fasane und Kaninchen im selben Käfig. Oben sind fünfunddreißig Köpfe und unten vierundneunzig Beine. Ich möchte fragen, wie viele Fasane und Kaninchen gibt es?"
Funktionsprototyp

int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);

Erklärung: Kopf und Fuß sind die Anzahl der Köpfe und Füße, Huhn und Kaninchen sind Zeiger, die die Anzahl der Hühner und Kaninchen angeben. Wenn das Problem gelöst ist, werden die Anzahl der Hühner und Kaninchen in den durch Huhn und Kaninchen angegebenen Variablen gespeichert und der Funktionswert ist 1 (wahr); andernfalls werden die durch Huhn und Kaninchen angegebenen Variablen und der Funktionswert nicht geändert ist 0 (falsch).
Schiedsverfahren

#include <stdio.h>


int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);


int main()

{
    
    

    int h, f, c, r;

    scanf("%d%d", &h, &f);

    if (ChickenRabbit(&c, &r, h, f))

    {
    
    

        printf("%d %d\n", c, r);

    }

    else

    {
    
    

        puts("None");

    }

    return 0;

}


/* 你的提交代码将被嵌在这里 */

Eingabebeispiel 1

35 94

Ausgabebeispiel 1

23 12

Eingabebeispiel 2

30 71

Ausgabebeispiel 2

Keiner

int ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
    
    
	for(int i=0;i<=head;i++)
	{
    
    
		int j=head-i;
		if(i*2+j*4==foot)
		{
    
    
			*chicken=i;
			*rabbit=j;
			return 1;
		}
	}
	return 0;
}//简单判断即可

6-2 Blasensortierung

Geben Sie n (1<=n<=10) Ganzzahlen ein, sortieren Sie sie von klein nach groß und geben Sie sie dann aus. Es ist erforderlich, die Funktion bubble() zu schreiben, um den Blasensortierungsalgorithmus zu implementieren.
Funktionsschnittstellendefinition:

void bubble (int a[ ], int n);

wobei a ein Array und n die Anzahl der Daten ist.
Beispiel für ein Schiedsrichtertestverfahren:

#include <stdio.h>

void bubble (int a[ ], int n);

int main(void)

{
    
        

  int n, a[10];

    int i;

    scanf("%d", &n);

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

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

    bubble(a,n);

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

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

  printf("\n");

    return 0;

}


/* 请在这里填写答案 */

Eingabebeispiel:

8
7 3 66 3 -5 22 -77 2

Ausgabebeispiel:

-77 -5 2 3 3 7 22 66

void bubble (int a[ ], int n)
{
    
    
    for(int i=0;i<n-1;i++)
    {
    
    
        for(int j=0;j<n-i-1;j++)
        {
    
    
            if(a[j]>a[j+1])
            {
    
    
                int t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
}

6-3 String-Verkettung in umgekehrter Reihenfolge

Speichern Sie zunächst die Zeichen in Zeichenfolge s in umgekehrter Reihenfolge in Zeichenfolge t und verbinden Sie dann die Zeichen in s in positiver Reihenfolge mit dem Ende von Zeichenfolge t.
Funktionsschnittstellendefinition:

void fun (char *s, char *t);

Unter diesen sind s und t vom Benutzer übergebene Parameter. Die Funktion speichert zunächst die Zeichen in der Zeichenfolge s in umgekehrter Reihenfolge in der Zeichenfolge t und verbindet dann die Zeichen in s in positiver Reihenfolge mit dem Ende der Zeichenfolge t.

Beispiel für ein Schiedsrichtertestverfahren:

#include <stdio.h>

void fun (char *s, char *t);

int main()

{
    
     char s[100], t[100];

scanf("%s", s);

fun(s, t);

printf("%s\n", t);

return 0;

}


/* 请在这里填写答案 */

Eingabebeispiel:

A B C D

Ausgabebeispiel:

dcbaabcd

void fun (char *s, char *t)
{
    
    
    int j=0;
    //计算长度
    int l=0;
    while(s[l]!='\0')
    l++;
    
    for(int i=l-1;i>=0;i--)
    {
    
    
        t[j]=s[i];
        j++;
    }
    
    int p=j;
    for(int i=0;i<l;i++)
    {
    
    
        t[p]=s[i];
        p++;
    }
    t[p]='\0';
}

6-4 Berechnen Sie die Länge der längsten Zeichenfolge

Diese Frage erfordert die Implementierung einer Funktion zur Berechnung der Länge der längsten Zeichenfolge in einem Zeigerarray s mit n Elementen.
Funktionsschnittstellendefinition:

int max_len( char *s[], int n );

Wenn n Zeichenfolgen in s[] gespeichert sind, sollte die Funktion max_len die Länge der längsten Zeichenfolge unter ihnen zurückgeben.
Beispiel für ein Schiedsrichtertestverfahren:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


#define MAXN 10

#define MAXS 20


int max_len( char *s[], int n );


int main()

{
    
    

    int i, n;

    char *string[MAXN] = {
    
    NULL};

    

    scanf("%d", &n);

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

        string[i] = (char *)malloc(sizeof(char)*MAXS);

        scanf("%s", string[i]);

    }

    printf("%d\n", max_len(string, n));


    return 0;

}


/* 你的代码将被嵌在这里 */

Eingabebeispiel:

4
blau
gelb
rot
grün

Ausgabebeispiel:

6

6-5 Finden Sie den Wochentag

Diese Frage erfordert die Implementierung einer Funktion. Sie können den Wochentag anhand der folgenden Tabelle ermitteln und die entsprechende Seriennummer zurückgeben.
Seriennummer der Woche
0 Sonntag
1 Montag
2 Dienstag
3 Mittwoch
4 Donnerstag
5 Freitag
6 Samstag
Funktion Schnittstellendefinition:

int getindex( char *s );

Die Funktion getindex sollte die Seriennummer der Zeichenfolge s zurückgeben. Wenn der übergebene Parameter s kein String ist, der den Wochentag darstellt, wird -1 zurückgegeben.
Beispiel für ein Schiedsrichtertestverfahren:

#include <stdio.h>

#include <string.h>


#define MAXS 80


int getindex( char *s );


int main()

{
    
    

    int n;

    char s[MAXS];

    

    scanf("%s", s);

    n = getindex(s);

    if ( n==-1 ) printf("wrong input!\n");

    else printf("%d\n", n);


    return 0;

}


/* 你的代码将被嵌在这里 */

Eingabebeispiel 1:

Dienstag

Ausgabebeispiel 1:

2

Eingabebeispiel 2:

Heute

Ausgabebeispiel 2:

falsche Eingabe!

int getindex( char *s )
{
    
    
    if(strcmp(s,"Sunday")==0)
        return 0;
    if(strcmp(s,"Monday")==0)
        return 1;
    if(strcmp(s,"Tuesday")==0)
        return 2;
    if(strcmp(s,"Wednesday")==0)
        return 3;    
    if(strcmp(s,"Thursday")==0)
        return 4;    
    if(strcmp(s,"Friday")==0)
        return 5;    
    if(strcmp(s,"Saturday")==0)
        return 6;

    return -1;
}

7-1 C-Programmierexperiment 5-7 Array-Zeiger als Funktionsparameter

Array-Zeiger als Funktionsparameter
Geben Sie die Ergebnisse von m Studenten (bis zu 30 Studenten) und n Kursen (bis zu 5 Kursen) ein und berechnen Sie dann die Ergebnisse jedes einzelnen Kurses und drucken Sie sie aus Kurse der Studierenden Gesamt- und Durchschnittspunktzahl. Unter anderem werden die Werte von m und n vom Benutzer über die Tastatur eingegeben.
Eingabeformat:

Die Eingabesequenz ist wie folgt:

学生个数m 课程数n
学生1课程1分数 学生1课程2分数 ... 学生1课程n分数
学生2课程1分数 学生2课程2分数 ... 学生2课程n分数
...
学生m课程1分数 学生m课程2分数 ... 学生m课程n分数

Ausgabeformat:

Gesamtpunktzahl jedes Schülers (Ganzzahl), Durchschnittspunktzahl (reelle Zahl, auf eine Dezimalstelle beschränkt)
Eingabebeispiel:

Geben Sie hier eine Reihe von Eingaben ein. Zum Beispiel:

2 3
61 62 70
75 82 90

Ausgabebeispiel:

Die entsprechende Ausgabe finden Sie hier. Zum Beispiel:

193 64,3
247 82,3

#include <stdio.h>
int main()
{
    
    
	int m,n;scanf("%d%d",&m,&n);int a[n];
	for(int i=0;i<m;i++)
	{
    
    
		double sum=0;
		double aver;
		for(int j=0;j<n;j++)
		{
    
    
			scanf("%d",&a[j]);
			sum+=a[j];
		}
		aver=sum/n;
		printf("%.0f %.1f\n",sum,aver);
	}
	
}

7-2 Finden Sie die Position der fünf olympischen Ringfarben

Die englischen Wörter der fünf Farben der Olympischen Ringe sind in einer bestimmten Reihenfolge angeordnet {"rot", "blau", "gelb", "grün", "schwarz"}, definieren und initialisieren das Zeiger-Array Geben Sie ein beliebiges ein. Suchen Sie für das englische Wort „Farbe“ nach der vorhandenen Farbe und geben Sie den Positionswert der Farbe aus. Wenn Sie ihn nicht finden, wird „Nicht gefunden“ ausgegeben.
Eingabeformat:

Geben Sie ein Wort ein, das eine Farbe darstellt.
Ausgabeformat:

Gibt den Positionswert aus, der dem Wort entspricht. Wenn nicht gefunden, wird „Not Found“ ausgegeben.
Eingabebeispiel:

Gelb

Ausgabebeispiel:

3

#include <stdio.h>
#include <string.h>
int main()
{
    
    
	char* colors[]={
    
    "red","blue","yellow","green","black"};
	char color[100];
	int flag=-1;
	
	
	scanf("%s",color);
	for(int i=0;i<5;i++)
	{
    
    
		if(strcmp(color,colors[i])==0)
		{
    
    
			flag=i;
			break;
		}
	}
	
	if(flag!=-1)
	printf("%d",flag+1);
	else
	printf("Not Found");
}

Guess you like

Origin blog.csdn.net/2301_77485708/article/details/134744077