1. 程式人生 > >厚積薄發系列(C語言資料)

厚積薄發系列(C語言資料)

夜光序言:

他們將要分手。她記得,當時開口有多難,多殘忍。他們的慾念太強烈,找不到話來表達。他們已經不再相視。他們避免用手和目光接觸。是他不想說話。她說過,光是這沉默本身,以及由於沉默而沒有說出來的話,乃至其頓挫,其不經意,還有這個躲躲閃閃的遊戲,這番幼稚的欲言又止和她的眼淚,這一切本應該使人想到,這就是愛情。

 

《C語言之大道

夜光綜合複習資料

第一題 讀程式寫出程式執行結果

  1. #include <stdio.h>

   void main()

   {  int x[]={1,2,3};

      int s=1,i,*p=x;

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

        s*=*(p+i);

      printf(“%d\n”,s);

}

 

2、#include <stdio.h>

int fun(char *s1,char *s2)

     { int i=0;

      while(s1[i]==s2[i] && s2[i]!='\0') i++;

return (s1[i]=='\0' && s2[i]=='\0');

}

void main()

{ char p[10]= ""abcdef"", q[10]= ""ABCDEF""

  printf(""%d\n"",fun(p,q));

}

 

3、#include <stdio.h>

"void main()

     { int n=2;

      printf(“%d,%d,%d\n”, ++n , n+=2 , --n) ; 

}

 

4、#include <stdio.h>

void main()

{ int x=1,a=0,b=0;

switch(x)

{ case 0: b++;

case 1: a++;

case 2: a++;b++;

   }

printf(“a=%d,b=%d\n”,a,b);

}

 

5、#include <stdio.h>

void main()

    { int s,t,a=-2,b=6;

     s=t=1;

     if(a>0) s=s+1;

     if(a>b) t=s+t;

     else if(a==b) t=5;

     else t=2*s;

     printf(""t=%d "", t); 

}

 

6、#include <stdio.h>

#define  S(a,b)    (a)*(b)

void main()

{  int a=3 ,area;

   area=S(a,a+3) ;

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

}

 

7、#include <stdio.h>

void main()

{ int i=0,a=0;

while( i<20 )

{  for(;;)

if((i%10)==0) break;

else i--;

         i+=11;

         a+=i;

}

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

}

 

8、#include <stdio.h>

void swap(int  b[])

{   int *p,*p1,*p2;

        p1=&b[0] ;p2=&b[1];

p=p1;  p1=p1+1;  p2=p;

}

void main()

{   int a[]={5,9};

printf(""%d,%d\n"",*a,*(a+1));

       swap(a);

         printf(""%d,%d\n"",a[0],a[1]);

}

9、#include <stdio.h>

fun(int a, int b)

{ if(a>b) return(a);

else return(b);

}

void main()

{ int x=3, y=8, z=6, r;

r=fun(fun(x,y), 2*z);

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

}

 

10、#include <stdio.h>

int fun(int x)

{ int y=1;

static int z=4;

z =1; y;

return(x y z);

}

void main()

{ int i;

for(i=1;i<=3;i )

printf("=",fun(i));

}

 

11、#include <stdio.h>

void fun(char *w, int n)

{ char  t, *s1, *s2;

  s1=w;  

s2=w n-1;

  while(s1<s2) {t=*s1;*s1= *s2 ; *s2= t;s1 ;s2--;}

}

void main()

{ char p[]="abcdefg";

fun(p, strlen(p));

puts(p);

}

 

12、#include <stdio.h>

char fun(char *s)

{ if( *s >= ¢a¢ && *s <= ¢z¢ )  

*s=*s-32;

return *s;

}

void main()

{ char a[20]="Welcome",*p,ch;

for(p=a;*p!=¢\0¢;p )

{ ch=fun(p);

putchar(ch);

}  }

 

13、#include <stdio.h>

   void main()

  {  int a=10,b=0;

     if(a==12)

      {a++; b++; }

     else

      { a=a+3 ; b=b+3;}

printf(“%d,%d\n”,a,b);

}

 

14、#include <stdio.h>

void main()

{ int s,i;

for(s=0,i=1;i<5;i++,s+=i) ;

printf(“%d\n”,s);

}

 

15、#include <stdio.h>

   void main()

   {  char n=‘c’;

      switch(n )

      {  default: printf(“error!”); break;

         case ‘a’: case ‘A’:

case ‘b’: case ‘B’: printf(“good!”);break;

         case ‘c’: case ‘C’: printf(“pass!”);

         case ‘d’: case ‘D’: printf(“warm!”);

}

}

 

16、#include <stdio.h>

void main()

{ int k=4,n=0;

for( ; n<k ; )

{ ; n++;

if(n%3!=0) continue;

k- -;

}

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

}

 

17、#include <stdio.h>

   int f(int b[],int m,int n)

   { int i,s=0;

     for(i=m;i<=n;i+=2) s+=b[i];

     return s;

}

void main()

   { int x,a[]={1,2,3,4,5,6,7,8,9,10};

     x=f(a,3,8);

     printf(“%d\n”,x);

}

 

18、#include <stdio.h>

void copy_str(char  from[ ],char to[ ])

{  int  k=0;

while(from[k]!=‘\0’)

{ to[k]=from[k]; k ;    }

      to[k]=‘\0’;      /*末尾加上串結束標誌*/

}

void main()

{  char  str1[80]=”red”,str2[80]=”green”;

      copy_str (str1,str2);

      puts(str2);

}

 

19、#include <stdio.h>

int d=1;       

     void fun(int p)

{ int d=5;

  d+=p++;

  printf(“%d”,d);

}

void main()

     { int a=3;

        fun(a);   d+=a++;

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

}

 

20、#include <stdio.h>

void f(int x, int y)

      { int t;

        if (x<y) { t=x; x=y; y=t; }

      }

      void main()

     { int a=4,b=3,c=5;

       f(a,b); f(a,c); f(b,c);

       printf(""%d,%d,%d\n"",a,b,c);

}

 

21、#include <stdio.h>

void fun(char *w, int n)

{ char  t, *s1, *s2;

  s1=w; 

s2=w n-1;

  while(s1<s2) {t=*s1;*s1= *s2 ; *s2= t; s1 ;s2--;}

}

void main()

{ char p[]=""1234567"";

fun(p, strlen(p));

puts(p);

}

 

22、#include <stdio.h>

#include <string.h>

int stre(char *s)

{  int num=0;

   while(*(s+num)!=‘\0’)num++;

   return num;

}

void main()

{  char str[]=""students"",*p=str;

   printf(“%d\n”,stre(p));

}

 

23、#include <stdio.h>

void main()

{  int i,j;

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

{

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

printf(""*"");

printf(""\n"");

}

}

 

24、#include <stdio.h>

void main()

    { int i;

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

      switch (i)

      { case 1: printf(""%d "", i);

        case 2: printf(""%d "", i);

        default : printf(""%d "", i); 

}

 

25、#include <stdio.h>

    int ws(int  x)

    {  if(x/100>0)

           return(3);

        else if(x/10>0 )

           return(2);

        else

           return(1);

   }

    void main()

    {  int  a=123;

        printf(""%d是%d位數\n"",a,ws(a));

}

 

26、#include <stdio.h>

#include <string.h>

void main()

{   char  a[10]=""abc"";

char  b[]=""defg"";

    puts(a);

    puts(b);

    puts(strcat(a,b));

}

 

27、#include <stdio.h>

 void main()

 { int  i,n[]={1,2,3,4,5};

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

{ n[i]=n[4-i]+1;

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

}

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

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

}

 

28、#include <stdio.h>

void main()

{ int a[3][4]={{1,2,3,4},{9,7,10,6},{-1,8,-5,5}};

int i,j,row=0,colum=0,max;

  max=a[0][0];

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

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

   if(a[i][j]>max)

   { max=a[i][j];

    row=i;

    colum=j;

   }

 printf(""max=%d,row=%d,colum=%d"",max,row,colum);

}

 

29、#include <stdio.h>

void copy_str(char  from[ ],char to[ ])

{   int  k=0;

while(from[k]!= ‘\0’)

{ to[k]=from[k]; k ;    }

    to[k]=‘\0’;  /*末尾加上串結束標誌*/

}

void main()

{   char  str1[80]= ""good"",str2[80]= ""abcdef"";

    copy_str(str1,str2);

    puts(str2);

}

 

30、#include <stdio.h>

int fun(int a, int b)

{ if(a>b) return(a);

else return(b);

 }

void main()

{ int x=3, y=8, z=6, r;

r=fun(fun(x,y), 2*z);

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

}

 

31、#include <stdio.h>

void ex( )

{  static int x=5 ; 

--x ; 

printf(“%d”,x) ;

} ;

void ; main ( )

{ ; ex( ); ;

ex( ); ;

ex( );

 ;

}

 

32、#include <stdio.h>

int f( )      

{ int s=1;

  static int i=0;

  s+=i;  i++;

  return  s ;

}

void main()

{ int i,a=0;

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

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

}

 

33、#include <stdio.h>

int m=13;       

     int fun(int x,int y)

{ int m=3;

  return(x*y-m);

}

void main()

     { int a=7, b=5;

        printf(""%d\n"", fun(a,b)/m);

}

 

34、#include <stdio.h>

 void main()

 { int  i,n[]={1,2,3,4,5};

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

{ n[i]=n[4-i]+1;

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

}

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

{ printf(""%d "",n[i]);

}

}

 

35、#include <stdio.h>

void main()

{  int i;

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

   {  if(i%2)

      putchar(‘<’);

      else

      continue;

      putchar(‘>’);

}

putchar(‘#’);

}

 

36、#include <stdio.h>

void main()

{ int i,j,m=0,n=0,k=0;

for(i=6; i<=9;i++)

    for(j=2; j<=3;j++)

   switch( i%j )

  {   case 0: m++; break;

   case 1: n++; break;

   case 2: k++; break;

   default: k++;n++;m++;

         }

printf(""%d %d %d\n"",m,n,k);

}

 

37、#include <stdio.h>

   #define MAX(a,b)  (a>b ? a : b)+1

   void main()

   { int i=6,j=8;

     printf(“%d\n”,MAX(i,j));

}

 

38、#include <stdio.h>

void main()

     { int x=4;

      if(x++>=5)

printf(“%d\n”, x) ;

else

      printf(“%d\n”, x--) ; 

}

 

39、#include <stdio.h>

    void main()

    { int a=0;

      a+=(a=8);

      printf(“%d\n”,a);

}

 

40、#include <stdio.h>

void  main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};

int i,s=0 ;

for(i=0;i<4;i++) s+=aa[i][2];

printf(“%d\n”,s);  

}

 

第二題 選擇題

1. 表示x≤0或x≥1的正確的表示式是

A. x>=1||x<=0     

B. x>1 || x<=0       

C. x>=1 or x<=0    

D. x>=1 || x<0

2. 以下能正確定義陣列並正確賦初值的語句是

A. int N=5,b[N][N];  

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

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

D. int d[3][2]={{1,2},{34}};

3. 以下不合法的賦值語句是

A. x=(1,y=2);

B. ++x;

C. x=y=15;

D. y=int(x);

4. C語言中,函式返回值的型別是由

A. return語句中的表示式型別決定

B. 呼叫函式的主調函式型別決定

C. 呼叫函式時的臨時型別決定

D. 定義函式時所指定的函式型別決定

5. 下面程式段的輸出結果是
int k=11;
printf(“%d,%o,%x”,k,k,k);

A. 11,12,11

B. 11,13,13

C. 11,013,0xb

D. 11,13,b

6. 對於int a[ ] = {1,2,3,4,5,6}, p;  p=a; *(p 3) = 2; 則*p, *(p 3)的值是

A. 1 5

B. 1 3

C. 1 4

D. 1 6

7. 以下選項中,與k= n完全等價的表示式是

A. k=n,n=n 1

B. n=n 1,k=n

C. k= n

D. k =n 1

8. 設有定義語句:char str[][20]={"Hello","Beijing"},*p=str;
則printf("%d\n",strlen(p+20)); 輸出結果是

A. 0

B. 5

C. 7

D. 20

9. 語句: printf("%d",(a=2)&&(b=-2)); 的輸出結果是

A. 無輸出

B. 結果不確定

C. 1

D. 2

10. 以下非法的賦值語句是

A. n=(i=2, i);

B. j ;

C. (i 1);

D. x=j>0;

11. 在微型計算機系統中,儲存一個漢字的國標碼所需要的位元組數是

A. 1

B. 2

C. 3

D. 4

12. 結構化程式的3種基本控制結構是

A. if-else結構、while結構、for結構

B. 順序結構、分支機構、迴圈結構

C. while結構、do-while結構、for結構

D. 以上三種都不對

13. 判斷字串s1是否大於字串s2,應該使用

A. if(s1>s2)

B. if(strcmp(s1,s2))

C. if(strcmp(s2,s1)>0)

D. if(strcmp(s1,s2)>0)

14. 設有如下程式段:<BR>int x=2, y=3;<BR>printf("%d\n",(x,y));<BR>則以下敘述中正確的是

A. 輸出語句中格式說明符的個數少於輸出項的個數,不能正確輸出

B. 執行時產生出錯資訊

C. 輸出值為2

D. 輸出值為3

15. 已知:int a[ ][3]={1,2,3,4,5,6,7,8,9,0}; 則陣列a的第一維的大小是

A. 2

B. 3

C. 4

D. 無法確定;

16. 已定義c為字元型變數,則下列語句中正確的是

A. c='97';

B. c="97";

C. c="a";

D. c=97;

17. 設有定義 int a=3,b=4,c=5; ,則以下表達式中,值為0的表示式是

A. a&&b

B. a<=b

C. a||b c&&b-c

D. !((a<b)&&!c||1)

18. 已知 int a=4,b=5; ,這執行表示式 a=a>b 後,變數a的值為

A. 0

B. 1

C. 4

D. 5

19. 以下關於C語言的不嚴格的敘述中,錯誤的說法是

A. 在識別符號中,大寫字母和小些字母的意義相同

B. 有些不同型別的變數可以在一個表示式中運算

C. 在賦值表示式中等號 “=”左邊的變數和右邊的值可以是不同型別

D. 同一個運算子號在不同的場合可以有不同的含義

20. 在C語言中,數字029是一個

A. 八進位制數

B. 十進位制數

C. 十六進位制數

D. 非法數

21. C語言中基本資料型別有

A. 整型、實型、邏輯型

B. 整型、字元型、邏輯型

C. 整型、實型、字元型

D. 整型、實型、字元型、邏輯型

22. 用陣列名作為函式呼叫時的實參,則實際傳遞給形參的是

A. 陣列的第一個元素值

B. 陣列中全部元素值

C. 陣列的首地址

D. 陣列的元素個數

23. 下程式段:  char  s[20 ]="xyz",  *sp=s; strcat(sp,"12345"); puts(sp); 的輸出結果是

A. xyz12345

B. 12345xyz

C. 12345

D. xyz

24. 假設已定義 char  c[8]= "test";  int  i; 則下面的輸出函式呼叫中錯誤的是

A. printf("%s",c);

B. for(i=0;i<8;i++) printf("%c",c[i]);

C. puts(c)

D. for(i=0;i<8;i++) puts(c[i]);

25. 設a=3,b=4,c=-5,則邏輯表示式:a || b c && b==c 的值是

A. 1

B. 0

C. 非0

D. 語法錯

26. 已定義c為字元型變數,則下列正確的賦值語句是

A. c='66';

B. c="66";

C. c="B";

D. c=66;

27. 以下非法的賦值語句是

A. n=(i=2, i);

B. j ;

C. (i 1);

D. x=j>0;

28. 以下選項中合法的實型常數是

A. 5E2.0

B. E-3

C. 2.00E-01

D. 1.3E

29. 設有定義 char *p=“abcde\0fghjik\0”; 則printf(“%d\n”,strlen(p));輸出結果是

A. 12

B. 15

C. 6

D. 5

30. 能將高階語言編寫的源程式轉換為目標程式的軟體是

A. 彙編程式

B. 編輯程式

C. 解釋程式

D. 編譯程式

31. 結構化程式設計的三種基本結構是

A. 順序結構、選擇結構、迴圈結構

B. if、switch、break

C. for、while、do-while

D. if、for、continue

32. 在一個C程式中

A. main函式必須出現在所有函式之前

B. main函式可以在任何地方出現

C. main函式必須出現在所有函式之後

D. main函式必須出現在固定位置

33. 以下合法的字元常量是

A. ‘\084’

B. ‘ab’

C. ‘\x43’

D. “\0”

34. 用8位無符號二進位制數能表示的最大十進位制數為

A. 127

B. 128

C. 255

D. 256

35. 設有定義:int  x=0,y=1,z=1;則執行表示式:x=y >z--後,x,y,z的值分別是

A. 1,1,1

B. 1,2,0

C. 0,1,1

D. 0,2,0

 

第三題 程式設計題

1. 設有分段函式:

x           (x<1)

Y=      2x-1        (1≤x<10)     寫一程式,輸入 x,輸出 y 的值。

3x-11       (x≥10)

 

2. 寫一個判斷素數的函式。要求在主函式中輸入一個整數並輸出相應的判斷資訊。

 

3.程式設計任意輸入兩個實數a和b,計算下面函式的值,並輸出y值。

           a-b       a>b

   y=            a<b

 a*b       a=b

4.程式設計序計算 s=1!-2!+3!-4!+ …… -10! ,並輸出結果。

5. 從鍵盤輸入10個評委給參賽選手打的分,去掉一個最高分和一個最低分,求選手的得分(平均分)。

6. 編寫函式change使輸入的字串按反序存放,在主函式中輸入和輸出字串。例如輸入是:12345abcde,則輸出為:edcba54321

7.  計算s=1+12+123+12345+123456+1234567(要求用迴圈語句實現)

8.  編寫一個函式,將一個字串(最多80個字元)中的大寫字母變為小寫字母,小寫字母變為大寫字母。要求字串的輸入與輸出在主函式中完成。

 

 

夜光:參考答案

第一題 讀程式寫出程式執行結果

1. 6

2. 0

3. 4,3,1

4. a=2,b=1

5. t=2

6. area=18

7. 32

8. 5,9

5,9

9. 12

10. 8 10 12

11. gfedcba

12. WELCOME

13. 13,13

14. 14

15. pass!warm!

16. 3,3

17. 18

18. red

19. 84

20. 4,3,5

21. 7654321

22. 8

23.  *

**

24. 11122

25. 123是3位數

26. abc

defg

abcdefg

27. 6565345

28. max=10,row=1,colum=2

29. good

30. 8

31. 432

32. 6

33. 2

34. 6565345

35. <><>#

36. 4 3 1

37. 9

38. 5

39. 16

40. 29

 

第二題 選擇題

1-5  ADBDD    6-10  DBCCC     11-15  BBBDC    16-20  DDAAD   21-25   CCADA

26-30  DCCDD   31-35  ABCCD

 

第三題 程式設計題

1.1、

#include <stdio.h>

void main()

{

 int x,y;

 printf(“輸入x:”);

scanf(“%d\n”,&x);

 if(x<1)

   {y=x;

printf(“x=%3d,y=x=%d\n”,x,y);

}

 else  if(x<10)

{y=2*x-1;

printf(“x=%3d,y=2*x-1=%d\n”,x,y);

}

else

{y=3*x-11;

 printf(“x=%3d,y=3*x-11=%d\n”,x,y);

}

}

 

2、

#include  <stdio.h>

void main()

{   

int prime(int);

int n;

printf(\ninput an integer:);

    scanf("%d",&n);

    if(prime(n))

    printf("\n %d is a prime. \n",n);

    else

    printf("\n %d is not a prime. \n",n);  

}

int prime(int n);

{

 int flag=1,i;   

 for(i=2;i<n/2&& flag==1; i ++)

    if(n%i==0)

    flag=0;

    return (flag);    

}

 

3、

#include <stdio.h>

void main()

{

float a,b,y;

scanf(“%f,%f”,&a,&b);

if(a<b)

 y=a/b;

else

 if(a==b)y=a*b;

 else y=a-b;

printf(“y=%f\n”,y);

}

 

4

#include <stdio.h>

void main()

{int i,k=1,njie=1;

 float sum=0;

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

{njie=njie*i;

sum=sum+njie*k;

k=-1*k;

     }

printf("%f\n",sum);

}

 

5

#include <stdio.h>

int main()

{   

int a[10],i,max,min;

float sum;

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

 {

  scanf("%d",&a[i]);

 }

 max=a[0];

 min=a[0];

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

 {

  if(max<a[i])

  max=a[i];

  else if(min>a[i])

  min=a[i];

 }

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

 {sum=sum+a[i];}

 sum=(sum-max-min)/8;

 printf("%f\n",sum);

}

}

 

6

void main()
{
   char a[100];
   gets(a);
   change(a);
   puts(a);
}

#include<stdio.h>
#include<string.h>
void change(char a[])
{
  int i,j,k;
  char temp;
  k=strlen(a);
  for(i=0;i<k;i++)
  for(j=i+1;j<k;j++)
  {
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
   }
}

 

7

#include <stdio.h>

void main()

{

 long int t=0,s=0,i;

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

 {t=i+t*10;s=s+t;}

 printf(”s=%ld\n”,s);

}

 

8

#include <stdio.h>

void main()

{

 int i;

 char a[80];

 gets(a);

 puts(a);

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

 if(a[i]>=65&&a[i]<=90)

   a[i]=a[i]+32;

   puts(a);

}

22題答案:#define N 10;
main()
{
int i,j;
int a[N][N];
int sum=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==j||(i+j==N))//i==j是判斷是否主對角線的元素 i+j==N 是判斷是否是次對角線的元素
sum+=a[i][j];
printf("%d",sum);
}