#include <stdlib.h>
int main(void)
{
struct data /* 定義結構data */
{
char name[10];
int math;
} student; /* 宣告data型態的結構變數student */
printf("請輸入姓名: ");
_________(student.name); /* 輸入學生姓名 */
printf("請輸入成績 :");
scanf("%d",___________); /* 輸入學生成績 */
printf("你輸入的學生姓名為':%s\n", ___________);
printf("該學生的成績為:%d\n", ____________);
system("pause");
return 0;
}
/* 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()函數中 */
printf("最後a儲存的值(value)為%d\n",a);
system("pause");
return 0;
}
void address(int *p1)
{
printf("於位址%p內,儲存的變數內容為%d\n",p1,*p1);
*p1=*p1+5;
}
以兩個整數變數的value互換為例:int a=20,b=19===>函式執行後(swap()互換)===>答案變成a=19,b=20
特別注意事項:
(1)函式宣告的形式
(2)函式本體的運算
call by value
/* prog10_9 */
#include <stdio.h>
#include <stdlib.h>
void swap(______,_______);
int main(void)
{
int a=5,b=20;
printf("... ");
printf("a=%d,b=%d\n",a,b);
swap(____,______);
printf("... ");
printf("a=%d,b=%d\n",a,b);
system("pause");
return 0;
}
/* wap() */
void swap(int x,int y)
{
int _________;
________;
________;
}
call by address
/* prog10_10 */
#include <stdio.h>
#include <stdlib.h>
void swap(_______,_______);
int main(void)
{
int a=5,b=20;
printf("... ");
printf("a=%d,b=%d\n",a,b);
swap(______,_______);
printf("... ");
printf("a=%d,b=%d\n",a,b);
system("pause");
return 0;
}
void swap(_______,_______)
{
int _________;
________;
________;
}
INPUT輸入:兩個整數代表長與寬
OUTPUT輸出:面積area與周長peri
基本做法:
寫兩個函釋分別計算與回傳出面積area與周長peri
關鍵技術:只用一個函示
設計一個函示輸入長與寬與要計算的面積area與周長peri
myWork(a,b,&area,&peri)
透過指標變數將計算後的結果存入題目要的面積area與周長peri
特別注意:
(1)myWork()函式宣告
(2)myWork()函式本體的運算
/* prog10_11, 傳回多個數值的函數 */
#include <stdio.h>
#include <stdlib.h>
void myWork(int,int,int *,int *); /* 函數myWork()的原型 */
int main(void)
{
int a=5,b=8;
int area,peri;
myWork(a,b,&area,&peri); /* 呼叫myWork(),計算面積及周長 */
printf("area=%d,total length=%d\n",area,peri);
system("pause");
return 0;
}
void myWork(int x,int y,int *p1, int *p2)
{
*p1=x*y;
*p2=2*(x+y);
}
再增加計算三角形面積
INPUT輸入:代表角度的double雙精準浮點數變數THETA
OUTPUT輸出:sin(THETA),cos(THETA),tan(THETA),cot(THETA),sec(THETA)csc(THETA)
關鍵技術:只能使用一個函數
https://zh.wikipedia.org/wiki/Math.h
每一個函式透過return可以回傳一個(也只有一個)值/答案===>其實函式也可以回傳一個address(位址)===>這有甚麼用處????
INPUT輸入:三個正整數
OUTPUT輸出:三個正整數中最大值(MAX)
關鍵技術:
(1)使用一個函數int MAX()
(2)使用一個回傳address的函數int *MAX()
/* prog10_12, 由函數傳回指標 */
#include <stdio.h>
#include <stdlib.h>
int *max(int *,int *); /* 宣告函數max()的原型 */
int main(void)
{
int a=12,b=17,*ptr;
ptr=max(&a,&b);
printf("max=%d\n",*ptr);
system("pause");
return 0;
}
int *max(int *p1, int *p2)
{
if(*p1>*p2)
return p1;
else
return p2;
}
使用下列三種方式存取陣列的元素
[1]使用index存取
[2]使用pointer(指標變數)存取:陣列名稱==>pointer(指標變數
[3]使用pointer(指標變數)存取:利用一個pointer(指標變數)ptr指向陣列在移動指標去存取元素
計算一維陣列內所有元素的和 int a[5]={11,22,33,44,55};
取出最大元素
取出最小元素
將每一個陣列元素都加60
將每一個元素都依照位置(i)加上某一值(i+1)*5 ===>a[5]={11+5,22+10,33+15,44+20,55+25}