日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言面试题汇总

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言面试题汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1.?? 閱讀下面程序并寫出輸出結果(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],執行結果是25 &a+1不是首地址+1系統會認為加一個a數組的偏移是偏移了一個數組的大小本例是5個int int *ptr=(int *)(&a+1); 則ptr實際是&(a[5]),也就是a+5 原因如下 &a是數組指針其類型為 int (*)[5]; 而指針加1要根據指針類型加上一定的值 不同類型的指針+1之后增加的大小不同 a是長度為5的int數組指針所以要加 5*sizeof(int)

所以ptr實際是a[5]

但是prt與(&a+1)類型是不一樣的(這點很重要) 所以prt-1只會減去sizeof(int*) a,&a的地址是一樣的但意思不一樣a是數組首地址也就是a[0]的地址&a是對象數組首地址a+1是數組下一元素的地址即a[1],&a+1是下一個對象的地址即a[5].

2.?? 用預處理指令#define聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)(5分)。

答:#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL?

考點:?
1). #define
語法的基本知識(例如:不能以分號結束,括號的使用,等等)?
2).
懂得預處理器將為你計算常數表達式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。?
3).
意識到這個表達式將使一個16位機的整型數溢出-因此要用到長整型符號L,告訴編譯器這個常數是的長整型數。?
4).
表達式中用到UL(表示無符號長整型)

3.?? 寫一個"標準"宏MIN ,這個宏輸入兩個參數并返回較小的一個(5分)。

答:#define MIN(A,B)((A)<= (B) ?(A): (B))?

這個測試是為下面的目的而設的:?
1).
標識#define在宏中應用的基本知識。這是很重要的,因為直到嵌入(inline)操作符變為標準C的一部分,宏是方便產生嵌入代碼的唯一方法,對于嵌入式系統來說,為了能達到要求的性能,嵌入代碼經常是必須的方法。?
2).
三重條件操作符的知識。這個操作符存在C語言中的原因是它使得編譯器能產生比if-then-else更優化的代碼,了解這個用法是很重要的。?
3).
懂得在宏中小心地把參數用括號括起來?

4.?? static 關鍵字的作用(10分)。

答:(1)static作用于局部變量,使得局部變量變成局部靜態變量,改變了變量的生存期;(2)static作用于全局變量,使其變成靜態全局變量,改變變量的作用域,使得其不可擴展聲明到別的文件中,只能在本文件中調用;(3)static作用于外部函數,使其成為靜態函數,使得函數不能擴展聲明到別的文件中,只得在本文件中調用。

5.?? 隊列和棧有什么區別(10分)?

答:隊列先進先出;棧先進后出。

6.?? 下面四個用const修飾指針有什么區別(10分)?

constint* p;

int const* p;

int* const p;

const int* const p;

答:前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。

7.?? 簡述內存分區情況,說明各分區存放的什么樣的數據(10分)。

答:代碼區:存放函數二進制代碼;

數據區:存放全局變量、靜態變量、常量等;

堆區:程序員手動申請的;

棧區:局部變量、函數形參。

8.?? #include<filename>和#include”filename”有什么區別(10分)?

答:#include<filename>直接在庫文件目錄中搜索所包含的文件;#include”filename”先在當前目錄下搜索所包含的文件。如果沒有的話,再到庫文件目錄搜索。

9.?? 數組和鏈表的區別 (10分)。

答:數組:數據順序存儲,固定大小
連表:數據可以隨機存儲,大小可動態改變

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.? 寫一個函數,交換兩個整數,至少使用兩種方法(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、編寫程序,實現以下功能。

用戶輸入12個數,存儲到一個3行4列的數組中,然后找到其中的最大值和最小值,并且將其所在的行號和列號輸出來

參考代碼:

#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.? 編寫程序,實現以下功能。

定義一個結構體,存儲學生的信息,其中包括:學號,姓名,性別。開始時只有3個學生的信息,學號分別是1,2,3,姓名和性別自定。后來用戶在第2個位置插入一個新生:學號4,姓名柳柳,性別女。然后顯示插入后的全部學生信息。再后來,學號是2的學生轉到其他班級了,所以要刪掉,最后再顯示刪除后的全部學生信息。

參考代碼:

#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("學號:%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("學號:%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("沒有學號是2的學生!\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("學號:%d\n",stu[i].no);

?printf("姓名:%s\n",stu[i].name);

?printf("性別:%c\n",stu[i].sex);

?}

return 0;

?}

14.? 編寫程序實現以下功能。

用戶輸入一個字符串,長度不超過100,寫一個函數將其加密。加密方法為:當內容是英文字母時,用它在26字母中的后三個字母代替該字母,如:用d代替a,用a代替x,也就是循環代替。若為其它字符時不變。加密用1個函數,解密用一個函數(提醒,輸入字符串、輸出字符串都使用數組)

參考代碼:

#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.? 編寫一個程序,從鍵盤上接收一個整數,并且從1-100之間找到能被它整除的整數,輸出這些數以及這些數的個數。

參考代碼:

#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("個數:%d\n",count);

return 0;

?}

16.從鍵盤上接收一個字符,判斷它到底是哪種字符:數字,小寫字母,大寫字母,其他字符

#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("數字\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("請輸入需分級的分數。\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("輸入的數據非法。\n");

??? getchar();

??? getchar();

??? return 0;

}

方法二

#include "stdafx.h"

int main(void)

{?

??? int dSc;

??? int nStep;

??? printf("請輸入需分級的分數。\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的程序,分別應用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構成的死循環語句。

(2)寫出while和do while的區別。

(1)

for(;;){}

while(1){}

do{}while(1);

(2)

do? while是先執行再判斷,至少執行一次。

While先判斷,再執行。

?

19.????(1)使用for循環輸出1到50之間能被3整除的數

(2)使用for循環計算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.???設有定義: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);的輸出結果是

?? A)隨機值?? ?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);

}

?? 程序運行后的輸出結果是

?? A) 8,7,8,7??????? B) 7,8,7,8

C) 8,7,7,8? ???D)7,8,8,7

24.????設有定義:int a,*pa=&a;以下scanf語句中能正確為變量a讀入數據的是

A) scanf(“%d”,pa) ;??????B) scanf(“%d”,a) ;

C) scanf(“%d”,&pa) ;????? D) scanf(“%d”,*pa) ;

25.????設有定義:int n=0,*p=&n,**q=&p;則以下選項中,正確的賦值語句是

?? 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);

}

程序運行后的輸出結果是

A) AbB) aaC) Aa?????? D) Bb

27.??? 若程序中已包含頭文件stdio.h, 以下選項中,正確運用指針變量的程序段是

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); }

程序運行后的輸出結果是

A) 0?????B) 1?????C) -1???? D) NULL沒定義,出錯

?

?

?

?

轉載于:https://www.cnblogs.com/jiangu66/p/3184516.html

總結

以上是生活随笔為你收集整理的C语言面试题汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。