C/C++程式語言教學用講義-鍾震璋 http://www.akey.idv.tw/course/cpp1.html // ex.0-4 main(){ char ch='a'; printf("ch=%c\n",ch); printf("ch=%d\n",ch); printf("ch=%o\n",ch); printf("ch=%x\n",ch); } // ex.0-5 main(){ int i=32, j=15; float f=12.3456; printf("i=%-4d",i); printf("j=%4d\n",j); printf("f=%f\n",f); printf("f=%e\n",f); printf("f=%6.2f\n",f); } // ex.0-6 main(){ int a=155, b=9; float f; f=a/b; printf("a=%d, b=%d\n",a,b); printf("a/b=%f\n",a/b); printf("f=%f\n",f); printf("a/b=%f\n",(float)a/b); } // ex.0-7 main(){ float f=123.59; int i=30; // find f-i and f/i, then output your answer! } // ex.0-8 main(){ int a=15; printf("a=%d",a); printf("a in float is %f\n",a); printf("a in double is %e\n",a); } // ex.0-9 main(){ int a,b; scanf("%d %d",&a, &b); printf("a+b=%d\n",a+b); printf("(a+b)/2=%.1f\n",(float)(a+b)/2); } // ex.0-10 main(){ char ch; printf("Input a character:"); scanf(" %c",&ch); printf("ch=%c, ASCII code is %d\n",ch,ch); } // ex.0-11 main(){ char name[10]; printf("What's your name:"); scanf("%s",name); printf("Hi, %s, How are you?\n",name); } // ex.0-12 main(){ int age; printf("Input your age: "); scanf("%d", &age); age=age+1; printf("Next year, you will be %d\n", age); } // ex.0-13 main(){ int a, b; char ch='%'; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); printf("a+b=%d\n", a+b); printf("a-b=%d\n", a-b); printf("a*b=%d\n", a*b); printf("a/b=%f\n", (float)a/(float)b); printf("a%cb=%d\n", ch, a%b); } //ex.0-14 main(){ if(5>2) printf("Return Value=%d\n",(5>2)); if(1) printf("Happy Birthday!\n"); if(0) printf("You are so king!\n"); } //ex.0-15 main(){ int i=3; printf("i=%d\n",i++); i=3; printf("i=%d\n",++i); } //ex.0-16 main(){ int a,b; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); if(a>0 && b>0) printf("a-b=%d\n",a-b); if(a-b<0 || a+b<0) printf("a+b=%d\n",a+b); } //ex.0-17 main(){ int a,b; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); printf("Before compute, a=%d\tb=%d\n",a,b); a+=b; printf("After compute, a=%d\tb=%d\n",a,b); } //ex.0-18 main(){ int a,b; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); printf("Before compute, a=%d\tb=%d\n",a,b); a-=b++; printf("After compute, a=%d\tb=%d\n",a,b); } //ex.0-19 //試寫一程式,將攝氏溫度轉成華氏溫度。 main(){ int c; float f; printf("請輸入攝氏溫度:"); scanf("%d", &c); f=9.0/5*c+32; printf("華氏溫度為%.2f度\n",f); } //ex.0-20 //試寫一轉換英哩為公里的程式。 //註:1英哩=1.6公里 main(){ int mile; printf("請輸入英哩數:"); scanf("%d", &mile); printf("你輸入的%d英哩,轉換成公里為%.2f公里\n", mile, 1.6*mile); } //ex.0-21 //試撰寫一程式,利用printf()函數,分別印出下列敘述的結果。 //1.將整數變數a的初始值設為10,整數變數b的初始值設為10; //2.變數的值加1,b的值加5。 //3.將變數a加上b之後,將其平均,並將結果指定給整數變數c。 //4.將a的平方減去b的平方,指定給d。 main(){ int a=20, b=10, d; float c; printf("1. a=%d, b=%d\n", a,b); a+=1; b+=5; printf("2. a=%d, b=%d\n", a, b); c=((float)a+=b)/2; printf("3. c=%f\n", c); d=a*a-b*b; printf("4. d=%d\n", d); } //ex.0-22 //已知圓球體積為4/3*pi*r*r*r,試寫一程式,輸入圓球半徑,經計算後輸出圓球體積。 main(){ int r; float answer, pi=3.14159; printf("請輸入圓球半徑r="); scanf("%d", &r); answer=4.0/3*pi*r*r*r; printf("半徑為%d的圓球體積為%.2f\n", r, answer); } //ex.1-1 //結構化程式設計-循序性結構 main(){ int a, b; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); printf("(a+b)*(a-b)=%d\n", (a+b)*(a-b)); } //ex.1-2 //結構化程式設計-選擇性結構 main(){ int a, b; printf("First number: "); scanf("%d", &a); printf("Second number: "); scanf("%d", &b); if(a>b) printf("a-b=%d\n", a-b); printf("a*b=%d\n", a*b); } //ex.1-3 //結構化程式設計-迭代性結構 main(){ int i; int sum=0; for(i=1; i<=10; i++) sum+=i; printf("1+2+3+...+10=%d\n", sum); } //ex.1-4 //擲骰子10000次,利用亂數取值,計算擲到點數為4的次數及機率。 main(){ int i, count=0; for(i=1; i<=10000; i++) if((rand()%6+1)==4) count++; printf("擲10000次骰子時,出現4點的次數為%d次\n", count); printf("機率為%.3f\n", (float)count/10000); } //ex.1-5 //改用while迴圈 main(){ int i, count=0; srand((unsigned)time(NULL)); while(i<=10000){ if((rand()%6+1)==4) count++; i++; } printf("擲10000次骰子時,出現4點的次數為%d次\n", count); printf("機率為%.3f\n", (float)count/10000); } //ex.1-6 //無窮迴圈 main(){ int i; while(i != 0) printf("i=%d\n",i++); } //ex.1-7 //do while迴圈 main(){ int n, i=1, sum=0; do{ printf("Input n(n>0), It'll get result of 1+2+...+n= "); scanf("%d", &n); }while(n<=0); do{ sum+=i++; while(i<=n); printf("1+2+...+%d=%d\n", n, sum); } //ex.1-8 //使用do while迴圈,計算n! main(){ int n, i=1, f=1; do{ printf("Input n(n>0), It'll get result of n!: "); scanf("%d", &n); }while(n<=0); do f*=i++; while(i<=n); printf("%d!=%d\n", n, f); } //ex.1-9 //空迴圈 main(){ int i; for(i=1; i<=10000; i++); printf("i=%d\n", i); } //ex.1-10 //巢狀迴圈(Nested Loops) main(){ int i, j; for(i=1; i<=9; i++){ for(j=1; j<=9; j++) printf("%d*%d=%2d ",i ,j ,i*j); printf("\n"); } } //ex.1-11: 巢狀迴圈,使用while敘述 main(){ int i, j; while(i<=9){ while(j<=9) { printf("%d*%d=%2d ",i,j,i*j); j++; } printf("\n"); i++; j=1; } returen 0; } //ex.1-12: 以*符號列出一直角三角形 main(){ int i,j,n=6; for(i=1;i<=n;i++){ for(j=1;j<=i;j++) printf("*"); printf("\n"); } } //ex.1-13: 輸入一正整數, 將該正整數倒過來輸出 main(){ int a,r; while(1){ do { printf("Input an integer: "); scanf("%d", &a); } while(a<=0); printf("The answer is "); while(a!=0) { r=a%10; a/=10; printf("%d",r); } printf("\n\n"); } } //ex.1-14: 迴圈跳離(break敘述) main(){ int i; for(i=1;i<=10;i++){ if(i%3==0) break; printf("i=%d\n",i); } prinf("When loop interrupted, i=%d\n",i); } //ex.1-15: 迴圈跳離(continue敘述) main(){ int i; for(i=1;i<=10;i++){ if(i%3==0) continue; printf("i=%d\n",i); } printf("When loop interrupted, i=%d\n",i); } //ex.1-16到ex.1-28為練習題,有程式設計上的問題,歡迎來信討論! //ex.1-16 利用for迴圈寫一能產生如下圖之程式。 1 12 123 1234 12345 //ex.1-17 寫一程式產生如下圖之結果。 * *** ***** ******* ********* *********** //ex.1-18 寫一程式,產生(由螢幕輸出)0~255之間的ASCII字元。 //ex.1-19 寫一程式,印出從3到100之間,所有可以被6整除的數值。 //ex.1-20 寫一程式,印出從1到1000之間,所有可以被7整除,又可被3整除的數值。 //ex.1-21 利用for迴圈,計算1+3+5+...+n之總和,其中n為奇數且由使用者輸入。 //ex.1-22 利用while迴圈,計算2+4+6+...+n之總和,其中n為偶數且由使用者輸入。 //ex.1-23 試寫一程式,印出1到100之間所有整數的平方值,最後再印出這些平方值的總和。 //ex.1-24 假設有一條繩子長3000公尺,每天剪去一半的長度,請問需要花費幾天的時間,繩子的長度會短於5公尺? //ex.1-25 試利用do while迴圈,計算1!+2!+3!+...+n!的總和,其中n由使用者輸入。 //ex.1-26 計算1^2-2^2+3^3-4^2+...+47^2-48^2+49^2-50^2的總和。(說明:1^2代表1的平方,而2^2代表2的平方,以此類推) //ex.1-27 計算1+1/2+1/3+...+1/n之總和,其中n由使用者輸入。 //ex.1-28 計算1+1/1!+1/2!+1/3!+...+1/n!之總和,其中n由使用者輸入。 //ex.2-1 main(){ int a,b; printf("first number:"); scanf("%d",&a); printf("second number:"); scanf("%d",&b); if (a>b){ printf("a+b=%d\n",a+b); printf("a-b=%d\n",a-b); } printf("a*b=%d\n",a*b); } //ex.2-2: if-else敘述 main(){ int a,b; printf("first number:"); scanf("%d",&a); printf("second number:"); scanf("%d",&b); if (a>b){ printf("a-b=%d\n",a-b); printf("a%%b=%d\n",a%b); } else{ printf("a+b=%d\n",a+b); printf("a*b=%d\n",a*b); } } //ex.2-3 main(){ int a; printf("Input a number:"); scanf("%d",&a); if (a%2==1) printf("%d is a odd number\n",a); else printf("%d is a even number\n",a); } //ex.2-4: 巢狀if敘述 main(){ int a,b; printf("First number(a):"); scanf("%d",&a); printf("Second number(b):"); scanf("%d",&b); if (a>0) if (b>0) printf("a-b=%d\n",a-b); else printf("a+b=%d\n",a+b); } //ex.2-5: else-if敘述 main(){ int score; printf("Your score:"); scanf("%d",&score); if (score>=80) printf("%d is A\n",score); else if (score>=70) printf("%d is B\n",score); else if (score>=60) printf("%d is C\n",score); else printf("Failed!!\n"); } //ex.2-6 main(){ int a,b; printf("First number:"); scanf("%d",&a); printf("Second number:"); scanf("%d",&b); if (a>b) if (a-b>6) printf("%d%%%d=%d\n",a,b,a%b); else printf("%d*%d=%d\n",a,b,a*b); } //ex.2-7 main(){ int a,b; printf("First number:"); scanf("%d",&a); printf("Second number:"); scanf("%d",&b); if (a>b){ if (a-b>6) printf("%d%%%d=%d\n",a,b,a%b); } else printf("%d*%d=%d\n",a,b,a*b); } //ex.2-8: 條件運算子?: main(){ int i,n,a,max,min; max=-32768; min=32767; printf("How many numbers do you want to input: "); scanf("%d",&n); for(i=1;i<=n;i++){ printf("Input number %d: ",i); scanf("%d",&a); max=(a>max)?a:max; min=(aj) return i; else return j; } //ex.2-25: 最大公因數 int gcd(int,int); main(){ int a,b; printf("First number:"); scanf("%d",&a); printf("Second number:"); scanf("%d",&b); printf("The GCD of %d and %d is %d\n",a,b,gcd(a,b)); } int gcd(int i,int j){ int g; while(j!=0){ g=i%j; i=j; j=g; } return i; } //ex.2-26: 沒有傳回值的函數 void myprint(int,char); main(){ int a; char ch; printf("Input a character:"); scanf("%c",&ch); printf("How many times do you want to print? "); scanf("%d",&a); myprint(a,ch); printf("Printed!!\n"); } void myprint(int n,char c){ int i; for(i=1;i<=n;i++) putchar(c); printf("\n",c); } //ex.2-27: 區域變數 void func(); main(){ auto int a=100; printf("In Main(),a=%d\n",a); func(); printf("In Main(),a=%d\n",a); } void func(){ int a=300; printf("In func(),a=%d\n",a); } //ex.2-28: 區域靜態變數 void func(); main(){ func(); func(); func(); } void func(){ static int a=100; printf("In func(),a=%d\n",a); a+=200; } //ex.2-29: 暫存器變數 main(){ time_t start,end; register int i,j; start=time(NULL); for(i=1;i<=50;i++){ for(j=1;j<=50;j++) printf("%2d*%2d=%4d\t",i,j,i*j); printf("\n"); } end=time(NULL); printf("It's spends %.1f seconds\n",difftime(end,start)); } //ex.2-30: 呼叫多個函數 void sum(int),fact(int); main(){ int a=5; fact(a); sum(a); } void fact(int a){ int i,total; for(i=1,total=1;i<=a;i++) total*=i; printf("1*2*...*%d=%d\n",a,total); } void sum(int a){ int i,sum; for(i=1,sum=0;i<=a;i++) sum+=i; printf("1+2+...+%d=%d\n",a,sum); } //ex.2-31: 相互呼叫函數 void sum(int); void fact(int); main(){ int a=5; fact(a); sum(a+5); } void fact(int a){ int i,total; for(i=1,total=1;i<=a;i++) total*=i; printf("1*2*...*%d=%d\n",a,total); sum(a); } void sum(int a){ int i,sum; for(i=1,sum=0;i<=a;i++) sum+=i; printf("1+2+...+%d=%d\n",a,sum); } //ex.2-32: 遞迴(Recursion)函數 int fact(int); main(){ int a; do{ printf("Input an integer:"); scanf("%d",&a); } while (a<0); printf("1*2*...*%d=%d\n",a,fact(a)); } int fact(int a){ if(a>0) return (a*fact(a-1)); else return 1; } //ex.2-33: 計算次方 int power(int,int); main(){ int a=2,b=3; printf("%d^%d=%d\n",a,b,power(a,b)); } int power(int a,int b){ if(b==0) return 1; else return (a*power(a,b-1)); } //ex.2-34: 費氏數列(Fibonacci Sequence) int fib(int); main(){ int n; for(n=1;n<=10;n++) printf("%d ",fib(n)); } int fib(int n){ /*自訂函數fib(),計算費氏數列的第n個數*/ if(n==1 || n==2) return 1; else return (fib(n-1)+fib(n-2)); } //ex.2-35: 試寫一函數 void kitty(),當主程式呼叫 kitty()時,螢幕上會顯示出 "Hello Kitty" 之字串。 //ex.2-36: 寫一函數 void kitty(int k),當主程式呼叫kitty(k) 時,螢幕上會顯示出k行的 "Hello Kitty"。 //ex.2-37: 寫一函數 int cub(int x),其作用為傳回引數 x 的 3 次方。 //ex.2-38: 試寫一函數int mod(int x,int y),來計算x/y的商數及餘數。 //ex.2-39: 利用ex.2-33的power()函數,其引數及傳回值型態皆為整數,現在,試寫一函數pow(x,n)來計算 ,其中x為浮點數,n為正整數,而傳回值為浮點數。例如,pow(5.0,2)=25.0。 //ex.2-40: 利用ex.2-30中所定義的函數fact(n)來計算下列方程式的值。 1/1!+1/2!+1/3!+...+1/10! //ex.3-1: 一維陣列的輸入與輸出 main(){ int i,score[5]; for(i=0;i<=4;i++){ printf("Input score:"); scanf("%d",&score[i]); } printf("***Output***\n"); for(i=0;i<=4;i++) printf("score[%d]=%d\n",i,score[i]); } //ex.3-2: 比較陣列元素值的大小 main(){ int A[5]={74,48,30,17,62}; int i,min,max; min=max=A[0]; printf("elements in array A are "); for(i=0;i<5;i++){ printf("%d ",A[i]); if(A[i]>max) max=A[i]; if(A[i]0); num=i-1; for(i=0;i=0;i++,j--) b[j]=a[i]; for(i=0;ia[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } //ex.3-12: 印出變數位址 void func(int); main(){ int a=39; printf("In main(),a=%d,address=%p\n",a,&a); func(a); } void func(int a){ printf("In func(),a=%d,address=%p\n",a,&a); } //ex.3-13: 印出陣列位址 void func(int *); main(){ int i,a[4]={22,81,31,66}; printf("In main(),\n"); for(i=0;i<4;i++) printf("a[%d]=%2d,address=%p\n",i,a[i],&a[i]); func(a); } void func(int b[]){ int i; printf("In func(),\n"); for(i=0;i<4;i++) printf("b[%d]=%2d,address=%p\n",i,b[i],&b[i]); } //ex.3-14: 假設某一公司有五種產品A、B、C、D與E,其單價分別為12、16、10、14與15元;而該公司共有三位銷售員,他們在某個月份的銷售量如下所示。 銷售員 產品A 產品B 產品C 產品D 產品E 1 33 32 56 45 33 2 77 33 68 45 43 3 43 55 34 67 65 試寫一程式來計算: 1.每一個銷售員的銷售總金額。 2.每一項產品的銷售總金額。 3.有最好業績(銷售總金額為最多者)的銷售員。 4.銷售總金額為最多的產品。 //ex.3-15: 試撰寫一程式,由鍵盤輸入20個浮點數到陣列存放,並計算其平均值。 //ex.3-16: 試設計一程式,將字串陣列中的所有小寫字母轉換成大寫字母。 //ex.3-17: 印出字元長度及字串長度 main(){ char a[]="My friend"; char b='c'; char str[]="c"; printf("sizeof(a)=%d\n",sizeof(a)); printf("sizeof(b)=%d\n",sizeof(b)); printf("sizeof(str)=%d\n",sizeof(str)); } //ex.3-18: 輸入及印出字串 main(){ char name[15]; int i; for(i=0;i<2;i++){ printf("What's your name?"); scanf("%s",name); printf("Hi! %s,How are you?\n\n",name); } } //ex.3-19: 輸入及輸出字串 main(){ char name[15]; puts("What's your name?"); gets(name); puts("Hi!"); puts(name); puts("How are you?"); } //ex.3-20: 字串陣列 main(){ char name[3][10]={"Anress Jong","Marchman","Jojo Lin"}; int i; for(i=0;i<3;i++) printf("name[%d]=%s\n",i,name[i]); printf("\n"); for(i=0;i<3;i++){ printf("address of name[%d]=%p\n",i,&name[i]); printf("address of name[%d][0]=%p\n\n",i,&name[i][0]); } } //ex.3-21: 字串陣列 main(){ char students[3][10]; int i; for(i=0;i<3;i++){ printf("Input student%d's name:",i); gets(students[i]); } puts("***OutPut***"); for(i=0;i<3;i++) printf("students[%d]=%s\n",i,students[i]); } //ex.3-22: 字串陣列的複製 #define MAX 3 #define LENGTH 10 main(){ char students[MAX][LENGTH]={"Anress Jong","Marchman","Jojo Lin"}; char copystr[MAX][LENGTH]; int i,j; for(i=0;i=97) && (m[i][j]<=122)) m[i][j]-=32; }