欢迎光临散文网 会员登陆 & 注册

C语言程序设计复习题

2022-03-21 09:06 作者:答案鬼  | 我要投稿

C语言程序设计

一、单项选择题

若以下各题所有库函数都可以合法使用,且变量定义如下:

int  m=5, i=3,j=2,*p, a=8,b=0;

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

float x=2.5,y=3.0;

double  z=0; long n=1;

char  c=’A’,ch[20]={’a’,’b’,’c’,’\0’,’d’,’\0’};

struct student

 {  int num;

    char name[20];

float score;

struct student *next;

}st1,st2,*ps;

FILE *fp;

 1.若将3和10从键盘输入给变量a、x,输入语句为scanf(“a=%d,x=%f”,&a,&x);正确的键盘输入是(↙表回车):

 A a=3,x=10↙   B 3,10↙   C 3  10↙    D 3,10.0↙

2. 以下不是死循环的语句是:

A  for (  ; ;y+=i++);      

B  while(a) y+=i++ ;

C  do{ y+=i++}while (a>0);

D  for (b=0;(c=getchar()!=’\n’);)b++;

3.若p=arr;正确的语句是:  

A  *p=arr[10];  B  *p=arr[2*a];

C  p=arr[5];   D  p[i]=arr[0];

4.若ps=&st1;则下面描述正确的是:

 A  ps->num与st1->num等价。 B  ps.num与st1.num等价。

 C  ps->num与num等价。      D  ps->num与st1.num等价。

5.语句printf(“%d",a<i>j);的输出结果是:

A  1           B  0          C 8         D都不对

 6.表达式 j/i+a%i+x  的值是:

A  6           B  4.5       C  6.0       D 5.5

 7.表达式 b||a+i&&i<j  的值是:

A  不确定      B  0.0       C 1           D 0

8.若执行语句 a=b+=3*j+(int)x;则b的值为:

A  1        B  8          C  0         D 8.5

9. 若执行语句 a=b>j ?++i : i++;则a与i的值分别为:

A  4 ,4      B  3 ,4       C  4 ,3     D  3 ,3

编辑切换为居中

11.将字符串“Wan    Ming”输入数组ch中,正确的是:

  A、scanf(“%s”,ch)           B、scanf(“%s”,&ch)    

C、ch=“Wan    Ming”       D、gets(ch)

12. 执行语句printf(“%c”,td[1][0]+’A’)的结果是:

  A、A                B、B

C、D                       D、E

13.下列关于main()函数说法正确的是

A、 C语言程序总是从main()开始执行

B、 C语言程序可以没有main()函数

C、C语言程序可以包含多个main()函数,但必须在不同的模块中

D、C语言程序中main()函数不能有形式参数

14.下列关于函数说法正确的是

A、 C语言程序的函数内还可定义其他的函数

B、 C语言程序的函数内不可再定义其他的函数

C、 C语言程序的函数不能自己调用自己

D、 C语言程序中只有同一源文件中的函数才能有调用与被调用关系

15.若#define squ(x) x*x 执行语句printf(“result=%d”,squ(i+j));结果为:

A、result=36      B、36        C、result=11      D、11

16. 若#define squ(x) (x)*(x) 执行语句printf(“result=%d”,squ(i+j));结果为:

A、result=36      B、result=17     C、result=11      D、result=25

17.C语言对宏命令叙述正确的是

A、 宏替换占用运行时间

B、 编译程序对宏命令的处理是在对源程序中其它成分编译之前进行的

C、 宏命令的处理是在程序执行时进行的

D、 宏命令的处理是在程序连接时进行的

18. 若执行语句a- =a+=a*=10;a的值为:

A、0              B、-10           C、-100           D、100

19.若执行语句p=arr; printf(“%d”,*(p+i));输出结果为

A、0              B、2          C、3              D、1

20.若执行printf(“%s”,ch);结果为:

A、’abc’          B、abc        C、abcd       D、abc\0d

21.若对数组进行初始化:char carr[ ]={’s’,’t’,’u’,’d’,’e’,’n’,’t’},barr[ ]=”student”;则正确的是

A、carr与barr长度相同 B、carr比barr长

C、carr与barr相同 D、carr比barr短

22.若有说明语句int (*p)[N];则p是

A、N个指向整型变量的指针 B、可指向有N个整型元素的一维数组的指针

C、指向N个整型变量的函数指针 D、有N个指针元素的一维指针数组

23.若有说明语句int *f( );则函数f是

A、f是一个指向整型变量的数组指针 B、f返回一个整型数据

C、f是一个指向整型变量的函数指针 D、f 返回一个整型指针,指向函数本身

24.若函数f定义如下:void f(char *d, char *s)

{ while ( *d++=*s++);

}

函数f的功能是:

A、串比较 B、串复制 C、求串长 D、串反向

25.表达式100+a+’a’+x*z的值的数据类型为

A、int    B、float    C、double D、char

26.若要动态申请一个double型内存单元,正确的语句是

A、pd=double  malloc(sizeof(double)) B、pd=( * double)malloc(sizeof(double))

C、pd=double * malloc(sizeof(double)) D、pd=(double *)malloc(sizeof(double))

27.若要从键盘上输入67892到变量n中,正确的语句是

A、scanf(“%lf”,&n);           B、scanf(“%ld ”,&n);  

C、scanf(“%lf ”,n);               D、scanf(“%d ”,&n);    

28.判断字符变量c是否不为小写英文字母的正确表达式是

A、’a’<=c <=’z’              B、c>= ‘a’ && c<=’z’

C、’a’≤c ≤’z’                 D、c<’a’ || c>’z’  

29.下列每组表达式被执行后,结果完全等价的是

A、 !(b= =0)与 !(!b )    B、b=(a=4,4*5) 与 b=a=4,4*5

C、float(i/j) 与 float i/j      D、0<x<100  与 x>0 && x<100

30.表达式(m&1)==(m%2)的值是

A、 0  B、无法确定

C、 1       D、以上都不对

31.数学式ln2x+asin(60°)的C语言表达式是

A、log(2*x)+a*sin(60)          B、ln(2*x) +a*sin(60/180*3.14)

C、ln(2*x) +a*sin(60)      D、log(2*x)+a*sin(3.14*60/180)  

32. 要打开一个已经存在的非空文件file用于修改,则正确的语句是

A、fopen(“file”,”r+”)          B、fopen(“file”,”w”)  

C、fopen(“file”,”a+”)           D、fopen(“file”,”r”)  

33. 若打开文件时发生错误,则fopen()函数的返回值是

A、1  B、0   C、不确定      D、没有返回值

34. 调用函数fseek(fp,-25L,2),其操作结果是

A、 文件位置指针从文件开始处前移25字节

B、文件位置指针从文件结尾处后移25字节

C、文件位置指针从文件当前位置处前移25字节

D、文件位置指针从文件当前位置处后移25字节

35. 能正确表示a和b同时为正或同时为负的逻辑表达式是

A、 (a>=0||b>=0)&&(a<0||b<0)

B、 (a>=0&&b>=0)&&(a<0&&b<0)

C、 (a*b>0&&(a*b<=0)

D、 a*b>0

36. 若x=y=z=1;表达式(x--||++y)&&(z++)执行后,x,y,z的值分别为:

A. 0,1,1      B. 0,1,2 C. 0,2,1     D. 0,2,2

37.下列变量的初始化,不正确的是:

A. int x,y=5;          B. float x=y=3.5;

   C. char s[]=”a”;          D. int a[][3]={{1},{},{0,9}};

38. 可以代替while(x!=0)中的条件x!=0的是:

A. x   B. !x        C. x==1        D. x!=1

39.有关函数参数,下列说法不正确的是:

A. 实参和形参是不同的变量;   B. 实参可以将数据传给形参;

C. 形参可以将数据传给实参;   D. 实参和形参必须个数相等,类型一致。

40.为避免嵌套的条件语句if-else的二义性,C语言规定else与if的配对原则是:

A. 同一行上的未配对if        B. 缩排位置相同的未配对if      

 C. 它之前最近的未配对的if   D. 它之后最近的未配对if

41.对于一个二维数组,以下几种方法中,不能正确表示i行j列元素的是:

A.td[i][j]    B. *(td[i]+j)    C. *(*(td+i)+j)    D.*(td+i+j)

42.下面语句段不是死循环的是:

A. for(i=1;;i++)                 B. k=0;

        s=s+i;                         do{ k++;

                                       }while(k>0);

  C. i=0;                           D. a=1;

     while(1)                          while(a<10)

     { i++;                            { if(a>5) continue;

       if(i==20) break; }                a++; }

43.下列字符串中,可以用作变量名的是:

A. _out2      B. 12abc     C. while        D. stu&3

44. 表达式0<a<5和0<a&&a<5的值分别为:

A. 0和0       B. 0和1       C. 1和0     D. 1和1

45.下列常数中,符合C语法规则的是:

A. ‘\’        B. .5e2        C. 018        D. e3

46.以下为合法的整型常量的是:

A. 027a    B. 0.0    C.  0x4e3    D.  3×102  

47.以下为合法的整型常量的是:

A. ‘3’       B. 281    C. 5af D. ‘\101’

48.以下为合法的实型常量的是:

A. 1.5×102    B. 1e-5    C.  1e1.5   D.  E+5  

49.以下为合法的实型常量的是:

A. π        B.  .5     C.  025.3     D.   0

50.以下为合法的字符型常量的是:

 A. "A"    B. 64      C. '啊 '    D. '\n'

51. 以下为非法的字符型常量的是:

A. ‘ok’       B. ‘*’   C. ‘A’      D.‘\111’

52. 以下为合法的变量定义的是:

A. #define N 10  B. int a=12,b,c;  float x,y,a=1.5;

int  a[3*N];                            

C. int m,f(x);        D. char c,*pc=&c,n;  

53.以下为非法的变量定义的是:

A. char 21cn;           B. int  k=0,*p=&k;

C. int  a=b=c=21;       D. static char[4]=”Good”;

54.以下是合法的表达式的是:

A. y=mn    B. (x+y)++      C. x+y=8     D.  putchar('A ')

55. 以下是非法的表达式的是:

A. a+=b*c      B. i=0,k=k++    C. k==0       D.  !a||m≤n &&7

56.下是非法赋值语句的是:

A.a+b=0                 B. pc=&x        

C. ps->name=”Tan Jing”   D. static char[4]=’G’,’o’,’o’,’d’

二、程序理解题(指出程序执行的结果)

1.   #include <stdio.h>

main( )

{ int i,j,x=0;

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

{  x++;

for (j=0;j<3;j++) { if  (j%2 ) continue;

    x++;

}

 x++;

 }

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

}  

2.     #include <stdio.h>

main( )

{ int k=0,j,x=0;

while (k<2)

{  ++x;

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

{ if  (j%2 )  break;

  x++;

}

           k++; ++x;

          }

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

}  

3. #include <stdio.h>

main()

{int  a=2,b=7,c=5;

switch (a>0)

{case 1:switch (b<0)

      { case 1: printf(“$”);break;

        case 2: printf(“!”); break;

       }

case 0: switch (c= =5)

      { case 0: printf(“*”);break;

       case 1:printf(“#”);break;

       default: printf(“%”);

       }

default: printf(“&”);

} printf(“\n”);

}  

 

4.      main()

{ int  i,sum=0;

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

  { sum+=i;

    if (sum>10)  break;

    printf(“sum=%-5d\n”,sum);

}

}  

5.      若输入字符串program时,下列程序输出为:

#include <stdio.h>

main()

{ char str[80];

void prochar(char *str,char ch);

 scanf(“%s”,str);

 prochar(str,’r’);

 puts(str);

}

void prochar(char *str,char ch)

{ char *p;

 for (p=str;*p!='\0';p++)

    if (*p==ch){*str=*p;(*str)++;str++;}

 *str='\0';

}

6.  #include <stdio.h> #include <string.h>

main()

{ int  i,j,temp, d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}};

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

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

      if (d[i][j]>d[j][i]) d[j][i]=d[i][j];

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

 { printf("\n");

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

   if (j>=i) printf("%6d",d[i][j] ) ;

   else      printf("%6c",' ') ;

  }

}

7.       #include<stdio.h>

main()

{ int k;

 printf("\n");

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

switch(k%2)

   {case 0: printf("#");break;

    case 1: k+=2;printf("*");

    defalt: printf("\n");

}

}  

8.      int d=1;

 fun(int p)

 { static int d=5;

   d+=p;

   printf("(f)%-4d",d);

   return (d);

   }

  main()

   {int  a=3;

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

   }

9. #include <stdio.h>  main()

{char a[2][6]={"sun","moon"};

int j,i,len[2];

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

  { for (j=0;j<6;j++)

      if (a[i][j]=='\0')

         {  len[i]=j;

break;

}

    printf("%8s:%d\n",a[i],len[i]);

   }

10. int x=2,y=4;

f1(int x)

{ x++;y++;

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

}

f2(int *y)

{ x++;(*y)++;

 printf(“f2:x=%d,y=%d\n”,x,*y);

}

main()

{ int y=6;

 f1(x);f2(&y);

 printf(“main:x=%d,y=%d”,x,y);

}

三、程序填空题

1.从键盘输入两个整数,按由大到小输出,程序如下:

 main( )

 {   int  a,b;

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

 if (  ) swap( );

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

}

void swap(int * x,int * y)

 {   ;

 t=  *x;    ;  *y=t;

 }

2.输入任意多个十进制正整数,将其对应的二进制数的各位反序,形成新的十进制数输出。当输入0时程序结束。例如:输入13,13→1101→1011→11,输出11。

#include <stdio.h>

main()

{ int  x,y,m,t;

 printf(“Enter a integer:”);

scanf(“%d”,&x);m=x;

while ( )

{ y=0;

do

{ t=x%2;

       y=

      x=x/2;

} while (    );

printf(“\nOld integer is:%d,New integer is:  %d”,m,y);

printf(“Enter a integer:”);

scanf(“%d”,&x);

}

}

3.  以下函数creatlist用来建立一个带头节点的单向链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回。读入时字符以#表示输入结束(#不存入链表)。

struct node

{char data;

struct node *next;

};

  creatlist()

{struct node *head,*s,*r;char ch;

head=(struct  node *)malloc(sizeof(struct  node));

r=head;

ch=getchar();

 while (ch!=’# ’)

{s=(struct node *)malloc(sizeof(struct node));

  s->data=  ;

r->next=s;

 

  ch=getchar();

}

  r->next=  ;

 ;

}

4. 程序功能:输出10~100之间的全部素数,每行显示5个。

#include <stdio.h>

main()

  { int i, j,  

    for(i=11; i<=100; i+=2)  

      { for(j=2;        ; j++)  

        if(i%j= =0)   ;  

        if( j >= i ) {   ;

counter++;

if(         )  printf("\n");

 }

      }

}

5. 求菲波那契数列第n项的值。n由键盘输入。菲波那契数列的第一、二项为1,以后各项为前两项之和。即:f1=f2=1,fn=fn-1+fn-2

#include <stdio.h>

main()

{ int k,n,f1,f2,f;

  scanf( ) ;

  f1=f2=1;

  if  ( )  f=1 ;

  else   for (  ;k<=n;k++)

 { f=f1+f2 ;

  f1=f2;

   ;

  }

   printf("fibonacci number=%d\n",f);

 }

6.从键盘上输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。

#include <stdio.h>

       main()

{int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter a data:");

scanf("%d",&data);

;

for (k=8; ;k- -)

 if (a[k]<a[k-1]) { ;

      a[k]=a[k-1];

      a[k-1]=temp;

      }

 else  ;

 for (k=0; ;k++)

   printf("%7d",a[k]);

}

7.求1!+2!+…+9!+20!,程序如下:

  #include <stdio.h>

  main()

  {float  sum=0;   int k;

 

for (k=1;            ;k++)

 sum+=jiecheng(k);

printf( ,sum);

}

float   jiecheng(int  n)

{ int j;

for (j=1; ; j++)      t=t*j;

 

}

8. 从键盘上输入一个整数字符串,将其转换为一个整数,如输入“-1234”转换为-1234。

#include<stdio.h>

#include<string.h>

main()

{char s[6];

int n;

gets(s);

if (*s=='-') n= ;

else n=chnum(s);

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

}

int  chnum(char *p)

{ int num=0,k,len,j;

  len=strlen(p);

  for (; ;p++)

    {k=            ;

     j=(--len);

     while (j-->0)  ;

     num=num+k;

}

  ;

}

9.以下程序从键盘输入10个不相同的数到数组a中,再输入一个数到x中,在a中查找与x值相同的元素所在的位置,填空完善该程序。

main()

{int a[11],x,i;

printf("Input 10 integers:\n");

for(i=1; ;i++)

    scanf("%d", );

printf("Input x:");

scanf("%d",&x);

*a=x;i=10;

while (x!=*(a+i))

 

if ( ) printf("%6d's position is :%3d\n",x,i);

else printf("%6d Not bee found !\n",x);

}

10. 从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。           #include <string.h>            main()

{int i=0,c[52]={0},m=0;

char str[80];

printf("Input a string:");

scanf( ,str);

while (str[i])

{ if (str[i]>='A' &&  ) c[str[i]-'A']++;

  if (str[i]>='a' && str[i] <='z')  ;

  i++;

}

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

   if (c[i]){ if (m%8==0) putchar('\n');m++;

    printf("%c:%-d ",i+'A',c[i]);

   }

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

   if (c[i+26]){if (m%8==0) putchar('\n');m++;

   printf("%c:%-d ", ,c[i+26]);

  }

}

四、用波浪线标出错误,并在空白处改正(不要重写程序)

1. 从键盘上输入一个数,判断其是否为素数

#include<stdio.h>

main()

{ int a,flag,k;

 scanf(“%d”,a);flag=1;

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

if (a/k=0) {break;flag=0;}

       if (flag=0);

       printf(“%d” is a prime number”,a);

}

编辑切换为居中

#include <stdio.h>

main()

{ float x,y;

 printf("Input  a data:");

 scanf("%d",%x);

 if (x<0 && x>=10 )  printf("Input error!\n");

else { if (0≤x<1)  y=2-x;

else if (x<3) y=1+1/2x;

   else if (x<6)  y=2-0.5*(x-3.0);

  if (x<10)   y=x2;

  printf("x=%.2f,y=%.1f\n",x,y);

  }

}

编辑切换为居中

4. 将“computer”按逆序显示,程序如下:

#include <stdio.h>

main()                    

{char  a[]=‘computer’;  

void print(char *str)    

print(&a);                

}

void print(char *str)

{char *str ;

 int count ;

 if (*str!='\0')

{ while (*str){ str++;count++;}

  str - -;

  while(count- -){printf("%c", str);str++ ;}    

 }

}

5.求满足如下条件的最大自然数n.:12+22+32+…+n2≤1000

#include <stdio.h>;

main()

{int n=s=0;

while (s<=1000);

{ n++;

  s+=s+n*n;

}

print("n=%d",n );

}_

五、编程题

1.从键盘上输入不超过50个非0数,计算这些数的平均值并输出,输出高于平均值的数。输入0时结束。

2.计算

编辑

3. 回文是从前向后读与从后向前读都是一样的句子。编写一函数判断字符串是否为回文。字符串(少于80字符)从主函数中输入。

4. 公鸡5元一只,母鸡3元一只,小鸡一元3只,100元买100鸡,求有多少中买法并输出所有可能的买法,。

5.求1000以内的完全数。一个整数如果正好等于它的因子之和(自身除外),则称该数是完全数。如6=1+2+3,所以6是完全数。

6.用下面的公式求π的近似值,要求最后一项的绝对值小于10-4为止。

公式为:π/4≈1-1/3+1/5-1/7+1/9-1/11+…

题型题量及分值

一、选择题:在每小题给出的四个选项中,只有一项是符合题目要求的,请把所选项前的字母填在题后的括号内。

二、阅读程序,写出执行结果。

三、程序填空题。

四、程序改错题。用波浪线标出错误,在空白处改正(不得重写程序)。

五、编写程序。

参 考 答 案

一、单项选择题

1. A    2. D  3. D   4. D  5. B    6. B    7. D    8. B   9. B   10. A

  11.D   12.D  13. A  14.B  15.C    16 .D   17.B   18. A   19.C   20.B

  21. D  22. B  23 .C    24 B  25.C   26.D   27.B   28 D   29 A   30.C

31. D  32.A   33 . B   34. B   35. D   36.B   37.B    38.A    39.C  40.C

41.D   42. C  43. A    44.C   45.D    46.C    47.B    48.B   49.B  50.D

51. A  52. A   53.B   54. D   55. D   56.C

二、程序理解题(指出程序执行的结果)

1.  x=8

2.  程序输出为:x=6

3. 程序输出为:#&

4.  程序输出为:

 sum=1  

sum=3  

sum=6

sum=10

5.当键盘输入program.时,下列程序的输出:  pogam

6.  程序输出为:  1    5   4   4

6   7   8

2  3

4

7. 程序输出为:

      *

            #*

            #*

 

8. 程序输出为:

        (f)6   (f)24

             (m)24

9 .   sun:3

moon:4

10.     f1:x=3 ,y=5                

f2:x=3 ,y=7                      

main:x=3 ,y=7

三、程序填空题

1.void swap(int * x,int * y); a<b; &a,&b; int  t;   *x= *y;

2.x!=0 、 y+2*t     、 x!=0     、  m=x;

3. 以下函数creatlist用来建立一个带头节点的单向链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回。读入时字符以#表示输入结束(#不存入链表)。

struct node

{char data;

struct node *next;

};

struct node  creatlist()

{struct node *head,*s,*r;char ch;

head=(struct  node *)malloc(sizeof(struct  node));

r=head;

ch=getchar();

 while (ch!=’# ’)

{s=(struct node *)malloc(sizeof(struct node));

  s->data=  ch      ;

r->next=s;

r=s;

  ch=getchar();

}

  r->next=  NULL      ;

 return head;

}

4. 输出10~100之间的全部素数,每行显示5个。

#include <stdio.h>

main()

      { int i, j, counter=0;

  for(i=11; i<=100; i+=2)  

  { for(j=2; j< i; j++)  

        if(i%j= =0)   break;  

        if( j >= i ) { printf("%8d",i);

counter++;

if(counter%5= =0)  printf("\n");

 }

      }

}

5. 求菲波那契数列第n项的值。n由键盘输入。菲波那契数列的第一、二项为1,以后各项为前两项之和。即:f1=f2=1,fn=fn-1+fn-2

#include <stdio.h>

main()

{ int k,n,f1,f2,f;

scanf("%d",&n) ;

  f1=f2=1;

  if  (n<=2)  f=1 ;

  else   for ( k=3;k<=n;k++)

 { f=f1+f2 ;

  f1=f2;

  f2=f;

  }

   printf("fibonacci number=%d\n",f);

 }

6.从键盘上输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。

#include <stdio.h>

        main()

{int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50};

printf("\nEnter a data:");

scanf("%d",&data);

a[8]=data;

for (k=8;k>0;k- -)

 if (a[k]<a[k-1]) { temp=a[k];

      a[k]=a[k-1];

      a[k-1]=temp;

      }

 else break;

 for (k=0;k<=8;k++)

   printf("%7d",a[k]);

}

7.求1!+2!+…+9!+20!,程序如下:

  #include <stdio.h>

  main()

  {float  sum;   int k;

float  jiecheng(int  n);

sum=0;

for (k=1;k<=20;k++)  sum+=jiecheng(k);

printf(“sum=%.1f”,sum);

}

float   jiecheng(int  n)

{ int j; float  t=1;

for (j=1;j<=n; j++)      t=t*j;

  return   t;

}

8. 从键盘上输入一个整数字符串,将其转换为一个整数,如输入“-1234”转换为-1234。

#include<stdio.h>

#include<string.h>

main()

{char s[6];

int n;

gets(s);

if (*s=='-') n=-chnum(s+1);

else n=chnum(s);

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

}

int  chnum(char *p)

{ int num=0,k,len,j;

  len=strlen(p);

  for (;*p!='\0';p++)

    {k=*p-'0';

     j=(--len);

     while (j-->0) k=k*10;

     num=num+k;

}

return num;

}

9.  以下程序从键盘输入10个不相同的数到数组a中,再输入一个数到x中,在a中查找与x值相同的元素所在的位置,填空完善该程序。

main()

{int a[11],x,i;

printf("Input 10 integers:\n");

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

    scanf("%d",a+i);

printf("Input x:");

scanf("%d",&x);

*a=x;    i=10;

while (x!=*(a+i))

i--;

if (i) printf("%6d's position is :%3d\n",x,i);

else printf("%6d Not bee found !\n",x);

}

10. 从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。

#include <string.h>            main()

{int i=0,c[52]={0},m=0;

char str[80];

printf("Input a string:");

scanf("%s",str);

while (str[i])

{ if (str[i]>='A' && str[i] <='Z') c[str[i]-'A']++;

  if (str[i]>='a' && str[i] <='z') c[str[i]-'a'+26]++;

  i++;

}

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

   if (c[i]){ if (m%8==0) putchar('\n');m++;

    printf("%c:%-d ",i+'A',c[i]);

   }

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

   if (c[i+26]){if (m%8==0) putchar('\n');m++;

   printf("%c:%-d ",i+'a',c[i+26]);

  }

}

四、用波浪线标出错误,并在空白处改正(不要重写程序)

1.从键盘上输入一个数,判断其是否为素数

#include<stdio.h>

main()

{ int a,flag,k;                      改为:

 scanf(“%d”,a);flag=1;                  &a

 for (k=2;k<i;k++)                      k<a

if (a/k=0) {break;flag=0;}        a%d==0 {flag=0;break;}

       if (flag=0);                          (flag==1)  去掉;

       printf(“%d” is a prime number”,a);

    }

2.计算分段函数的值


            2-x           0≤x<1

            1+1/2x        1≤x<3

     y=     2-0.5(x-3)     3≤x<6

            x2                        6≤x<10

#include <stdio.h>

main() 改为:

{ float x,y;

 printf("Input  a data:");

 scanf("%d",%x); “%f”,&x

 if (x<0 && x>=10 )  printf("Input error!\n");  ||

else { if (0≤x<1)  y=2-x;  x>=0 && x<1

else if (x<3) y=1+1/2x; y=1+1.0/2*x;

   else if (x<6)  y=2-0.5*(x-3.0);

  if (x<10)   y=x2; else if (x<10)y=x*x;

  printf("x=%.2f,y=%.1f\n",x,y);

  }

}

编辑切换为居中

4. 将“computer”按逆序显示,程序如下:

#include <stdio.h>

main()                    改为:

{char  a[]=‘computer’;   “computer”

void print(char *str);

print(&a);                       a

}

void print(char *str)

{char *str ;    char *str  

 int count  ;   count=0;

 if (*str!=\0)                        ‘\0’

{ while (str){ str++;count++;}      *str

  str - -;

  while(count- -)

{printf("%s", *str);str++ ;}      %c   str--

 }

}

5.求满足如下条件的最大自然数n.:12+22+32+…+n2≤1000

#include <stdio.h>;  去掉;

main()

{int n=s=0;  n=0,s=0;

while (s<=1000);

{ n++;

s+=s+n*n;                    s=s+n*n;

}

print("n=%d",n );             printf

}

五、编程题

1. 从键盘上输入不超过50个非0数,计算这些数的平均值并输出,输出高于平均值的数。输入0时结束。

#include <stdio.h>

main()

{ float data[50],ave,sum=0,x;

 int i,n=0,count;

 printf("Input  data:");

 scanf("%f",&x);

  while (x!=0&&n<=50)

  { sum+=x;

    data[n++]=x;

    scanf("%f",&x);

  }

 ave=sum/n;

 printf("average= %f\n",ave);

 for (count=0,i=0;i<n;i++)

   if (data[i]>=ave)

     { printf("%f\n",data[i]);

 count++;

      if (count%8= =0) printf(“\n”);

     }

}


编辑切换为居中

#include <stdio.h>

main()

{ int i,n,s;        

  float sum;

  scanf("%d",&n);

  s=0;   sum=0.0;

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

  { s+= i;

sum+=1.0/s ;    

}

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

 }

3. 回文是从前向后读与从后向前读都是一样的句子。编写一函数判断字符串是否为回文。字符串(少于80字符)从主函数中输入。

#include <stdio.h>

#include <string.h>

int huiwen(char str[])

{ int i=0,j, flag=0;

j=strlen(str)-1;

 while (i<j&&str[i]= =str[j]) { i++; j--;}

 if (i>=j) flag=1;

 return flag;

}

main()

{ char str[80];

 printf("Enter string:");  gets(str);

 if (huiwen(str))  printf("%s is a palindroma\n",str);

 else      printf("%s is not palindroma\n",str);

}

4. 公鸡5元一只,母鸡3元一只,小鸡一元3只,100元买100鸡,列出所有可能的买法。

main()

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

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

   for (j=1;j<=33;j++)

   {k=100-i-j;

   if (i*5+j*3+k/3==100) && (k%3==0) /* ((i*15+j*9+k==300)) &&(k%3==0))*/

      {printf("i=%5dj=%5dk=%5d\n",i,j,k);m++;}

   }

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

}_

5.求1000以内的完全数。一个整数如果正好等于它的因子之和(自身除外),则称该数是完全数。如6=1+2+3,所以6是完全数。

#include <stdio.h>

  main()

  {int  k, s=0,a;

    for (a=1;a<=1000;a++)

      { for(k=1;k<=a/2;k++)

         if (a%k= =0) s+=k;

        if (s= =a) printf(“%-5d”,a);

      }

   }

6.用下面的公式求π的近似值,要求最后一项的绝对值小于10-4为止。

公式为:π/4≈1-1/3+1/5-1/7+1/9-1/11+…

#include <stdio.h>

#include <math.h>

main()

{ float pi,temp,n;

 int s=1;

 pi=0; n=1; temp=1;

 while (fabs(temp) >= 1e-4)

 {  temp=s/n;

    pi+=temp;

    n+=2;

    s=-s;

 }

 pi=pi*4;

 printf("pi = %.4f\n",pi);

}


C语言程序设计复习题的评论 (共 条)

分享到微博请遵守国家法律