以下是C/C++面試題目,共計17個題目,其中涵蓋了c的各種基礎語法和算法,
以函數接口設計和算法設計為主。這17個題目在C/C++面試方面已經流行了多
年,大家需要抽時間掌握好,每一個題目后面附有參考答案,希望讀者能夠抽
時間做完題目后在看參考答案,每一個題目至少做兩邊,設計出兩種解決問題
的算法。
1、比較字符串,輸出它們第一個不同字母的位置,大小寫不敏感
2、判斷一個數是不是回文數,數字 1234321。
3、比較兩字符串長短,並返回結果。
4、給一個字符串,編程取其中一個特定的字符並輸出。
5、是比較兩個英文字符串的不相同的字符的位置(忽略字母大小寫)
6、主函數調用一函數
如:檢索出字符串中出現次數最多的那個字符,不考慮大小寫,然后返回該字符。
7、查找字符串中出現次數最多的字符,並返回該字符,只考慮小寫字母,不考慮不同字母出現次數一樣多的情況
8、輸入一個整數n,計算不大於n的數中和7相關的數的個數,包括能被7整出的數和含有字符7的數。
9、輸入一個整數將每一位上的奇數放在一個新整數中,高位放在高位,地位在低位。
10、輸入一串數,將其最小的放在第一位,次小的放在最后一位,再小的放在第二位,再再小的放在倒數第二位,以此類推。
11、寫一個函數,傳入參數為應付錢數。返回值為買家最少付出的錢的張數int get MoneyNum(int iInputMoney)例如:買家應付351元,最少張數為5.備注:可支付的錢幣只有100、50、10、5、1不考慮2、20以及小數部分。
12、設有幾個人圍坐在一圈並按順時針方向從1到幾編號,從第S個人開始進行1到m的報數。報數到第M個人,此人出圈。再從他的下一個人重新開始1到M的報數,如此進行下一直到所有人都出圈為止,輸出報數順序。(其中該題目為選做題)
13、對姓氏進行排名
Char str[ ]=”zhang wang li zhao”
Char str_ new[ ]=”li wang zhang zhao”
接口:
14、將一組整數中為奇數的數提取出來,高低位順序不變。如:8 3 7 9 5 2 1 4-----》3 7 5 1
15、一組2n+1個元素的正整形數組,按升序排序,然后將小於中間數值的成員替換為中間的值。(貌似還有:“位置不變”,不過實在不理解其含義,看了例子就不用關心它的意思了),例如:1,2,3,4,5,輸出為:3,3,3,4,5,原型:int fun(int arry[],int n,char*output){return 0;}
16、輸入一個四位的十進制整數,編程實現將這四位整數轉化為十六進制的字符串,並輸出十六進制的字符串(注意負數的處理)
17、輸入:一個四位的整數,比如:2367,輸出:2+3+6+7=18
以下是題目的參考答案:
1、比較字符串,輸出它們第一個不同字母的位置,大小寫不敏感
int str_cmp_diff(const char *str1,const char *str2)
{
while(str1[i] != '\0' && str2[i] != '\0')
{
if((str1[i] | 0x20) != (str2[i] | 0x20))
return i + 1;
i++;
}
if(str1[i] != str2[i]) return i + 1;
return 0;
}
2、判斷一個數是不是回文數,數字 1234321。
int isrevert(int data)
{
data-->temp
if(data == temp)
return 1;
return 0;
}
3、比較兩字符串長短,並返回結果。
int str_cmp_len(const char *str1,const char *str2)
{
len1 =
len2 =
return (len1 - len2);
}
4、給一個字符串,編程取其中一個特定的字符並輸出。
int find_ch(const char *str,char ch)
{
while(str[i] != '\0')
{
if(str[i] == ch) return i;
i = i + 1;
}
return -1;
}
char *find_ch(const char *str,char ch)
{
}
5、是比較兩個英文字符串的不相同的字符的位置(忽略字母大小寫)
int find_diff(const char *str1,const char *str2,int array[])
{
j = 0;
while(str1[i] != '\0' && str2[i] != '\0')
{
if(str1[i] != str2[i])
{
array[j] = i;
j++;
}
i = i + 1;
}
return j;
}
6、主函數調用一函數
如:檢索出字符串中出現次數最多的那個字符,不考慮大小寫,然后返回該字符。
char find_max(const char *str)
{
max = 0;
ch = str[0];
while(str[i] != '\0')
{
if(isupper(str[i])
{
i = i + 1;
continue;
}
統計str[i]個數
j = i;
ct = 0;
while(str[j] != '\0')
if(str[i] == str[j]) {ct++;j++;}
比較記錄個數最多的字符
if(max < ct) {max = ct;ch = str[i]};
}
return 字符
}
7、查找字符串中出現次數最多的字符,並返回該字符,只考慮小寫字母,不考慮不同字母出現次數一樣多的情況
8、輸入一個整數n,計算不大於n的數中和7相關的數的個數,包括能被7整出的數和含有字符7的數。
int count_sever(int data)
{
i = 7;
while(i < n)
{
i是否和7相關
i = i + 1;
}
}
9、輸入一個整數將每一位上的奇數放在一個新整數中,高位放在高位,地位在低位。
int fun(int data)
{
temp = 0
bit = 0;
while(data > 0)
{
bit = data % 10;
if(bit % 2 != 0)
temp = temp * 10 + bit;
data = data / 10
}
while(temp > 0)
{
bit = temp % 10;
tep = tem * 10 + bit;
temp = temp / 10
}
return tep;
}
12345--->135
int fun(int data)
{
temp = 0
bit = 0;
n = 1;
while(data > 0)
{
bit = data % 10;
if(bit % 2 != 0)
{
temp = temp + bit*n
n = n * 10;
}
data = data / 10
}
}
10、輸入一串數,將其最小的放在第一位,次小的放在最后一位,再小的放在第二位,再再小的放在倒數第二位,以此類推。
void sort(int array[],int count)
{
循環count/2
每一次尋找兩個數
}
11、寫一個函數,傳入參數為應付錢數。返回值為買家最少付出的錢的張數int get MoneyNum(int iInputMoney)例如:買家應付351元,最少張數為5.備注:可支付的錢幣只有100、50、10、5、1不考慮2、20以及小數部分。
int get MoneyNum(int iInputMoney)
{
int ct1 = 0,ct2 = 0,ct3 = 0,ct4 = 0,ct5 = 0;
int money = 0;
ct1 = iInputMoney / 100;
money = iInputMoney % 100;
ct2 = money / 50
money = money % 50;
ct3 = money / 10;
money = money % 10;
ct4 = money / 5
return ct1 + ct2 +...
}
選做題:
12、設有幾個人圍坐在一圈並按順時針方向從1到幾編號,從第S個人開始進行1到m的報數。報數到第M個人,此人出圈。再從他的下一個人重新開始1到M的報數,如此進行下一直到所有人都出圈為止,輸出報數順序。
13、對姓氏進行排名
Char str[ ]=”zhang wang li zhao”
Char str_ new[ ]=”li wang zhang zhao”
接口:
void sort(const char *str,int len,char *str_new)
{
char **strs = (char **)malloc(sizeof(char *) * len);
memset()
for(int i = 0;i < len;i++)
{
strs[i] = (char *)malloc(sizeof(char) * N)
memset()
}
while(str[i] != '\0')
{
while(str[i]是字符)str[i]-->strs[j][k]
while(str[i]不是字符)
}
排序
for(i = 0;i < len;i++)
{
strncpy
str_new[] = ' '
}
}
14、將一組整數中為奇數的數提取出來,高低位順序不變。如:8 3 7 9 5 2 1 4-----》3 7 5 1
int find_data(int array[],int count,int dest[])
{
}
15、一組2n+1個元素的正整形數組,按升序排序,然后將小於中間數值的成員替換為中間的值。(貌似還有:“位置不變”,不過實在不理解其含義,看了例子就不用關心它的意思了),例如:1,2,3,4,5,輸出為:3,3,3,4,5,原型:
int fun(int arry[],int n,char*output)
{
if(array == NULL || output == NULL) return -1;
return 0;
}
16、輸入一個四位的十進制整數,編程實現將這四位整數轉化為十六進制的字符串,並輸出十六進制的字符串(注意負數的處理)
char *int_to_hex(int data,char *str)
{
if(data < 0)
data = ~(-1 * data) + 1
while(data > 0)
{
bit = data % 16;
if(bit < 10)
str[i] = bit + '0'
else
str[i] = bit - 10 + 'a'
data = data / 16;
}
str逆序
return str;
}
17、輸入:一個四位的整數,比如:2367,輸出:2+3+6+7=18