<strike id="6q0um"></strike>
  • <strike id="6q0um"><s id="6q0um"></s></strike>
  • <ul id="6q0um"></ul><strike id="6q0um"></strike>

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

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

    更新:2023-09-20 10:13:56 高考升學網(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進行降序排序,并輸出結(jié)果,要求要以數(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;//本趟排序開始前,交換標志應(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ā)生了交換,故將交換標志置為真

      }

      }

      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之內(nèi)的質(zhì)數(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 表示不在篩中,即不是質(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; //第一個質(zhì)數(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;/質(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)存復制:

      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)存拷貝時要避免內(nèi)存空間重疊的問題,(即pvfrom與pvto所指向的內(nèi)存不能重疊)

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

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

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

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

      #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,求得長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一次匹配已結(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

      //計算子串出現(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,視空格為終結(jié)/

      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ù)在給定的內(nèi)存區(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=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個數(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 =HHH +TTT + GGG;

      if(A==i )

      {

      printf("%5d",i);

      num++;

      }

      }

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

      return 1;

      }

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

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

      }

      運行結(jié)果:輸入: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ù)將給定的一個字符串轉(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];//指向最后一個字符;

      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......

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

      不能存在表達式語句,包括函數(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

      小端機器結(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這個地方 一個Int 占用4個地址

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

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

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

      若是指向結(jié)構(gòu)體,或者是數(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++);

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

      C語言規(guī)定a++的自增副作用應(yīng)該發(fā)生在下一個序列點之前,但是乘法、括號和賦值都不是序列點,只有整個表達式結(jié)束時才是。在此之前a自增副作用發(fā)生的時機是未定義的。 每個編譯器的結(jié)果不同,結(jié)果是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

    相關(guān)文章

    最新圖文

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

    時間:2023-09-18 07:0:24

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

    時間:2023-09-15 11:0:59

    兩學一做學習教育知

    時間:2023-09-21 06:0:30

    2020年開展兩學一做學習教

    時間:2023-09-19 21:0:30
    亚洲乱亚洲乱妇24p| 亚洲AV无码乱码在线观看代蜜桃| 亚洲综合伊人制服丝袜美腿| 亚洲视频免费播放| 亚洲视频在线观看| 亚洲人成影院在线| 亚洲网址在线观看你懂的| 亚洲激情视频在线观看| 亚洲视频.com| 亚洲综合激情另类小说区| 亚洲视频日韩视频| 亚洲午夜一区二区电影院| 亚洲国产精品网站久久| 亚洲三级视频在线观看| 亚洲人成综合网站7777香蕉| 亚洲国产视频久久| 亚洲国产精品ⅴa在线观看| 精品亚洲av无码一区二区柚蜜| 国产成人亚洲精品无码AV大片| 国产亚洲男人的天堂在线观看| 亚洲免费在线观看| 中国亚洲女人69内射少妇| 国产亚洲一区二区三区在线| 亚洲s色大片在线观看| 亚洲欧洲国产精品你懂的| 亚洲网站在线播放| 亚洲综合色7777情网站777| 亚洲国产成人精品无码区花野真一| 鲁死你资源站亚洲av| 亚洲男人的天堂一区二区| 亚洲尤码不卡AV麻豆| 亚洲丁香色婷婷综合欲色啪| 亚洲精品中文字幕无码AV| 久久亚洲精品国产精品婷婷| 亚洲av纯肉无码精品动漫| 国产成人精品久久亚洲高清不卡 | 亚洲精品高清无码视频| 亚洲视频免费在线看| 亚洲中文精品久久久久久不卡| 妇女自拍偷自拍亚洲精品| a级亚洲片精品久久久久久久 |