所在位置:大風車考試網(wǎng) > 招聘筆試題 > 正文

經(jīng)典c語言筆試題和面試題答案

大風車考試網(wǎng)

  編程區(qū):《《《《冒泡排序,二分查找,篩選法,的考察》》》》

  100、

  有兩個磁盤文件A和B,各存放一行字母,要求把這兩個文件中的信息合并(按字母順序排列),輸出到一個新文件C中.

  #include

  #include

  int main(int argc,char* argv[])

  {

  FILE* fp;

  int i,j,k,num,NUM;

  char c[50],t,ch;

  if((fp=fopen("A","r"))==NULL)

  /*can be replaced by open

  * int fd=open("A",O_RDONLY|O_CREAT);*/

  {

  printf("fileA cannot be opened\n");

  exit(0);

  }

  printf("\nA contents are:\n");

  for(i=0;(ch=fgetc(fp))!=EOF;i++)/*一個字符一個字符讀*/

  {

  c[i]=ch;

  putchar(c[i]);

  }

  num=i+1;

  fclose(fp);

  if((fp=fopen("B","r"))==NULL)

  {

  printf("fileB cannot be opened\n");

  exit(0);

  }

  printf("\nB contents are :\n");

  for(i=0;(ch=fgetc(fp))!=EOF;i++)

  {

  c[num+i]=ch;

  putchar(c[num+i]);

  }

  fclose(fp);

  NUM=num+i+1;

  for(k=0;k

  {

  for(j=0;j

  {

  if(c[j]>c[j+1])

  {

  t=c[j];

  c[j]=c[j+1];

  c[j+1]=t;

  }

  }

  }

  printf("\nC fileis:\n");

  fp=fopen("C","w");

  for(i=0;i

  {

  putc(c[i],fp);/*將字符一個個寫入文件中*/

  putchar(c[i]);/*一個個輸出字符*/

  }

  fclose(fp);

  return 1;

  }

  86.有一浮點型數(shù)組A,用C語言寫一函數(shù)實現(xiàn)對浮點數(shù)組A進行降序排序,并輸出結果,要求要以數(shù)組A作為函數(shù)的入口.(建議用冒泡排序法)

  #include

  #include

  void BubbleSort(int arr[], int n)

  {

  int i,j;

  int exchange = 1;//交換標志,提高算法效率;

  int temp;

  for(i=0;i

  {

  exchange=0;//本趟排序開始前,交換標志應為假

  for(j=0;j

  {

  if(arr[j+1] > arr[j])

  {

  temp=arr[j+1];

  arr[j+1]=arr[j];

  arr[j]=temp;

  exchange=1; //發(fā)生了交換,故將交換標志置為真

  }

  }

  if(!exchange) //本趟排序未發(fā)生交換,提前終止算法

  return;

  }

  }

  int main(int argc,char* argv[])

  {

  int arr[5]={1,4,2,6,5};

  int i;

  BubbleSort(arr, 5);

  printf("after sort,arr is :\n");

  for(i=0;i<5;i++)

  {

  printf("%3d",arr[i]);

  }

  return 1;

  }

  77.寫出二分查找的代碼:

  Int binary_search(int* arr,int key,int size)

  {

  Intmid;

  Intlow=0;

  Int high=size-1;

  While(low<=high)

  {

  Mid=(low+high)/2;

  If(arr[mid]>key)

  High=mid-1;

  ElseIf(arr[mid]

  Low=mid+1;

  Else

  Return mid;

  }

  Return -1;

  }

  補充1:用帥選法查找100之內的質數(shù)

  #include

  using namespace std;

  #define N 100

  int main()

  {

  /*0~100共101個數(shù)*/

  int sieve[N + 1];

  int i;

  //step 1:初始化(sieve[i] = 0 表示不在篩中,即不是質數(shù);1表示在篩中)

  sieve[0]=sieve[1]=0;

  for(int i = 2; i <= N; i++)

  {

  sieve[i] = 1;

  }

  //step 2:偶數(shù)(2的倍數(shù))肯定不是質數(shù),所以應該先篩除

  for(i = 2; i <= N / 2; i++)

  {

  sieve[i * 2] = 0;

  }

  int p = 2; //第一個質數(shù)是2

  //step 3:從sieve中刪去P的倍數(shù)

  while(p * p <= N)

  {

  p = p + 1; //選下一個p

  while(sieve[p] == 0)

  {

  p++;

  }

  int t = p * p;

  int s = 2 * p;/*質數(shù)與質數(shù)之和包含合數(shù),但質數(shù)于合數(shù)之和必為質數(shù),提高算法效率*/

  while(t <= N)

  {

  sieve[t] = 0; //刪除

  t = t + s;

  }

  }

  //step 4: 輸出結果

  for(i = 2; i <= N; i++)

  {

  if(sieve[i] != 0)

  {

  cout<

  內存復制:

  void* memcpy(void* pvTo, constvoid* pvFrom, size_tsize)

  {

  assert((pvTo!= NULL) &&(pvFrom!= NULL));

  byte* pbTo= pvTo;

  byte* pbFrom= pbFrom;

  while (size--> 0)

  {

  *pbTo++ = *pbFrom++;

  }

  return pvTo;

  }

  注意:內存拷貝時要避免內存空間重疊的問題,(即pvfrom與pvto所指向的內存不能重疊)

  為了防止內存空間重疊,若是目標地址高于源地址,從后往前復制;

  若是源地址高于目標地址,從前往后復制;

  《《《《查找字符串中的子串》》》》

  84、請編寫一個C 函數(shù),該函數(shù)在一個字符串中找到可能的最長的子字符串,該字符串是由同一字符組成的。

  #include

  #include

  #include

  int ChildString(char*p)

  {

  char* q=p;

  int stringlen=0, i=0,j=1,len=0,maxlen=1;

  //stringlen=strlen(p);

  while(*q!='\0') //不能用strlen,求得長stringlen

  {

  stringlen++;

  q++;

  }

  while( i< stringlen)

  {

  if(*(p+i)==*(p+j)&&j< stringlen)

  {

  len++; //統(tǒng)計子串長度

  i++;

  j++;

  }

  else

  {

  if(len>=maxlen) //統(tǒng)計最大子串長度

  {

  maxlen=len+1;

  len=0;

  }

  else

  len=0;

  i++;

  j++;

  }

  }

  return maxlen;

  }

  int main(int argc,char* argv[])

  {

  char arr[11];

  int len;

  printf("please input chararr(10):\n");

  scanf("%s",arr);

  len=ChildString(arr);

  printf("the len of childarr is:%d\n",len);

  return 1;

  }

  99. 計算字符串中子串出現(xiàn)的次數(shù)

  方法1;

  int main(int argc,char* argv[])

  {

  char str1[20],str2[20],*p1,*p2;

  int sum=0;

  printf("pleaseinput two strings\n");

  scanf("%s%s",str1,str2);

  p1=str1;

  p2=str2;

  while(*p1!='\0')

  {

  if(*p1==*p2)

  {

  while((*p1++==*p2++) && *p2!='\0'); /*不斷比較字符串1與2,至字符串2到達‘\0’*/

  }

  else

  p1++; /*如果,字符串2一次匹配已結束,或者 此刻*p1與*p2不等;*/

  if(*p2=='\0') /*如果是字符串2結束,則成功找到一次,sum++*/

  sum++;

  p2=str2; /*p2始終指向str2;*/

  }

  printf("%d",sum);

  return 1;

  }

  方法2:

  #include

  #include

  #include

  //判斷兩字符串是否相等,相等返回1,不等返回0

  int Judge(char *movePt,char *tempPt)

  #if 1

  {

  int ret=0 ;

  while( !(*movePt-*tempPt) && *tempPt)

  {

  movePt++;

  tempPt++;

  }

  if(*tempPt=='\0')

  {

  ret=1;

  }

  return ret;

  }

  #endif

  #if 0

  {

  int i;

  for(i=0; i

  {

  if(*movePt != tempPt[i])

  return 0;

  return 1;

  }

  }

  #endif

  //計算子串出現(xiàn)的次數(shù),str為原字符串,sub為子串

  int StrCount(char *str,char *sub)

  {

  int count = 0;

  char *move = str;

  if( strlen(str) < strlen(sub) )

  {

  return 0;

  }

  else

  {

  while( strlen(move) >= strlen(sub) )

  {

  printf("%s\n",move);

  if(Judge(move,sub))

  {

  count++;

  printf("count++");

  }

  move++;

  }

  }

  return count;

  }

  int main(int argc,char* argv[])

  {

  char arr1[20];

  char arr2[20];

  int num;

  printf("please input two arrs:");

  scanf("%s%s",arr1,arr2);

  num=StrCount(arr1,arr2);

  printf("the num is :%d\n",num);

  return 1;

  }

  90、輸入一行字符,統(tǒng)計其中有多少個單詞。

  int main(int argc,char* argv[])

  {

  char string[81];

  int i,num=0;//word=0;

  char c;

  gets(string); /*不能用scanf,視空格為終結*/

  for(i=0;(c=string[i])!='\0';i++)

  {

  if(c==' ')

  num++;

  }

  num++;

  printf("Thereare %d words in theline\n",num);

  return 1;

  }

  83、請編寫一個C 函數(shù),該函數(shù)在給定的內存區(qū)域搜索給定的字符,并返回該字符所在位置索引值。

  intsearch(char* cpSource, int n, char ch) //起始地址,搜索長度,目標字符

  {

  int i;

  for(i=0; i

  return i;

  }

  《《《《數(shù)字問題,水仙花數(shù),/和%的用法》》》》

  98某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。

  #include

  #include

  int main(int argc,char* argv[])

  {

  int a,i,aa[4],t;

  scanf("%d",&a);

  aa[0]=a%10;

  aa[1]=a%100/10;

  aa[2]=a%1000/100;

  aa[3]=a/1000;

  for(i=0;i<=3;i++)

  {

  aa[i]+=5;

  aa[i]%=10;

  }

  for(i=0;i<=3/2;i++)

  {

  t=aa[i];

  aa[i]=aa[3-i];

  aa[3-i]=t;

  }

  for(i=3;i>=0;i--)

  printf("%d",aa[i]);

  return 1;

  }

  97、809*??=800*??+9*??+1其中??代表的兩位數(shù),8*??的結果為兩位數(shù),9*??的結果為3位數(shù)。求??代表的兩位數(shù),及809*??后的結果。

  output(longb,long i)

  {

  printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i);

  }

  int main()

  {

  long int a,b,i;

  a=809;

  for(i=10;i<100;i++)

  {

  b=i*a+1;

  if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)

  output(b,i);

  }

  }

  92、有1、2、3、4個數(shù)字,能組成多少個互不相同且無重復數(shù)字的三位數(shù)?都是多少?

  #include "stdio.h"

  Int main()

  {

  inti,j,k;

  printf("\n");

  for(i=1;i<5;i++) /*以下為三重循環(huán)*/

  for(j=1;j<5;j++)

  for (k=1;k<5;k++)

  {

  if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/

  printf("%d,%d,%d\n",i,j,k);

  }

  }

  水仙花束問題:

  #include

  int main()

  {

  int i;

  int num=0;

  for(i=100;i<=999;i++)

  {

  int H,T,G,A;

  H =i/100;

  T=i/10%10;

  G =i%10;

  A =H*H*H +T*T*T + G*G*G;

  if(A==i )

  {

  printf("%5d",i);

  num++;

  }

  }

  printf("thenum is %d\n",num);

  return 1;

  }

  《《《《有關位操作的問題》》》》

  93.取一個整數(shù)a從右端開始的4~7位。

  Int main()

  {

  unsigned a,b,c,d;

  scanf("%o",&a); /*scanf("%x",&a);16進制*/

  b=a>>4;

  c=~(~0<<4);// ~的優(yōu)先級大于<<;

  /*~0,11111111->11110000->括號外面00001111,保證低4位為1111*/

  d=b&c;

  printf("%o\n%o\n",a,d);

  }

  運行結果:輸入:1234

  輸出:

  1234

  11(8進制)

  78、請編寫一個C 函數(shù),該函數(shù)給出一個字節(jié)中被置1 的位的個數(shù)。

  #include

  #include

  unsigned char CheckSetBitNum(unsigned char ucNumber)

  {

  unsigned char i;

  unsigned char iResult=0;

  for(i=0;i<8;i++)

  {

  iResult+= (ucNumber>>i) & 0x01; //第i位是1則加1,否則加0,位移動操作不改變原值

  printf("ucNumber>>%d=%d\n",i,ucNumber>>i);

  printf("iResult=%d\n",iResult);

  }

  return iResult;

  }

  int main(int argc,char* argv[])

  {

  unsigned char a;

  int num;

  scanf("%c",&a);

  num=CheckSetBitNum(a);

  printf("%d",num);

  return 1;

  }

  方法2:

  int count(int x)

  {

  int i,y,sum=0;

  for (i=0;i<8;i++)

  {

  y=x%2; /*這是移出去的值*/

  x=x/2; /*對于整數(shù)右移一次后x的值相當于右移前的值除以2*/

  if (y==1) sum+=1;

  }

  return sum;

  }

  int main(int argc,char* argv[])

  {

  int x;

  scanf("%d",&x);

  printf("%d",count(x));

  return 0;

  }

  《《《《字符串與整數(shù)互換》》》》

  79、請編寫一個C 函數(shù),該函數(shù)將給定的一個字符串轉換成整數(shù)。

  int main(int argc,char* argv[])

  {

  char arr[20];

  char* str=arr;

  int num=0;

  int digital;

  printf("please input a string");

  scanf("%s",arr);

  while(*str!='\0')

  {

  digital=*str-48;

  num=num*10+digital;

  str=str+1;

  }

  printf("the result is %d",num);

  return 1;

  }

  字符串倒置

  int main(int argc,char*argv[])

  {

  char* str="hello world";

  char* des=NULL;

  int len=strlen(str);

  des=(char*)malloc(len+1);//結尾封口添0;

  char* d=des;

  char* s=&str[len-1];//指向最后一個字符;

  while(len--!=0)

  *d++=*s--;

  *d='\0';//封口

  printf("%s\n",des);

  free(des);

  return 1;

  《《《《數(shù)組》》》》

  94. 打印出楊輝三角形

  int main()

  {

  int i,j,arr[11][11];

  for(i=1;i<=10;i++)

  for(j=1;j<=i;j++)

  {

  if(j==1||i==j)

  arr[i][j]=1;

  else

  arr[i][j]=arr[i-1][j-1]+arr[i-1][j];

  }

  for(i=1;i<=10;i++)

  for(j=1;j<=i;j++)

  {

  printf("%5d",arr[i][j]);

  if(i==j)

  printf("\n");

  } return 1;

  }

  71.一語句實現(xiàn)x是否為2的若干次冪的判斷。

  void main()

  {

  int a;

  scanf(“%d”,&a); printf(“%c”,(a)&(a-1)?’n’:’y’);

  // 若是打印y,否則n

  *

  2的n次冪用2進制表示一定是10,100,1000,10000......

  對應的i-1就是1,11,111,1111....

  i &(i-1)為false(也就是0)時就是返回true

  **

  程序分析題

  class A

  {

  public:

  A(int a)

  {

  printf("%d ",a);

  }

  };

  A a(1);

  int main(void)

  {

  printf("main ");

  A c(2);

  static A b(3);

  return 0;

  }

  答案:、1 main 2 3

  【函數(shù)體外】

  只能存在聲明語句或定義語句(實際上函數(shù)體外的聲明語句都是定義語句,如果沒有初始化,會隱式的初始化,對于基本類型初始化為零,對于類類型則調用相應的構造函數(shù)),

  不能存在表達式語句,包括函數(shù)調用語句。

  2.

  struct Test

  {

  unsigned short int a:5;

  unsigned short int b:5;

  unsigned short int c:6;

  };

  int main(intargc,char* argv[])

  {

  struct Test test;

  test.a=16;

  test.b=4;

  test.c=0;

  int j=sizeof(test);

  int i=*(short*)&test;

  printf("%d\n",i);

  printf("sizeof %d\n",j);

  return 0;

  }

  0000 0000 1001 0000

  小端機器結果將是:16+128=144,選B

  60.main()

  {

  Int a[5]={1,2,3,4,5};

  int*ptr=(int*)(&a+1);

  int* ptr2=(int*)((int*)a+1);

  printf(“%d,%d,%d”,*(a+1),*(ptr-1),*ptr2); 結果:2,5,2

  }

  地址 0-3 4-7 8-11 12-15 16-19 20-23

  數(shù)值 1 2 3 4 5

  &a+1 就是地址為20的地方

  *ptr1[-1]就是20-4=16這個地方 一個Int 占用4個地址

  (int)a+1 跟(int*)a+1不一樣 前者地址為1 后者為4,

  所以,int *ptr2=(int*)((int)a+1);*ptr2表示的是指向地址為1的指針地址

  要點:指針進行運算,加數(shù)與指針類型相關,一般(char*),一個字節(jié);(int*),4個字節(jié);

  若是指向結構體,或者是數(shù)組的指針,由具體(sizeof)長度決定;

  詳見:點擊打開鏈接

  #include

  #include

  int main()

  {

  int a[4]={1,2,3,4};

  int *ptr1=(int *)(&a+1);

  int *ptr2=(int *)((int)a+1);

  printf("%x,%x",ptr1[-1],*ptr2);

  return 0;

  }

  小端字節(jié):*ptr2=0x2000000;

  大端字節(jié):*ptr2=0x100;

  62

  #define SQUARE(a)((a)*(a))

  int a=5;

  int b;

  b=SQUARE(a++);

  在同一個式子中有兩次以上修改變量內容的副作用時,是未定義行為。

  C語言規(guī)定a++的自增副作用應該發(fā)生在下一個序列點之前,但是乘法、括號和賦值都不是序列點,只有整個表達式結束時才是。在此之前a自增副作用發(fā)生的時機是未定義的。 每個編譯器的結果不同,結果是25或者36(不提倡在一個表達式中對變量進行兩次后自增操作)

  63、#define Max_CB500

  void LmiQueryCSmd(StructMSgCB* pmsg)

  {

  unsigned char ucCmdNum;

  ......

  for(ucCmdNum=0;ucCmdNum

  {

  ......;

  }

  }這段代碼執(zhí)行有什么問題?

  【標準答案】死循環(huán)

  unsigned char //無符號字符型表示范圍0~255

  char //有符號字符型表示范圍-128~127

  • 相關文章
  • 龍旗控股筆試題和面試題答案龍旗控股筆試題和面試題答案

    龍旗控股筆試題分享,歡迎大家閱讀和練習! 一、選擇題 1.下列程序的運行結果是 #defineA5 #defineBA+1 main() { inta; ..

  • 泰鼎筆試題和面試題答案泰鼎筆試題和面試題答案

    泰鼎筆試題分享,歡迎大家收藏。 1,volatile的作用。 2,static的作用。 3,畫出你熟悉的CPU結構。 4,C的重載。 5,如何在C中調用C編譯..

  • 人力資源主管筆試題和面試題答案人力資源主管筆試題和面試題答案

    1:在組織初創(chuàng)階段,其薪酬構成的特點體現(xiàn)為 A.基本工資低福利高績效獎金高 B.基本工資高福利低績效獎金低 C.基本工資低福利低績效獎金較高 D.基..

  • 龍旗控股筆試題和面試題答案龍旗控股筆試題和面試題答案

    龍旗控股筆試題分享,歡迎大家閱讀和練習! 一、選擇題 1.下列程序的運行結果是 #defineA5 #defineBA+1 main() { inta; ..

  • 泰鼎筆試題和面試題答案泰鼎筆試題和面試題答案

    泰鼎筆試題分享,歡迎大家收藏。 1,volatile的作用。 2,static的作用。 3,畫出你熟悉的CPU結構。 4,C的重載。 5,如何在C中調用C編譯..

  • 人力資源主管筆試題和面試題答案人力資源主管筆試題和面試題答案

    1:在組織初創(chuàng)階段,其薪酬構成的特點體現(xiàn)為 A.基本工資低福利高績效獎金高 B.基本工資高福利低績效獎金低 C.基本工資低福利低績效獎金較高 D.基..

  • 河北新聞網(wǎng)兩學一做知識競賽(試題+答案完整版)河北新聞網(wǎng)兩學一做知識競賽(試題+答案完整版)

    2016河北新聞網(wǎng)兩學一做知識競賽開賽啦,快來圍觀吧;顒觾热轂橥苿印皟蓪W一做”學習教育深入開展,省委宣傳部、省委組織部組織開展“兩學一做”知識競賽活動,河北..

  • 河北新聞網(wǎng)兩學一做知識競賽活動試題答案河北新聞網(wǎng)兩學一做知識競賽活動試題答案

    2016年河北新聞網(wǎng)兩學一做知識競賽活動試題答案為推動“兩學一做”學習教育深入開展,省委宣傳部、省委組織部組織開展“兩學一做”大型知識競賽。此項活動由河北新聞..

  • 兩學一做學習教育知識競賽活動10篇兩學一做學習教育知識競賽活動10篇

    為隆重紀念中國共產黨建黨95周年,推進我市“兩學一做”學習教育深入開展,推動廣大黨員干部認真學好黨章黨規(guī)和*系列重要講話,現(xiàn)將“兩學一做”學習教育知識競賽題予..

  • 開展兩學一做學習教育知識競賽活動真題答案開展兩學一做學習教育知識競賽活動真題答案

    144.根據(jù)《中國共產黨紀律處分條例》規(guī)定,黨的各級代表大會的代表受到(D)處分的,黨組織應當終止其代表資格。A.警告(含)以上B.嚴重警告(含)以上C.撤銷黨內職務(含)以..