No.16 程式碼練習:折半查詢,模擬登入,大小寫轉換
阿新 • • 發佈:2018-11-10
學習不易,需要堅持。
1.寫程式碼可以在整型有序陣列中查詢想要的數字,
找到了返回下標,找不到返回-1.(折半查詢)
2.編寫程式碼模擬三次密碼輸入的場景。
最多能輸入三次密碼,密碼正確,提示“登入成功”,密碼錯誤,
可以重新輸入,最多輸入三次。三次均錯,則提示退出程式。
3.編寫一個程式,可以一直接收鍵盤字元,
如果是小寫字元就輸出對應的大寫字元,
如果接收的是大寫字元,就輸出對應的小寫字元,
如果是數字不輸出。
1.
//一個重要的查詢演算法:折半查詢
//寫程式碼可以在整型有序陣列中查詢想要的數字,找到了返回下標,找不到返回-1.(折半查詢)
#include <stdio.h>
int Fold_half_search(int arr[], int sz, int key)
{
int left = 0 ;
int right = sz - 1 ;
int mid = 0 ; //中間值
while(left <= right)
{
mid = ( left + right ) / 2 ;
//查詢成功
if( key == arr[mid] )
{
return mid ;
}
//若查詢失敗,則改變左右指標繼續查詢
if( arr[mid] < key )
{
left = mid + 1 ;
}
if ( arr[mid] > key )
{
right = mid - 1 ;
}
}
return -1 ;
}
void Print(int arr[], int sz)
{
int i = 0 ;
for(i=0; i<sz; i++)
{
printf("%d ", arr[i]) ;
}
printf("\n") ;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9} ;
int ret = 0 ;
int input = 0 ;//需要查詢的數
int flag = 0 ; //標誌
int size = sizeof(arr) / sizeof(arr[0]) ;
printf("/******折半查詢*****/\n") ;
Print(arr, size) ;
while( flag < 2 )
{
printf("請輸入你想要查詢的數字: ") ;
scanf("%d", &input) ;
ret = Fold_half_search(arr, size, input) ;
printf("下標為:arr[%d]\n", ret) ;
flag++ ;
}
return 0 ;
}
執行結果:
2.
//編寫程式碼模擬三次密碼輸入的場景。
//最多能輸入三次密碼,密碼正確,提示“登入成功”,密碼錯誤,可以重新輸入,最多輸入三次。三次均錯,則提示退出程式。
#include <stdio.h>
#include <string.h>
void Enter()
{
int count = 0 ; //記錄輸入次數
char name[] = "1016705287" ;
char psw[] = "xagydx" ;
char name_input[20] = { 0 } ;
char psw_input[20] = { 0 } ;
while ( count < 3 )
{
printf("請輸入QQ賬號: ") ;
scanf("%s", name_input) ;
printf("請輸入QQ密碼: ") ;
scanf("%s", psw_input) ;
if( ( strcmp(name, name_input) == 0 ) && (strcmp(psw, psw_input) == 0 ) )
{
printf("密碼輸入正確!\n") ;
break ;
}
else
{
printf("賬號或密碼輸入錯誤,請重新輸入!\n") ;
}
count ++ ;
}
}
int main()
{
Enter() ;
return 0 ;
}
執行結果:
3.
//編寫一個程式,可以一直接收鍵盤字元,
//如果是小寫字元就輸出對應的大寫字元,
//如果接收的是大寫字元,就輸出對應的小寫字元,如果是數字不輸出。
#include <stdio.h>
char Judge(char ch)
{
//如果輸入的是小寫字母
if( ch >= 97 && ch <= 122 )
{
printf("處理後的字元:%c", ch - 32) ;
}
//如果接收的是大寫字母
if( ch >=65 && ch <= 90 )
{
printf("處理後的字元:%c", ch + 32) ;
}
//如果接收的是數字,則不輸出
if( ch > 48 && ch <= 57 )
{
printf("檢測到數字\n") ;
return ;
}
}
int main()
{
int count = 0 ;
char ch = 0 ;
while(count < 3)
{
printf("請輸入一個字元: ") ;
scanf("%c", &ch) ;
Judge(ch) ; //判斷函式
while ((ch = getchar()) != EOF && ch != '\n'); //清除緩衝區
printf("\n") ;
count++ ;
}
return 0 ;
}
執行結果: