( 1 ) http://ist.ksc.kwansei.ac.jp/ tutimura/ 2012 6 23 ( 1 ) 1 / 58
C ( 1 ) 2 / 58
2008 9 2002 2005 T E X ptetex3, ptexlive pt E X UTF-8 xdvi-jp 3 ( 1 ) 3 / 58
( 1 ) 4 / 58
C,... ( 1 ) 5 / 58
6/23( ) 7/7( ) 7/21( ) ( 1 ) 6 / 58
C C C C C ( 1 ) 7 / 58
C BASIC, COBOL, Pascal, FORTRAN 1972 D. M. Ritchie B. W. Kernighan AT&T C++, Java, C# ( 1 ) 8 / 58
C OS ( 1 ) 9 / 58
C K&R (1978 ) ANSI C (C89, 1989 ), void, enum C99 (1999 ),, long long,,, 1 (//) C11 (2011 ), gets gets s C99 (K&R C99 ) ( 1 ) 10 / 58
1 B.W. Kernighan, R. Pike,,, 2000. C/C++/Java 2 C ANSI 2 B.W. Kernighan, D.M. Ritchie,,, 1989. ( 1 ) 11 / 58
3 C,, 2004. scanf() 4 C,, 1991. 5 C,, 2003. ( 1 ) 12 / 58
C (1), (2) (1) (2) 1 (2) 2 (3), (4) (5) (5 ) ( 1 ) 13 / 58
(1), (2) (1) Hello, world! (2) Hello, world!? 1 int? double? ( 1 ) 14 / 58
(1) #include <stdio.h> int main(void) { printf("hello,world!\n"); return 0; ( 1 ) 15 / 58
(2) 1 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, num; num = atoi(argv[1]); for (i=0; i<num; i++) { printf("hello,world!\n"); return EXIT_SUCCESS; ( 1 ) 16 / 58
(2) 2 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, num; scanf("%d", &num); for (i=0; i<num; i++) { printf("hello,world!\n"); return EXIT_SUCCESS; ( 1 ) 17 / 58
(3), (4) (3) 2? 1 int? double? (4)? (4 ) 3?? ( 1 ) 18 / 58
(5) (5) 2 2? 1 ( 1 ) 19 / 58
(5 ) (5 ) 5 2 (6) 2 1, 10, 100, 1000??? ( 1 ) 20 / 58
C (7) (8) (9) ( 1 ) 21 / 58
(yes/no, true/false) 2 bool, boolean, 2, TRUE FALSE C ANSI C89 int #define FALSE 0 C99 #include <bool.h> bool, true, false ( 1 ) 22 / 58
if/while TRUE FALSE TRUE FALSE flag is_prime,has_next,visited #include <ctype.h> if (isalpha(a)) printf("%c is an alphabet.\n", a); if (isdigit(a)) printf("%c is a number.\n", a); if (!isdigit(a)) printf("%c is not a number.\n", a); ( 1 ) 23 / 58
(7) (7) isupper(),islower() int main(void) { int c; while ((c=getchar())!= EOF) {... return EXIT_SUCCESS; Cygwin [Enter] [CTRL] [D] ( 1 ) 24 / 58
(8) (8) isupper(),islower() (8 ) TRUE ( 1 ) 25 / 58
(9) (9) 1 10 2 2 3 1 4 5 6 7 8 9 10 (9 ) 1 10 5 (9 ) 1 20 10 2 ( 1 ) 26 / 58
C (10) (10) 1 (10) 2 (10) 3 (10 ), (11) (11) (12)(12 ), (12)(12 ) (12)(12 ) (13), (13) (14), ( 1 ) 27 / 58
( 1 ) 28 / 58
(10) (10) 100 2 1 2 3 2 4 2 2 5 2, 3, 4 ( 1 ) 29 / 58
(10) 1 int main(void) { int i, j, is_prime; for (i=2; i<100; i++) { is_prime = TRUE; for (j=2; j<i; j++) { if (i % j == 0) { is_prime = FALSE; break; if (is_prime) printf("%d\n", i); return EXIT_SUCCESS; ( 1 ) 30 / 58
(10) 2 int main(void) { int i, j, is_prime; for (i=2; i<100; i++) { is_prime = TRUE; for (j=2; j<i && is_prime; j++) { if (i % j == 0) { is_prime = FALSE; if (is_prime) printf("%d\n", i); return EXIT_SUCCESS; ( 1 ) 31 / 58
(10) 3 int is_prime(int n) { int i; for (i=2; i<n; i++) { if (n % i == 0) return FALSE; return TRUE; int main(void) { for (int i=2; i<100; i++) { // C99 if (is_prime(i)) printf("%d\n", i); return EXIT_SUCCESS; ( 1 ) 32 / 58
3 1960 Structured Programming (1967) Go to statement considered harmful (1968) goto ( 1 ) 33 / 58
1. break 1 goto (?) 2. 3. return ( 1 ) 34 / 58
(10 ), (10 ) int main(int argc, char *argv[]) { int num; num = atoi(argv[1]); if (is_prime(num)) printf("%d is prime.\n", num); else printf("%d is not prime.\n", num); return EXIT_SUCCESS; ( 1 ) 35 / 58
(11) (11) ( ) 100 1. 2 99 2. 3. 2 (11 ) 1000 static or malloc() ( 1 ) 36 / 58
(11) int main(void) { int i, j, is_prime[100]; for (i=2; i<100; i++) is_prime[i] = TRUE; for (i=2; i<100; i++) { if (is_prime[i]){ printf("%d\n",i); for (j=i*2; j<100; j+=i) is_prime[j] = FALSE; return EXIT_SUCCESS; ( 1 ) 37 / 58
(12)(12 ), (12) (12 ) 100 2? ( 1 ) 38 / 58
(12)(12 ) int is_prime_flag[100]; void prime_init(void){ int i, j; is_prime_flag[0] = is_prime_flag[1] = FALSE; for (i=2; i<100; i++) is_prime_flag[i] = TRUE; for (i=2; i<100; i++) { if (is_prime_flag[i]){ for (j=i*2; j<100; j+=i) { is_prime_flag[j] = FALSE; ( 1 ) 39 / 58
(12)(12 ) int is_prime(int i) { if (0 <= i && i < 100) return is_prime_flag[i]; printf("is_prime: out of range (%d)\n", i); exit(1); int main(void) { int i; prime_init(); for (i=2; i<=100/2; i++) { if (is_prime(i)&& is_prime(100-i)){ printf("100 = %d + %d\n", i, 100-i); return EXIT_SUCCESS; ( 1 ) 40 / 58
(13), (13) ( 1 ) 41 / 58
(13) int main(void) { int i; prime_init(); for (i=1; i<100; i++) { int p1 = is_prime(i); int p2 = is_prime2(i); if ((p1 &&!p2) (!p1 && p2)) { printf("error: i=%d, %d!= %d\n", i, p1, p2); return EXIT_SUCCESS; ( 1 ) 42 / 58
(14), (14) 100 2 98 2 100 2 100 98 ( 1 ) 43 / 58
(14) #define PRIME_MAX 100 static int is_prime_flag[prime_max]; void prime_init(void){ int i, j; is_prime_flag[0] = is_prime_flag[1] = FALSE; for (i=2; i<prime_max; i++) is_prime_flag[i] = TRUE; for (i=2; i<prime_max; i++) { if (is_prime_flag[i]){ for (j=i*2; j<prime_max; j+=i) { is_prime_flag[j] = FALSE; ( 1 ) 44 / 58
(14) void sum_prime(int n) { int i; for (i=2; i<=n/2; i++) { if (is_prime(i)&& is_prime(n-i)){ printf("%d = %d + %d\n", n, i, n-i); int main(void) { prime_init(); sum_prime(100); sum_prime(98); return 0; ( 1 ) 45 / 58
C (20) (21), (22) (23) (24) (25),(25 ), (1) (2) ( 1 ) 46 / 58
(call by value) (call by reference) ( 1 ) 47 / 58
y m d 2012 6 23 6 22 2012 5 1 4 30 2012 4 1 3 31 2012 3 1 2 29 2011 3 1 2 28 ( 1 ) 48 / 58
2 29 4 100 400 400 97 1872 5 ( 1 ) 49 / 58
(20) int is_leap_year(int year) 2001, 2002, 2003, 2005, 2100, 2200,... 2000, 2004, 2008,... ( 1 ) 50 / 58
(21), (22) (21) int is_valid_date(int year, int month, int day) (22) 1900 1 1 int date_to_number(int year, int month, int day) date_to_number(1900,1,1) 1 ( 1 ) 51 / 58
(23) (23) (22) void number_to_date(int number, int *year, int *month, int *day) int main() { int year, month, day; number_to_date(12345,&year, &month, &day); printf("%d %d %d \n", year, month, day); return 0; ( 1 ) 52 / 58
1 void let_five(int *a) { *a = 5; void foo(void) { int i = 1; /* 1 */ let_five(&i); /* */ printf("%d\n",i); /* 5 */ 1 ( 1 ) 53 / 58
(24) date_to_number() number_to_date() yesterday() tomorrow() ( 1 ) 54 / 58
(25),(25 ), (25) 1900 1 1 int day_of_week(int year, int month, int day) 0=, 1=,..., 6= (25 ) $ cal 6 2012 June 2012 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ( 1 ) 55 / 58
int day_of_week(int year, int month, int day) { if (month < 3) { year--; month += 12; return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7; mktime(),localtime() ( 1 ) 56 / 58
(1) 1. 30 2. 2012 6 30 25 OS ( 1 ) 57 / 58
(2) 3. 1900 (=1), (=2), (=3), (=4) 7/2( ), http://ist.ksc.kwansei.ac.jp/ tutimura/tuat/ ( 1 ) 58 / 58