Moät soá kieán thöùc cô sôû veà laäp trình baèng ngoân ngöõ C

Phaâàn tröôùc | Muïc luïc | Phaâàn sau

 

XV. Haøm trong C

Noäi dung:

Moät soá haøm vaø macro thö vieän C: time(), localtime(), asctime().

 

Khai baùo haøm

data_type_specifier  function_name();

Vôùi data_type_specifier ñònh kieåu maø haøm seõ traû laïi giaù trò, function_name laø teân haøm theo quy taéc cuûa C.

hoaëc

data_type_specifier  function_name(
      data_type_specifier argument_name1,
      data_type_specifier argument_name2,
      data_type_specifier argument_name3,
      .
      .
      .
      data_type_specifier argument_nameN,
);

Vôùi argument_name1, argument_name2,… laø caùc nguyeân maãu (prototypes) cuûa ñoái soá seõ trao ñoåi giaù trò vôùi haøm.

Neáu haøm ñöôïc ñònh nghóa tröôùc khi haøm ñöôïc goïi, ta khoâng caàn khai baùo. Neáu khoâng, baèng caùch naøo ñoù ñeå compiler hieåu haøm ñoù coù toàn taïi, töùc laø phaûi coù doøng khai baùo haøm tröôùc khi duøng, hoaëc duøng #include header.h (thoâng tin veà khai baùo caùc haøm ñöôïc ñònh nghóa thaønh thö vieän…)

Caùch goïi haøm cuõng nhö thöïc hieän moät caâu leänh.

Ví duï:

 
1:  /* Making function calls */
2:  #include <stdio.h>
3:
4:  int function_1(int x, int y);
5:  double function_2(double x, double y)
6:  {
7:     printf("Within function_2.\n");
8:     return (x - y);
9:  }
10:
11: main()
12: {
13:    int x1 = 80;
14:    int y1 = 10;
15:    double x2 = 100.123456;
16:    double y2 = 10.123456;
17:
18:    printf("Pass function_1  %d and %d.\n", x1, y1);
19:    printf("function_1 returns %d.\n", function_1(x1, y1));
20:    printf("Pass function_2  %f and %f.\n", x2, y2);
21:    printf("function_2 returns %f.\n", function_2(x2, y2));

22:    return 0;
23: }
24: /* function_1() definition */
25: int function_1(int x, int y)
26: {
27:    printf("Within function_1.\n");
28:    return (x + y);
29: }
 
Keát quaû:
 
Pass function_1  80 and 10.
Within function_1.
function_1 returns 90.
Pass function_2  100.123456. and 10.123456.
Within function_2.
function_2 returns 90.000000.

Caùc daïng haøm maãu

Haøm khoâng ñoái soá

data_type_specifier  function_name()
data_type_specifier  function_name(void)
 
Ví duï:
int getchar(void);
 
int c;
c = getchar();

Ví duï:

 
1:  /* Functions with no arguments */
2:  #include <stdio.h>
3:  #include <time.h>
4:
5:  void GetDateTime(void);
6:
7:  main()
8:  {
9:     printf("Before the GetDateTime() function is called.\n");
10:    GetDateTime();
11:    printf("After the GetDateTime() function is called.\n");
12:    return 0;
13: }
14: /* GetDateTime() definition */
15: void GetDateTime(void)
16: {
17:    time_t now;
18:
19:    printf("Within GetDateTime().\n");
20:    time(&now);
21:    printf("Current date and time is: %s\n",
22:       asctime(localtime(&now)));
23: }
 
Keát quaû:
 
Before the GetDateTime() function is called.
Within GetDateTime().
Current date and time is: Sat Apr 05 11:50:10 1997
After the GetDateTime() function is called.

Söû duïng time(), localtime(), and asctime()

Moät soá haøm thö vieän C ñeå cho bieát thôøi gian:

Trong C, haØm time() traû laïi thôøi gian theo lòch bieåu dieãn baèng soá ñôn vò xaùc ñònh bôûi kieåu time_t keå töø 1 thôøi ñieåm naøo ñoù.

#include <time.h>
time_t time(time_t *timer);

Haøm localtime() chuyeån ñoåi thôøi gian tính baèng time() thaønh thôøi gian ñòa phöông bieåu dieãn döôùi daïng caáu truùc struct tm.

#include <time.h>
struct tm *localtime(const time_t *timer);

Haøm asctime() chuyeån ñoåi thôøi gian theo caáu truùc struct tm thaønh daïng ASCII (nhö Sat Apr 05 11:50:10 1997 chaúng haïn)

#include <time.h>
char *asctime(const struct tm *timeptr);

Ví duï minh hoïa coù theå xem ôû ñoaïn code treân.

Haøm vôùi soá ñoái soá coá ñònh

Ví duï :

int function_1(int x, int y);

Maãu haøm vôùi soá ñoái soá thay ñoåi

Ví duï:

int printf(const char *format[, argument, ...]);

Khai baùo chung:

data_type_specifier  function_name(
      data_type_specifier argument_name1, ...
);

Khaùi nieäm laäp trình caáu truùc (laäp trình thuû tuïc)

Laäp trình caáu truùc ñaët cô sôû treân vieäc xaây döïng caùc haøm hay caùc thuû tuïc. Laäp trình caáu truùc coù 2 caùch tieáp caän: döôùi leân (bottom-up) vaø treân xuoáng (top-down).

Caùch döôùi leân: chia chöông trình thaønh nhöõng khoái nhoû, ñònh nghóa thaønh caùc haøm; sau khi vieát vaø thöû nghieäm xong seõ keát hôïp laïi thaønh chöông trình chính.

Caùch treân xuoáng: baét ñaàu laøm vieäc töø chöông trình chính (main() chaúng haïn). Khi caùc haøm con phaùt sinh, seõ tuaàn töï vieát sau.

Duøng phöông phaùp keát hôïp moät caùch toái öu caû hai laø khaû naêng phuï thuoäc vaøo ñoä daøy khinh nghieäm cuûa laäp trình vieân.

Baøi taäp

  1. Bieåu thöùc naøo sau ñaây laø khai baùo haøm:
int function_1(int x, int y);
int function_2(int x, int y){return x+y;}
  1. Caùc khai baùo naøo sau ñaây laø sai:
    • double function_1(int x, ...);
    • void function_2(int x, int y, ...);
    • char function_3(...);
    • int function_4(int, int, int, int);
  1. Khai baùo vaø ñònh nghóa haøm MultiTwo() nhaân 2 soá nguyeân vôùi nhau. Vieát chöông trình söû duïng haøm traân vaø in keát quaû leân maøn aûnh.

 

Phaâàn tröôùc | Muïc luïc | Phaâàn sau