ASCII編碼程式:
#include <stdio.h>
Int main(void)
{ char x=?(num); printf(“%c”,x); return 0; }
解碼:char x=’?(字元即字母或標點)’; print(“%d”,x);~
//* typesize.c -- 列印型別大小 */
#include <stdio.h> int main(void)
{/* C99為型別大小提供%zd轉換說明 */
printf("Type int has a size of %zd bytes.\n",
sizeof(int));
printf("Type char has a size of %zd bytes.\n",
sizeof(char));
printf("Type long has a size of %zd bytes.\n",
sizeof(long));
printf("Type long long has a size of %zd bytes.\n",
sizeof(long long));
printf("Type double has a size of %zd bytes.\n",
sizeof(double));
printf("Type long double has a size of %zd bytes.\n",
sizeof(long double));
return 0;}
遞增運算子輔助理解程式:
#include <stdio.h>
int main(void)
{
int a=1,b=1;
int a_post,pre_b;
a_post=a++;
pre_b=++b;
printf("a a_post b pre_b \n");
printf("%1d %5d %5d\n",a,a_post,b,pre_b);
return 0; }
輸出結果:a a_post b pre_b:a_post是a遞增之前的值,而b_pre是b遞增之後的值。
2 1 2 2
a_post = a++; // 字尾:使用a的值後,遞增a
b_pre= ++b; // 字首:使用b的值前,遞增b
判斷真假示例程式:
#include<stdio.h>
int main(void)
{ int true,false;
true=(10>2);//關係為真的值
false=(10==2);//關係為假的值
printf("true=%d;false=%d",true,false); return 0; }
for迴圈輔助理解程式:
#include <stdio.h>
int main(void)
{ const int NUMBER = 22;
int count;
for (count = 1; count <= NUMBER; count++)
printf("Be my Valentine!\n"); return 0; }
do while 迴圈輔助理解程式:
#include <stdio.h>
int main(void)
{ const int secret_code = 13;
int code_entered;
do{ printf("To enter the triskaidekaphobia therapy club,\n");
printf("please enter the secret code number: ");
scanf("%d",&code_entered); }
while (code_entered != secret_code);
printf("Congratulations! You are cured!\n");
return 0; }
ANSI原型宣告函式輔助理解程式:
double power(double n, int p);//函式宣告
xpow = power(x, exp); // 函式呼叫???為什麼x/exp可以取代n/p
double power(double n, int p) // 函式定義
{double pow = 1;
int i;
for (i = 1; i <= p; i++)
pow *= n;
return pow; // 返回pow的值 }
continue語句輔助理解程式:
const float MIN=0.0f;
const float MAX=100.0f;
float score;
float total=0.0f;
int n=0;
float min=MAX;
float max=MIN;
printf("Enter the first score(q to quit):");
while(scanf("%f",&score)==1)
{
if(score<MIN||score>MAX)
{
printf("%0.1f is an invalid value.Try again:",score);
continue;//跳轉至while迴圈的測試條件
}
printf("Accepting%0.1f:\n",score);
min=(score<min)?score:min;
max=(score>max)?score:max;
total+=score;
n++;
printf("Enter next score(q to quit):");
}
if(n>0)
{
printf("Average of %d scores is %0.1f.\n",n,total/n);
printf("Low=%0.1f,high=%0.1f\n",min,max);
}
else
printf("No valid scores were entered.\n");
return 0;
swich語句輔助理解程式
該表示式是剛輸入給 ch的值。然後程式掃描標籤(這裡指,case 'a' :、case 'b' :等)列表,直到發現一個匹配的值為止。然後程式跳轉至那一行。如果沒有匹配的標籤怎麼辦?如果有default :標籤行,就跳轉至該行;否則,程式繼續執行在switch後面的語句。break語句在其中讓程式離開switch語句,跳至switch語句後面的下一條語句。如果沒有break語句,就會從匹配標籤開始執行到switch末尾。例如,如果刪除該程式中的所有break語句,執行程式後輸入d,其互動的輸出結果會執行從case 'd':到switch語句末尾的所有語句。
switch (ch)
{
case 'a':
printf("argali, a wild sheep of Asia\n");
break;
case 'b':
printf("babirusa, a wild pig of Malay\n");
break;
case 'c':
printf("coati, racoonlike mammal\n");
break;
case 'd':
printf("desman, aquatic, molelike critter\n");
break;
case 'e':
printf("echidna, the spiny anteater\n");
break;
case 'f':
printf("fisher, brownish marten\n");
break;
default:
printf("That's a stumper!\n"); } /* switch結束 */
重複輸入,直到檔案結尾程式
#include <stdio.h>
int main(void)
{ int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0; }
變數ch的型別從char變為int,因為char型別的變數只能表示0~255的無符號整數,但是EOF的值是-1。getchar()函式實際返回值的型別是int,所以它可以讀取EOF字元。如果實現使用有符號的char型別,也可以把ch宣告為char型別。使用該程式進行鍵盤輸入,要設法輸入EOF字元。不能只輸入字元EOF,也不能只輸入-1(輸入-1會傳送兩個字元:一個連字元和一個數字1)。正確的方法是,必須找出當前系統的要求。例如,在大多數UNIX和Linux系統中,在一行開始處按下Ctrl+D會傳輸檔案結尾訊號。一些系統把任意位置的Ctrl+Z解釋成檔案結尾訊號。
排除緩衝區換行符影響示例:
while (getchar() != 'y') /* 獲取響應,與 y 做對比*/
{
printf("Well, then, is it %d?\n", ++guess);
while (getchar() != '\n')
continue; /* 跳過剩餘的輸入行 */ }
輸出地址的轉換說明示例:
pooh = 24;
假設pooh的儲存地址是0B76(PC地址通常用十六進位制形式表示)。那麼,下面的語句:
printf("%d %p\n", pooh, &pooh);
將輸出如下內容(%p是輸出地址的轉換說明):24 0B76
指標輔助理解程式示例:
#include <stdio.h>
void interchange(int * u, int * v);
int main(void)
{int x = 5, y = 10;
printf("Originally x = %d and y = %d.\n", x, y);
interchange(&x, &y); // 把地址傳送給函式,該函式傳遞的不是x和y的值,而是它們的地址。這意味著出現在interchange()原型和定義中的形式引數u和v將把地址作為它們的值。因
此,應把它們宣告為指標。
printf("Now x = %d and y = %d.\n", x, y);
return 0; }
void interchange(int * u, int * v)
{int temp;
temp = *u; // temp獲得 u 所指向物件的值,u的值是&x,所以u指向x。這意味著用*u即可表示x的值,
*u = *v;
*v = temp; }
陣列宣告示例:
int main(void)
{ float candy[365]; /* 內含365個float型別元素的陣列 */
char code[12]; /*內含12個char型別元素的陣列*/
int states[50]; /*內含50個int型別元素的陣列 */ ...}
初始化陣列程式示例:
int powers[8] = {1,2,4,6,8,16,32,64};
用以逗號分隔的值列表(用花括號括起來)來初始化陣列,各值之間用逗號分隔。在逗號和值之間可以使用空格。
陣列的陣列即多維陣列宣告示例:
float rain[5][12]; // 內含5個陣列元素的陣列,每個陣列元素內含12個float型別的元素。說明每個元素的型別是float[12],也就是說,rain的每個元素本身都是一個內含12個float型別值的陣列。rain[0]是一個陣列,那麼它的首元素就是 rain[0][0],第 2 個元素是rain[0][1],以此類推。
指標加一輔助理解程式示例:
#include <stdio.h>
#define SIZE 4
int main(void)
{short dates[SIZE];
short * pti;
short index;
double bills[SIZE];
double * ptf;
pti = dates; // 把陣列地址賦給指
ptf = bills;
printf("%23s %15s\n", "short", "double");
for (index = 0; index < SIZE; index++)
printf("pointers + %d: %10p %10p\n", index, pti + index, ptf + index);
return 0; }
在C中,指標加1指的是增加一個儲存單元。對陣列而言,這意味著把加1後的地址是下一個元素的地址,而不是下一個位元組的地址。在指標前面使用*運算子可以得到該指標所指向物件的值。指標加1,指標的值遞增它所指向型別的大小(以位元組為單位)。
dates + 2 == &date[2] // 相同的地址 *(dates + 2) == dates[2] // 相同的值
編寫一個處理陣列的函式示例:
闡明包含陣列元素個數的資訊。第一種方法:在函式程式碼中寫上固定的陣列大小
int sum(int * ar) // 相應的函式定義,對應的函式原型
{
int i;
int total = 0;
for (i = 0; i < 10; i++) // 假設陣列有10個元素
total += ar[i]; // ar[i] 與 *(ar + i) 相同
return total; }
sum()從該引數獲得了什麼資訊?它獲得了該陣列首元素的地址,知道要在該位置上找出一個整數。
第二種:
int sum(int * ar, int n) // 更通用的方法
{int i;
int total = 0;
for (i = 0; i < n; i++) // 使用 n 個元素
total += ar[i]; // ar[i] 和 *(ar + i) 相同
return total; }
只有在函式原型或函式定義頭中,才可以用int ar[]代替int * ar。int *ar形式和int ar[]形式都表示ar是一個指向int的指標。
宣告陣列形參:因為陣列名是該陣列首元素的地址,作為實際引數的陣列名要求形式引數是一個與之匹配的指標。只有在這種情況下,C才會把int ar[]和int * ar解釋成一樣。也就是說,ar是指向int的指標。由於函式原型可以省略引數名,所以下面4種原型都是等價的:
int sum(int *ar, int n); int sum(int *, int); int sum(int ar[], int n); int sum(int [], int);
但是,在函式定義中不能省略引數名。下面兩種形式的函式定義等價:
int sum(int *ar, int n); int sum(int ar[], int n);
表現字串的多種方式示例:
#include <stdio.h>
#define MSG "I am a symbolic string constant."
#define MAXLENGTH 81
int main(void)
{char words[MAXLENGTH] = "I am a string in an array.";
const char * pt1 = "Something is pointing at me.";//指標表示法建立字串
puts("Here are some strings:");
puts(MSG);
puts(words);
puts(pt1);
words[8] = 'p';
puts(words);
return 0; }
自定義輸入/輸出函式示例:列印字串,不新增換行符:
#include <stdio.h>
void put1(const char * string)/* 不會改變字串 */
{while (*string != '\0')
putchar(*string++); }
判斷素數:
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
unsigned long num; // 待測試的數
unsigned long div; // 可能的約數
bool isPrime; // 素數標記
printf("Please enter an integer for analysis; ");
printf("Enter q to quit.\n");
while (scanf("%lu", &num) == 1)
{
for (div = 2, isPrime = true; (div * div) <= num; div++)
{
if (num % div == 0)
{
if ((div * div) != num)
printf("%lu is divisible by %lu and %lu.\n",
num, div, num / div);
else
printf("%lu is divisible by %lu.\n",
num, div);
isPrime = false; // 該數不是素數
}
}
if (isPrime)
printf("%lu is prime.\n", num);
printf("Please enter another integer for analysis; ");
printf("Enter q to quit.\n");
}
printf("Bye.\n");
return 0;
}