<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            C語言編程題

            時間:2024-09-26 13:45:39 飛宇 筆試題目 我要投稿
            • 相關推薦

            C語言編程題

              C語言是一種廣泛應用于系統編程、嵌入式開發、軟件開發等多個領域的高級編程語言。它以其高效、靈活和可移植性而受到程序員的喜愛。對于初學者來說,掌握C語言的基礎至關重要,這包括理解基本語法、控制結構(如選擇結構和循環結構)、函數、指針以及數據結構(如結構體)。以下是小編整理的相關內容,一起來看看吧。

              C語言編程題 1

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

              12

              34

              56

              輸出到file2.txt:

              56

              34

              12

              (逆序)

              第一題,注意可增長數組的應用.

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

              }

              可謂是反序的經典例程.

              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;

              }

              借簽了樓上的“遞規反向輸出”

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

              }

              在對齊為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=____;

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

              解答:假設在32位CPU上,

              sizeof(long) = 4 bytes

              sizeof(char *) = 4 bytes

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

              sizeof(char) = 1 bytes

              由于是4字節對齊,

              sizeof(struct BBB) = sizeof(*p)

              = 4 + 4 + 2 + 1 + 1/*補齊*/ + 2*5 + 2/*補齊*/ = 24 bytes (經Dev-C++驗證)

              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

              你可以參考一下指針運算的細節

              2、運用四色定理,為N個局域舉行配色,顏色為1、2、3、4四種,另有數組adj[][N],如adj[i][j]=1則表示i區域與j區域相鄰,數組color[N],如color[i]=1,表示i區域的顏色為1號顏色。

              四色填充

              3、用遞歸算法判斷數組a[N]是否為一個遞增數組。

              遞歸的方法,記錄當前最大的,并且判斷當前的是否比這個還大,大則繼續,否則返回false結束:

              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、編寫算法,從10億個浮點數當中,選出其中最大的10000個。

              用外部排序,在《數據結構》書上有

              《計算方法導論》在找到第n大的數的算法上加工

              5、編寫一unix程序,防止僵尸進程的出現.

              3.可怕的題目終于來了

              象搜索的輸入信息是一個字符串,統計300萬輸入信息中的最熱門的.前十條,我們每次輸入的一個字符串為不超過255byte,內存使用只有1G,

              請描述思想,寫出算發(c語言),空間和時間復雜度,

              4.國內的一些帖吧,如baidu,有幾十萬個主題,假設每一個主題都有上億的跟帖子,怎么樣設計這個系統速度最好,請描述思想,寫出算發(c語言),空間和時間復雜度,

              1. 簡述一個Linux驅動程序的主要流程與功能。

              2. 請列舉一個軟件中時間換空間或者空間換時間的例子。

              void swap(int a,int b)

              {

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

              }

              —>空優

              void swap(int a,int b)

              {

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

              }

              6. 請問一下程序將輸出什么結果?

              char *RetMenory(void)

              {

              char p[] = “hellow world”;

              return p;

              }

              void Test(void)

              {

              char *str = NULL;

              str = RetMemory();

              printf(str);

              }

              RetMenory執行完畢,p資源被回收,指向未知地址。返回地址,str的內容應是不可預測的, 打印的應該是str的地址

              寫一個函數,它的原形是int continumax(char *outputstr,char *intputstr)

              功能:

              在字符串中找出連續最長的數字串,并把這個串的長度返回,并把這個最長數字串付給其中一個函數參數outputstr所指內存。例如:”abcd12345ed125ss123456789″的首地址傳給intputstr后,函數將返回

              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;

              }

              不用庫函數,用C語言實現將一整型數字轉化為字符串

              方法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{/*以反序生成數字*/

              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語言編程題 2

              1、請編一個函數fun,它的功能是:根據以下公式求π的值(要求滿足精度0.0005,即,某項小于0.0005時停止迭代):

              程序運行后,如果輸入精度0.0005,則程序輸出多少。

              注意:部分源程序存在PROG1.C中,請勿改動主函數和其他函數中的內容,僅在函數fun的指定的部位填入你編寫的若干語句。

              試題源程序如下:

              #include

              #include

              double fun(double eps)

              {

              }

              main()

              { double x;

              printf("Input eps:");

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

              }

              分析:

              (1)本題所用基本算法應為累加。假設累加值放在變量s中,累加項放在變量t中,累加操作由語句s=s+t;來實現。

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

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

              (4)把以上操作放在循環中。按本題規定,當某項小于eps(0.0005)時停止迭代,因此若用while循環,可用t>=eps作為控制循環進行的條件:

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

              (5)注意應給所用變量賦適當的初值。

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

              注意:部分源程序存在PROG1.C中,請勿改動主函數和其他函數中的內容,僅在函數fun的指定的部位填入你編寫的若干語句。

              試題源程序如下:

              #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)若循環控制變量是i,通過for循環逐個檢查元素中的值,把數組元素中不等于y的值從頭開始重新放入bb所指的數組中。用i作為下標,逐個引用數組元素;用i作為下標,把不等于y的元素中的值逐一重新放入bb所指的數組中。這一操作可用以下語句來實現:

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

              (3)因為已刪除了與y值相等的元素,因此,數組中數據的個數已經改變;所以循環結束后,需要重新給n所指變量賦值。退出循環后,變量j中存放的是刪除后數組中數據的個數,通過語句*n=j;把它賦給n所指變量即可。

              (4)主函數中輸出aa數組中原有的數據,和刪除后的.數據。考生可以對照所編函數是否正確。3.請編寫一個函數void fun(char m,int k,int xx[]),該函數的功能是:將大于整數m且緊靠m的k個素數存入xx所指的數組中。例如,若輸入17和5,則應輸出:19,23,29,31, 37。

              注意:部分源程序存在PROG1.C中,請勿改動主函數和其他函數中的內容,僅在函數fun的指定的部位填入你編寫的若干語句。

              試題源程序如下:

              #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)本題的基本算法是求素數。假設有整數i,若i不能被2到i之間的任意一個數除盡,則i就是素數;若一旦能被某個數除盡就不是素數。

              (2)以下是求i是否為素數的基本算法:變量ok用作i是素數的標志,ok為1,則i是素數。

              ok=1;

              for(p=2; p

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

              if(ok)……

              (3)本題要求把大于m的k個素數存入xx所指的數組中。所以,i的值應大于m;取大于m的值逐一進行判斷,若是素數就放入xx所指數組中。把以上語句放入一個循環中:

              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統計存入數組中元素的個數,同時作為下標。

              (4)按本題的要求,外循環結束的條件應當是:j

            【C語言編程題】相關文章:

            C語言編程練習04-05

            學習c語言編程總結07-11

            經典C語言面試算法題03-17

            Visual C#的Excel編程03-19

            淺析基于C語言的計算機軟件編程實驗03-20

            C++編程簡歷表格11-22

            2017年計算機二級考試C語言編程題練習題及答案03-10

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

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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看