Vorwort:
Tägliche Übungsreihe , jede Ausgabe enthält 5 Multiple-Choice-Fragen und 2 Programmierfragen . Der Blogger wird so detailliert wie möglich erklären, damit Anfänger klar zuhören können. Die täglichen Übungsreihen werden weiterhin aktualisiert und müssen innerhalb von drei Tagen während der Sommerferien aktualisiert werden. Nach Schulbeginn wird sie entsprechend der akademischen Situation aktualisiert.
Fünf Multiple-Choice-Fragen:
1. Das Ergebnis der Programmausführung ist ()
#define ADD(x) x+x
#include<stdio.h>
int main()
{
int m = 1, n = 2, k = 3;
int sum = ADD(m + n) * k;
printf("sum = %d", sum);
}
A、 Summe=9 B、 Summe=10 C、 Summe=12 D、 Summe=18
Analyse: Untersuchen Sie Ihr Verständnis von Makrodefinitionen. Die Makrodefinition wird in der Vorverarbeitungsphase verarbeitet, das heißt, sie wird ausgeführt, bevor sie die Kompilierungsphase erreicht, sodass wir die Makrodefinition grob als Ersatz betrachten können.
Zum Beispiel #define abc 5, dann kann abc*6 direkt als 5*6 betrachtet werden, Sie müssen sich nicht um andere Operatoren kümmern, Sie können es zuerst ersetzen. Diese Frage definiert das ADD(x)-Makro als x+x, also sum=1+2+1+2*3, machen Sie sich um nichts anderes Sorgen, Sie können es zuerst ersetzen, also sum=10, die Antwort lautet B
2. Die Ausgabe des folgenden Programms ist ()
#include<stdio.h>
void incre()
{
static int x = 1;
x *= x + 1;
printf("%d ", x);
}
int main()
{
int i;
for (i = 1; i <= 2; i++) incre();
}
A、 3 3 B、 2 2 C、 2 6 D、 2 5
Analyse: Beobachten Sie die Codezusammensetzung und stellen Sie fest, dass der Code aus einer Hauptfunktion und einer Incre-Funktion besteht und die Hauptfunktion der Hauptfunktion darin besteht, die Incre-Funktion für entsprechende Vorgänge zweimal aufzurufen. Der Schlüssel ist also incre. Die Funktion incre definiert zunächst ein x und initialisiert es auf 1. Insbesondere wird dieses x jedoch durch Statik geändert, sodass die Speicherung dieses x im statischen Bereich erfolgt, sodass x dies nicht tut Wird neu definiert, wird es zu Beginn des Programms definiert und sein Lebenszyklus wird bis zum Ende des Programms fortgesetzt.
Da die Häufigkeit gering ist, wird sie direkt ersetzt. Beim ersten Mal wird incre () eingegeben, x* = x + 1, x = 2 sei angegeben, also 2 gedruckt, beim zweiten Mal wird zu diesem Zeitpunkt x = 2, x eingegeben *=x+1 , sei x=6, also gebe 6 aus, also ist die Antwort C
3. Was ist die Ausgabe des folgenden Programms? ()
#include <stdio.h>
int main()
{
int a[][3] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, * p[4], i;
for (i = 0; i < 4; i++)
p[i] = &a[i][3];
printf("%d\n", p[2][2]);
}
A. Das Ausgabeelement ist illegal B, 6 C, 8 D, 12
Analyse: Wenn wir den Code beobachten, können wir feststellen, dass der Code zunächst ein Array a ohne Zeilen, sondern nur Spalten definiert und dann ein ganzzahliges Zeiger-Array p und eine Variable i definiert, die die Anzahl der Schleifen steuert. Verwenden Sie dann eine Schleife, um einige Adressen im ganzzahligen Zeigerarray p zu speichern. Die Anzahl der Schleifen beträgt nur 4 und kann direkt ersetzt werden.
Wenn i = 0, speichern Sie die Adresse von a [0] [3] in p [0], dh die Adresse von 1 Zeile und 4 Spalten, aber es gibt keine 4 Spalten, und gehen Sie zu 2 Zeilen, also zur Adresse aus 2 Zeilen und 1 Spalte Das heißt, die Adresse 4 wird in p[0] gespeichert.
Wenn i = 1 ist, speichern Sie die Adresse von a [1] [3] in p [1], dh die Adresse von 2 Zeilen und 4 Spalten, aber es gibt keine 4 Spalten, gehen Sie zu 3 Zeilen und speichern Sie 3 Zeilen und 1 Spalte, also 7 Die Adresse wird in p[1] gespeichert,
Wenn i = 2, speichern Sie 4 Zeilen und 1 Spalte oder 10 in p [2]; wenn i = 3, speichern Sie 5 Zeilen und 1 Spalte in p [3], dh speichern Sie die Adresse nach 12 in p [3]. aber nicht, also liegt p[3] außerhalb der Grenzen, so dass p[3] nach seiner Verwendung problematisch ist.
Drucken Sie schließlich p[2][2], p[2] ist die Adresse von 10, also ist p[2][2] 12, also drucken Sie 12, wählen Sie D
4. Unter den folgenden Aussagen zu Strukturen und Unions ist () die richtige.
A. Das gleiche Speichersegment einer Union kann mehrere verschiedene Arten von Mitgliedern speichern, es kann jedoch immer nur ein Mitglied zu einem bestimmten Zeitpunkt gespeichert werden.
B. Die von der Strukturvariablen belegte Speicherlänge ist gleich der Länge des längsten Mitglieds, und die von der Unionsvariablen belegte Speicherlänge ist die Summe der von jedem Mitglied belegten Speicherlängen.
C. Jedes Mitglied der Gewerkschaft belegt seine eigene Speichereinheit.
D. Der Strukturtyp kann in der Definition des Unionstyps erscheinen, aber der Unionstyp kann nicht in der Definition des Strukturtyps erscheinen.
Analyse: Eine Union bezieht sich auf eine Sammlung von Daten mit demselben Datentyp oder unterschiedlichen Datentypen, deren Daten sich jedoch gegenseitig ausschließen, da sich alle Mitglieder der Union einen Speicherplatz teilen. Wenn Mitglied A verwendet wird, ist Mitglied B von ein anderer Typ als Mitglied A ist, ist dazu bestimmt, nicht mehr das zu sein, was es war. Daher ist A richtig. Option B ist genau das Gegenteil und B ist falsch. Option C widerspricht dem Konzept und ist völlig falsch. Die D-Option ist falsch. Der Strukturtyp und der Union-Typ sind nichts Besonderes. Sie sind im Wesentlichen Typen und können verwendet werden. Zusammenfassend wählen Sie A
5. Die Ausgabe des folgenden Programmsegments ist ()
#include<stdio.h>
int main()
{
int arr[] = { 6,7,8,9,10 };
int* ptr;
ptr = arr;
*(ptr + 2) += 2;
printf("%d,%d\n", *ptr, *(ptr + 2));
}
A、8,10 B、6,8 C、7,9 D、6,10
Analyse: Definieren Sie zunächst ein Array arr und speichern Sie 6, 7, 8, 9, 10 darin. Dann wird ein Zeiger ptr definiert und die erste Adresse des Arrays arr wird ptr zugewiesen, dann *(ptr+2)+=2, sodass die Adresse von ptr um zwei Einheiten zurück auf 8 verschoben wird, und 8+= 2 . Ändern Sie die im Array arr gespeicherten 6, 7, 8, 9, 10 in 6, 7, 10, 9, 10, sodass beim Drucken von ptr 6, (ptr+2) und 10 gedruckt werden. Wählen Sie D
Programmierfrage 1:
Tipp: Da nur die Länge des letzten Wortes benötigt wird, können wir entsprechend den Merkmalen der Leerzeichen zwischen Wörtern durchlaufen. Sie können auch die folgende umgekehrte Berechnung versuchen, dh zuerst strlen verwenden, um die Länge der Zeichenfolge zu berechnen, und dann verwenden Die umgekehrte Methode zur Berechnung der Länge des letzten Wortes ist in Ordnung.
int lengthOfLastWord(char* s) {
int i = 0;
int count = 0;
//计数器,计算最后一个单词的长度
int min = 0;
//存储器,避免最后一个单词后面有空格,将计数器清零
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] == ' ')
{
count = 0;
//一旦遇到空格清空计数器
}
else
{
count++;
min = count;
}
}
if (count == 0)
//当计数器为0,不是最后一个单词后面有空格
//就是本身就全为空格,本身就全为空格,count也为0,不影响
{
count = min;
}
return count;
}
Programmierfrage 2:
136. Zahlen, die nur einmal vorkommen – LeetCode
Die schönen Sommerferien gehen zu Ende, hier ist eine einfache Frage zum Schluss: Entspannen Sie sich
Tipp: Zwei identische Zahlen ^ (XOR) = 0 und ^ erfüllen das Kommutativgesetz
int singleNumber(int* nums, int numsSize){
int i=0;
int a=0;
for(i=0;i<numsSize;i++)
{
a^=nums[i];
}
return a;
}
Nun, die heutige Übung ist hier. Vielen Dank, Freunde, für Ihren Besuch. Ich wünsche Ihnen allen eine glänzende Zukunft O(∩_∩)O