Vad skrivs ut när nedanstående program körs? C program med pekare och scope.

Permalänk

Vad skrivs ut när nedanstående program körs? C program med pekare och scope.

Godkväll alla. Imorgon morgon har man tenta i programmeringsteknik. Har koll på det mesta men kört fast helt på en uppgift med pekare och scope, skulle behöva hjälp och en förklarlig för vad som händer i programmet. Har generell koll på pekare med denna uppgift står det stilla på... Alla hjälp uppskatta

Vad skrivs ut när nedanstående program körs?

#include <stdio.h>
int a=4;
int b=7;

int funk1(int* a){
printf("funk 1= %d\n",*a+3*b);
return *a+3*b;
}

int func2(int* b){
*b=*b-3;
printf("funk 2= %d\n",(*b)+a);
return (*b)+a;
}

int funk3(int* a, int b){
int c;
c=func2(a);
printf("funk 3= %d\n",c);
return c+func2(&b);
}

int funk4(int* a, int* b){
int c;
c=funk3(b,*a);
c=c+funk1(b);
return *a+*b+c;
}

int main() {
int a=2;
int b=4;
printf("Result %d \n",funk4(&b,&a));
return 0;
}

Permalänk
Medlem
Skrivet av ClumpyAbbe:

Godkväll alla. Imorgon morgon har man tenta i programmeringsteknik. Har koll på det mesta men kört fast helt på en uppgift med pekare och scope, skulle behöva hjälp och en förklarlig för vad som händer i programmet. Har generell koll på pekare med denna uppgift står det stilla på... Alla hjälp uppskatta

Vad skrivs ut när nedanstående program körs?

#include <stdio.h>
int a=4;
int b=7;

int funk1(int* a){
printf("funk 1= %d\n",*a+3*b);
return *a+3*b;
}

int func2(int* b){
*b=*b-3;
printf("funk 2= %d\n",(*b)+a);
return (*b)+a;
}

int funk3(int* a, int b){
int c;
c=func2(a);
printf("funk 3= %d\n",c);
return c+func2(&b);
}

int funk4(int* a, int* b){
int c;
c=funk3(b,*a);
c=c+funk1(b);
return *a+*b+c;
}

int main() {
int a=2;
int b=4;
printf("Result %d \n",funk4(&b,&a));
return 0;
}

Är det något specifikt som du undrar över?

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

@ClumpyAbbe: Det är väl bara köra programmet så får du svaret? Trodde inte någon lärde ut C längre, vad är det du läser?

Svaret är för övrigt "Result 31".

Permalänk
Medlem
Skrivet av improwise:

@ClumpyAbbe: Det är väl bara köra programmet så får du svaret?

Det framgår inte 100% tydligt, men jag uppfattar det som att "Vad skrivs ut när nedanstående program körs?" är frågan i uppgiften, inte TS fråga till oss. (Och att "skulle behöva hjälp och en förklarlig för vad som händer i programmet" är själva målet med tråden.)

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av improwise:

@ClumpyAbbe: Det är väl bara köra programmet så får du svaret? Trodde inte någon lärde ut C längre, vad är det du läser?

Svaret är för övrigt "Result 31".

Det skrivs ut 5 rader totalt, det där är bara sista raden. (Och som sagt, förmodligen inte poängen med tråden.)

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

Det skrivs ut 5 rader totalt, det där är bara sista raden. (Och som sagt, förmodligen inte poängen med tråden.)

Nähä, säger du det?

Permalänk
Medlem
Skrivet av improwise:

Nähä, säger du det?

Japp, det gör jag.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Avstängd

Kompilerar det ens? Du har ju två av a och b

Skickades från m.sweclockers.com

Permalänk
Medlem

Vad jag ser är programmet helt korrekt.

För att lista ut vad som skrivs ut bör man i samband med att exekveringen av ett nytt scope börjar skriva upp vad a, b, *a och *b har för värde, och sedan följa exekveringen.

Enklare är att helt enkelt kompilera och exekvera.

Kopiera koden.
touch test.c
(Öppna test.c i en editor och klistra in koden. Spara.)
gcc -o test test.c
./test

Utmatningen blir då:

funk 2= 3
funk 3= 3
funk 2= 5
funk 1= 20
Result 31

Visa signatur

Linux och Android

Permalänk
Medlem
Skrivet av Adoby:

Vad jag ser är programmet helt korrekt.

Ja, på så sätt att det fungerar att köra, men själva koden i sig är en mardröm, förhoppningsvis medvetet.

Skrivet av Adoby:

Enklare är att helt enkelt kompilera och exekvera.

Kopiera koden.
touch test.c
(Öppna test.c i en editor och klistra in koden. Spara.)
gcc -o test test.c
./test

Utmatningen blir då:

funk 2= 3
funk 3= 3
funk 2= 5
funk 1= 20
Result 31

Numera kan man dessutom göra det ännu enklare för sig t.ex. med Online C kompilator

Permalänk
Medlem
Skrivet av Adoby:

Vad jag ser är programmet helt korrekt.

För att lista ut vad som skrivs ut bör man i samband med att exekveringen av ett nytt scope börjar skriva upp vad a, b, *a och *b har för värde, och sedan följa exekveringen.

Enklare är att helt enkelt kompilera och exekvera.

Kopiera koden.
touch test.c
(Öppna test.c i en editor och klistra in koden. Spara.)
gcc -o test test.c
./test

Utmatningen blir då:

funk 2= 3
funk 3= 3
funk 2= 5
funk 1= 20
Result 31

Men nu är det ju en skoluppgift där målet är att förstå pekare och scope, så det förstnämnda tillvägagångssättet verkar rätt uppenbart vara det "rätta". (Att visa att GCC förstår pekare och scope är rätt meningslöst.)
Problemet är väl mest att det inte finns någon specifik fråga från TS, så det blir åtminstone ur mitt perspektiv för mycket jobb (till största delen bortkastat, förmodligen) att besvara "skulle behöva hjälp och en förklarlig för vad som händer i programmet".

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Vad läser du för program?