C语言面试题汇总
1.?? 閱讀下面程序并寫出輸出結(jié)果(10分)。
main()
{?int a[5]={1,2,3,4,5};?
int *ptr=(int *)(&a+1);??
printf("%d,%d",*(a+1),*(ptr-1));
}
答:2,5
*(a+1就是a[1]*(ptr-1)就是a[4],執(zhí)行結(jié)果是25 &a+1不是首地址+1系統(tǒng)會認(rèn)為加一個a數(shù)組的偏移是偏移了一個數(shù)組的大小本例是5個int int *ptr=(int *)(&a+1); 則ptr實(shí)際是&(a[5]),也就是a+5 原因如下 &a是數(shù)組指針其類型為 int (*)[5]; 而指針加1要根據(jù)指針類型加上一定的值 不同類型的指針+1之后增加的大小不同 a是長度為5的int數(shù)組指針所以要加 5*sizeof(int)
所以ptr實(shí)際是a[5]
但是prt與(&a+1)類型是不一樣的(這點(diǎn)很重要) 所以prt-1只會減去sizeof(int*) a,&a的地址是一樣的但意思不一樣a是數(shù)組首地址也就是a[0]的地址&a是對象數(shù)組首地址a+1是數(shù)組下一元素的地址即a[1],&a+1是下一個對象的地址即a[5].
2.?? 用預(yù)處理指令#define聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)(5分)。
答:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL?
考點(diǎn):?
1). #define 語法的基本知識(例如:不能以分號結(jié)束,括號的使用,等等)?
2). 懂得預(yù)處理器將為你計(jì)算常數(shù)表達(dá)式的值,因此,直接寫出你是如何計(jì)算一年中有多少秒而不是計(jì)算出實(shí)際的值,是更清晰而沒有代價的。?
3). 意識到這個表達(dá)式將使一個16位機(jī)的整型數(shù)溢出-因此要用到長整型符號L,告訴編譯器這個常數(shù)是的長整型數(shù)。?
4).表達(dá)式中用到UL(表示無符號長整型)
3.?? 寫一個"標(biāo)準(zhǔn)"宏MIN ,這個宏輸入兩個參數(shù)并返回較小的一個(5分)。
答:#define MIN(A,B)((A)<= (B) ?(A): (B))?
這個測試是為下面的目的而設(shè)的:?
1). 標(biāo)識#define在宏中應(yīng)用的基本知識。這是很重要的,因?yàn)橹钡角度?/span>(inline)操作符變?yōu)闃?biāo)準(zhǔn)C的一部分,宏是方便產(chǎn)生嵌入代碼的唯一方法,對于嵌入式系統(tǒng)來說,為了能達(dá)到要求的性能,嵌入代碼經(jīng)常是必須的方法。?
2). 三重條件操作符的知識。這個操作符存在C語言中的原因是它使得編譯器能產(chǎn)生比if-then-else更優(yōu)化的代碼,了解這個用法是很重要的。?
3). 懂得在宏中小心地把參數(shù)用括號括起來?
4.?? static 關(guān)鍵字的作用(10分)。
答:(1)static作用于局部變量,使得局部變量變成局部靜態(tài)變量,改變了變量的生存期;(2)static作用于全局變量,使其變成靜態(tài)全局變量,改變變量的作用域,使得其不可擴(kuò)展聲明到別的文件中,只能在本文件中調(diào)用;(3)static作用于外部函數(shù),使其成為靜態(tài)函數(shù),使得函數(shù)不能擴(kuò)展聲明到別的文件中,只得在本文件中調(diào)用。
5.?? 隊(duì)列和棧有什么區(qū)別(10分)?
答:隊(duì)列先進(jìn)先出;棧先進(jìn)后出。
6.?? 下面四個用const修飾指針有什么區(qū)別(10分)?
constint* p;
int const* p;
int* const p;
const int* const p;
答:前兩個的作用是一樣,a是一個常整型數(shù)。第三個意味著a是一個指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個意思a是一個指向整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是不可修改的,同時指針也是不可修改的)。
7.?? 簡述內(nèi)存分區(qū)情況,說明各分區(qū)存放的什么樣的數(shù)據(jù)(10分)。
答:代碼區(qū):存放函數(shù)二進(jìn)制代碼;
數(shù)據(jù)區(qū):存放全局變量、靜態(tài)變量、常量等;
堆區(qū):程序員手動申請的;
棧區(qū):局部變量、函數(shù)形參。
8.?? #include<filename>和#include”filename”有什么區(qū)別(10分)?
答:#include<filename>直接在庫文件目錄中搜索所包含的文件;#include”filename”先在當(dāng)前目錄下搜索所包含的文件。如果沒有的話,再到庫文件目錄搜索。
9.?? 數(shù)組和鏈表的區(qū)別 (10分)。
答:數(shù)組:數(shù)據(jù)順序存儲,固定大小
連表:數(shù)據(jù)可以隨機(jī)存儲,大小可動態(tài)改變
10.? 冒泡排序(10分)。
答:void?BubbleSort(int?arr[],?int?n)
{
?????int?i = 0, j=0;?????
?????for(i = 0; i < n; i++)
???????for(j = 0; j < n - 1 - i; j++)
?????? {
?????????????if(arr[j]> arr[j + 1])
???????????? {
??????????????????????arr[j] = arr[j] ^ arr[j+1];
??????????????????????arr[j+1] = arr[j] ^ arr[j+1];
??????????????????????arr[j] = arr[j] ^ arr[j+1];
????????????}?????????????
?????? }?????
}
11.? 寫一個函數(shù),交換兩個整數(shù),至少使用兩種方法(10分)。
答:void Swap(int* _x,int* _y)
{
int nTmp = *_x;
*_x = *_y;
*_y = nTmp;
}
void Swap(int* _x,int* _y)
{
*_x = *_x ^ *_y;
*_y = *_x ^ *_y;
*_x = *_x ^ *_y;
}
T96每周一測(10.15)
C語言1—6章
12.? 1、編寫程序,實(shí)現(xiàn)以下功能。
用戶輸入12個數(shù),存儲到一個3行4列的數(shù)組中,然后找到其中的最大值和最小值,并且將其所在的行號和列號輸出來
參考代碼:
#include<stdio.h>
intmain()
?{
int array[3][4];
int i,j;
int max,min,maxI,maxJ,minI,minJ;
printf("input 12 numbers!\n");
for(i=0;i<3;i++)
?{
for(j=0;j<4;j++)
scanf("%d",&array[i][j]);
?}
max=array[0][0];
maxI=0;
maxJ=0;
min=array[0][0];
minI=0;
minJ=0;
for(i=0;i<3;i++)
?{
for(j=0;j<4;j++)
?{
??? if(array[i][j]>max)
??? {
??????? max=array[i][j];
maxI=i;
maxJ=j;
??? }
if(array[i][j]<min)
{
min=array[i][j];
minI=i;
minJ=j;
?}
?}
?}
?printf("最大值:%d,i:%d,j:%d\n",max,maxI,maxJ);
?printf("最小值:%d,i:%d,j:%d\n",min,minI,minJ);
return 0;
?}
?
13.? 編寫程序,實(shí)現(xiàn)以下功能。
定義一個結(jié)構(gòu)體,存儲學(xué)生的信息,其中包括:學(xué)號,姓名,性別。開始時只有3個學(xué)生的信息,學(xué)號分別是1,2,3,姓名和性別自定。后來用戶在第2個位置插入一個新生:學(xué)號4,姓名柳柳,性別女。然后顯示插入后的全部學(xué)生信息。再后來,學(xué)號是2的學(xué)生轉(zhuǎn)到其他班級了,所以要刪掉,最后再顯示刪除后的全部學(xué)生信息。
參考代碼:
#include<stdio.h>
struct Student
?{
int no;
charname[20];
charsex;
}stu[10];
int length=3;
int main()
?{
int i,j;
for(i=0;i<length;i++)
?{
stu[i].no=i+1;
printf("inputthe no.%d student's name!\n",i+1);
scanf("%s",stu[i].name);
printf("inputthe no.%d student's sex!\n",i+1);
getchar();
scanf("%c",&stu[i].sex);
?}
for(i=0;i<length;i++)
?{
printf("theinfo of no.%d student!\n",i+1);
?printf("學(xué)號:%d\n",stu[i].no);
?printf("姓名:%s\n",stu[i].name);
?printf("性別:%c\n",stu[i].sex);
?}
?//插入
for(i=2;i<length;i++)
?{
stu[i+1]=stu[i];
?}
stu[2].no=4;
stu[2].sex='n';
strcpy(stu[2].name,"liuliu");
length++;
for(i=0;i<length;i++)
?{
printf("theinfo of no.%d student!\n",i+1);
?printf("學(xué)號:%d\n",stu[i].no);
?printf("姓名:%s\n",stu[i].name);
?printf("性別:%c\n",stu[i].sex);
?}
??? //刪除
for(i=0;i<length;i++)
?{
if(stu[i].no==2)
break;
?}
if(i==length)
?{
?printf("沒有學(xué)號是2的學(xué)生!\n");
exit(1);
?}
else
?{
for(j=i+1;j<length;j++)
?{
??? stu[j-1]=stu[j];
?}
length--;
?}
for(i=0;i<length;i++)
?{
printf("theinfo of no.%d student!\n",i+1);
?printf("學(xué)號:%d\n",stu[i].no);
?printf("姓名:%s\n",stu[i].name);
?printf("性別:%c\n",stu[i].sex);
?}
return 0;
?}
14.? 編寫程序?qū)崿F(xiàn)以下功能。
用戶輸入一個字符串,長度不超過100,寫一個函數(shù)將其加密。加密方法為:當(dāng)內(nèi)容是英文字母時,用它在26字母中的后三個字母代替該字母,如:用d代替a,用a代替x,也就是循環(huán)代替。若為其它字符時不變。加密用1個函數(shù),解密用一個函數(shù)(提醒,輸入字符串、輸出字符串都使用數(shù)組)
參考代碼:
#include<stdio.h>
?#include<string.h>
voidencryption(char str[],int length)
?{
int i;
for(i=0;i<length;i++)
?{
if((str[i]>='a'&&str[i]<='w')||(str[i]>='A'&&str[i]<='W'))
str[i]+=3;
elseif((str[i]>='x'&&str[i]<='z')||(str[i]>='X'&&str[i]<='Z'))
str[i]-=23;
?}
printf("result:%s\n",str);
?}
voiddecryption(char str[],int length)
?{
int i;
for(i=0;i<length;i++)
?{
if((str[i]>='d'&&str[i]<='z')||(str[i]>='D'&&str[i]<='Z'))
str[i]-=3;
elseif((str[i]>='a'&&str[i]<='c')||(str[i]>='A'&&str[i]<='C'))
str[i]+=23;
?}
printf("result:%s\n",str);
?}
intmain()
?{
char str[101];
int i,length;
printf("input a string!\n");
scanf("%s",str);
length=strlen(str);
encryption(str,length);
decryption(str,length);
return 0;
?}
15.? 編寫一個程序,從鍵盤上接收一個整數(shù),并且從1-100之間找到能被它整除的整數(shù),輸出這些數(shù)以及這些數(shù)的個數(shù)。
參考代碼:
#include<stdio.h>
intmain()
?{
int num,i,count=0;
printf("input a number!");
scanf("%d",&num);
for(i=1;i<=100;i++)
?{
if(i%num==0)
?{
printf("%d\n",i);
count++;
?}
?}
?printf("個數(shù):%d\n",count);
return 0;
?}
16.從鍵盤上接收一個字符,判斷它到底是哪種字符:數(shù)字,小寫字母,大寫字母,其他字符
#include "stdafx.h"
#include<stdio.h>
#include "stdafx.h"
#define PI 3.14
int main(void)
{
char ch_t;
??? printf("請輸入一個字符\n");
??? ch_t = getchar();
??? if(ch_t <='9' &&ch_t >='0')???
??????? printf("數(shù)字\n");
??? else if(ch_t<='Z'&& ch_t>='A')
??????? printf("大寫字母\n");
??? elseif(ch_t>='a'&& ch_t<='z')
??????? printf("小寫字母\n");
??? else
??????? printf("其他字符\n");
??? getchar();
??? getchar();
??? return 0;
}
?
16.????給出一百分制成績,要求從鍵盤輸入成績后,輸出成績等級‘A’、‘B’、‘C’、‘D’、'E'。90分以上為‘A’,80—89分為‘B’,70—79分為‘C’,60—69分為‘D’,60分一下為'E'。
#include "stdafx.h"
#include<conio.h>
?
int _tmain(int argc, _TCHAR* argv[])
{
???
#include "stdafx.h"
int main(void)
{?
??? int dSc;
printf("請輸入需分級的分?jǐn)?shù)。\n");
scanf("%d",&dSc);
?
if(dSc<=100)
{
if (dSc>=90)
??? ?? printf("成績%d分級為A",dSc);
else if(dSc>=80)
??? ?? printf("成績%d分級為B",dSc);
else if(dSc>=70)
??? ?? printf("成績%d分級為C",dSc);
else if(dSc>=60)
??? ?? printf("成績%d分級為D",dSc);
else if(dSc<60)
??? ?? printf("成績%d分級為E",dSc);
}
else
?????? printf("輸入的數(shù)據(jù)非法。\n");
??? getchar();
??? getchar();
??? return 0;
}
方法二
#include "stdafx.h"
int main(void)
{?
??? int dSc;
??? int nStep;
??? printf("請輸入需分級的分?jǐn)?shù)。\n");
scanf("%d",&dSc);
??? nStep=dSc/10;
switch(nStep)
? {
case 10: printf("成績%d分級為A",dSc);
??? break;
case 9: printf("成績%d分級為A",dSc);
??? break;
case 8: printf("成績%d分級為B",dSc);
??? break;
case 7: printf("成績%d分級為C",dSc);
??? break;
case 6: printf("成績%d分級為D",dSc);
??? break;
default: printf("成績%d分級為E。\n",dSc);
}
??? getchar();
??? getchar();
??? return 0;
}
?
17.????寫出1一直加到100的程序,分別應(yīng)用for,while和do while語句
#include "stdafx.h"
int main(void)
{?
int na=1;
int sun=0;
while(na>=100){
sum+=sum+na;
na++;
}
printf(“%d”,sum);
return 0;
}
?
#include "stdafx.h"
int main(void)
{?
int na=1;
int sun=0;
do{
sum+=sum+na;
na++;
}while(na>=100);
printf(“%d”,sum);
return 0;
}
#include "stdafx.h"
int main(void)
{?
int na=1;
int sun=0;
for(na=1;na<=100;na++){
sum+=sum+na;
}
printf(“%d”,sum);
return 0;
}
?
18.????(1)寫出for,while和do while構(gòu)成的死循環(huán)語句。
(2)寫出while和do while的區(qū)別。
(1)
for(;;){}
while(1){}
do{}while(1);
(2)
do? while是先執(zhí)行再判斷,至少執(zhí)行一次。
While先判斷,再執(zhí)行。
?
19.????(1)使用for循環(huán)輸出1到50之間能被3整除的數(shù)
(2)使用for循環(huán)計(jì)算1到50之間的和,判斷如果和大于344時推出程序,并打印出此時的和。
#include "stdafx.h"
int main(void)
{???
int na=1;
int sun=0;
for(na=1;na<50;na++){
if(na%3==0){
printf(“%d”,na);
}
}
return 0;
}
?(2)
#include "stdafx.h"
int main(void)
{???
int na=1;
int sun=0;
for(na=1;na<50;na++){
sum+=sum+na;
if(sum>344){
printf(“%d”,na);
break;
}
}
return 0;
}
20.???設(shè)有定義:int n1=0 ,n2 , *p=&n2,?*q=&n1;,以下賦值語句中與n2=n1;語句等價的是
A)*p=*q;???B)p=q;
?????? C)*p=&n1;?? D)p=*q;
21.????若有定義:int x=0, *p=&x;,則語句printf("%d\n",*p);的輸出結(jié)果是
?? A)隨機(jī)值?? ?B)0
?? C)x的地址?? D)p的地址
22.????以下定義語句中正確的是
? A) chara='A'b='B';?????? B) float a=b=10.0;
? C) int a=10,*b=&a; ??????D) float *a,b=&a;
23.????有以下程序
main()
{ ? inta=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=p; p=q;q=r;
printf("%d,%d,%d,%d\n",*p,*q,a,b);
}
?? 程序運(yùn)行后的輸出結(jié)果是
?? A) 8,7,8,7??????? B) 7,8,7,8
C) 8,7,7,8? ???D)7,8,8,7
24.????設(shè)有定義:int a,*pa=&a;以下scanf語句中能正確為變量a讀入數(shù)據(jù)的是
A) scanf(“%d”,pa) ;??????B) scanf(“%d”,a) ;
C) scanf(“%d”,&pa) ;????? D) scanf(“%d”,*pa) ;
25.????設(shè)有定義:int n=0,*p=&n,**q=&p;則以下選項(xiàng)中,正確的賦值語句是
?? A) p=1;??????B) *q=2;????? C) q=p;???? ??D) *p=5;
26.???? 有以下程序片段:
void fun(char *a, char *b)
{ a=b; (*a)++; }
main ()
{ char c1="A", c2="a",*p1, *p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf(“&c&c\n”,c1,c2);
}
程序運(yùn)行后的輸出結(jié)果是
A) AbB) aaC) Aa?????? D) Bb
27.??? 若程序中已包含頭文件stdio.h, 以下選項(xiàng)中,正確運(yùn)用指針變量的程序段是
A)int?*i=NULL;????????????????? B)float? *f=NULL;
???? scanf("%d",i);????????????????????????? *f=10.5;
??? C) char?t=’m’, *c=&t;????? ?D) long??*L;
??? *c=&t;????????????????????????? L=‘\0’;
28.????有以下程序片段:
#inc1ude
main()
{ printf("%d\n", NULL); }
程序運(yùn)行后的輸出結(jié)果是
A) 0?????B) 1?????C) -1???? D) NULL沒定義,出錯
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3184516.html
總結(jié)
- 上一篇: JSP response request
- 下一篇: cocos2d-x 消类游戏,类似Dia