亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

C語(yǔ)言編程題

時(shí)間:2024-09-26 13:45:39 飛宇 筆試題目 我要投稿
  • 相關(guān)推薦

C語(yǔ)言編程題

  C語(yǔ)言是一種廣泛應(yīng)用于系統(tǒng)編程、嵌入式開(kāi)發(fā)、軟件開(kāi)發(fā)等多個(gè)領(lǐng)域的高級(jí)編程語(yǔ)言。它以其高效、靈活和可移植性而受到程序員的喜愛(ài)。對(duì)于初學(xué)者來(lái)說(shuō),掌握C語(yǔ)言的基礎(chǔ)至關(guān)重要,這包括理解基本語(yǔ)法、控制結(jié)構(gòu)(如選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu))、函數(shù)、指針以及數(shù)據(jù)結(jié)構(gòu)(如結(jié)構(gòu)體)。以下是小編整理的相關(guān)內(nèi)容,一起來(lái)看看吧。

  C語(yǔ)言編程題 1

  1)讀文件file1.txt的內(nèi)容(例如):

  12

  34

  56

  輸出到file2.txt:

  56

  34

  12

  (逆序)

  第一題,注意可增長(zhǎng)數(shù)組的應(yīng)用.

  #include

  #include

  int main(void)

  {

  int MAX = 10;

  int *a = (int *)malloc(MAX * sizeof(int));

  int *b;

  FILE *fp1;

  FILE *fp2;

  fp1 = fopen(“a.txt”,”r”);

  if(fp1 == NULL)

  {printf(“error1″);

  exit(-1);

  }

  fp2 = fopen(“b.txt”,”w”);

  if(fp2 == NULL)

  {printf(“error2″);

  exit(-1);

  }

  int i = 0;

  int j = 0;

  while(fscanf(fp1,”%d”,&a[i]) != EOF)

  {

  i++;

  j++;

  if(i >= MAX)

  {

  MAX = 2 * MAX;

  b = (int*)realloc(a,MAX * sizeof(int));

  if(b == NULL)

  {

  printf(“error3″);

  exit(-1);

  }

  a = b;

  }

  }

  for(;–j >= 0;)

  fprintf(fp2,”%d\n”,a[j]);

  fclose(fp1);

  fclose(fp2);

  return 0;

  }

  可謂是反序的經(jīng)典例程.

  void inverse(char *p)

  {

  if( *p = = ‘\0′ )

  return;

  inverse( p+1 );

  printf( “%c”, *p );

  }

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

  {

  inverse(“abc\0″);

  return 0;

  }

  借簽了樓上的“遞規(guī)反向輸出”

  #include

  void test(FILE *fread, FILE *fwrite)

  {

  char buf[1024] = {0};

  if (!fgets(buf, sizeof(buf), fread))

  return;

  test( fread, fwrite );

  fputs(buf, fwrite);

  }

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

  {

  FILE *fr = NULL;

  FILE *fw = NULL;

  fr = fopen(“data”, “rb”);

  fw = fopen(“dataout”, “wb”);

  test(fr, fw);

  fclose(fr);

  fclose(fw);

  return 0;

  }

  在對(duì)齊為4的情況下

  struct BBB

  {

  long num;

  char *name;

  short int data;

  char ha;

  short ba[5];

  }*p;

  p=0×1000000;

  p+0×200=____;

  (Ulong)p+0×200=____;

  (char*)p+0×200=____;

  希望各位達(dá)人給出答案和原因,謝謝拉

  解答:假設(shè)在32位CPU上,

  sizeof(long) = 4 bytes

  sizeof(char *) = 4 bytes

  sizeof(short int) = sizeof(short) = 2 bytes

  sizeof(char) = 1 bytes

  由于是4字節(jié)對(duì)齊,

  sizeof(struct BBB) = sizeof(*p)

  = 4 + 4 + 2 + 1 + 1/*補(bǔ)齊*/ + 2*5 + 2/*補(bǔ)齊*/ = 24 bytes (經(jīng)Dev-C++驗(yàn)證)

  p=0×1000000;

  p+0×200=____;

  = 0×1000000 + 0×200*24

  (Ulong)p+0×200=____;

  = 0×1000000 + 0×200

  (char*)p+0×200=____;

  = 0×1000000 + 0×200*4

  你可以參考一下指針運(yùn)算的細(xì)節(jié)

  2、運(yùn)用四色定理,為N個(gè)局域舉行配色,顏色為1、2、3、4四種,另有數(shù)組adj[][N],如adj[i][j]=1則表示i區(qū)域與j區(qū)域相鄰,數(shù)組color[N],如color[i]=1,表示i區(qū)域的顏色為1號(hào)顏色。

  四色填充

  3、用遞歸算法判斷數(shù)組a[N]是否為一個(gè)遞增數(shù)組。

  遞歸的方法,記錄當(dāng)前最大的,并且判斷當(dāng)前的是否比這個(gè)還大,大則繼續(xù),否則返回false結(jié)束:

  bool fun( int a[], int n )

  {

  if( n= =1 )

  return true;

  if( n= =2 )

  return a[n-1] >= a[n-2];

  return fun( a,n-1) && ( a[n-1] >= a[n-2] );

  }

  4、編寫(xiě)算法,從10億個(gè)浮點(diǎn)數(shù)當(dāng)中,選出其中最大的10000個(gè)。

  用外部排序,在《數(shù)據(jù)結(jié)構(gòu)》書(shū)上有

  《計(jì)算方法導(dǎo)論》在找到第n大的數(shù)的算法上加工

  5、編寫(xiě)一unix程序,防止僵尸進(jìn)程的出現(xiàn).

  3.可怕的題目終于來(lái)了

  象搜索的輸入信息是一個(gè)字符串,統(tǒng)計(jì)300萬(wàn)輸入信息中的最熱門的.前十條,我們每次輸入的一個(gè)字符串為不超過(guò)255byte,內(nèi)存使用只有1G,

  請(qǐng)描述思想,寫(xiě)出算發(fā)(c語(yǔ)言),空間和時(shí)間復(fù)雜度,

  4.國(guó)內(nèi)的一些帖吧,如baidu,有幾十萬(wàn)個(gè)主題,假設(shè)每一個(gè)主題都有上億的跟帖子,怎么樣設(shè)計(jì)這個(gè)系統(tǒng)速度最好,請(qǐng)描述思想,寫(xiě)出算發(fā)(c語(yǔ)言),空間和時(shí)間復(fù)雜度,

  1. 簡(jiǎn)述一個(gè)Linux驅(qū)動(dòng)程序的主要流程與功能。

  2. 請(qǐng)列舉一個(gè)軟件中時(shí)間換空間或者空間換時(shí)間的例子。

  void swap(int a,int b)

  {

  int c; c=a;a=b;b=a;

  }

  —>空優(yōu)

  void swap(int a,int b)

  {

  a=a+b;b=a-b;a=a-b;

  }

  6. 請(qǐng)問(wèn)一下程序?qū)⑤敵鍪裁唇Y(jié)果?

  char *RetMenory(void)

  {

  char p[] = “hellow world”;

  return p;

  }

  void Test(void)

  {

  char *str = NULL;

  str = RetMemory();

  printf(str);

  }

  RetMenory執(zhí)行完畢,p資源被回收,指向未知地址。返回地址,str的內(nèi)容應(yīng)是不可預(yù)測(cè)的, 打印的應(yīng)該是str的地址

  寫(xiě)一個(gè)函數(shù),它的原形是int continumax(char *outputstr,char *intputstr)

  功能:

  在字符串中找出連續(xù)最長(zhǎng)的數(shù)字串,并把這個(gè)串的長(zhǎng)度返回,并把這個(gè)最長(zhǎng)數(shù)字串付給其中一個(gè)函數(shù)參數(shù)outputstr所指內(nèi)存。例如:”abcd12345ed125ss123456789″的首地址傳給intputstr后,函數(shù)將返回

  9,outputstr所指的值為123456789

  int continumax(char *outputstr, char *inputstr)

  {

  char *in = inputstr, *out = outputstr, *temp, *final;

  int count = 0, maxlen = 0;

  while( *in != ‘\0′ )

  {

  if( *in > 47 && *in < 58 )

  {

  for(temp = in; *in > 47 && *in < 58 ; in++ )

  count++;

  }

  else

  in++;

  if( maxlen < count )

  {

  maxlen = count;

  count = 0;

  final = temp;

  }

  }

  for(int i = 0; i < maxlen; i++)

  {

  *out = *final;

  out++;

  final++;

  }

  *out = ‘\0′;

  return maxlen;

  }

  不用庫(kù)函數(shù),用C語(yǔ)言實(shí)現(xiàn)將一整型數(shù)字轉(zhuǎn)化為字符串

  方法1:

  int getlen(char *s){

  int n;

  for(n = 0; *s != ‘\0′; s++)

  n++;

  return n;

  }

  void reverse(char s[])

  {

  int c,i,j;

  for(i = 0,j = getlen(s) – 1; i < j; i++,j–){

  c = s[i];

  s[i] = s[j];

  s[j] = c;

  }

  }

  void itoa(int n,char s[])

  {

  int i,sign;

  if((sign = n) < 0)

  n = -n;

  i = 0;

  do{/*以反序生成數(shù)字*/

  s[i++] = n%10 + ’0′;/*get next number*/

  }while((n /= 10) > 0);/* the number*/

  if(sign < 0)

  s[i++] = ‘-’;

  s[i] = ‘\0′;

  reverse(s);

  }

  方法2:

  #include

  using namespace std;

  void itoint num);

  void itoint num)

  {

  int i = 0;

  int j ;

  char stra[10];

  char strb[10];

  while ( num )

  {

  stra[i++]=num%10+48;

  num=num/10;

  }

  stra[i] = ‘\0′;

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

  {

  strb[j] = stra[i-j-1];

  }

  strb[j] = ‘\0′;

  cout< }

  int main()

  {

  int num;

  cin>>num;

  itonum);

  return 0;

  }

  C語(yǔ)言編程題 2

  1、請(qǐng)編一個(gè)函數(shù)fun,它的功能是:根據(jù)以下公式求π的值(要求滿足精度0.0005,即,某項(xiàng)小于0.0005時(shí)停止迭代):

  程序運(yùn)行后,如果輸入精度0.0005,則程序輸出多少。

  注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun的指定的部位填入你編寫(xiě)的若干語(yǔ)句。

  試題源程序如下:

  #include

  #include

  double fun(double eps)

  {

  }

  main()

  { double x;

  printf("Input eps:");

  scanf("%lf",&x); printf("eps=%lf, PI=%lf",x,fun(x));

  }

  分析:

  (1)本題所用基本算法應(yīng)為累加。假設(shè)累加值放在變量s中,累加項(xiàng)放在變量t中,累加操作由語(yǔ)句s=s+t;來(lái)實(shí)現(xiàn)。

  (2)若稱 為第1累加項(xiàng),則其前的1為第0累加項(xiàng),其后的一項(xiàng)為第2累加項(xiàng),按給定的公式可知,從第1累加項(xiàng)開(kāi)始,后一項(xiàng)的累加項(xiàng)是前一項(xiàng)的值乘以 。所以當(dāng)前的累加項(xiàng)應(yīng)當(dāng)是:t=t*n/(2.0*n+1.0)。表達(dá)式右邊的t中是前一項(xiàng)的值,表達(dá)式左邊的t為當(dāng)前的每累加累加項(xiàng)。請(qǐng)注意,不要寫(xiě)成:t*n/(2*n+1)而進(jìn)行整除。

  (3)若第0累加項(xiàng)的1作為s的初值,語(yǔ)句:s=s+t;執(zhí)行n次,就把第1到第n項(xiàng)累加到了s中。每進(jìn)行一次累加,n值增1。

  (4)把以上操作放在循環(huán)中。按本題規(guī)定,當(dāng)某項(xiàng)小于eps(0.0005)時(shí)停止迭代,因此若用while循環(huán),可用t>=eps作為控制循環(huán)進(jìn)行的條件:

  while( t>=eps ){ s+=t; n++; t=t*n/(2.0*n+1); }

  (5)注意應(yīng)給所用變量賦適當(dāng)?shù)某踔怠?/p>

  (6)退出循環(huán)后,函數(shù)的返回值應(yīng)是:2*s。2、請(qǐng)編一個(gè)函數(shù)fun,其中n所指存儲(chǔ)單元中存放了數(shù)組中元素的個(gè)數(shù)。函數(shù)的功能是:刪除所有值為y的元素。已在主函數(shù)中給數(shù)組元素賦值,y的值由主函數(shù)通過(guò)鍵盤(pán)讀入。

  注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun的指定的部位填入你編寫(xiě)的若干語(yǔ)句。

  試題源程序如下:

  #include

  #define M 20

  void fun(int bb[],int *n, int y)

  {

  }

  main()

  { int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;

  printf("The original data is: ");

  for(k=0; k

  fun(aa, &n, y);

  printf("The data after d %d: ",y);

  for(k=0; k

  }

  分析:

  (1)本題的基本算法是查找和刪除。

  (2)若循環(huán)控制變量是i,通過(guò)for循環(huán)逐個(gè)檢查元素中的值,把數(shù)組元素中不等于y的值從頭開(kāi)始重新放入bb所指的數(shù)組中。用i作為下標(biāo),逐個(gè)引用數(shù)組元素;用i作為下標(biāo),把不等于y的元素中的值逐一重新放入bb所指的數(shù)組中。這一操作可用以下語(yǔ)句來(lái)實(shí)現(xiàn):

  if(bb[i]!=y)bb[j++]=bb[i];

  (3)因?yàn)橐褎h除了與y值相等的元素,因此,數(shù)組中數(shù)據(jù)的個(gè)數(shù)已經(jīng)改變;所以循環(huán)結(jié)束后,需要重新給n所指變量賦值。退出循環(huán)后,變量j中存放的是刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù),通過(guò)語(yǔ)句*n=j;把它賦給n所指變量即可。

  (4)主函數(shù)中輸出aa數(shù)組中原有的數(shù)據(jù),和刪除后的.數(shù)據(jù)?忌梢詫(duì)照所編函數(shù)是否正確。3.請(qǐng)編寫(xiě)一個(gè)函數(shù)void fun(char m,int k,int xx[]),該函數(shù)的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入xx所指的數(shù)組中。例如,若輸入17和5,則應(yīng)輸出:19,23,29,31, 37。

  注意:部分源程序存在PROG1.C中,請(qǐng)勿改動(dòng)主函數(shù)和其他函數(shù)中的內(nèi)容,僅在函數(shù)fun的指定的部位填入你編寫(xiě)的若干語(yǔ)句。

  試題源程序如下:

  #include

  void fun(int m, int k, int xx[])

  {

  }

  main()

  { int m, n, zz[100];

  printf("Please enter two integers(m & n): ");

  scanf("%d%d",&m,&n);

  fun(m, n, zz);

  for(m=0; m

  printf("");

 。

  分析:

  (1)本題的基本算法是求素?cái)?shù)。假設(shè)有整數(shù)i,若i不能被2到i之間的任意一個(gè)數(shù)除盡,則i就是素?cái)?shù);若一旦能被某個(gè)數(shù)除盡就不是素?cái)?shù)。

  (2)以下是求i是否為素?cái)?shù)的基本算法:變量ok用作i是素?cái)?shù)的標(biāo)志,ok為1,則i是素?cái)?shù)。

  ok=1;

  for(p=2; p

  if( i%p==0){ ok=0; break; }

  if(ok)……

  (3)本題要求把大于m的k個(gè)素?cái)?shù)存入xx所指的數(shù)組中。所以,i的值應(yīng)大于m;取大于m的值逐一進(jìn)行判斷,若是素?cái)?shù)就放入xx所指數(shù)組中。把以上語(yǔ)句放入一個(gè)循環(huán)中:

  for( i=m+1,j=0; ? ; i++ )

  { ok=1;

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

  if( i%p==0 ){ ok=0; break; }

  if (ok) { xx[j]=i;j++; }

  }

  此處,變量i統(tǒng)計(jì)存入數(shù)組中元素的個(gè)數(shù),同時(shí)作為下標(biāo)。

  (4)按本題的要求,外循環(huán)結(jié)束的條件應(yīng)當(dāng)是:j

【C語(yǔ)言編程題】相關(guān)文章:

C語(yǔ)言編程練習(xí)04-05

學(xué)習(xí)c語(yǔ)言編程總結(jié)07-11

經(jīng)典C語(yǔ)言面試算法題03-17

Visual C#的Excel編程03-19

淺析基于C語(yǔ)言的計(jì)算機(jī)軟件編程實(shí)驗(yàn)03-20

C++編程簡(jiǎn)歷表格11-22

2017年計(jì)算機(jī)二級(jí)考試C語(yǔ)言編程題練習(xí)題及答案03-10

C++/C程序員基本編程技能筆試10-26

C++/C程序員編程技能筆試題04-04