---
# System prepended metadata

title: C Programming Language (202001-A1)

---

# C Programming Language (202001-A1)
{%youtube youtubeid %}
## :blue_book: Class09 (2020.02.03)
```c=
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int ABC[6]={11, 48, 30, 17, 62, 37};
	int i, max, min;
	min=max=0;
	for (i=0; i<6; i++)
	{
		if (*(ABC+i)>*(ABC+max))
		{
			max=i;
		}
		if (*(ABC+i)<*(ABC+min))
		{
			min=i;
		}
	}
	printf("The index of maximum value in array ABC is %d\n", max);
	printf("The index of minimum value in array ABC is %d\n", min);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int ONE[5]={31, 17, 33, 22, 16};
	int *ptr=ONE;
	int i;
	printf("ONE[5]={");
	for (i=0; i<5; i++)
	{
		if (i!=4)
		{
			printf("%d ", *(ptr+i));	
		}	
		else
		{
			printf("%d}\n", *(ptr+i));
		}
	} 
	printf("ONE[5]={");
	for (i=0; i<5; i++)
	{
		if (i!=4)
		{
			printf("%d ", *(ptr+i)+2);
		}
		else
		{
			printf("%d}\n", *(ptr+i)+2);
		}
	}
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	char *ptr="We are best friends.";
	int i, cont=0;
	for (i=0; *(ptr+i)!='\0'; i++)
	{
		if (*(ptr+i)>=97&&*(ptr+i)<=122)
		{
			cont=cont+1;
		}
	}
	printf("Number of lowercase in *ptr is %d\n", cont);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int a, b;
	a=35;
	b=a&7;
	printf("a & 7 = %d\n", b);
	b&=7;
	printf("b & 7 = %d\n", b);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	unsigned char cht, ch1, ch2;
	ch1=41;
	ch2=11;
	cht=ch1&ch2;
	printf("ch1 and ch2 = %d\n", cht);
	cht=ch1|ch2;
	printf("ch1 or ch2 = %d\n", cht);
	cht=ch1^ch2;
	printf("ch1 xor ch2 = %d\n", cht);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	unsigned char ch=53;
	unsigned char ix=5;
	ch=ch<<1;
	printf("ch=%x\n", ch);
	ch=ch<<1;
	printf("ch=%x\n", ch);
	ch=ch<<1;
	printf("ch=%x\n", ch);
	ch=ch>>1;
	printf("ch=%x\n", ch);
	ch=ch>>1;
	printf("ch=%x\n", ch);
	ix=ix<<5;
	printf("ix=%x\n", ix);
	ix=ix>>3;
	printf("ix=%x\n", ix);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	char *JJ="Hello";
	char *KK="World";
	char *tmp;
	printf("JJ=%s KK=%s\n", JJ, KK);
	tmp=JJ;
	JJ=KK;
	KK=tmp;
	printf("JJ=%s KK=%s\n", JJ, KK);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int n=20, *p, **pp;
	p=&n;
	pp=&p;
	printf("n=%d, &n=%p, *p=%d, p=%p, &p=%p\n", n, &n, *p, p, &p);
	printf("**pp=%d, *pp=%p, pp=%p, &pp=%p\n", **pp, *pp, pp, &pp);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int num[3][4];
	printf("num=%p\n", num);
	printf("&num=%p\n", &num);
	printf("*num=%p\n", *num);
	printf("num[0]=%p\n", num[0]);
	printf("num[1]=%p\n", num[1]);
	printf("num[2]=%p\n", num[2]);
	printf("&num[0]=%p\n", &num[0]);
	printf("&num[1]=%p\n", &num[1]);
	printf("&num[2]=%p\n", &num[2]);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int num[3][5]={{12, 23, 34, 45, 56},
				   {54, 43, 32, 21, 10},
				   {55, 66, 22, 77, 88}};
	int m, n;
	for (m=0; m<3; m++)
	{
		for (n=0; n<5; n++)
		{
			printf("num[%d][%d]=%d, address=%p\n", m, n, *(*(num+m)+n), *(num+m)+n);
		}
	}
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	struct data
	{
		char name[20];
		int  math;
	};
	struct data student;
	printf("Please type in your name: ");
	gets(student.name);
	printf("Please input a score: ");
	scanf("%d", &student.math);
	printf("Name: %s\n", student.name);
	printf("Score: %d\n", student.math);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	struct data
	{
		char name[20];
		int  math;
	};
	struct data student={"Mary Wang", 75};
	printf("Name: %s\n", student.name);
	printf("Score: %d\n", student.math);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  eng;
	};
	struct data std;
	printf("sizeof(std)=%d\n", sizeof(std));
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  sex;
		int  age;
	}student_1={"John Lee", 1, 19}, student_2={"Mary Wang", 0, 20};
	printf("%s\n", student_1.name);
	printf("Gender: ");
	if (student_1.sex==1)
	{
		printf("Male");
	}
	else
	{
		printf("Female");
	}
	printf("\n");
	printf("age: %2d\n", student_1.age);
	printf("%s\n", student_2.name);
	printf("Gender: ");
	if (student_2.sex==1)
	{
		printf("Male");
	}
	else
	{
		printf("Female");
	}
	printf("\n");
	printf("age: %2d\n", student_2.age);
	system("pause");
	return 0;
}


/* prog10_13, 指標常數的值與位址 1430*/						
//a是一個指向陣列位址的指標常數, 儲存陣列第一個元素的位置
#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
   int i,a[5]={32,16,35,65,52};
   printf("a=%p\n",a);		/* 印出指標常數a的值 */
   printf("&a=%p\n",&a); 		/* 印出指標常數a的位址 */
   //陣列名稱本身就是存放陣列位址的變數
//陣列名稱本身是一個存放位址的指標常數, 他指向陣列的位址(陣列巧妙設計)
   //連續的記憶體空間配置給陣列元素存放
   for(i=0;i<5;i++)
     printf("&a[%d]=%p\n",i,&a[i]);  /* 印出陣列a每一個元素的位址 */
   
   system("pause");
   return 0;
}

/* prog10_14, 利用指標常數來存取陣列的內容 指標的算數運算*/		//1505
#include <stdio.h> 
#include <stdlib.h>
int main(void) {
   int a[3]={5,7,9};
   printf("a[0]=%d, *(a+0)=%d\n",a[0],*(a+0));
   //int 每個元素佔了4個位元組, a+i代表a[i]的位址, 運用指標的算數運算, 
   //可控制陣列的各個元素
   printf("a[1]=%d, *(a+1)=%d\n",a[1],*(a+1));
   //所指向的資料型態大小來處理
   printf("a[2]=%d, *(a+2)=%d\n",a[2],*(a+2));
   system("pause");
   return 0;
}

/* prog10_15, 利用指標求陣列元素和 */  					//1515
#include <stdio.h> 
#include <stdlib.h>
int main(void) { 
   int a[3]={5,7,9};
   int i,sum=0;
   for(i=0;i<3;i++)
      sum+=*(a+i);         /* 加總陣列元素的總和 sum=sum+a[i] */
   printf("sum=%d\n",sum);
   system("pause");
   return 0;
}
/* prog10_16, 利用指標求陣列元素和 */						//1523
#include <stdio.h> 
#include <stdlib.h>
int main(void) {
   int a[3]={5,7,9};
   int i,sum=0;
   int *ptr=a;			/* 設定指標ptr指向陣列元素a[0] */
   for(i=0;i<3;i++)
      sum+=*(ptr++);    	/* 計算陣列元素值的累加  */
   printf("sum=%d\n",sum);
   system("pause");
   return 0;
}

//位元運算子 0830
/*   ch19_4.c                  */
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int  a, b;
    a = 35;		//10 0011
    b = a & 7;	//00 0111
    printf("a & b (10 進位) = %d \n",b);
    b &= 7;		//00 0111
    printf("a & b (10 進位) = %d \n",b);
    system("pause");
    return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	unsigned char cht,ch1,ch2;
	ch1=41;					//101001
	ch2=11;					//001011
	cht=ch1&ch2;
	printf("101001 and 001011=%2d\n",cht);
	cht=ch1|ch2;
	printf("101001 or  001011=%2d\n",cht);
	cht=ch1^ch2;   			//exclusive KK[ɪkˋsklusɪv] or
	printf("101001 xor 001011=%2d\n",cht);
	system("pause");
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main(void) {
	unsigned char ch=53;
	unsigned char ix=5;
	ch=ch<<1;
	printf("ch=%x\n",ch);
	ch=ch<<1;
	printf("ch=%x\n",ch);
	ch=ch<<1;
	printf("ch=%x\n",ch);	
	ch=ch>>1;	
	printf("ch=%x\n",ch);	
	ch=ch>>1;	
	printf("ch=%x\n",ch);		
	ix=ix<<5;
	printf("ix<<5=%x\n",ix);
	ix=ix>>3;
	printf("ix>>3=%x\n",ix);
	system("pause"); return 0;
}
/*   ch19_1.c                  */
#include <stdlib.h>
#include <stdio.h>
//int decimalToBin(int);
int BIN(int);
int main()
{
    int x;
    printf("Please input an integer: ");
    scanf("%d", &x);
    printf("DEC %d , BIN %d\n", x, BIN(x));
    system("pause");
    return 0;
}
//int decimalToBin(int n)
int BIN(int x)
{
    int binary = 0; 		/* 紀錄 2 進位數字 */
	int times = 1;			/* 每一次增加 10 倍*/ 
    int rem;				/* 餘數            */ 
	int i = 1;  			/* 求餘數迴圈次數  */ 
 
    while (x != 0)
    {
        rem = x % 2;		/* 計算 2 的餘數    */ 
        printf("%d: %3d, %d\n",i++ ,x ,rem);
        //printf("loop %d: %3d/2, %d\n",i++ ,x ,rem);
        //printf("loop %d: %3d/2, 餘=%d, 商=%d\n",i++ ,n ,rem ,n/2);
        x /= 2; 				/* 商           */ 
        binary += rem*times; 	/* 儲存 10 進位 */ 
        times *= 10; 			/* 往左至下一筆  */ 
    }
    return binary;
}
#include <stdio.h>						//0900
#include <stdlib.h>
#define ROW 2	// 定義陣列的列個數
#define COL 3	// 定義陣列的行個數
int main(void)
{
	int i,j;
	int A[ROW][COL]={{3,2,4},
					 {6,1,5}};	// 宣告陣列 A 並設定初值
	int B[ROW][COL]={{2,-1,3},
					 {3,-4,-2}};  	// 宣告陣列 B 並設定初值 
	int C[ROW][COL]={0};  			// 宣告陣列 C 並設定初值為 0
	int *piA, *piB, *piC;
	for( i = 0 ; i < ROW ; i++ ) {
		piA = A[i]; piB = B[i]; piC = C[i];
		for( j = 0 ; j < COL ; j++ ) 
			*(piC+j) = *(piA+j) + *(piB+j); 
	}
	printf("A + B = \n");
	for(i=0;i<ROW;i++)	{
		piC = C[i];
		for(j=0;j<COL;j++)		
			printf("%3d",*(piC+j)); // 輸出陣列 C 的內容
		printf("\n");
	}
	system("pause"); return 0;
}

/* 自訂一個函式mymean(),傳入一個大小為5的整數陣列,傳回元素的平均值 */				
#include <stdio.h> 
#include <stdlib.h>
#define LEN 5

float mymean(int *, int);              /* 函數原型宣告 */

int main() {
	int ABC[]={11, 33, 55, 77, 99};           /* 整數陣列 */
	printf("ABC: ");
	int i;
	for(i=0; i<5; i++) 
	{
		printf("%d ", ABC[i]);
	}
	float m=mymean(ABC, 5);            /* 呼叫函式傳回陣列平均值 */
	printf("\navg=%.1f\n", m);      /* 輸出結果 */
	system("pause");
	return 0;
  }

float mymean(int *ABC, int len) {        /* 傳入陣列與長度 */
  int i, sum=0;
  for (i=0; i<len; i++) {              /* 掃描陣列 */
    sum=sum+*(ABC+i);                  /* 累加求元素總和 */
    }
  return sum/len;                      /* 傳回平均值 */
  }

 /* 指標存放變數的位置 透過位置可存取變數的內容 雙重指標 指標指向另一個指標變數 指向指標的指標
    存放某個指標的位址*/
#include<stdio.h>							//0920
#include<stdlib.h>
int main(void)
{
	int p=20;
	int *ptr1,**ptr2;
	ptr1=&p;
	ptr2=&ptr1;
	printf("p=%d, &p=%p, *ptr1=%d, ptr1=%p, &ptr1=%p\n",p,&p,*ptr1,ptr1,&ptr1);
	printf("**ptr2=%d, *ptr2=%p, ptr2=%p, &ptr2=%p\n",**ptr2,*ptr2,ptr2,&ptr2);
	system("pause");
	return 0;
}
 /* 陣列名稱是一個指向陣列位址的指標常數 指標常數的位址等於指標常數的內容 
    num是雙重指標常數 他指向指標常數陣列的起始位址 */
#include<stdio.h>							//0943
#include<stdlib.h>
int main(void)
{
	int num[3][4];
	printf("num=%p\n",num);
	printf("&num=%p\n",&num);
	printf("*num=%p\n",*num);
	printf("num[0]=%p\n",num[0]);
	printf("num[1]=%p\n",num[1]);
	printf("num[2]=%p\n",num[2]);
	printf("&num[0]=%p\n",&num[0]);
	printf("&num[1]=%p\n",&num[1]);
	printf("&num[2]=%p\n",&num[2]);
	system("pause");
	return 0;
}

 
#include<stdio.h>							//1023
#include<stdlib.h>
int main(void)
{
	int num[3][4]={{12,23,42,18},
{43,22,16,14},
{31,13,19,28}};
	int m,n;
	for(m=0;m<3;m++)
	{
		for(n=0;n<4;n++)
		{
			printf("num[%d][%d]=%d, address=%p\n",m,n,*(*(num+m)+n),*(num+m)+n);
		}
	} 
	system("pause");
	return 0;
}

#include<stdio.h>							//1045
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[20];
		int  math;
	}student;
	printf("Please type in your name:");
	gets(student.name);
	printf("Please input a score:");
	scanf("%d",&student.math);
	printf("Name:%s\n",student.name);
	printf("Score:%d\n",student.math);
	system("pause");
	return 0;
}

/* 編譯器以結構中資料型態最大者為基本單位 */
#include<stdio.h>								//1057
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  math;
	}student;
	printf("sizeof(student)=%d\n",sizeof(student));
	system("pause");
	return 0;
}

#include<stdio.h>							//1104
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  math;
	};
	struct data student={"Mary Wang",74};
	printf("Name:%s\n",student.name);
	printf("Score:%d\n",student.math);
	system("pause");
	return 0;
}

 
#include<stdio.h>							//1113
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  sex;
		int  age;
	}stu1={"John",1,18},stu2={"Mary",0,19};
	printf("%s gender: ",stu1.name);
	if(stu1.sex==1)
	{
		printf("Male");
	}
	else
	{
		printf("Female");
	}
	printf("\nage:%2d\n",stu1.age);
	printf("%s gender: ",stu2.name);
	if(stu2.sex==1)
	{
		printf("Male");
	}
	else
	{
		printf("Female");
	}
	printf("\nage:%2d\n",stu2.age);
	system("pause");
	return 0;
}

//1128
#include<stdio.h>						
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  math;
	}stu1={"Lily Chen",83};
	struct data stu2;
	stu2=stu1;
	printf("stu2.name=%s, stu2.math=%d\n",stu2.name,stu2.math);
	system("pause");
	return 0;
}

#include<stdio.h>					//1133
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[10];
		int  math;
	}student[10];
	printf("sizeof(student[3])=%d\n",sizeof(student[3]));
	printf("sizeof(student)=%d\n",sizeof(student));

	system("pause");
	return 0;
}

 
#include<stdio.h>							//1138
#include<stdlib.h>
int main(void)
{
	struct date
	{
		int month;
		int day;
	};
	struct data
	{
		char name[15];
		int  math;
		struct date birthday;
	}stu1={"Mary Wang",74,{10,2}};
	printf("Name: %s\n",stu1.name);
	printf("Birthday: %d %d\n",stu1.birthday.month,stu1.birthday.day);
	system("pause");
	return 0;
}

 
#include<stdio.h>							//1320
#include<stdlib.h>
#define MAX 2
int main(void)
{
	int i;
	struct data
	{
		char name[15];
		int  math;
	}student[MAX];
	for(i=0;i<MAX;i++)
	{
		printf("Name: ");
		gets(student[i].name);
		printf("Score: ");
		scanf("%d",&student[i].math);
		fflush(stdin);
	}
	for(i=0;i<MAX;i++)
	{
		printf("%s Score=%d\n",student[i].name,student[i].math);
	}
	system("pause");
	return 0;
}

 
#include<stdio.h>							//1335
#include<stdlib.h>
int main(void)
{
	struct data
	{
		char name[15];
		int  math;
		int  eng;
	}student, *ptr;
	ptr=&student;
	printf("Name: ");
	gets(ptr->name);
	printf("Math: ");
	scanf("%d",&ptr->math);
	printf("English: ");
	scanf("%d",&ptr->eng);
	printf("Math=%d\n",ptr->math);
	printf("English=%d\n",ptr->eng);
	printf("Average=%.2f\n",(ptr->math+ptr->eng)/2.0);
	
	system("pause");
	return 0;
}

 
#include<stdio.h>							//1350
#include<stdlib.h>
struct data
{
	char name[15];
	int  math;
};
void display(struct data);
int main(void)
{
	struct data s1={"Jenny",94};
	display(s1);
	
	system("pause");
	return 0;
}
void display(struct data st)
{
	printf("Name: %s\n",st.name);
	printf("Math: %d\n",st.math);
}

/*   ch13_15.c                   */
#include <stdio.h>
#include <stdlib.h>
int main()
{
    struct date          	/* 內層結構 */ 
    {
        int year;      		/* 出生年   */	
        int month;			/* 出生月   */
		int day; 		/* 出生日   */
	    };
    struct data        	/* 外層結構 */ 
    {
    	char name[12];		/* 名字     */
		int id; 			/* 學號     */
		char gender; 		/* 性別     */
        struct date birth; 	/* 出生日其結構   */  
    };
	struct data student[3] = {{"John",220501,'M',{2001,8,20}},
					 		 {"Kevin",220502,'M',{2001,3,19}},
					 		 {"Christy",220503,'F',{2001,5,6}}};
    int i;
    
    for (i = 0; i < 3; i++)
    {
    	printf("Name     : %s\n",student[i].name);
    	printf("ID       : %d\n",student[i].id);
    	printf("Gender   : %c\n",student[i].gender);
    	printf("Birthday : %d\\%d\\%d\n",student[i].birth.year,\
		                                 student[i].birth.month,\
										 student[i].birth.day);
		printf("=====\n");	
	} 
    system("pause");
    return 0;
} 
#include<stdio.h>
#include<stdlib.h>
union Paid
{
	char creditCard[21];
	char bankAccount[17];
	int  iCash;	
};
#include<stdio.h> 
#include<stdlib.h>
struct data
{
	char name[15];
	int  eng;
};
void student(struct data *, struct data *);
int main(void)
{
	struct data stud1={"Mary",74};
	struct data stud2={"Terasa",88};
	student(&stud1, &stud2);
	printf("After call student() function: \n");
	printf("student1 name: %s, student1 Score: %d\n",stud1.name ,stud1.eng);
	printf("student2 name: %s, student2 Score: %d\n",stud2.name ,stud2.eng);
	system("pause");
	return 0;
}
void student(struct data *stud1, struct data *stud2)
{
	struct data tmp;
	tmp=*stud1;
	*stud1=*stud2;
	*stud2=tmp;
}
/*   ch13_12.c                   */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Books 
{
    char title[20];
	char author[20];		 
    int price;		
};
void show(struct Books *);
int main()
{   
    struct Books book;
	
	strcpy(book.title, "programming C");
	strcpy(book.author, "施威銘");
	book.price = 700;
	show(&book);	   
    system("pause");
    return 0;
} 
void show(struct Books *book)
{
	printf("Book  : %s\n", book->title);
	printf("Author: %s\n", book->author);
	printf("Price : %d\n", book->price);	
}
int main(void)
{	
	union Paid money;
	printf("sizeof(union paid)=%2d\n",sizeof(union paid));
	printf("Please enter a bank account number: ");
	scanf("%s",&money.bankAccount);
	printf("Bank account:%s\n",money.bankAccount);
	printf("Please enter a credit card number: ");
	scanf("%s",&money.creditCard);
	printf("Card number:%s\n",money.creditCard);
	printf("Please enter a cash amount: ");
	scanf("%d",&money.iCash);
	printf("Cash:%4d\n",money.iCash);
	printf("Card number:%s\n",money.creditCard);
	system("pause");
	return 0;
}

#include<stdio.h>								//1420
#include<stdlib.h>
#include<string.h>
union Paid
{
	char creditCard[17];
	int cash;
}money;
int main(void)
{	
	int Amt=1500,Opt;
	printf("Amounts payable: %d\n",Amt);
	do
	{
		printf("Choose payment method (1) credit card (2) cash :");
		scanf("%d",&Opt);
		fflush(stdin);
		if(Opt==1)
		{
			printf("Please enter your card number: ");
			gets(money.creditCard);
			if(strlen(money.creditCard)!=16)
			{
				printf("Card number error! Please re-operate!\n");
				Opt=0;
			}
			else
			{
				printf("Payment completed!\n");
			}
		}
		else if(Opt==2)
		{
			printf("Please enter the amount of cash: ");
			scanf("%d",&money.cash);
			if(money.cash<Amt)
			{
				printf("Insufficient amount! Please try again!\n");
				Opt=0;
			}
			else
			{
				printf("give change: %3d\n",money.cash-Amt);
			}
		}
		else 
		{
			printf("Please enter the correct payment mothod \n");
		}
	}while(Opt!=1&&Opt!=2);
	system("pause");
	return 0;
} 

prog9_21, 列舉型態的使用 列舉一群有意義的名稱已取代整數值*/
#include <stdio.h>
#include <stdlib.h>
enum Fruit{APPLE,ORANGE,GRAPE}; 
// 自動編號
enum RGBColor{RED = 10,GREEN, BLUE}; 
// 設定第一個成員的編號
enum Animal{LION = 1, TIGER=11, BEAR=22}; 
// 設定每一個成員的編號

int main(void) {
	printf("APPLE=%d ORANGE=%d GRAPE=%d\n",APPLE, ORANGE, GRAPE);
	printf("RED=%d GREEN=%d BLUE=%d\n",RED, GREEN, BLUE);
	printf("LION=%d TIGER=%d BEAR=%d\n",LION, TIGER, BEAR);
	system("pause"); return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main(void)
{	
	enum color
	{
		red,
		green,
		blue
	};
	enum color shirt;
	printf("sizeof(shirt)=%d\n",sizeof(shirt));
	printf("red=%d\n",red);
	printf("green=%d\n",green);
	printf("blue=%d\n",blue);
	shirt=green;
	if(shirt==green)
	{
		printf("Chosen the green clothes");
	}
	else
	{
		printf("Chosen the non-green chlthes");
	}
	system("pause");
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main(void)
{	
	char key;
	enum color
	{
		red=114,
		green=103,
		blue=98
	};
	enum color shirt;
	do
	{
		printf("Please input (r,g,b):");
		scanf("%c",&key);
		fflush(stdin);
	}while((key!=red)&&(key!=green)&&(key!=blue));
	shirt=key;
	switch(shirt)
	{
		case red:
			printf("You selected red\n");
			break;
		case green:
			printf("You selected green\n");
			break;
		case blue:
			printf("You selected blue\n");
			break;
	}
	system("pause");
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
enum Week
    {
        SUN,
        MON,
        TUE,
        WED,
        THU,
        FRI,
        SAT
    }theday;
int main(void)
{
	char cChiName[7][10] = {"星期日", "星期一","星期二",
		"星期三","星期四","星期五","星期六",};
	char cEngName[7][10] = {"Sunday","Monday","Tuesday",
		"Wednesday","Thursday","Friday","Saturday"};
	printf("英文       中文    \n"); 
	for (theday = SUN ; theday <= SAT ; theday++) // 輸出一週七天的中英文名稱
		printf("%-10s %s  \n",cEngName[theday], cChiName[theday]);
	system("pause"); return(0);
}

#include <stdio.h>
#include <stdlib.h>
enum Identity
{
	teacher=1,
	student	
};
struct Teacher {
	int  iTID;		// 教師編號
	int  iYears;	// 服務年資	
};
struct Student {
	int  iSID;		// 學號
	int	 iDegree;	// 年級
};
struct PersonalInfo {
	char cName[10];	// 姓名
	enum Identity iType;		// 身份別, 1 表示老師, 2 代表學生
	union {
		struct Teacher tea;
		struct Student stu;
	};
} person;
int main(void)
{
	int iOpt;
	do {
		printf("Please select status - 1 (teacher) 2 (student) : "); 
		scanf("%d",&iOpt);
		fflush(stdin);
	} while( iOpt != 1 && iOpt != 2 );
	//struct PersonalInfo *ptr=&person;
	person.iType = iOpt;
	if ( iOpt == 1 ) { // 身份為老師
		printf("Please enter the teacher's name: "); gets(person.cName); //scanf("%s",person.cName);
		printf("Enter the teacher's number: "); scanf("%d",&person.tea.iTID); fflush(stdin);
		printf("Please enter years of service:   "); scanf("%d",&person.tea.iYears); fflush(stdin);
	}
	else {  // 身份為學生
		printf("Please enter the student's name: "); gets(person.cName); //scanf("%s",person.cName);
		printf("Please enter student ID: "); scanf("%d",&person.stu.iSID); fflush(stdin);
		printf("Please enter the student's grade: "); scanf("%d",&person.stu.iDegree); fflush(stdin);
	}
	if( person.iType == teacher ) 
		printf("%s teacher's number: %6d years of service: %2d\n",
				person.cName,person.tea.iTID,person.tea.iYears);
	else 
		printf("student %s student ID: %6d  %2d grade\n",
				person.cName,person.stu.iSID,person.stu.iDegree);
	system("pause"); return(0);
}
```
## :blue_book: Class08 (2020.01.31)
```c=
//10503_02                                    0835
//check max's index
#include <stdlib.h>
#include <stdio.h>
int func(int b[],int);
int i;

int main(void) 
{
	int a[10]={ 1, 3, 9, 2, 5, 8, 4, 9, 6, 7 };
	printf("%d\n", func(a, 10));
	system("pause");
	return 0; 
}
int func (int b[], int n) 
{ 
	int index = 0;
	for (i=1; i<=n-1; i=i+1) 
	{ 
		if (b[i] >= b[index]) 
		{
			index = i;
		}
	}
	return index;
}
//10503_04                                     0900
//51+52+53+...+60
#include <stdlib.h>
#include <stdio.h>
int i;
int main() 
{
	int a[100];
	int b[100];
	for (i=1; i<100; i=i+1) 
	{ 
		b[i] = i;
	}
	a[0] = 0;
	for (i=1; i<100; i=i+1) 
	{ 
		a[i] = b[i] + a[i-1];
	}
	printf ("%d\n",	a[60]-a[50]);
	system("pause");	
	return 0; 
}
                                        //1105
#include <stdio.h>
#include <stdlib.h>
void Update(int [], int); // 原型宣告, 引數2 通常會傳遞陣列的大小
void Update(int Arr[], int n) {
	int i;
	for( i = 0 ; i < n ; i++ ) {
		if( Arr[i]%2 ) Arr[i]++; // 奇數,內容加1
		else Arr[i]--; // 偶數數,內容減1
	}
}
int main(void)
{
	int i;
	int iNum[6] = {23,46,37,51,48,9};
	printf("Before Update: ");
	for( i = 0 ; i < 6 ; i++ ) printf("%2d ",iNum[i]);
	printf("\n");
	Update(iNum, 6);
	printf("After  Update: ");
	for( i = 0 ; i < 6 ; i++ ) printf("%2d ",iNum[i]);
	printf("\n");
    system("pause"); return(0);
}
/* prog9_24, 字串陣列的複製                        1132  */			
#include <stdio.h>
#include <stdlib.h>
#define MAX 3
#define LENGTH 10
int main(void)
{
   char arr1[MAX][LENGTH]={"Tom","Lily","James Lee"};
   char arr2[MAX][LENGTH];
   int i,j;

   for(i=0;i<MAX;i++) 	/* 將arr1的內容複製到arr2中 */
   {
      for(j=0;j<LENGTH;j++)
      {
         if(arr1[i][j]=='\0')   /* 如果遇到「\0」,代表讀到字串結束 */
         {
			//printf("arr2[%d]=%c\n",i,arr2[i][j]);                    
            break;	         	
		 }
	  		/* 此行的break敘述會跳到第19行執行 */
         else
         {
            arr2[i][j]=arr1[i][j];
			//printf("arr2[%d]=%c\n",i,arr2[i][j]);           	
		 }
    	
	  }
      arr2[i][j]='\0';
   }
   for(i=0;i<MAX;i++) 	
   {
      printf("arr2[%d]=%s\n",i,arr2[i]);  /* 印出陣列arr2的內容 */   	
      //printf("SIZE: %d\n",sizeof(arr2[i]));
   }

   system("pause");   return 0;
}
/* prog10_1, 印出變數於記憶體內的位址 提供程式快速存取資料 指向變數所使用記憶體的位址  1325*/				
#include <stdio.h> 
#include <stdlib.h>
int main(void) {
   int a=5,b=10;		
   double c=3.14;
   printf("a=%4d, sizeof(a)=%d, address:%d\n",a,sizeof(a),&a);
   printf("b=%4d, sizeof(b)=%d, address:%d\n",b,sizeof(b),&b);
   printf("c=%4.2lf, sizeof(c)=%d, address:%d\n",c,sizeof(c),&c);
   system("pause");   return 0;
}
指標，其實也只是一個變數，只是這個變數的意義是：指向某個儲存位址。
int *p1 = &a;		我們看成：p1 is a pointer points to integer variable a，即：p1是一個指標，指向整數變數a。每個變數會存在記憶體的某個位置，每個記憶體的位置會被付與一個位址，可以使用位址運算子 & 存取這個位址 。

/* prog10_2, 指標變數的宣告                      1342*/			
#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
   int *ptr,num=20;		/* 宣告變數num與指標變數ptr */
						/* 將num的位址設給指標變數ptr存放 */
   ptr=&num;			/*指標變數ptr指向變數num */
   printf("num=%d, &num=%p\n",num,&num); /*%p輸出位址格式碼 */
   printf("*ptr=%d, ptr=%p, &ptr=%p\n",*ptr,ptr,&ptr); 
   system("pause");
   return 0;
}

 
/* prog10_3, 指標變數的使用 重新設定指向另一個相同型態的變數  1358*/		
#include <stdio.h> 								
#include <stdlib.h>
int main(void)
{
   int a=5,b=3;
   int *ptr; 		/* 宣告指標變數ptr */
 	
   ptr=&a;			/* 將a的位址設給指標ptr存放 */
   printf("&a=%x, &ptr=%x, ptr=%x, *ptr=%d\n",&a,&ptr,ptr,*ptr);
   ptr=&b; 			/* 將b的位址設給指標ptr存放 */
   printf("&b=%x, &ptr=%x, ptr=%x, *ptr=%d\n",&b,&ptr,ptr,*ptr);
    
   system("pause");
   return 0;
}

/* prog10_4, 指標變數的大小                     1415*/			
#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
   int *ptri;		/* 宣告指向整數的指標ptri */
   char *ptrc; 		/* 宣告指向字元的指標ptrc */
   printf("sizeof(ptri)=%d\n",sizeof(ptri));  
//64位元作業系統.指標變數存放記憶體的位址, 佔了8個位元組
   printf("sizeof(ptrc)=%d\n",sizeof(ptrc));
   printf("sizeof(*ptri)=%d\n",sizeof(*ptri));
    //指向整數型態的指標, *ptri代表ptri所指向的整數, 所以*ptri佔了4個位元組
   printf("sizeof(*ptrc)=%d\n",sizeof(*ptrc));
   //指向字元型態的指標, *ptrc代表ptrc所指向的字元, 所以*ptrc佔了1個位元組
   system("pause");
   return 0;
}
 
/* prog10_5, 指標的操作練習                    1427 */			
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int a=5,b=10;
   int *ptr1,*ptr2;
   ptr1=&a;				/* 將ptr1設為a的位址 */
   ptr2=&b;			 	/* 將ptr2設為b的位址 */
   printf("a=%p, b=%p, \nptr1=%p, ptr2=%p\n",&a,&b,ptr1,ptr2);
   *ptr1=7;			 	/* 將ptr1指向的內容設為7 */
   *ptr2=32;				/* 將ptr2指向的內容設為32 */
   a=17;			 	/* 設定a為17 */
   ptr1=ptr2;		 	/* 設定ptr1=ptr2 */
   *ptr1=9;		 	 	/* 將ptr1指向的內容設為9 */	
   ptr1=&a;		 	 	/* 將ptr1設為a的位址 */
   a=64;            		/* 設定a為64 */
   *ptr2=*ptr1+5; 	 	/* 將ptr2指向的內容設為*ptr1+5*/
   ptr2=&a;		 		/* 將ptr2設為a的位址 */
   printf("a=%2d, b=%2d, *ptr1=%2d, *ptr2=%2d\n",a,b,*ptr1,*ptr2);
   printf("ptr1=%p, ptr2=%p\n",ptr1,ptr2);   
   system("pause");  return 0;
}
 
/* prog10_6, 錯誤的指標型態 賦予指標指向的資料型態       */			
//型態不合, 造成指向的變數內容不正確
#include <stdio.h> 
#include <stdlib.h>
int main(void)
{
   int a1=100, *ptri;
   float a2=3.2f, *ptrf;
   ptri=&a2;		/* 錯誤，將int型態的指標指向float型態的變數 */
   ptrf=&a1; 	/* 錯誤，將float型態的指標指向int型態的變數 */
   printf("sizeof(a1)=%d\n",sizeof(a1));
   printf("sizeof(a2)=%d\n",sizeof(a2));
   printf("a1=%d,*ptri=%d\n",a1,*ptri);
   printf("a2=%.1f,*ptrf=%.1f\n",a2,*ptrf);
   system("pause");
   return 0;
}
/* 10 prog10_7, 傳遞指標到函數裡                     */							
#include <stdio.h>
#include <stdlib.h>
void address(int *);      /* 宣告address()函數的原型 指向整數的指標 */
int main(void)
{
   int a=12; 			/* 設定變數a的值為12 */
   int *ptr=&a; 			/* 將指標ptr指向變數a */
   
   address(&a);			/* 將a的位址傳入address()函數中 */
   address(ptr); 		/* 將ptr傳入address()函數中 */ 
   
   system("pause");
   return 0;
}					//可接收指向整數型態的指標(存放整數變數的位址)
void address(int *p1)   /* 將指向整數變數a的指標變數ptr 傳入address()函數中 */
{
   printf("Address: %p，Variable content: %d\n",p1,*p1);
}

/* prog10_8, 傳遞指標的應用                 */							
#include <stdio.h>
#include <stdlib.h>
void add10(int *);		/* add10()函數的原型 */
int main(void)
{
   int a=5;
   printf("Before call add10(),a=%d\n",a);   
   add10(&a);			/* 呼叫add10()函數 */
   printf("After call add10(),a=%d\n",a);
   system("pause");
   return 0;
}
void add10(int *p1)
{
   *p1=*p1+10;
}

 
/* prog10_9, 將a與b值互換(錯誤示範)                 */					
#include <stdio.h> 
#include <stdlib.h>
void swap(int,int);	/* swap()函數的原型 */
int main(void) {
   int a=5,b=20;
   printf("Before swap... ");
   printf("a=%d,b=%d\n",a,b);
   swap(a,b);		/* 呼叫swap()函數，將a和b兩個變數的值互換 */
   printf("After swap... ");
   printf("a=%d,b=%d\n",a,b);
   system("pause");
   return 0;
}
void swap(int x,int y) {	/* 定義swap()函數 */
   int tmp=x;
   x=y;
   y=tmp;
}
/* prog10_10, 將a與b值互換(正確範例)                  */					
#include <stdio.h> 
#include <stdlib.h>
void swap(int *,int *);   /* 函數swap()原型的宣告 */
int main(void) {
   int a=5,b=20;
   printf("Before swap...");
   printf("a=%d,b=%d\n",a, b);
   swap(&a, &b);      /* 呼叫swap()函數,並傳入a與b的位址 */
   printf("After swap...");
   printf("a=%d,b=%d\n",a, b);
   system("pause");
   return 0;
}
void swap(int *p1,int *p2)		/* swap()函數的定義 */
{
   int tmp=*p1;
   *p1=*p2;
   *p2=tmp;
}
 

void sum(int, int *);  // 原型宣告,引數為指標變數必須同時保留 * 號			1352
int main(void)   
{   
	int n, total;
	printf("Please input the integer: "); scanf("%d",&n);
	sum(n, &total); // 呼叫 Sum, &total 將左值傳遞過去
	printf("1+2+...+%d = %d\n",n,total);
	system("pause"); return 0;   
}
void sum(int n, int *result) 
{
	int i, m=0;
	for( i = 1 ; i <= n ; i++ ) 
	{
		m += i;
	}
	*result = m; // 將計算結果儲存到 result 中
}    
/* prog10_11, 傳回多個數值的函數 更改傳入的引數值        */			
#include <stdio.h> 
#include <stdlib.h>
void rect(int,int,int *,int *);	/* 函數rect()的原型 */
int main(void)
{
   int a=5,b=8;
   int area,peri;
   rect(a, b, &area, &peri);  		/* 呼叫rect(),計算面積及周長 */
   printf("area=%d,total length=%d\n",area ,peri);

   system("pause");
   return 0;
}
void rect(int x,int y,int *p1, int *p2)
{
   *p1=x*y;
   *p2=2*(x+y);
}

/* hw10_13, 「*」與「++」運算子優先次序的比較 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int num[] = {14, 23, 32, 62, 19};
   int *p1, *p2;
   p1 = p2 = num;
   
   *p1++;
   printf("*p1 = %d\n", *p1);
   
   (*p2)++;
   printf("*p2 = %d\n", *p2);
   
   system("pause");
   return 0;
}

/* hw10_18b */
#include <stdio.h>
#include <stdlib.h>
int main(void){
    char *ptr = "We are best friends.";
    int i, cont = 0;
    for(i = 0; *(ptr + i) != '\0'; i++)
        if(*(ptr + i) >= 97 && *(ptr + i) <= 122)
            cont += 1;
    printf("Number of lowercases in *ptr is %d\n",cont);
    system("pause");
    return 0;

}
```
## :blue_book: Class07 (2020.01.31)
```c=
/* prog8_14, 區域變數的範例7                    */		 
#include <stdio.h>
#include <stdlib.h>
void func(void);
int main(void)
{
   int a=100;     /* 宣告main()函數裡的區域變數a */
   printf("Before call func(),a=%d\n",a);	/* 印出main()中a的值 */
   func();		/* 呼叫自訂的函數 */
   printf("After call func(),a=%d\n",a);	/* 印出a的值 */
   system("pause");
   return 0;
}

void func(void)		/* 函數func() */
{
   int a=300;     	/* 宣告func()函數裡的區域變數a */
   printf("In func() function,a=%d\n",a);	/* 印出func函數中a的值 */
}
/*  prog8_15, 全域變數的範例(一) 8                    */		
#include <stdio.h>
#include <stdlib.h>
void func(void);		/* 函數func()的原型 */
int a;   				/* 宣告全域變數a */ 		
int main(void) {
   a=100;			/* 設定全域變數a的值為100 */	
   printf("Before call func(),a=%d\n",a);	
   func();			/* 呼叫自訂的函數 */
   printf("After call func(),a=%d\n",a);

   system("pause");
   return 0;
}

void func(void)		/* 自訂的函數func() */
{
   a=300;			/* 設定全域變數a的值為300 */	
   printf("In func(),a=%d\n",a);
}

/* prog8_16, 全域變數的範例                         */		
#include <stdio.h>
#include <stdlib.h>
void func(void);
int a=50;   				/* 定義全域變數a */ 
int main(void) {
   int a=100; 			/* 定義區域變數a */ 
   printf("Before call func(),a=%d\n",a);
   func();				/* 呼叫自訂的函數 */
   printf("After call func(),a=%d\n",a);
   system("pause");
   return 0;
}
void func(void)	
{
   a=a+300;				/* 這是全域變數a */ 
	printf("In func(),a=%d\n",a);
}
/* prog8_17, 全域變數的使用範例                  0948*/			
#include <stdio.h>
#include <stdlib.h>
const double pi=3.14;					/* 宣告全域變數pi */
void peri(double);
void area(double);
int main(void) {
   double r=1.0;
   printf("pi=%.2f\n",pi);		/* 於main()裡使用全域變數 pi*/
   printf("radius=%.2f\n",r);
   peri(r);		/* 呼叫自訂的函數 */
   area(r);
   system("pause"); return 0;
}
void peri(double r)	/* 自訂的函數peri()，印出圓周 */
{
   printf("Circumference=%.2f\n",2*pi*r);	/* 於peri()裡使用全域變數pi */
}
void area(double r)	/* 自訂的函數area()，印出圓面積 */
{
   printf("Circular area=%.2f\n",pi*r*r);	/* 於area()裡使用全域變數pi */
} 

/* prog8_18, 區域靜態變數使用的範例             1025*/
#include<stdio.h>
#include<stdlib.h>
void func(void);
int main(void)
{
	func();
	func();  
	func(); 
	func(); 
	system("pause");
	return 0;
}
void func(void)
{
	static int a=200;   //編譯時已配置固定記憶體空間 值可以保存下來 
	printf("In func(), a=%d\n",a);
	a+=200;
}

#include <stdlib.h>
#include <stdio.h>
int func(int [], int);
int i;
int main(void)
{
	int a[10]={1, 3, 9, 2, 5, 8, 4, 9, 6, 7};
	printf("%d\n", func(a, 10));
	system("pause");
	return 0;
}
int func(int a[], int n)
{
	int index=0;
	for (i=1; i<=n-1; i++)
	{
		if (a[i]>=a[index])
		{
			index=i;
		}
	}
	return index;
}

#include <stdlib.h>
#include <stdio.h>
int weather(void);
void comment_weather(int);
int main(void)
{
	comment_weather(weather());
	system("pause");
	return 0;
}
int weather()
{
	int temperature;
	printf("Please enter the current temperature: ");
	scanf("%d", &temperature);
	fflush(stdin);
	return temperature;
}
void comment_weather(int temperature)
{
	if (temperature>=26)
	{
		printf("It's hot now\n");
	}
	else if (temperature>15)
	{
		printf("This is a comfortable temperature\n");
	}
	else if (temperature>5)
	{
		printf("It's a little cold\n");
	}
	else
	{
		printf("Cold weather\n");
	}
}
/* prog8_19, 函數的傳值機制                1045 */			
#include <stdio.h>
#include <stdlib.h>
void add20(int,int);				/* add10()的原型 */
int main(void)
{
   int a=33, b=55;					/* 宣告區域變數a與b */
   
   printf("Before call add10() function: ");
   printf("a=%d, b=%d\n",a,b);    	/* 印出a、b的值 */
   add10(a,b);
   printf("After call add10() function: ");
   printf("a=%d, b=%d\n",a,b);		/* 印出a、b的值 */
   
   system("pause");
   return 0;
}
void add10(int a,int b)
{
   a=a+20;				/* 將變數a的值加10之後，設回給a */
   b=b+20; 				/* 將變數b的值加10之後，設回給b */
}

#include <stdlib.h>
#include <stdio.h>
#define MAX 3
#define LEN 10
int main(void)
{
	char arr1[MAX][LEN]={"Tom", "Jerry", "James"};
	char arr2[MAX][LEN];
	int i, j;
	for (i=0; i<MAX; i++)
	{
		for (j=0; j<LEN; j++)
		{
			if (arr1[i][j]=='\0')
			{
				break;
			}
			else
			{
				arr2[i][j]=arr1[i][j];
			}
		}
		arr2[i][j]='\0';
	}
	for (i=0; i<MAX; i++)
	{
		printf("arr2[%d]= %s\n", i, arr2[i]);
	}
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int fac(int);
int main(void)
{
	printf("fac(4)=%d\n", fac(4));
	system("pause");
	return 0;
}
int fac(int n)
{
	if (n>0)
	{
		return (n*fac(n-1));
	}
	else
	{
		return 1;
	}
}

#include <stdlib.h>
#include <stdio.h>
#define LEN 8
void update(int [], int);
int main(void)
{
	int i;
	int iNum[LEN]={22, 47, 37, 51, 48, 9, 33, 62};
	printf("Before Update: ");
	for (i=0; i<LEN; i++)
	{
		printf("%2d ", iNum[i]);
	}
	printf("\n");
	update(iNum, LEN);
	printf("After Update: ");
	for (i=0; i<LEN; i++)
	{
		printf("%2d ", iNum[i]);
	}
	system("pause");
	return 0;
}
void update(int iNum[], int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		if (iNum[i]%2==1)
		{
			iNum[i]++;
		}
	}
}

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
	char str[50];
	int i;
	scanf("%s", &str);
	fflush(stdin);
	if (str[0]=='+')
	{
		for (i=1; i<strlen(str); i++)
		{
			str[i]+=2;
			if (str[i]>'Z')
			{
				str[i]-=26;
			}
		}
	}
	if (str[0]=='-')
	{
		for (i=1; i<strlen(str); i++)
		{
			str[i]-=2;
			if (str[i]<'A')
			{
				str[i]+=26;
			}
		}
	}
	printf("%s\n", str);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int a=5, b=10;
	double c=6.28;
	printf("a=%4d, sizeof(a)= %d, address: %d\n", a, sizeof(a), &a);
	printf("b=%4d, sizeof(b)= %d, address: %d\n", b, sizeof(b), &b);
	printf("c=%4.2f, sizeof(c)= %d, address: %d\n", c, sizeof(c), &c);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int *ptr;
	int num=20;
	ptr=&num;
	printf("num= %d, &num= %p,\n", num, &num);
	printf("*ptr= %d, ptr= %p, &ptr= %p\n", *ptr, ptr, &ptr);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int a=5, b=3;
	int *ptr;
	ptr=&a;
	printf("&a= %p, &ptr= %p, ptr= %p, *ptr= %d\n", &a, &ptr, ptr, *ptr);
	ptr=&b;
	printf("&b= %p, &ptr= %p, ptr= %p, *ptr= %d\n", &b, &ptr, ptr, *ptr);
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int *ptri;
	char *ptrc;
	printf("sizeof(ptri)= %d\n", sizeof(ptri));
	printf("sizeof(ptrc)= %d\n", sizeof(ptrc));
	printf("sizeof(*ptri)= %d\n", sizeof(*ptri));
	printf("sizeof(*ptrc)= %d\n", sizeof(*ptrc));
	system("pause");
	return 0;
}

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
	int tom=5, jerry=10;
	int *ptr1, *ptr2;
	ptr1=&tom;
	ptr2=&jerry;
	printf("tom= %p, jerry= %p, \nptr1= %p, ptr2= %p\n", &tom, &jerry, ptr1, ptr2);
	*ptr1=7;
	*ptr2=32;
	tom=17;
	ptr1=ptr2;
	*ptr1=9;
	ptr1=&tom;
	tom=64;
	*ptr2=*ptr1+5;
	ptr2=&tom;
	printf("a=%2d, b=%2d, *ptr1=%2d, *ptr2=%2d\n", tom, jerry, *ptr1, *ptr2);
	printf("ptr1=%p, ptr2=%p\n", ptr1, ptr2);
	system("pause");
	return 0;
}



```

## :blue_book: Class06 (2020.01.30) test
```c=
#include <stdio.h>
#include <stdlib.h>
float get_score(void);
char level(float, float, float);
int main(void)
{
	float s1, s2, s3;
	char grade;
	s1=get_score();
	s2=get_score();
	s3=get_score();
	grade=level(s1, s2, s3);
	printf("\nYour grade is %c \n", grade);
	system("pause");
	return 0;
}
float get_score(void)
{
	float score;
	printf("Please input your score: \n");
	scanf("%f", &score);
	fflush(stdin);
	return score;
}
char level(float s1, float s2, float s3)
{
	float avg;
	printf("\n Score: %.1f %.1f %.1f\n", s1, s2, s3);
	avg=(s1+s2+s3)/3;
	printf("Avgrage: %4.1f\n", avg);
	if (avg>=90)
	{
		return 'A';
	}
	else if (avg>=75)
	{
		return 'B';
	}
	else if (avg>=60)
	{
		return 'c';
	}
	else
	{
		return 'D';
	}
}

#include<stdio.h>
#include<stdlib.h>
#define NUM 70
int guess_num(int,int,int);
int main(void)
{
	int min=1, max=100, keyin=0, count=0;
	while(keyin!=NUM)
	{
	    count=count+ 1;
		printf("guess a number: (%d - %d)\n",min ,max);
		scanf("%d", &keyin);
		guess_num(keyin, min, max);
		printf("You have guessed %d times: \n",count); 		
	}
	printf("game over\n");
    system("pause");
    return 0;
}
int guess_num(int keyin, int min, int max)
{
       if ((keyin >= min) && (keyin <= max))
       {
           if (keyin == NUM)
           {
               printf("Bingo! Guess it right, the answer is: %d \n",keyin);
//               printf("you guessed %d times: \n",count);
           }
           else if (keyin > NUM)
           {	
               //max = keyin;
               printf("smaller\n");           	
		   }

           else if (keyin < NUM)
           {
               //min = keyin;
               printf("bigger\n");           	
		   }
	   }         	
       else
       { 
           printf("Please enter a number within the suggested range: (min - max)\n");	       	
	   }
}


/* ch3 value2.c*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int scanf_value;
	int i = 10;
	int j = 20;
	int k = 30;
	printf("Input three decimal value :\n");
	scanf_value = scanf("%d %d %d", &i, &j, &k);
	printf("\nReturn value is %d.\n", scanf_value);
	printf("   i = %d\n", i);
	printf("   j = %d\n", j);
	printf("   k = %d\n", k);
	system("PAUSE");
	return 0;
}
/* Ch7 ret1.c */
#include<stdio.h>
#include <stdlib.h>
int get_int(void);
int find_max(int,int);
int main()
{
	int a,b;
	int max;
	a = get_int();
	b = get_int();
	max = find_max(a,b);
	printf("\nMAX(%d,%d) is %d.\n",a,b,max);	
	system("PAUSE");
	return 0;
}

int get_int(void)
{
	int num;
	printf("Input a valid integer : ");
	while (scanf("%d",&num) != 1)
	{
		while (getchar () !='\n')
			continue;
		printf("Input error! Please input again : ");
	}
	return(num);
}
int find_max(int x, int y)
{
	if (x > y)
		return(x);
	else
		return(y);
}

#include <stdio.h>
#include <stdlib.h>
void showChar(char, int);
int main(void)
{
	int i, n;
	printf("Please input the layer: ");
	scanf("%d", &n);
	fflush(stdin);
	for (i=0; i<n; i++)
	{
		showChar(32, n-i-1);
		showChar(65+i, i*2+1);
		printf("\n");
	}
	system("pause");
	return 0;
}
void showChar(char ch, int n)
{
	int i;
	for (i=0; i<n; i++)
	{
		printf("%c", ch);
	}
}

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	char text[]="hello";
	int i, length=sizeof(text)/sizeof(text[0]);
	for (i=0; i<length; i++)
	{
		if (text[i]=='\0')
		{
			puts("\nEND");
		}
		else
		{
			printf("%c", text[i]);
		}
	}
	printf("\n");
	printf("length= %d\n", length);
	system("pause");
	return 0;
}

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(void)
{	
	char str1[]="xyz";
	char str2[]="abcdef";
	printf("str1=%s\n",str1);
	strcat(str1, str2);
	printf("str1=%s\n",str1);
	system("pause");
	return 0;
} 
/* 程式範例: Ch9_5_3.c */  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 主程式 */
int main() {
   char str[20] = "This is a pen.";  /* 宣告字元陣列str */
   char str1[20], str2[20];          /* 宣告字元陣列str1和str2 */
   char str3[20] = "Hi! ";           /* 宣告字元陣列str */
   printf("str字串內容: \"%s\"\n", str);
   printf("str字串的長度: %d\n", strlen(str));
   strcpy(str1, "This is a book.");    /* 複製到str1字串 */
   strcpy(str2, str);                  /* 複製到str2字串 */
   printf("str1字串內容: \"%s\"\n", str1);
   printf("str2字串內容: \"%s\"\n", str2);
   strcat(str3, str1);                 /* 連接字串 */ 
   printf("str3字串內容: \"%s\"\n", str3);
    /*
   if ( strcmp(str1, str2) > 0 )       // 字串比較 
      printf("str1比較大...");
   else
      printf("str2比較大...");
    */
   system("pause");
   return 0;
}

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int i;
	int a[100];
	int b[100];
	for (i=1; i<100; i++)
	{
		b[i]=i;
	}
	a[0]=0;
	for (i=1; i<100; i++)
	{
		a[i]=b[i]+a[i-1];
	}
	printf("%d\n", a[60]-a[50]);
	system("pause");
	return 0;
}

#include<stdlib.h>
#include<stdio.h>
#define SIZE 4
void show(int []);
int main(void)
{	
	int CC[SIZE]={5, 6, 7, 8};
	printf("The contents of the array: ");
	show(CC);
	system("pause");
	return 0;
} 
void show(int CC[])
{
	int i;
	for(i=0; i<SIZE; i++)
	{
		printf("%d ",CC[i]);
	}
	printf("\n");
}

#include <stdio.h>
#include <stdlib.h>
void func(void);
int main(void)
{
	int a=100;
	printf("Before call func(), a= %d\n", a);
	func();
	printf("After call func(), a= %d\n", a);
	system("pause");
	return 0;
}
void func(void)
{
	int a=300;
	printf("In func() function, a= %d\n", a);
}

#include <stdio.h>
#include <stdlib.h>
void func(void);
int a=50;
int main(void)
{
	int a=100;
	printf("Before call func(), a= %d\n", a);
	func();
	printf("After call func(), a= %d\n", a);
	system("pause");
	return 0;
}
void func(void)
{
	a=a+300;
	printf("In func() function, a= %d\n", a);
}
```
## :blue_book: Class05 (2020.01.15)

```c=

/* 函數是C語言的基本模組 可以簡化主程式的結構
   prog8_1, 簡單的函數範例 節省撰寫相同的程式碼*/
#include <stdio.h>						//1105
#include <stdlib.h>
void dot(void); /* dot()函數的原型*/ 
int main(void)
{
	dot();
	printf("Welcome to the C language\n");
	dot();
	system("pause");
	return 0;
}
void dot(void)
{
	printf(".........................\n");	
}

/* prog8_2, 使用add()函數 */					//1118
#include <stdio.h>
#include <stdlib.h>
int add(int,int);  /*add()函數的原型prototype 包含函數名稱 傳入的引數型態 傳回值型態 
告知編譯器將使用這麼一個函數 函數的定義也須依宣告的格式撰寫 
宣告於main()的外面 可被相同檔案內的其他函數呼叫 */ 
int main(void) {
   int sum, a=5, b=3;
   sum=add(a,b);			/* 呼叫add()函數，並把傳回值設給sum */
   printf("%d+%d=%d\n",a,b,sum); 
   system("pause");
   return 0;
}
int add(int num1, int num2) 	/* add()函數的定義 */
{
   int a; 					/* 於add()函數裡宣告變數a */
   a=num1+num2;
   return a; 				/* 傳回num1+num2 的值 */
}

/* prog8_4, display()的練習 */       //1132
#include <stdio.h>
#include <stdlib.h>
void display(char,int);	/* display()函數的原型 */
int main(void) {
   int n;
   char ch;
   printf("Please input a character:");
   scanf("%c",&ch);
   fflush(stdin);
   printf("How many characters do you want to print:");
   scanf("%d",&n);
   fflush(stdin);
   display(ch,n);		/* 呼叫自訂的函數，印出n個ch字元 */
   system("pause");
   return 0;
}
void display(char ch,int n)	/* 自訂的函數display() */
{
   int i;
   for(i=1;i<=n;i++)			/* for迴圈，可印出n個ch字元 */
       printf("%c",ch);			/* 印出ch字元 */
   printf("\n");  return 0;
}
/* prog8_5, 求絕對值函數abs() */				//1325
#include <stdio.h>
#include <stdlib.h>
int abso(int);			/* 宣告函數abs()的原型 */
int main(void) {
   int i;
   printf("Please input an integer:");		/* 輸入整數 */
   scanf("%d",&i);
   fflush(stdin);
   printf("abs(%d)=%d\n",i,abso(i));	/* 印出絕對值 */
   system("pause"); return 0;
}
int abso(int i)	/* 自訂的函數abs(),傳回絕對值 */
{
   if (i<0)
      return -i;
   else
      return i;
}
/* prog8_6, 計算 x的n次方                     1340    */
#include <stdio.h>
#include <stdlib.h>
double power(double, int);	/* 宣告函數power()的原型 */
int main(void) {
   double x;		/* x為底數 */
   int n;			/* n是次方 */
   printf("Please input (base,exponent):");	
   scanf("%lf,%d",&x,&n); 	/* 要打逗點 輸入底數與次方 */
   fflush(stdin);
   printf("%.2lf to the power of %d =%.2lf\n",x,n,power(x,n));  
   system("pause");
   return 0;
}
/* power()函數的定義 */
double power(double base, int n)   /* power()函數的定義 */
{
   int i;
   double pow=1.0;
   for(i=1;i<=n;i++)		/* for() 迴圈，用來將底數連乘n次 */
      pow=pow*base;
   return pow;
}
/* 6 prog8_7, 質數的找尋 除了1和自己本身之外,沒有其他整數可以整除他的數
質數最小為2, 唯一的偶數*/					//1325
#include <stdio.h>
#include <stdlib.h>
int is_prime(int);			/* 宣告函數is_prime()的原型 */
int main(void)
{
   int i;
   for(i=2;i<=30;i++)			/* 找出小於30的所有質數 */
      if(is_prime(i))         	/* 呼叫is_prime()函數 */
         printf("%3d",i); 		/* 如果是質數,便把此數印出來 */
   printf("\n");  
   system("pause");
   return 0;
}

int is_prime(int num)	/* is_prime()函數,可測試num是否為質數 */
{
   int i;
   for(i=2;i<=num/2;i++)
      if(num%i==0)
          return 0;
   return 1;					//若是質數, 回應1
}


世界衛生組織計算標準體重之方法 :
男性： （身高cm－80）×70﹪＝標準體重
女性： （身高cm－70）×60﹪＝標準體重
/* prog7_9, 求理想體重 */						//1422
#include <stdio.h>
#include <stdlib.h>
float sweight(float,int); //原型定義,第一個引數為身高
int main(void)
{
	int sex,height;	// sex 是性別選項變數, height 是身高
	float weight;	// 計算結果的體重值
	printf("Gender (0) Female (1) Male:");
	scanf("%d",&sex); //這裡沒有檢查輸入值，預設輸入不是0就是1 
	fflush(stdin);
	printf("Please enter height (cm): ");
	scanf("%d",&height);
	fflush(stdin);
    weight = sweight(height,sex); //sweight(height,sex)
	printf("Your ideal body weight is %.1f kg\n",weight);
	system("pause");	return 0;
}
float sweight(float h,int s) // 理想體重的計算函式
{
	float ret;
	if (s == 0)
	{
		ret = (h - 70) * 0.6;	
	} 
	else 
	{
		ret = (h - 80) * 0.7;
	}
	return ret;
}
/* prog8_8, 同時呼叫多個函數 */					//1408
#include <stdio.h>
#include <stdlib.h>
void sum(int), fac(int);		/* 定義函數的原型 兩個傳回值型態相同 */
int main(void)
{
	fac(4);
	sum(4);
	fac(6);
	sum(6);
	fac(7);
	sum(7);
	fac(9);
	sum(9);
    system("pause");
    return 0;
}

void fac(int a)		/* 自訂階乘函數fac()，計算a! factorial*/
{
	int i,total=1;
	for(i=1;i<=a;i++)
	{
		total=total*i;
	}
	printf("1x2x...x%d=%d\n",a,total);
}
void sum(int a)		/* 自訂函數sum()，計算1+2+...+a的結果*/
{
	int i,total=0;
	for(i=1;i<=b;i++)
	{
		total=total+i;
	}
	printf("1+2+...+%d=%d\n",b,total);
}
#include<stdio.h>
#include<stdlib.h>
float get_score(void);
char level(float, float, float);
int main(void)
{
	float s1, s2, s3;
	char grade;
	s1=get_score();
	s2=get_score();
	s3=get_score();
	grade=level(s1, s2, s3);
	printf("\n Your grade is %c \n",grade);
	system("pause"); 
	return 0;
} 
float get_score(void)
{
	float score;
	printf("Please input your score; \n");
	scanf("%f",&score);
	fflush(stdin);
	return score;
}
char level(float s1, float s2, float s3)
{
	float avg;
	printf("\n Score: %.1f %.1f %.1f\n",s1 ,s2 ,s3);
	avg=(s1+s2+s3)/3;
	printf(" Average: %4.1f\n",avg);
	if(avg>=90)
	{
		return 'A';
	}
	else if(avg>=80)
	{
		return 'B';
	}
	else if(avg>=70)
	{
		return 'C';
	}
	else if(avg>=60)
	{
		return 'D';
	}
	else
	{
		return 'E';
	}
}

#include<stdio.h>							//1443
#include<stdlib.h>
#define HEIGHT 30
void showChar(char,int);
int main(void)
{
	int i;
	for(i=0;i<7;i++)
	{
		showChar(32,7-i-1);
		showChar(65+i,i*2+1);
		printf("\n");
	}
	system("pause");
	return 0;
}
void showChar(char ch,int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("%c",ch);
	}
}


/*   ch9_15_1.c                  */
#include <stdio.h>
#include <stdlib.h>
int weather();
void comment_weather(int);
int main()
{
    comment_weather(weather());
    system("pause");
    return 0;
}
int weather()
{
	int temperature;
	printf("Please enter the current temperature : ");
	scanf("%d",&temperature);
	return temperature;	 
}
void comment_weather(int t)
{
	if (t >= 27)
		printf("It's hot now\n");
	else if (t > 15)
		printf("This is a comfortable temperature\n");
	else if (t > 5)
	    printf("it's a little cold\n");
	else
		printf("cold weather\n");
}

/* prog8_10, 遞迴函數，計算階乘 ==函數本身呼叫自己*/
#include <stdio.h>
#include <stdlib.h>
int fac(int);     /* 遞迴函數fac()的原型 */
int main(void)
{
   printf("fac(4)=%d\n", fac(4));   /* 呼叫遞迴函數fac() */

   system("pause");
   return 0;
}
/* 自訂階乘函數fac()，計算n! */
int fac(int n)	/* 自訂函數fac()，計算n! */
{
   if(n>0)
      return (n*fac(n-1));
   else
      return 1;
}
```

## :blue_book: Class04 (2020.01.15)
```c=
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
int main(void)
{
	int score[MAX];
	int i=0;
	int num;
	float sum=0.0f;
	printf("Please input the score, input 0 to end:\n");
	do
	{
		if(i==MAX)
		{
			printf("Array space has been used up!\n");
			i++;
			break;
		}
		printf("Please input the score:");
		scanf("%d",&score[i]);
	}while(score[i++]>0);
	num=i-1;
	for(i=0;i<num;i++)
	{
		sum=sum+score[i];
	}
	printf("average score %4.2f\n",sum/num);
	system("pause"); return 0;
}
1130
/* prog9_8, 陣列的搜尋 */
#include <stdio.h>
#include <stdlib.h>
#define SIZE 6		/* 定義SIZE為6 */
int main(void)
{
   int i,num,flag=0;
   int A[SIZE]={33,75,69,41,33,19};
   printf("The value of an array element:");
   for(i=0;i<SIZE;i++)			
      printf("%d ",A[i]); 			/* 印出陣列的內容 */
   printf("\nPlease input an integer: ");		
   scanf("%d",&num); 				/* 輸入欲搜尋的整數 */
   for(i=0;i<SIZE;i++)
      if(A[i]==num)	/* 判斷陣列元素是否與輸入值相同 */
      {
         printf("found it! A[%d]=%d\n",i,A[i]);
         flag=1;		/* 設flag為1，代表有找到相同的數值 */
      }
   if(flag==0)
      printf("Not found!!\n");
   system("pause");
   return 0;
}
1320
/* prog9_9, 二維陣列的輸入輸出 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i,j,sale[2][4],sum=0;
		
   for(i=0;i<2;i++)
      for(j=0;j<4;j++)
      {
         printf("sales%d  %d quarter results:",i+1,j+1);
         scanf("%d",&sale[i][j]); 		/* 輸入銷售量 */
      }
   
   printf("***Output***");
   for(i=0;i<2;i++)				/* 輸出銷售量並計算總銷售量 */
   {
      printf("\nsales%d quarter results:",i+1);
      for(j=0;j<4;j++)
      {
         printf("%d  ",sale[i][j]);
         sum+=sale[i][j];
      }
   }
   printf("\n2018 results for the total sales volume of %d cars \n",sum);
   
   system("pause");
   return 0;
}
1350
#include<stdio.h>
#include<stdlib.h>
//#define ROW 5
//#define COLUMN 10
int main(void)  {
	int i,j;
    int maze[5][10]; 	//maze[ROW][COLUMN];
    for(i = 0; i <5; i++) 
	{
        for(j = 0; j < 10; j++) 
		{
            maze[i][j] = (i+1) * (j+1);
        }
    }
    for(i = 0; i < 5; i++) 
	{
        for(j = 0; j < 10; j++) 
		{
            printf("%5d", maze[i][j]);
        }
        printf("\n");
    }
  	system("pause");
	return 0;
}
/* 程式範例: Ch9_3_2.c , 2層巢狀迴圈存取2維陣列 */
#include <stdio.h>
#include <stdlib.h>
#define LEN   9
int main(void) {   					/* 主程式 */
   int i, j;  						/* 宣告變數 */
   int tables[LEN][LEN]; 			/*宣告int型態的二維陣列tables[][] */
   for ( i=0; i < LEN; i++) 
   {  							/* 指定二維陣列的元素值 */
      for ( j=0; j < LEN; j++) 
{
          tables[i][j] = (i+1)*(j+1);
      }
   }
   for ( i=0; i < LEN; i++) 
   {								/* 顯示二維陣列的元素值  */
      for ( j=0; j < LEN; j++) 		
{
         printf("%d*%d=%2d ",(i+1),(j+1),tables[i][j]);
      }
      printf("\n");    
   }
   system("pause"); return 0;
} 
/* prog9_11, 三維陣列與初值的設定 */
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int A[2][4][3]={{{21,32,65},
					 {78,95,76},
					 {79,44,65},
					 {89,54,73}},
					{{32,56,89},
					 {43,23,32},
					 {32,56,78},
					 {94,78,45}}};
	int i,j,k,max=A[0][0][0];
	for(i=0;i<2;i++)
	{
		for(j=0;j<4;j++)
		{
			for(k=0;k<3;k++)
			{
				if(max<A[i][j][k])
				{
					max=A[i][j][k];	
				}	
			}	
		}	
	}
	printf("max=%d\n",max); 
	system("pause");
	return 0;
}

/* prog9_10, 矩陣相加 的法則是在相同位置的元素做加法計算*/        0845
#include <stdio.h>
#include <stdlib.h>
#define ROW 2		/* 定義ROW為2 */
#define COL 3		/* 定義COL為3 */
int main(void) {
   int i,j;
   int A[ROW][COL]={{1,2,3},{5,6,8}};	/* 宣告陣列A並設定初值 */
   int B[ROW][COL]={{3,0,2},{3,5,7}};  	/* 宣告陣列B並設定初值 */ 
   printf("Matrix A+B=\n");
   for(i=0;i<ROW;i++)			/* 外層迴圈，用來控制列數 */
   {
      for(j=0;j<COL;j++)		/* 內層迴圈，用來控制行數 */
         printf("%3d",A[i][j]+B[i][j]); 		/* 計算二陣列相加 */
      printf("\n");
   }
   system("pause"); return 0;
}
       
/* 6 程式範例: Ch9_5_2.c */                //0905
#include <stdio.h>
#include <stdlib.h>
int main(void){
   char str1[15];   /* 字元陣列宣告 */
   char str2[15] = {'H','e','l','l','o','!',' ',
                    'w','o','r','l','d','\n','\0'};
   char str[15] = "Hello! world\n";                   
   /* 指定字元陣列初值 */ 
   str1[0] = 'H'; str1[1] = 'e'; str1[2] = 'l';
   str1[3] = 'l'; str1[4] = 'o'; str1[5] = '!';
   str1[6] = ' '; str1[7] = 'w'; str1[8] = 'o';
   str1[9] = 'r'; str1[10] = 'l'; str1[11] = 'd';
   str1[12] = '\n'; str1[13] = '\0';
   printf("str  = %s", str);   /* 顯示字串內容 */ 
   printf("str1 = %s", str1);
   printf("str2 = %s", str2);   

   system("pause");
   return 0;
}

/* prog9_20, 印出字元及字串的長度 */            //0924
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char ch='c';			/* 宣告字元變數ch */
   char str1[]="c";			/* 宣告字串變數str1 */
   char str2[]="We are family";	/* 宣告字串變數str2 */   

   printf("ch:%4dbyte\n",sizeof(ch));
   printf("str1:%2dbyte\n",sizeof(str1));
   printf("str2:%2dbyte\n",sizeof(str2));  
   system("pause");
   return 0;
}
/* ch3 scanfs.c                            0936  */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int num1, num2;
	double po;
	char str[20];

	printf("Input two number :\n");
	scanf("%d %d", &num1, &num2);
	printf(" ===> %d + %d = %d\n\n", num1, num2, num1+num2);

	printf("Input a floating point :\n");
	scanf("%lf", &po);
	printf(" ===> %f is %e\n\n", po, po);

    printf("Input a string :\n");
	scanf("%s", str);
	printf(" ===> %s \n\n", str);

	printf("Input at most 10 chars :\n");
	scanf("%10s", str);
	printf(" ===> %s\n", str);
	
	system("PAUSE");
	return 0;
}
/* prog9_21, 輸入及印出字串                      0945       */                        
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char name[15];	/* 宣告字元陣列name */
		
   puts("What's your name?");
   gets(name);		/* 利用gets()讀入字串，並寫入字元陣列name裡 */
   puts("Hi!");
   puts(name);		/* 印出字元陣列name的內容 */
   puts("How are you?");
   system("pause");
   return 0;
}
//1025
#include <stdio.h>			
#include <stdlib.h>
int main(void)
{
	int i=0;
	char str[50];
	printf("Please input a string:");
	gets(str);
	while(str[i]!='\0')
	{
		if(str[i]>=65&&str[i]<=90)
		{
			str[i]+=32; 
		}
		i++;
	}
	printf("Uppercase converted to lowercase:%s\n",str);
	system("pause");
	return 0;
}
/* ch3 cut.c */
#include <stdio.h>                   //1045
#include <stdlib.h>
int main()
{
	int num = 321;

	printf("Decimal : %d\n", num);    //1        1             1    
	printf("Character : %c\n", num);  //256 128 64 32 16 8 4 2 1
	
	system("PAUSE");
	return 0;
}

/* prog9_23,字串陣列 */
//1055
#include <stdio.h>                           
#include <stdlib.h>
int main(void)
{
   char S[3][10]= {"Tom","Lily","Bruce Lee"};
   int i;
   
   for(i=0;i<3;i++)		
      printf("S[%d]=%s\n",i,S[i]);    /* 印出字串陣列內容 */
   printf("\n");
   
   for(i=0;i<3;i++)	// 印出字串陣列元素的位址
   {
      printf("S[%d]=%p\n",i,S[i]);
      printf("address of S[%d][1]=%c %p\n\n",i,S[i][1],&S[i][1]);
   }
   
   system("pause");
   return 0;
}

```
## :blue_book: Class03 (2020.01.14)
```c=
/* prog7_3, while迴圈的使用 */					//1425
#include <stdio.h>
#include <stdlib.h>
int main(void) 
{    
	char guess;
	while(guess != 'e')
	{
		printf("Press a to z:");
		scanf("%c",&guess);
		fflush(stdin);
		if(guess != 'e')
        {
			printf("You guess wrong, guess again!\n");        
        }
	}
	printf("Congratulations! You got it!\n");
    system("pause"); return 0;
} 
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int n,i=1,sum=0;
	do
	{
		printf("Please input the value of n(n>0):");
		scanf("%d",&n);
		fflush(stdin);	
	}while(n<=0);
	do 
	{
		sum+=i;
		i++;
	}while(i<=n);
	printf("1+2+...+%d=%d\n",n,sum);
	system("pause");
	return 0;
}
/* prog7_12, do while迴圈，將整數反過來列印 */
int main(void) 
{
   int a,r;
   while(1)             //Ctrl+C
   {             
      do 
      {
         printf("Input an integer:");
         scanf("%d",&a);
	     fflush(stdin);
      } while (a<=0);   		/* 必須輸入大於0的正整數 */
      printf("The reverse is ");
      while (a!=0)	
      {	                       /* 第二內層將正整數倒過來輸出13579 */
         r=a%10;			    /* 計算a/10的餘數 13579%10=9*/
         a/=10;			        /* 計算a/10，再把結果1357設回給a */
         printf("%d",r);	
      }
      printf("\n\n");
   }
   system("pause"); return 0;
}
/* prog9_200, 密碼讀取流程 */
#include <stdio.h>
#include <stdlib.h>
#define PASSWD 1234
int main(void) {
	int passwd;
	int flag=0, retry=1;
	do {
		printf("%d. Enter your password:\n",retry++);
		scanf("%d",&passwd);
	    fflush(stdin);
		if(passwd == PASSWD)
			flag=1;
	}while(!flag && (retry<=3));  //!flag為0, 密碼驗證結束, 離開do…while
	if(flag)
		printf("Congratulatons!\n");
	else
		printf("You are rejected!\n");
   system("pause"); return 0;
}
/* prog7_13, break敘述的使用 */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   int i;
   for(i=1;i<=10;i++)
   {
      if(i%3==0)				/* 判斷i%3是否為0 */
         break;				/* 跳離迴圈 */
      printf("i=%d\n",i);		/* 印出i的值 */
   }
   printf("跳離迴圈時, i=%d\n",i);
   system("pause");
   return 0;
}

/* 16 prog7_14, continue敘述的使用 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i;
   for(i=1;i<=10;i++)
   {
      if(i%3==0)			/* 判斷i%3是否為0 */
         continue;		/* 回到迴圈的起始處繼續執行 */
      printf("i=%d\n",i);	/* 印出i的值 */
   }
   printf("跳離迴圈時, i=%d\n",i);

   system("pause");
   return 0;
}

#include<stdio.h>   //0830
#include<stdlib.h>
#define SQUARE n*n
int main (void)
{
	int n;
	printf("Please input an integer:");
	scanf("%d",&n);
	printf("%d*%d=%d\n",n,n,SQUARE);    //代換標記
	system("pause");
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
#define ABS(x) x>0?x:-x
int main (void)
{
	int i,j=-3;
	float x,y=-1.35f;
	i=ABS(j);
	printf("ABS(%d)=%d\n",j,i);
	x=ABS(y);
	printf("ABS(%4.2f)=%4.2f\n",y,x);
	system("pause");
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
#define SQUARE(x) (x)*(x)
int main (void)
{
	int n;
	printf("Please input an integer:");
	scanf("%d",&n);
	printf("%dx%d=%d\n",n+1,n+1,SQUARE(n+1));
	system("pause");  return 0;
}

 
/* prog7_141, continue敘述的使用 */
#include <stdio.h>
#include <stdlib.h>
int main(void ) 
{
  int i;	
  for (i = 0; i < 10; i++) 
  {
  if (i % 2!=0) 
  	continue;    		// start next iteration
  else if (i == 8) 
  	break;  			// end loop
  printf("%d\n", i); 	// 0246
  }
   system("pause");
   return 0;
}


 
/*  prog9_1, 一維陣列的基本操作 */ 
#include <stdio.h>
#include <stdlib.h>
int main(void) 
{
   int i,score[4]; 	/* 宣告整數變數i與整數陣列score */
   score[0]=78;		/* 設定陣列的第一個元素為78 */
   score[1]=55; 		/* 設定陣列的第二個元素為55 */
   score[2]=92;   	/* 設定陣列的第三個元素為92 */
   score[3]=80; 		/* 設定陣列的最後一個元素為80 */
   for(i=0;i<=3;i++)
      printf("score[%d]=%d\n",i,score[i]);  /* 印出陣列的內容 */
   system("pause"); return 0;
}
/* prog9_2, 一維陣列的基本操作(錯誤的示範) */ 
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i,score[4]; 	/* 宣告整數變數i與整數陣列score */
   score[0]=78;		
   score[1]=55; 		
   /* score[2]=92;  此行刻意不將score[2]設值 */
   score[3]=80; 		
   for(i=0;i<=3;i++)	
      printf("score[%d]=%d\n",i,score[i]);  
   system("pause"); return 0;
}
/* 11 prog9_3, 查詢陣列所佔的記憶空間 */ 
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   double data[4];	/* 宣告有4個元素的double型態陣列 */
   printf("Array element :%d\n",sizeof(data[0]));  // Array element所佔的位元組
   printf("Array :%d\n",sizeof(data));			// 整個Array所佔的位元組
   //printf("The number of array elements:%d\n",sizeof(data)/sizeof(double));
   system("pause");
   return 0;
}

/* prog9_5, 比較陣列元素值的大小 */
int main(void)  {
   int array[5]={7,48,30,17,62};
   int i, min, max;
   //min=max=A[0];		/* 將max與min均設為陣列的第一個元素 */
   min=array[0];
   max=array[0];
   for(i=0;i<5;i++)
   {
      if(array[i]>max) 	/* 判斷A[i]是否大於max */
         max=array[i];	
      if(array[i]<min) 	/* 判斷Aarrayi]是否小於min */
         min=array[i];	
   }
   printf("The maximum value of the array element :%d\n",max);
   printf("The minimum value of the array element :%d\n",min);
   system("pause"); return 0;
}

#include<stdlib.h>
#include<stdio.h>
#define SIZE 6
int main(void)
{
	int i, num, flag=0;
	int array[SIZE]={33, 75, 69, 41, 33, 19};
	printf("The value of an array element: \n");
	for(i=0; i<SIZE; i++)
	{
		printf("%d ",array[i]);
	}
	printf("\nPlease input an integer: ");
	scanf("%d",&num);
	for(i=0; i<SIZE; i++)
	{
		if(array[i]==num)
		{
			printf("Found it! array[%d]=%d\n",i ,array[i]);
			flag=1;
		}
	}
	if(flag==0)
	{
		printf("Not found!\n");
	}
	system("pause");
	return 0;
}

/* prog9_7, 陣列的界限檢查 */
#define MAX 5		/* 定義MAX為5 */
int main(void)  {
   int score[MAX]; 	/* 宣告score陣列，可存放MAX個整數 */
   int i=0,num;
   float sum=0.0f;
   printf("Please input the score, input 0 to end:\n");
   do
   {
      if(i==MAX)		/* 當i的值為MAX時，表示陣列已滿，即停止輸入 */
      {
         printf("Array space has been used up!!\n"); 
         i++;			/* 此行先將i值加1，因為23行會把i的值減1掉 */
         break;
      }
      printf("Please input the score:");
      scanf("%d",&score[i]);
   }while(score[i++]>0);   /* 輸入成績，輸入0時結束 */
   num=i-1;
   for(i=0;i<num;i++)
      sum+=score[i];		/* 計算平均成績 */
   printf("average score %.2f\n",sum);
   system("pause"); return 0;
}


```

## :blue_book: Class02 (2020.01.14)

```c=
/* prog4_10, 使用scanf()函數，一次輸入兩個整數 11*/  1345
#include <stdio.h>
#include <stdlib.h>
int main(void){
   int ia,ib;
   printf("Please input two integers: ");	
   scanf("%d %d",&ia,&ib);		/* 由鍵盤輸入二個數並設定給變數a、b */
   printf("%d+%d=%d\n",ia,ib,ia+ib); 	/* 計算總和並印出內容 */
   system("pause");  return 0;
}

#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	char size='M';
	int cups=8;
	float discount=0.85f;
	printf("%c size cup of 35 dollars\n",size);
	printf("Buy %d cups, total %d dollars\n",cups,45*cups);
	printf("Buy %d cups and get a discount %4.2f\n",cups, discount);
	system("pause");
	return 0;	
} 

#include<stdio.h>            //0830
#include<stdlib.h>
int main(void)
{
	printf("12%%4=%d\n",12%4);
	printf("12%%5=%d\n",12%5);
	printf("12%%16=%d\n",12%16);
	system("pause");
	return 0;
}
int main(void)
{
	int num=5;
	printf("num/2=%.2f\n",num/2);
	printf("num/2=%.2f\n",(float)num/2);
	printf("num/2=%.2f\n",num/2.0);
	system("pause");
	return 0;
} 
#include<stdio.h>                //0840
#include<stdlib.h>
int main(void)
{
	int x=65;
	char A='A',B='B';
	float fx=65.0F;
	printf("%d==%c=%d\n",x,A,x==A);
	printf("%d>%c=%d\n",x,B,x>B);
	printf("%c>%c=%d\n",B,A,B>A);
	printf("%.1f==%c=%d\n",fx,A,fx==A);
	printf("%.1f>%c=%d\n",fx,B,fx>B);
	system("pause");	return 0;
}
/* prog5_4, 關係運算子的練習 16*/			1429
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int ia=5;
	int ib=7;
	int ic=8;
	if(ia>2)
	{
		printf("yes 5>2\n");
	}
	if(ib>9)
	{
		printf("no 7>9\n");
	}
	if(ic==8)
	{
		printf("yes %d=8\n",ia);
	}
	system("pause");
	return 0;	
} 
/* prog5_5, 遞增運算子「++」 */ 	 //0855
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int a=3, b=3;
   printf("a=%d,\n",a);
   printf("a++ return value %d",a++);	/* 計算a++，並印出其傳回值 */
   printf(", a=%d\n",a);
   printf("b=%d,\n",b);
   printf("++b return value %d",++b); 	/* 計算++b，並印出其傳回值 */
   printf(", b=%d\n",b);
   system("pause");  return 0;
}
/*prog5_7, 簡潔運算式 */	            	//0905
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int a=3,b=5,c=6,d=7;
   printf("before calculation: a=%d, b=%d\n",a,b);
   a+=b;		/* 計算a+=b, 即a=a+b */
   printf("calculation: a=%d, b=%d\n",a,b);
   printf("before calculation: c=%d, d=%d\n",c,d);
   c*=d;		/* 計算a+=b, 即a=a+b */
   printf("calculation: c=%d, d=%d\n",c,d);      
   system("pause");   return 0;
}
/* prog6_3_3, 條件運算子的練習 */		//1120
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int hour;
   printf("Please input the 24-hour system => ");
   scanf("%d", &hour);
   hour = (hour >= 12) ? hour -12 : hour;
   printf("Present time: %d\n", hour);
   system("pause");
   return 0;
}
/* prog6_9, 條件運算子的練習 */         //0933
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int num1,num2,larger;
   printf("Please input two integers:");
   scanf("%d %d",&num1,&num2);
   num1>num2 ? (larger=num1) : (larger=num2);  /* 條件運算子 */
   printf("%d greater value\n",larger); 
   system("pause");  return 0;
}
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int x=6;
	if(x>0)
	{
		printf("Bruce\n");
	}
	else
	{
		printf("Jenny\n");
	}
	system("pause");
	return 0;
} 
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int num;
	printf("Please input an integer:");
	scanf("%d",&num);
	if(num>=0)
	{
		if(num<=20)
        {
			printf("number between 0-20\n");
        }
	}
	else
	{
		printf("number less than 0\n");
	}
	system("pause");
	return 0;
}

 
/* prog6_5, 巢狀if敘述的練習 */   //0945
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int score;
	printf("Please input a score:");
	scanf("%d",&score);
	if(score<60)
	{
		if(score>=50)
		{
			printf("make up exams!\n");
		}
		else
		{
			printf("Fail!\n");
		}
	}
	else
	{
		printf("Pass\n");
	}

	system("pause");
	return 0;
}

/* prog6_7, if-else配對問題(一) */		//1023
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int num;
   printf("Please input an integer:");	
   scanf("%d",&num);
   if(num>=0)
   if(num<=20)
   printf("number between 0-20\n");
   else  
   printf("number less than 0\n"); 
   system("pause");
   return 0;
}


/* prog6_8, if-else配對問題(二) */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int num;
   printf("Please input an integer:");	
   scanf("%d",&num);
   if (num>=0)
   {
      if(num<=20)
         printf("number between 0-20\n");
   }
   else     /* 如果第10行的if敘述不成立 */
   {
      printf("number less than 0\n");          
   }
   system("pause");
   return 0;
}
/* prog5_8, 運算式的型態轉換 */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char ch='c';
   short int s=-2;
   int i=5;
   double d=6.28;       
   //float f=5.3f;
   //int sum;
   /*
   printf("(ch/s)=%d\n",(ch/s));
   printf("(d/s)=%f\n",(d/s));        
   printf("(s+i)=%d\n",(s+i));   
   */
   printf("(ch/s)-(d/s)-(s+i)=%f\n",(ch/s)-(d/s)-(s+i));  
   //printf("size=%d\n",sizeof((ch/s)-(d/s)-(s+i)));
   system("pause");   
   return 0;
}

#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int chinese, english, bonus;
	printf("Please input the score of chinese: ");
	scanf("%d",&chinese);	
	printf("Please input the score of English: ");	
	scanf("%d",&english);
	
	if (chinese == 100)
	{
    	if (english == 100)
        	bonus = 1000;
    	else
        	bonus = 500;		
	}

	else
	{
	    if (english == 100)
	        bonus = 500;
	    else
	        bonus = 0;
	}
	printf("bouns: %d\n",bonus);
	system("pause");
	return 0;
}
/* prog6_6, if-else-if敘述的應用 */  		//1046
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int score;
   printf("Your score:"); 
   scanf("%d",&score);

   if (score>=80)
      printf("%d is A\n",score);			/* 印出A */
   else if (score>=70)
      printf("%d is B\n",score);		/* 印出B */
   else if (score>=60)
      printf("%d is C\n",score);	/* 印出C */
   else
      printf("Failed!!\n");	/* 印出字串"Failed!!" */
   system("pause");
   return 0;
}
/* prog6_10, switch敘述的使用範例 */   	//1105
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   float a,b;
   char oper;
   printf("Please input the expression:(ex:3+2): ");   		/* 輸入運算式 */
   scanf("%f %c %f",&a,&oper,&b);

   switch(oper)
   {
      case '+':
         printf("%.2f+%.2f=%.2f\n",a,b,a+b);		/* 印出a+b */
         break;
      case '-':
         printf("%.2f-%.2f=%.2f\n",a,b,a-b);		/* 印出a-b */
         break;
      case '*':
         printf("%.2f*%.2f=%.2f\n",a,b,a*b);		/* 印出a*b */
         break;
      case '/':
         printf("%.2f/%.2f=%.2f\n",a,b,a/b); /* 印出a%b */
         break;
      default:
         printf("input error!!\n");		/* 印出字串 */
   }
   system("pause");
   return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int a,b;
   char oper;
   printf("Please input the expression:(ex:3+2): ");   		/* 輸入運算式 */
   scanf("%d %c %d",&a ,&oper ,&b);

   switch(oper)
   {
      case '+':
         printf("%2d+%2d=%3d\n",a,b,a+b);		/* 印出a+b */
         break;
      case '-':
         printf("%2d-%2d=%3d\n",a,b,a-b);		/* 印出a-b */
         break;
      case '*':
         printf("2d*2d=3d\n",a,b,a*b);		/* 印出a*b */
         break;
      case '/':
         printf("%2d/%2d=%3d\n",a,b,a/b); /* 印出a/b */
         break;
      case '%':
         printf("%2d  %% %2d  =%3d\n",a,b,a%b); /* 印出a%b */
         break;
      default:
         printf("input error!!\n");		/* 印出字串 */
   }
   system("pause");
   return 0;
}
/* prog6_11, switch敘述-以不同的選擇值來處理相同的敘述 */		//1120
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char grade;
   printf("Please input a grade: (ex: A or a):");
   scanf("%c",&grade);

   switch(grade)
   {
      case 'a':	/* 輸入a或A時印出Excellent! */
      case 'A':
         printf("Excellent!\n");
         break;
      case 'b':	/* 輸入b或B時印出Good! */
      case 'B':
         printf("Good!\n");
         break;
      case 'c':	/* 輸入c或C時印出Be study hard! */
      case 'C':
         printf("Be study hard!\n");
         break;
      default:	/* 輸入其他字元時印出Failed! */
         printf("Failed!\n");
   }
   system("pause");
   return 0;
}

for 變數=初值 to 終值 <==涵義就相當於 FOR迴圈條件在於幾圈幾圈

while 條件 <==涵義就相當於讓某個事件產生 

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int i=1, sum=0;
	while(i<=10)
	{
		printf("Hay!!\n");
		i++;
	}
	system("pause");
	return 0;
} 

/* prog7_3, while迴圈的使用 1要累加到多少時, 才會超過10*/   //1137
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i=1,sum=0;	/* 設定迴圈控制變數的值初值 */
   while(i<=10)    /* while迴圈，當sum小於10則繼續累加 */
   {
      sum+=i;
      i++;		/* 重新設定迴圈控制變數的值 */
   }
   printf("Accumulate %2d\n",sum);
   //printf("It must be added to the %d\n",i-1);
   system("pause");
   return 0;
}   
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	int deposit=0, num=0, money;
	while(deposit<30000)
	{
		num=num+1;
		printf("Please enter deposit amount:\n ");
		scanf("%d",&money);
		printf("number of deposits: %d\n",num);
		deposit=deposit+money;
	}
	printf("accumulate %d\n",deposit);
	system("pause");
	return 0;
} 
/* prog7_10, 巢狀while迴圈求9*9乘法表 */			//1325
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i=1, j=1;		/* 設定迴圈控制變數的初值 */
   
   while (i<=9)		/* 外層迴圈 */
   {
      while (j<=9)	/* 內層迴圈 */
      {
         printf("%d*%d=%2d  ",i,j,i*j);
         j++;
      }
      printf("\n");
      i++;
      j=1;
   }
   system("pause");
   return 0;
}
/* prog7_11, 利用巢狀迴圈印出三角形 */ 11					//1339
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i,j,n=6;			/* 設定迴圈初值 */
   for (i=1;i<=n;i++)		/* 外層迴圈決定哪一列要印星號 */
   {
      for (j=1;j<=i;j++)	/* 內層迴圈印出*星號 */
         printf("*");
      printf("\n");
   }

   system("pause");
   return 0;
}


 
/* prog7_111, 巢狀迴圈的應用 */				//1353
#include <stdio.h>
#include <stdlib.h>
int main(void) {
	char row, column;
	for(row='A';row<='G';row++)
	{
		for(column=row;column<='G';column++)
			printf("%2c ",column);
		printf("\n");
	}
   system("pause"); return 0;
}
/* 11 prog4_18, 讀取到錯誤的字元 */			//1412
int main(void) {
   int num;
   char ch;
   printf("Please input an integer: ");
   scanf("%d",&num);		/* 由鍵盤輸入整數，並指定給變數num */
   //fflush(stdin);   //可用來清除緩衝區的資料, stdin 標準輸入設備(鍵盤)
   printf("Please input a character: ");
   scanf("%c",&ch);		/* 由鍵盤輸入字元，並指定給變數ch */
   //fflush(stdin);   //可用來清除緩衝區的資料, stdin 標準輸入設備(鍵盤)    
   printf("num=%d, ascii of ch=%d\n",num,ch); /* 印出num與ch的ascii碼 */
   system("pause"); return 0;
}

```

## :blue_book: Class01 (2020.01.09)

-	單純的「複製 / 貼上」對程式設計的學習並沒有太大的幫助
-	重點部分的程式碼一定要自己輸入
	否則對程式語法的記憶與程式撰寫能力的提升是有限的

-	觀念一：簡單的英文單字但卻抽象
	C  語言的指令都是簡單的英文單字(如：while、for)
	初學還是會覺得那些語法與規定很抽象
	這樣的反應是正常的

-	觀念二：語法的規定就是聖旨
	程式語法的規定除了遵守還是遵守
	沒有可以自由創造的空間
	不能加分號，就是不要加！
	必須在宣告時給初始值，就是一定要給！
	記熟並且依照規定去使用就對了

-	標頭檔的載入
	#include <stdio.h>
	載入 stdio.h (標準輸入與輸出函式庫定義檔)
	因為使用了 printf 與 scanf
	#include <stdlib.h>
	載入 stdlib.h (標準函式庫定義檔)
	因為使用了 system

-	內建函式與標頭檔的載入
	必須先載入才能使用
	內建函式的定義檔則是以 .h 為副檔名
	載入使用 #include 指令，定義檔的名稱則必須寫在 <> 裡面
	語法規範的要求
	printf 與 scanf 就是 C 語言所提供的基本函式，又稱為內建函式

-	回傳值與函式引數
	int main(void) 
	int 代表這個函式的回傳值
	( ) 中的 void 代表不需要引數
	回傳值：return 0 就是回傳 0
	0 表示程式執行沒有問題
	舉例來說
	你請別人(函式)幫你做事情，你必須提供一些執行所需的東西(這些傳過去的東西就是引數) 當然也可以不給(void 就是表示不用給)
	當然你會希望他在做完之後跟你回報（這個回報就是回傳值）
-	注意
	main 的回傳值是 int 這是 ANSI C 的規範
	必須使用 return 回傳一個值，0 表示程式執行沒有問題
	可改成 void main(void)，不需要回傳值（省略 return 0 ）
	但這並非 ANSI C 的標準

-	system("pause")
	讓「命令提示字元」處於暫停的狀態，視窗看到「請按任意鍵繼續 . . .」的字眼 ─ 才能看到程式執行的結果
	按下鍵盤上任何一個按鍵，就能終止這個暫停的動作
-	字串
	凡是以 “ 與 ” 所包含文字集合體，C 語言稱之為字串(string)
-	註解
	介於 /* 與 */ 之間的都是註解，就算跨行也算

	請養成寫註解的習慣！！！

	掌握註解的幾個原則：
	有特定用途的變數
	在宣告時，就在它的後面用註解說明這個變數的使用目的
	以程式區塊為單位
	在程式區塊之前用簡單的幾行說明這個程式區塊所能達成的功能
	在函式之前
	利用註解說明這個函式功能以及每一個引數的作用與回傳值的意義 (第七章會介紹函式)
	不斷的練習，寫、寫、寫
	程式一定要寫才能熟練，除了背別人寫的程式還是自己多寫
	學習他人的技巧
	多觀摩他人寫的「好程式」是提升程式功力的好方法
	背下解題技巧，未來遇到相關的問題時，就能很快的得到可參考的依據
	清晰的數理邏輯
	建立清晰的數理邏輯 ─ 多練習就能建立
	將解決問題的策略寫下來，常看多思考，就能逐步的建立
	熟練的電腦操作
	快去摸熟你所要使用的程式開發環境

 ```c=
#include <stdlib.h>	//載入標準函式庫, 載入使用 #include 指令, 定義檔的名稱則必須寫在 <>裡面
int main(void) 					
{							
  system("pause"); 
  return 0;
}
/* ##13 prog1_1, 第一個C程式碼  1*/ 
#include <stdio.h>      	// 載入標準輸入輸出函式庫
#include <stdlib.h> 		//必須先載入才能使用, 定義檔則是以 .h 為副檔名( header)
int main(void)          //程式進入點，程式就是從這邊開始執行，這是規定，一定要用 main()
{					//每個C程式必須定義一個屬於他自己的函式, 函式名稱為main()
   printf("Hello C!\n");   /* 只要將要輸出的文字寫在 " 與 " 之間就行了, 印出Hello C! 字串 */
   printf("Hello World!\n");   /* 印出Hello World! 字串 */   
   system("pause");         //這裡都必須有分號
   return 0;
}
X /* prog2_4, 有錯誤的程式  */
#include <stdio.h>   	
#include <stdlib.h>		
int main(void)
{
   int num;        /* 宣告了一個名叫做 i 的變數，它只能儲存整數(integer)，並設值為2 */
   num=2;		/* 將num設值為2 */
   printf("I have %d dogs. \n",num);			//印出字串及變數內容 
   printf("You have %d dogs, too. \n",num); 	/* 印出字串及變數內容  */
   system("pause");
   return 0;
}
 
/*##18  prog3_1,變數的使用, C語言有大小寫之分int num; int Num; int NUM;代表三個變數喔 2*/ 
#include <stdio.h>		//內容可隨時改變的數  0920
#include <stdlib.h> 
int main(void)   //等號右邊的運算結果儲存到等號左邊的變數中 右邊可以是運算式、數值或是變數
{			 //等號的左邊只能是變數，而且只能有一個，不能是運算式
   int num1=12400;	     /* 宣告num1為整數變數，它只能儲存整數(integer)，並設值為12400 */
   double num2=5.234;	 /* 宣告num2為倍精度浮點數變數，並設值為5.234 */
   printf("%d is an integer\n",num1); 	/* 呼叫printf()函數 */
   printf("%f is a double\n",num2);	/* 呼叫printf()函數 */
   system("pause");
   return 0;

/* ##28 prog3_2, 短整數資料型態的溢位3  */  0948
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   short sum,s=32767;        /* 宣告短整數變數sum與s */
   sum=s+1;
   printf("s+1= %d\n",sum);	/* 列印出sum的值 */
   sum=s+2;
   printf("s+2= %d\n",sum); 	/* 列印出sum的值 */   

   system("pause");
   return 0;
}
/* ##31 prog3_3, 字元的列印4*/   1025
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char ch='a';				/* 宣告字元變數ch，並設值為'a' */
   printf("ch= %c\n",ch);		/* 印出ch的值 */ 
   printf("ASCII of ch= %d\n",ch);		/* 印出ch的十進位值 */
   printf("ASCII of ch= %x\n",ch);      // ASCII用來制定電腦中符號對應的整數代碼 A 65 Z 90
   
   system("pause");
   return 0;
}
    
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	char ch='a';
	printf("ch=%c\n",ch);
	printf("ch=%d\n",ch);
	system("pause");
	return 0;
}
    
    
/* prog3_4, 利用ASCII碼來設定字元變數 */   
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char ch=90;				/* 將整數90設給字元變數ch */
   printf("ch=%c\n",ch);		/* 印出ch的值 */
   
   system("pause");
   return 0;
}

/* prog3_5, 數字字元與其相對應的ASCII碼 5*/  
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   char ch='2';				/* 宣告字元變數ch，並設值為'2' */
   printf("ch=%c\n",ch);		/* 印出字元變數ch */
   printf("the ASCII of ch is %d\n",ch);  /* 印出ch的ASCII碼 */
   
   system("pause");
   return 0;
}
 
/* prog3_8, 跳脫序列「\"」的列印6*/   1045
#include <stdio.h>
#include <stdlib.h>
int main(void) {
   char ch='\"';      /* 宣告字元變數ch，並設值為'\"' */
   printf("%cWe are the World%c\n",ch,ch);       /* 印出字串 */
   
   system("pause");
   return 0;
}

/* ##34 prog3_10, float與double精度的比較 7*/   
#include <stdio.h>
#include <stdlib.h>
int main(void) {      			 //float 的運算速度較快	
   float  num1=12345.6789012345F; /* 宣告num1為float，並設定初值 */
   double num2=12345.6789012345;  /* 宣告num2為double，並設定初值 */   
   
   printf("num1=%16.10f\n",num1); /* 列印出浮點數num1的值 */
   printf("num2=%16.10f\n",num2); /* 列印出倍精度浮點數num2的值 */   
   
   system("pause");   
   return 0;
}

/* prog4_4, 印出特定格式 8  ##35*/     1115
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int inum1=32, inum2=1024;
   float fnum3=12.3478f;

   printf("num1=%6d km\n",inum1);	/* 以「%6d」格式印出num1 */
   printf("num2=%-6d km\n",inum2);	/* 以「%-6d」格式印出num2 */
   printf("num3=%6.2f mile\n",fnum3);	/* 以「%6.2f」格式印出num3 */
   system("pause");
   return 0;
}

/*##, 格式碼需與變數相對應 */     1125
int main(void)
{
	int x1,x2,x3,x4;
	x1=4+2;
	x2=4-2;
	x3=4*2;
	x4=4/2;
	printf("x1=%d,\nx2=%d,\nx3=%d,\nx4=%d\n",x1,x2,x3,x4);
	system("pause");
	return 0;
}
/* prog3_12, 資料型態的轉換  */     1135
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int n1,n2;
   float num1=3.03f,num2=3.98f;
   
   n1=(int) num1;		/* 將浮點數num1轉換成整數 */
   n2=(int) num2; 	/* 將浮點數num2轉換成整數 */   
   
   printf("num1=%f, num2=%f\n",num1,num2);  /* 印出浮點數的值 */
   printf("n1=%d, n2=%d\n",n1,n2);  /* 印出浮點數轉成整數後的值 */
  
   system("pause");
   return 0;
}
/*##36 prog4_9, 使用scanf()函數 9  */    1142
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int inum;
   printf("Please input an integer:");      //& 是一定要的喔, & 前的逗號也不能省喔！
   scanf("%d",&inum);			/* 由鍵盤輸入整數，並指定給num存放 */
   printf("num=%d\n",inum);	/* 印出num的內容 */
   system("pause");
   return 0;
}

/* prog1_7,  10*/  				1320
#include <stdio.h>
#include <stdlib.h>
int main(void) {
	int itea, icoffee, itotal;
	printf("How many bottles of black tea do you want to buy:");
	scanf("%d",&itea); 
	printf("How many bottles of coffee do you want to buy:");
	scanf("%d",&icoffee); 
	itotal = itea*25 + icoffee * 35;
	printf("Price：%d \n",itotal);
	system("pause");
	return(0);
}

#include <stdio.h>                1331
#include<stdio.h>
int main(void)
{
  //char size='M';
	int	cups=8;
	float discount=0.85f;
   //printf("%d size cup of 35 dollars\n",size);// 給錯輸出格式
   printf("Buy %d cups,total %d dollars\n",cups); //漏打了一個引數
   printf("Buy %d cups and get a discount %4.2f \n",discount,cups+2); //引數不小心放錯順序
   /*
   printf("%c size cup of 35 dollars\n",cSize);// 給錯輸出格式
   printf("Buy %d cups,total %d dollars\n",iCups,35*iCups); //漏打了一個引數
   printf("Buy %d cups and get a discount %4.2f \n",iCups+2,fDiscount); //引數不小心放錯順序
   */
	system("pause");
	return 0;
}  



}/* ##37 prog6_1, 選擇性結構if敘述 12 */  		1352
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int num;
	printf("Please input an integer:");
	scanf("%d",&num);
	if(num>0)
	{
		printf("You enter an integer greater than 0\n");
	}
	if(num<=0)
	{
		printf("You enter an integer less than or equal to 0\n");
	}
	printf("end");
	system("pause");
	return 0;	
} 

#include <stdio.h>                 1402
#include <stdlib.h>
int main(void) {
	int ix1 = (1 && 0); 		/* 0 - logical and */
	int ix2 = (1 || 0); 		/* 1 - logical or */
	printf("ix1=%d,i x2=%d \n", x1, x2);
   system("pause");   
   return 0;
}

/* ##44 prog5_40, 關係運算子的練習 15*/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
	int ix1 = (2 == 3); 		/* 0 - equal to */
	int ix2 = (2 != 3); 		/* 1 - not equal to */
	int ix3 = (2 > 3); 		/* 0 - greater than */
	int ix4 = (2 < 3); 		/* 1 - less than */
	int ix5 = (2 >= 3); 		/* 0 - greater than or equal to */
	int ix6 = (2 <= 3); 		/* 1 - less than or equal to */
	printf("ix1=%d, ix2=%d, ix3=%d, ix4=%d, ix5=%d, ix6=%d\n", ix1, ix2, ix3, ix4, ix5, ix6);
   system("pause");
   return 0;
}



/* ##45 prog5_6, 邏輯運算子的應用 17*/    1440
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int iscore;
   printf("Please input a score:");
   scanf("%d",&iscore);
   if ((iscore<0) || (iscore>100))   /* 若成績超出0到100之間 */
      printf("input error!!\n");     
   if ((iscore<60) && (iscore>49))   /* 若成績介於50到59之間 */
      printf("make up exams!!\n");   
   system("pause");   
   return 0;
}
/* ##41 prog5_2, 「!」運算的用法 14*/ 			1448
#include <stdio.h>
#include <stdlib.h>
int main(void)  
{
   int ia=0;
   int ib=6;
   printf("a=%d, !a=%d\n",ia,!ia);	/* 印出a及!a的值 */
   printf("b=%d, !b=%d\n",ib,!ib);	/* 印出b及!b的值 */
   system("pause"); return 0;
}
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
	int num=5.0;
	printf("num/2=%.2f\n",num/2);
	printf("num/2=%2d\n",num/2);
	printf("num/2=%.2f\n",(float)num/2);
	system("pause");
	return 0;	
} 
/* ##47 prog7_0, for迴圈的使用 18*/      1517
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i;
   for(i=1;i<=5;i++)			/* 計算1+2+...+10的結果 */
   printf("%d\n",i);	/* 印出sum的值 */
   system("pause");
   return 0;
}

int main(void)
{
   int i;
   for(i=5;i>0;i--)			/* 計算1+2+...+10的結果 */
   printf("%d\n",i);	/* 印出sum的值 */
   system("pause");
   return 0;
}

/* prog7_1, for迴圈的使用 19*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i,isum=0;
   for(i=1;i<=5;i++)			/* 計算1+2+...+10的結果 */
      isum+=i;
   printf("1+2+3+4+5=%d\n",isum);	/* 印出sum的值 */
   
   system("pause");
   return 0;
}



 
/* prog7_2, for迴圈的使用 20*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
   int i,j;
   for(i=0,j=1;i+j<=5;i++,j++)			/* 計算1+2+...+10的結果 */
   printf("i=%d j=%d i+j=%d\n",i,j,i+j);	/* 印出sum的值 */
   
   system("pause");
   return 0;
}



//stdio.h 
int printf (const char *__format, ...)
{
  register int __retval;
  __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
  __retval = __mingw_vprintf( __format, __local_argv );
  __builtin_va_end( __local_argv );
  return __retval;
}
```