Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakenteiden Välittäminen Funktioille | Työskentely Pointtereiden ja Rakenteiden Kanssa
C-Rakenteet
Osio 2. Luku 5
single

single

Rakenteiden Välittäminen Funktioille

Pyyhkäise näyttääksesi valikon

Funktiot voivat käsitellä rakenteita samalla tavalla kuin tavallisia muuttujia:

main.c

main.c

123456789101112131415161718192021
#include <stdio.h> // structure definition typedef struct { char name[50]; } Person; // function to display information about a person void printPerson(Person p) { printf("Name: %s\n", p.name); } int main() { // creating a structure and initializing its values Person person1 = {"John"}; // call a function to display information about a person printPerson(person1); return 0; }

Jotta funktio voi "vuorovaikuttaa" rakenteen kanssa, esimerkiksi muuttaa olemassa olevan rakenteen kenttiä, funktion täytyy ottaa vastaan osoitin rakenteeseen:

main.c

main.c

12345678910111213141516171819202122232425262728293031
#include <stdio.h> // structure definition typedef struct { char symbol; }Example; // function for changing the values of structure fields via a pointer void changePoint(Example* ptr, int newSymbol) { // check for NULL pointer if (ptr != NULL) { ptr->symbol = newSymbol; } } int main() { // create the Example structure and a pointer Example ptr1 = {'H'}; Example* ptr = &ptr1; printf("Old symbol: %c | %p\n", ptr1.symbol, &ptr1); // use function to change the field of structures changePoint(ptr, 'y'); printf("New symbol: %c | %p\n", ptr1.symbol, &ptr1); return 0; }

Rakenteita voidaan luoda funktioiden sisällä, ja tällaiset rakenteet voivat "elää" funktioiden ulkopuolella (eivät ole paikallisia), jos funktio palauttaa osoittimen tällaiseen rakenteeseen:

main.c

main.c

1234567891011121314151617181920212223242526272829303132
#include <stdio.h> #include <stdlib.h> // structure definition typedef struct { int value; }Example; // function creates a structure with the given field Example* CreateStruct(int setVal) { Example* ptr = (Example*)malloc(sizeof(Example)); // check for successful memory allocation if (ptr != NULL) { ptr->value = setVal; } return ptr; } int main() { // use function to create structure Example* ptrToStruct = CreateStruct(23); printf("Value inside struct: %d", ptrToStruct->value); free(ptrToStruct); // free memory return 0; }
Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Johdat pientä kolmen työntekijän tiimiä, ja jokaisella on oma tuntipalkka sekä viikottain tehdyt työtunnit.
Tehtävänäsi on laskea koko tiimin keskimääräinen viikkopalkka.

calculateWeeklySalary-funktion sisällä:

  1. Vastaanota Employee-tyyppinen rakenne parametrina.
  2. Käytä kenttiä hourlyRate ja hoursWorked.
  3. Kerro nämä keskenään saadaksesi kyseisen työntekijän viikkopalkan.
  4. Palauta laskettu palkka double-tyyppisenä.

calculateAverageSalary-funktion sisällä:

  1. Vastaanota kolme Employee-rakennetta parametreina.
  2. Kutsu calculateWeeklySalary() jokaiselle työntekijälle saadaksesi heidän kokonaispalkkansa.
  3. Laske kaikkien kolmen palkat yhteen.
  4. Jaa kokonaissumma luvulla 3.0 saadaksesi keskimääräisen viikkopalkan.
  5. Palauta tämä keskiarvo double-tyyppisenä.

Example

Employee NameHourly RateHours WorkedWeekly Salary
Alice Johnson22.540900.00
Bob Smith18.038684.00
Carol White25.0421050.00

Average Weekly Salary: 878.00

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 5
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

some-alt