1024国产,91精品国产综合久久福利,中文字幕成人免费视频,日本人的色道免费网站,曰本一级毛片免费,www.日日爱,国产黑丝视频

當(dāng)前位置:高考升學(xué)網(wǎng) > 招聘筆試題 > 正文

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

更新:2023-09-20 10:13:56 高考升學(xué)網(wǎng)

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

  100、

  有兩個(gè)磁盤文件A和B,各存放一行字母,要求把這兩個(gè)文件中的信息合并(按字母順序排列),輸出到一個(gè)新文件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++)/一個(gè)字符一個(gè)字符讀/

  {

  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);/將字符一個(gè)個(gè)寫入文件中/

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

  }

  fclose(fp);

  return 1;

  }

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

  #include

  #include

  void BubbleSort(int arr[], int n)

  {

  int i,j;

  int exchange = 1;//交換標(biāo)志,提高算法效率;

  int temp;

  for(i=0;i

  {

  exchange=0;//本趟排序開始前,交換標(biāo)志應(yīng)為假

  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ā)生了交換,故將交換標(biāo)志置為真

  }

  }

  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;

  }

  補(bǔ)充1:用帥選法查找100之內(nèi)的質(zhì)數(shù)

  #include

  using namespace std;

  #define N 100

  int main()

  {

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

  int sieve[N + 1];

  int i;

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

  sieve[0]=sieve=0;

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

  {

  sieve[i] = 1;

  }

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

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

  {

  sieve[i 2] = 0;

  }

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

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

  while(p p <= N)

  {

  p = p + 1; //選下一個(gè)p

  while(sieve[p] == 0)

  {

  p++;

  }

  int t = p p;

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

  while(t <= N)

  {

  sieve[t] = 0; //刪除

  t = t + s;

  }

  }

  //step 4: 輸出結(jié)果

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

  {

  if(sieve[i] != 0)

  {

  cout<

  內(nèi)存復(fù)制:

  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;

  }

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

  為了防止內(nèi)存空間重疊,若是目標(biāo)地址高于源地址,從后往前復(fù)制;

  若是源地址高于目標(biāo)地址,從前往后復(fù)制;

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

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

  #include

  #include

  #include

  int ChildString(charp)

  {

  char q=p;

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

  //stringlen=strlen(p);

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

  {

  stringlen++;

  q++;

  }

  while( i< stringlen)

  {

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

  {

  len++; //統(tǒng)計(jì)子串長(zhǎng)度

  i++;

  j++;

  }

  else

  {

  if(len>=maxlen) //統(tǒng)計(jì)最大子串長(zhǎ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. 計(jì)算字符串中子串出現(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到達(dá)‘\0’/

  }

  else

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

  if(p2=='\0') /如果是字符串2結(jié)束,則成功找到一次,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

  //計(jì)算子串出現(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)計(jì)其中有多少個(gè)單詞。

  int main(int argc,char argv[])

  {

  char string[81];

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

  char c;

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

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

  {

  if(c==' ')

  num++;

  }

  num++;

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

  return 1;

  }

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

  intsearch(char cpSource, int n, char ch) //起始地址,搜索長(zhǎng)度,目標(biāo)字符

  {

  int i;

  for(i=0; i

  return i;

  }

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

  98某個(gè)公司采用公用電話傳遞數(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=a%100/10;

  aa=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??的結(jié)果為兩位數(shù),9??的結(jié)果為3位數(shù)。求??代表的兩位數(shù),及809??后的結(jié)果。

  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=ia+1;

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

  output(b,i);

  }

  }

  92、有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無重復(fù)數(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 =HHH +TTT + GGG;

  if(A==i )

  {

  printf("%5d",i);

  num++;

  }

  }

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

  return 1;

  }

  《《《《有關(guān)位操作的問題》》》》

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

  Int main()

  {

  unsigned a,b,c,d;

  scanf("%o",&a); /scanf("%x",&a);16進(jìn)制/

  b=a>>4;

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

  /~0,11111111->11110000->括號(hào)外面00001111,保證低4位為1111/

  d=b&c;

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

  }

  運(yùn)行結(jié)果:輸入:1234

  輸出:

  1234

  11(8進(jìn)制)

  78、請(qǐng)編寫一個(gè)C 函數(shù),該函數(shù)給出一個(gè)字節(jié)中被置1 的位的個(gè)數(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,位移動(dòng)操作不改變?cè)?/p>

  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; /對(duì)于整數(shù)右移一次后x的值相當(dāng)于右移前的值除以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、請(qǐng)編寫一個(gè)C 函數(shù),該函數(shù)將給定的一個(gè)字符串轉(zhuǎn)換成整數(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=num10+digital;

  str=str+1;

  }

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

  return 1;

  }

  字符串倒置

  int main(int argc,charargv[])

  {

  char str="hello world";

  char des=NULL;

  int len=strlen(str);

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

  char d=des;

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

  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.一語句實(shí)現(xiàn)x是否為2的若干次冪的判斷。

  void main()

  {

  int a;

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

  // 若是打印y,否則n

  

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

  對(duì)應(yīng)的i-1就是1,11,111,1111....

  i &(i-1)為false(也就是0)時(shí)就是返回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ù)體外的聲明語句都是定義語句,如果沒有初始化,會(huì)隱式的初始化,對(duì)于基本類型初始化為零,對(duì)于類類型則調(diào)用相應(yīng)的構(gòu)造函數(shù)),

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

  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

  小端機(jī)器結(jié)果將是:16+128=144,選B

  60.main()

  {

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

  intptr=(int)(&a+1);

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

  printf(“%d,%d,%d”,(a+1),(ptr-1),ptr2); 結(jié)果: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這個(gè)地方 一個(gè)Int 占用4個(gè)地址

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

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

  要點(diǎn):指針進(jìn)行運(yùn)算,加數(shù)與指針類型相關(guān),一般(char),一個(gè)字節(jié);(int),4個(gè)字節(jié);

  若是指向結(jié)構(gòu)體,或者是數(shù)組的指針,由具體(sizeof)長(zhǎng)度決定;

  詳見:點(diǎn)擊打開鏈接

  #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++);

  在同一個(gè)式子中有兩次以上修改變量?jī)?nèi)容的副作用時(shí),是未定義行為。

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

  63、#define Max_CB500

  void LmiQueryCSmd(StructMSgCB pmsg)

  {

  unsigned char ucCmdNum;

  ......

  for(ucCmdNum=0;ucCmdNum

  {

  ......;

  }

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

  【標(biāo)準(zhǔn)答案】死循環(huán)

  unsigned char //無符號(hào)字符型表示范圍0~255

  char //有符號(hào)字符型表示范圍-128~127

最新圖文

2020年河北新聞網(wǎng)兩學(xué)一做

時(shí)間:2023-09-18 07:0:24

2020年河北新聞網(wǎng)兩學(xué)一做

時(shí)間:2023-09-15 11:0:59

兩學(xué)一做學(xué)習(xí)教育知

時(shí)間:2023-09-21 06:0:30

2020年開展兩學(xué)一做學(xué)習(xí)教

時(shí)間:2023-09-19 21:0:30