C語言日記③ 分支和迴圈
阿新 • • 發佈:2021-10-15
筆記更新於: '2021-10-15 11:01:20'
c語言是一門結構化的程式設計語言
- 順序結構
- 選擇結構
- 迴圈結構
if選擇
與java一致
題目:
判斷一個數是否為奇數
輸出100以內的奇數
int main() {
for (size_t i = 0; i < 100; i++)
{
if (i % 2 != 0) {
printf("%d\n", i);
}
}
return 0;
}
switch選擇
與java一致
給個數,判斷是星期幾
int num = 0; scanf("%d", &num); switch (num) { case 1: printf("%s\n", "星期一"); break; case 2: printf("%s\n", "星期二"); break; case 3: printf("%s\n", "星期三"); break; case 4: printf("%s\n", "星期四"); break; case 5: printf("%s\n", "星期五"); break; case 6: printf("%s\n", "星期六"); break; case 7: printf("%s\n", "星期七"); break; default: break; }
控制檯與char
getchar()從控制檯獲取一個字元的ASCII碼
putchar(ASCII碼 )從控制檯列印一個char
迴圈列印,除了ctrl+z
ctrl+z
會獲取一個EOF
int charn = getchar();
while ((charn=getchar())!=EOF) {
putchar(charn);
}
有時候getchar 會讀取到\n
這時候需要清空緩衝區
再來一次
getchar()
getchar
只能讀取一個字元 scanf
不會讀取到空格
for迴圈
與java一致,不可foreach
有趣的for程式碼:
1.
for (;;) { printf("呵呵\n"); }
死迴圈 一直輸出呵呵
for迴圈的初始化,調整,判斷都可以省略
但是判斷省略迴圈條件就一直為真
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("呵呵\n");
}
}
這個程式碼會輸出多少個哈哈呢?
答案是:10個
為什麼呢?
因為第一次i的for迴圈的時候j已經變為10了,此時進行第二次i迴圈,j不會重新變成0,j部分直接跳過
迴圈題目
計算一個數的階乘
階乘計算公式為 !n=1*2*3*4...*n
int num = '0'; scanf("%d", &num); int count = 1; for (size_t i = 1; i < num+1; i++) { count *= i; } printf("%d\n", count);
計算1!+2!+3!...+10!
int result = 0;
for (size_t i = 0; i <= 10; i++)
{
int count = 1;
for (size_t j = 1; j < i+1; j++)
{
count *= j;
}
printf("%d--%d\n", i,count);
result += count;
}
int binsearch(int x,int *v, int n) {
//這裡注意一下,傳遞過來的陣列長度是不能計算的,賊坑
//int length = sizeof(v) / sizeof(v[0]);
int result = -1;
for (size_t i = 0; i < n; i++)
{
if (x == v[i])
result = v[i];
if (i==n-1)
{
break;
}
}
return result;
}
main:
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
int result = binsearch(13,arr,100);
printf("%d\n", result);
for (size_t i = 0; i < 10; i++)
{
if (i == 9)
break;
if (i != 9)
printf("\n");
for (size_t j = 0; j < i; j++)
{
printf(" ");
}
for (size_t j = 10; j > i; j--)
{
printf("**");
}
}
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 10; j > i; j--)
{
printf(" ");
}
for (size_t j = 0; j < i; j++)
{
printf("**");
}
if (i != 9)
printf("\n");
}
int main() {
char pwd[20] = { 0 };
int num = 0;
while (num < 3) {
printf("請輸入密碼:");
scanf("%s", pwd);
if (strcmp("123456",pwd)!= 0) {
printf("%s\n", pwd);
num++;
}
else {
printf("輸入正確!");
}
};
return 0;
}
陣列迴圈查詢之二分查詢法
想在一個0-100的陣列內找出99,如果按照傳統的查詢方法來查詢,需要查詢99此才能找到,而二分查詢法可以7(?次就找到
具體查詢實現
求0和陣列長度的平均值
判斷與所需的值是大了還是小了,如果小了,則進行尋找大於的50%,反之
最後找到等於所求值的數
tips:
如果尋找不到,會有最大值和最小值互換的情況判斷這點可以確定是否找到,注意,最大值一定是大於最小值的
#define MID(X,Y) ((X+Y)/2)
int arr[] = { 1,2,3,4,5,6,7,8,9,10,13 };
int sz = sizeof arr / sizeof arr[0];
int left = 0;
int right = sz - 1;
int k = 3;
while (left<=right)
{
int mid = MID(left, right);
if (arr[mid] > k){
right = mid - 1;
}
else if (arr[mid] < k) {
left = mid + 1;
}
else {
printf("找到了,下標在:%d 當前下標輸出值:%d\n", mid,arr[mid]);
break;
}
}
if (right<left)
{
printf("沒找到\n");
}
[[C語言日記④ 分支和迴圈]]