C語言作為嵌入式Linux開發的必備工具,作為嵌入式Linux開發的基礎語言,那麼在面試嵌入式工程師時C語言定是面試中的重中之重 。作為一名大三的老學長,不得不為找工作做必要準備。每天做一道C語言面試題,為面試打基礎。
題目描述
輸入一個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。
輸入描述:
輸入一個整數(int型別)
輸出描述:
這個數轉換成2進位制後,輸出1的個數
範例1
輸入
5
輸出
2
題目解析:
一般的思路可能是先將這個整數轉換為二進位制數,將轉換後的每一位存放在陣列中,然後通過這個陣列統計1的個數。其實這是下下策,耗費記憶體同時遍歷陣列也消耗時間。那麼我們可以換一種思路,通過位運算來實現統計1的個數,可以大大提高效率。
#include <stdio.h>
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
int main()
{
int data;
scanf("%d",&data);
printf("%d", func(data));
}
題目描述:
輸入一個整數,將這個整數以字串的形式逆序輸出
程式不考慮負數的情況,若數位含有0,則逆序形式也含有0,如輸入為100,則輸出為001
輸入描述:
輸入一個int整數
輸出描述:
將這個整數以字串的形式逆序輸出
範例1:
輸入
1516000
輸出
0006151
題目解析:
一開始拿到題目的思路是通過sprintf函數將整數轉換成字串並存放在陣列str1中,然後通過迴圈來實現交換。但是實際測試時發現只能通過50%,具體什麼原因我也不知道。
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,size;
char str1[100],temp;
scanf("%d",&n);
sprintf(str1,"%d",n);
size=strlen(str1);
for(i=0;i<=(size/2);i++){
temp=str1[i];
str1[i]=str1[size-i-1];
str1[size-i-1]=temp;
}
printf("%s\n",str1);
}
去問了一下群友,才發現太馬虎大意了,這個程式對於只有奇數個字元時並沒有影響,但是對於偶數個字元時就會出錯,原因就是在迴圈結束的判斷條件應該是小於而不是小於等於。
不過換一種思路就很簡單,通過對整個整數求餘數得出最低位然後輸出不妨為一個很好的方法,10行程式碼就能夠搞定。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(;n>0;){
printf("%d",n%10);
n=n/10;
}
}
題目描述:
將一個字串str的內容顛倒過來,並輸出。str的長度不超過100個字元。 如:輸入「I am a student」,輸出「tneduts a ma I」。
輸入引數:
inputString:輸入的字串
返回值:
輸出轉換好的逆序字串
輸入描述:
輸入一個字串,可以有空格
輸出描述:
輸出逆序的字串
範例1
輸入
複製
I am a student
輸出
複製
tneduts a ma I
題目解析:
#include<stdio.h>
#include<string.h>
int main()
{
int i,size;
char str1[100],temp;
gets(str1);
size=strlen(str1);
for(i=0;i<(size/2);i++){
temp=str1[i];
str1[i]=str1[size-i-1];
str1[size-i-1]=temp;
}
printf("%s\n",str1);
}
題目描述
公元前五世紀,我國古代數學家張丘建在《算經》一書中提出了「百雞問題」:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
輸入描述:
輸入任何一個整數,即可執行程式。
範例1
輸入
1
輸出
0 25 75
4 18 78
8 11 81
12 4 84
題目解析:
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,n;
while(scanf("%d",&n)!=EOF)
{
for(a=0;a<20;a++)
{
for(b=0;b<34;b++)
{
if(((a*5+b*3+(100-a-b)/3)==100)&&(100-a-b)%3==0)
printf("%d %d %d\n",a,b,100-a-b);
}
}
}
}
題目描述:
功能:等差數列 2,5,8,11,14。。。。
輸入描述:
輸入一個正整數。
輸出描述:
輸出一個相加後的整數。
範例1
輸入
2
輸出
7
題目解析:
#include<stdio.h>
int main()
{
int a0,q,n,sum;
a0=2;
q=3;
while(scanf("%d",&n)!=EOF)
{
sum=n*a0+(n*(n-1)*q/2);
printf("%d\n",sum);
}
}
題目描述:
寫出一個程式,接受一個字串,然後輸出該字串反轉後的字串。(字串長度不超過1000)
輸入描述:
輸入N個字元
輸出描述:
輸出該字串反轉後的字串
範例:
輸入:abcd
輸出:dcba
題目解析:
看到題目後,這應該是一個C語言中比較基礎的題目了。常規的方法就是將一個字串給分成兩半,對稱位置進行交換,然後再正序輸出。題目只是讓逆序輸出字串,並沒有規定方法那麼我們在輸出時直接通過for迴圈逆序輸出不就可以了嘛!那麼程式碼就可以簡化為下面的了嘛!
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
scanf("%s",str);
int len=strlen(str);
for(int i=len-1;i>=0;i--)
{
printf("%c",str[i]);
}
return 0;
}
題目描述:
正整數A和正整數B 的最小公倍數是指 能被A和B整除的最小的正整數值,設計一個演演算法,求輸入A和B的最小公倍數。
輸入描述:
輸入兩個正整數A和B。
輸出描述:
輸出A和B的最小公倍數。
題目解析:
本題目是求最小公倍數,而最小公倍數等於兩個數相乘除以兩個數的最大公約數。實際上就轉換為了求最大公約數的問題了,我們可以通過輾轉相除法來求最大公約數。
#include "stdio.h"
t gcd(int a, int b)//輾轉相除法求最大公約數
{
while(a%b){
int tmp=a;
a=b;
b=tmp%b;
}
return b;
}
int main()
{
int a, b;
scanf("%d %d",&a,&b);
printf("%d",a*b/gcd(a,b));
return 0;
}
不積小流無以成江河,不積跬步無以至千里。而我想要成為萬里羊,就必須堅持學習來獲取更多知識,用知識來改變命運,用部落格見證成長,用行動證明我在努力。
如果我的部落格對你有幫助、如果你喜歡我的部落格內容,記得「點贊」 「評論」 「收藏」一鍵三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我部落格看看。