c語言實用小程式

micryfotctf發表於2024-10-05

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;

}

相關文章