2013年10月19日 星期六

TQC+ C 指標 401 ~ 410

TQC+ C 試題總覽:LINK
Github 備份:LINK

/* TQC+ C - 401 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int num=100, *pointer;
/* TQC+ C - 401 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int num=100, *pointer;
pointer = &num; /* 這邊是要把指標位址寫過去 */
printf("num=%d, *pointer=%d\n", num, *pointer);
system("PAUSE");
return 0;
}
pointer = &num; /* 這邊是要把指標位址寫過去 */
printf("num=%d, *pointer=%d\n", num, *pointer);
system("PAUSE");
return 0;
}
view raw TQCplus_C_401 hosted with ❤ by GitHub
/* TQC+ C - 402 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int num=100;
int *pointer = &num; /* 補上&,因要讀取位址,非值 */
printf("num=%d, *pointer=%d\n", num, *pointer);
system("PAUSE");
return 0;
}
view raw TQCplus_C_402 hosted with ❤ by GitHub
/* TQC+ C - 403 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int arr[]={100, 200, 300, 400, 500};
int *pointer=arr;
int i;
for (i = 0 ; i < 5 ; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
/* 另一種表示方法 */
printf("\n另一種表示方法\n");
for (i = 0; i < 5; i++) {
printf("arr[%d]=%d\n", i, *(arr+i));//因為要取位址,所以要把相關的變數括好
}
/* 第三種表示方法 */
printf("\n第三種表示方法\n");
for (i = 0 ; i < 5 ; i++) {
printf("arr[%d]=%d\n", i, *(pointer+i));//這邊的話,因為pointer已經導向arr的記憶體位址,所以用法跟上面一樣
}
system("PAUSE");
return 0;
}
view raw TQCplus_C_403 hosted with ❤ by GitHub
/* TQC+ C - 404 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int arr[2][3];
int i, j;
for(i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("請輸入陣列arr[%d][%d]元素值:", i, j);
scanf("%d", &arr[i][j]);
}
}
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("arr[%d][%d]=%d\n", i, j, arr[i][j]);
}
}
/* 另一種表示方法 */
printf("\n另一種表示方法\n");
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("arr[%d][%d]=%d\n", i, j, *(arr[i]+j));
/* 從指標(pointer)中取出值(value) */
}
}
/* 第三種表示方法 */
printf("\n第三種表示方法\n");
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("arr[%d][%d]=%d\n", i, j, *(*(arr+i)+j));
/* 要取出值的指標要括號好 */
}
}
system("PAUSE");
return 0;
}
view raw TQCplus_C_404 hosted with ❤ by GitHub
/* TQC+ C - 405 */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int arr[2][3]={{100, 200, 300},{ 400, 500, 600}};
/* 陣列是2x3的,所以要分配好成為二維陣列 */
int *ptr2[2]={arr[0], arr[1]};
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("arr[%d][%d]=%d\n", i, j, arr[i][j]);
}
}
/* 另一種表示方法 */
printf("\n另一種表示方法\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("arr[%d][%d]=%d\n", i, j, *(arr[i]+j));
/* 補上*讓他可以透過指標讀取值 */
}
}
/* 第三種表示方法 */
printf("\n第三種表示方法\n");
for (i = 0; i < 2; i++) {
for (j=0; j<3; j++) {
printf("arr[%d][%d]=%d\n", i, j, *(*(ptr2+i)+j));//位置要補上*
}
}
system("PAUSE");
return 0;
}
view raw TQCplus_C_405 hosted with ❤ by GitHub
/* TQC+ C - 406 */
#include <stdio.h>
#include <stdlib.h>
void change(int *, int *);
int main ( )
{
int i=100, j=200;
printf("交換前i與j的值: \n");
printf("i=%d, j=%d\n", i, j);
change(&i, &j); /* 取出記憶體位址 */
printf("交換後i與j的值: \n");
printf("i=%d, j=%d\n", i, j);
system("PAUSE");
return 0;
}
void change(int *x, int *y) /* 接收到記憶體位址 */
{
int temp; /* 設定一個整數變數 */
temp=*x; /* 把記憶體中的資料寫進去 */
*x=*y; /* 把x的位址改成y的 */
*y=temp; /* 把暫存的東西,寫入y記憶體 */
}
view raw TQCplus_C_406 hosted with ❤ by GitHub
/* TQC+ C - 407 */
#include <stdio.h>
#include <stdlib.h>
int sum(int *, int n);
int main ( )
{
int arr[] = {10, 20, 30, 40, 50};
int total, i;
for (i=0; i<5; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
total=sum(arr, 5);
printf("total=%d\n", total);
system("PAUSE");
return 0;
}
int sum(int *p, int n)
{
int i, tot = 0; /* 設定加總初始值0 */
for (i=0; i<n; i++) { /* 開始的位置為i=0 */
tot += *(p+i); /* 要取出位址的value */
}
return tot;
}
view raw TQCplus_C_407 hosted with ❤ by GitHub
/* TQC+ C - 408 */
/* 題目: 指標與函數的關係,以輸入函數讀取資料,
* 然後找出陣列的最大值在何處
*
* 輸出結果的樣本如下所示:
*
* 請輸入arr[0]元素值: 100
* 請輸入arr[1]元素值: 200
* 請輸入arr[2]元素值: 300
* 請輸入arr[3]元素值: 400
* 請輸入arr[4]元素值: 500
* 陣列的元素值分別如下:
* arr[0]=100
* arr[1]=200
* arr[2]=300
* arr[3]=400
* arr[4]=500
*
* 此陣列的最大值為500
*/
/* 若下一程式執行時與上述的輸出結果有異時,請加以更正之 */
#include <stdio.h>
#include <stdlib.h>
int Max(int *, int n);
int main ()
{
int arr[5];
int maximum, i;
for (i=0; i<5; i++) {
printf("請輸入arr[%d]元素值: ", i);
scanf("%d", &arr[i]);
}
printf("\n陣列的元素值分別如下:\n");
for (i=0; i<5; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
maximum=Max(arr, 5);
printf("\n此陣列的最大值為%d\n", maximum);
system("PAUSE");
return 0;
}
int Max(int *p, int n)
{
int i, maxi_value = *p; /* 將第一個值先當作最大的值寫入 */
for (i=1; i<n; i++) {
/* 因為arr[0]已經寫進去過了,所以直接從arr[1]開始比較
* 然後判斷,陣列大小五的話,僅需比較到4,index值0~4
*/
if (maxi_value < *(p+i)) {
/* 如果大於最大值,才改寫 */
maxi_value=*(p+i);
}
}
return maxi_value;
}
view raw TQCplus_C_408 hosted with ❤ by GitHub
/* TQC+ C - 409 */
/* 題目: 指標與函數的關係
*
* 輸出結果的樣本如下所示:
* 請輸入arr[0][0]: 10
* 請輸入arr[0][1]: 20
* 請輸入arr[0][2]: 30
* 請輸入arr[1][0]: 40
* 請輸入arr[1][1]: 50
* 請輸入arr[1][2]: 60
*
* 陣列之值如下:
* arr[0][0]=10
* arr[0][1]=20
* arr[0][2]=30
* arr[1][0]=40
* arr[1][1]=50
* arr[1][2]=60
*
* 此陣列的總和為210
*/
/* 若下一程式執行時與上述的輸出結果有異時,請加以更正之 */
#include <stdio.h>
#include <stdlib.h>
int sum(int *p, int n, int m);
int main ( )
{
int arr2[2][3];
int *pointer = arr2[0]; /* 將陣列的第一個未止寫進去指標 */
int total, i, j;
for (i = 0; i < 2; i++) {
for (j = 0 ; j < 3 ; j++) {
printf("請輸入arr[%d][%d]: ", i, j);
scanf("%d", &arr2[i][j]); /* 要補上&參照 */
}
}
printf("\n陣列之值如下:\n");
for (i = 0 ; i < 2 ; i++) {
for (j = 0; j < 3; j++) {
printf("arr[%d][%d]=%d\n", i, j, arr2[i][j]);
}
}
total = sum(pointer, 2, 3);
printf("\n此陣列的總和為%d\n", total);
system("PAUSE");
return 0;
}
int sum(int *p, int x, int y) /* 改寫參數型態 */
{
int i, j, tot=0;
for (i = 0 ; i < (x * y) ; i++) { /* 總共有幾個元素(x乘以y)個 */
tot += *(p+i); /* 透過指標指向記憶體取出值 */
}
return tot;
}
view raw TQCplus_C_409 hosted with ❤ by GitHub
/* TQC+ C - 410 */
#include <stdio.h>
#include <stdlib.h>
int Max(int *, int n, int m);
int main ( )
{
int arr2[2][3];
int *pointer = &arr2[0][0];
int maximum, i, j;
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("請輸入arr[%d][%d]: ", i, j);
scanf("%d", &arr2[i][j]);
}
}
printf("\n陣列之值如下:\n");
for (i=0; i<2; i++) {
for (j=0; j<3; j++) {
printf("arr[%d][%d]=%d\n", i, j, arr2[i][j]);
}
}
maximum=Max(pointer, 2, 3);
/* 僅需要輸入arr2因為其本身就為二維陣列 */
printf("\n此陣列的最大值為%d\n", maximum);
system("PAUSE");
return 0;
}
int Max(int *p, int x, int y)
{
int i, j, maxi_value=*p; /* 先將指標所指到的值取出 */
for (i=1; i<(x*y); i++) { /* 記憶體位置總共有六格(2x3=6) */
if (maxi_value < *(p+i)) {
maxi_value = *(p+i);
}
}
return maxi_value;
}
view raw TQCplus_C_410 hosted with ❤ by GitHub


題目409和410記憶體內部排列如下


TQC+ C 試題總覽:LINK
Github 備份:LINK


本篇教學的程式碼皆由筆者編輯,歡迎轉貼本教學,但請全文轉貼,謝啦~

沒有留言:

張貼留言