C語言入門級教程五

2021-07-24 14:56:44 字數 2966 閱讀 9708

c語言入門級教程   icesongqiang

2016.11.14

本次試驗暴露出來的一些問題:

1.if()條件判斷等於,裡面一定是if(a==b), 而if(a=b)執行賦值操作,賦值的數就是表示式的值;

2. 字串拼接,將char b[80] 拼接到 char a[80] 後,一定要新增'\0';

3. 單詞統計很多同學的統計結果會與真實的相差乙個,或多或少,因為沒有考慮字串是不是以空格結束,空格的數量是多少等等。

4.此外,這次試驗還是有很多同學用了一些還沒學的函式,有提高要求的同學可以試試,但是基礎學習的過程中不倡導,建議大家還是以基礎為重

5.關於goto, 基本用goto的都可以用條件語句替換掉,要多考慮程式流程,goto提供簡單易操作的同時,也會帶來擾亂邏輯的困擾。

#include

void main()

更嚴格的,還應該考慮到數字嵌入英文序列中。

// by qiankun

#include

#include

#define lu(a,l,u) (a>=l && a<=u)

#define isalpha(a) (lu(a,65,90)||lu(a,97,122))

int ct_words(char

str)

while (isalpha(str[i]));

ct++;

}else i++;

}return ct;

}void main()

/ 約瑟夫問題

/***序號說明:只在輸入和輸出時調整0-1開始,內部計算均從0開始

**1.確定每個位置上的人的被處決順序

**2.按處決順序輸出位數索引即可

@author: icesongqiang

@version:v0

@time:nov-12-2016

*/#include

#include

#include // for macoll(), free()

// 函式宣告

int jose_people_index(int

order, int n, int *jose);

void printinorder(int n, int *jose);

void josephus(int start, int m, int n);

/*argv: start, m, n

** 從start開始數1,每數到m的人就執行處決;報數n個人一圈,即(n-1)的報數後由(0)位置上的接著報數

** 每次報到m就有乙個人被處決,上述過程重複n-1次,就可以退出

*/void josephus(int start, int m, int n)

int cnt = 0, count = 0, current_index = start;

while (count != n - 1)

}current_index = (current_index + 1) % n; // 下乙個位置的索引

}// 現在每個slot裡的數就是被處決的序號,可以排序後輸出索引

printinorder(n, jose);

for (int i = 0; i < n; ++i)

free(jose);}/*

**找到第order個被處決的人的位置號

*argv:

*order 被處決的順序

*n: 總人數

*jose: 陣列,在slot中存放該位置的人被處決的順序

*/int jose_people_index(int

order, int n, int *jose)

}return (index == n ? -1 : index);}/*

** 按處決順序輸出人的序號,最後乙個為活著的人,

** 按使用者習慣,從1開始標記

*/void printinorder(int n, int *jose)

printf("\n最後活著的人是:\n");

printf("%d ", 1+jose_people_index(n-1, n, jose));}/*

* 測試, 只在輸入和輸出時調整0-1開始,內部計算均從0開始

** 按使用者習慣,從1開始標記

*/int main()

實際上, 約瑟夫問題有遞推公式,假設(n,m)的最後解為函式 f(

n,m)

的值,那麼, f(

n,m)

return

last;

}

排序演算法提前終止就是加標誌的過程。
// by qiankun

#include

int sort_quit(int data, int num)

}if (!changeflag)return

1; // 如果沒有發生過交換,就表示已經排好序,可以提前退出了

}return0;}

// 省略主函式main

// by qiankun

#include

#include

#include

void recu_print(unsigned

long

long num)

void main()

/* 兩個迴圈即可

* icesongqiang

*/#include

#include

int main()

C語言入門級教程

c語言入門級教程 icesongqiang 2016.10.17 常用資料型別 整型 int,short,long,c 11 long long 字元型 char 實型 float,double 列舉型別 enum 構造資料型別 結構體型別 陣列型別 指標型別 空型別 void 各種型別和其格式化輸...

C語言入門級教程二

c語言入門級教程 icesongqiang 2016.10.24 首先看彙編的前三行,1 表示將ia的值放入暫存器eax 2 將ia的值與暫存器eax中的值進行乘法運算 3 將暫存器eax中的值儲存到變數位址上。具體如下 1 首先將ia的值放入暫存器eax,可以看到eax中的值變成了0x000000...

C語言入門級教程三

c語言入門級教程 icesongqiang 2016.10.31 現在很多同學已經知道資料型別為double,float時判斷資料大小使用絕對值,但是要提的是我們要盡量使用fabs a 而abs 的返回值為int型,希望大家注意 關於稅收的問題,注意是分段累計求和 很多同學都是使用switch ca...