c语言练习题

一、选择题

1.一个C语言程序是由(a  )构成。

A.语句   B.行号 C.数据 D.函数

 

2.下面标识符中正确的是(b   )。

A.d&ef   B.6a C.z4x5c    D.a3/b4

 

3.在C语言中,存储一个字符型、整型、单精度实型变量所需的空间是(b)。型、单精度实型变量所需的空间是()。

A.1、2、4 B.1、1、4   C.1、2、8  D.2、2、8

 

4.为了避免嵌套的条件分支语句 if--else中的else总是与( c ) 组成成对关系。

A.缩排位置相同的    B.在其之前未配对的

C.在其之前未配对的最近的if D.在同一行上的if

 

5.下列表达式的结果正确的是()。

int  aa,bb,cc,dd;

aa=bb=cc=dd=1;sp; aa=bb=cc=dd=1;sp; aa=bb=cc=dd=1;

(aa+1==2)?bb=aa+2:aa+3

A.2  B.3  C.  1 D.5

 

6.设有int x=11 ;则表达式(x+1/3)的值是( c  )。

A.3 B.4 C.11 D.12

 

7.设有字符串A=“He has 钱!”,则该字符串的长度为( a  )。

A.9   B.10  C.11  D.8

 

8.有如下程序段,则正确的执行结果是(b)

int m=3;

while(m<=5)

{

printf("%d   ",m-3); 

m++;

}

A. 0  0  0 B.0  1   2   C.1  2   3 D.无结果

 

9.执行语句:printf("%d",(a=2)&&(b= -2);后,输出结果是(   )。

A.无输出 B.结果不确定  C.-1  D.1   

 

 

10.有如下定义类型语句,若从键盘输入数据,正确的输入语句是(   )。

int  x;Char  y;Char  z[20];

A.scanf("%d%c%c",&x,&y,&z); B.scanf("%d%c%s",&x,&y,&z);

C.scanf("%d%c%c",&x,&y,z); D.scanf("%d%c%s",&x,&y,z);

 

11.struct ex

int x ; 

float y; 

char z ;

} example;

则下面的叙述中不正确的是(   )。

A.struct结构体类型的关键字 B.example是结构体类型名

C.x,y,z都是结构体成员名    D.struct ex是结构体类型

 

12.在C语言中对于实型数组,其每个数组元素的类型是( )。

A.实型   B.整型   C.可以为任何类型   D.不确定

 

13.若已定义:int a[9],*p=a;不能表示a[1] 地址的表达式是( )。

A.p+1    B.a+1    C.a++  D.++p

 

二、填空题

1.在C语言中,正确的标识符是由____________组成的,且由____________开头的。

 

2.设p=30,那么执行q=(++p)后,表达式的结果q为______,变量p的结果为________。

若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是_________。

 

3.一个变量的指针是指___________________________________________________。

 

4.在C语言程序中,对文件进行操作首先要____________________;然后对文件进行操作,最后要对文件实行__________________________操作,防止文件中信息的丢失。

 

 

5.以下程序运行后的输出结果是   。该程序的功能是。

int main()

int  x=10,y=20 ,t=0;

if(x!=y) 

t=x; 

x=y; 

y=t;

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

}

 

6.若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为"读"而打开此文件:fp=fopen( );。

 

7.有以下程序,当输入的数值为2,3,4时,输出结果为__________。

int main()

{

int x,y,z;

printf("please input  three number");

scanf(“%d,%d,%d”,&x,&y,&z);

sum=x*x+y*2+z;

printf("sum of number is : %d",sum); 

}

 

8.有以下程序

int main()

{

char c;

while((c=getchar())!='? ')

putchar(--c );

}

程序运行时,如果从键盘输入:YDG?N?<回车>,则输出结果为。

 

9.在循环中,continue语句与break语句的区别是:

continue语句是

break语句是

 

三、程序填空与算法题

1.下面程序是计算10个整数中奇数的和及其偶数的和,请填空。

#include 

int main()

{

    int a,b,c,i;

a=c=0;

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

{

scanf("%d",&b);canf("%d",&b);

  }

printf("偶数的和=%d\n",a);

printf("奇数的和=%d\n",c);

}

 

2.编写一个自定义函数,实现求两个实数的平方和

 

3.以下程序运行后的输出结果是。

int main()

{

char s[]="GFEDCBA";

int  p=6;

while(s[p]!='D') 

{

    printf("%c  ", p);

p=p-1;

}

}

4.定义一个反映学生信息的结构体,包括学生的姓名,性别,年龄,成绩等。

 

5.以下程序输出的结果是。

int ff(int n)

{

static int f=l;

f=f*n;

return f; 

}

int main()

{   int i;

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

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

}

 

6. 设有以下程序:

int main()

{

int n1,n2;

scanf("%d",&n2);

while(n2!=0)

{

n1=n2%10;

n2=n2/10;

printf("%d",n1);

}

}

程序运行后,如果从键盘上输入1298;则输出结果为。

 

7.下面程序的功能是:输出 100以内(不包含100)能被 3整除且个位数为 6的所有整数,请填空。

#include

main()

{

int i, j;

for(i=1; ____________; i++)

if (________________) 

printf("%d", j);

}

 

8.现有一个单链表Head,如下图所示,如果要在元素B和D之间插入一个字符型元素C。

所需要的语句为:(如果用到指针,在图中标出指针的位置)

 

 

 

四、编程题 

1.编程实现求解下面的式子的结果

s=1*2+2*3+3*4+…+20*21

2.编程实现求下面式子的结果, 正弦sin(x)的近似值的多项式公式如下,要求输入xε,按下面公式计算sin(x)的近似值,要求计算的误差小于给定的ε

3.编程实现将某文本文件file1.txt的内容读出来,显示到屏幕上。


 

一、填空。

1.实型变量的类型说明符有:__________、____________。

2.表达式7+8>2 && 25 %5的结果是_______________________。

3.下列程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。

   int  n=0, ch;

Ch=getchar( );

   while( __________________ ) ) ) )

{  

if ( ________________ )  n++;

}

4.putchar(c ) 函数的功能是_____________________________________。

5  int *p 的含义是_________________________________________。

6.C语言中数组的下标下限为___________________________。

7.定义fp为文件型指针变量的定义方法为_______________________。

8.数组 int  a[3][4];共定义了____________个数组元素。

 

二、单项选择题

1、下列属于整型常量的是________。

A、12   B、12.0  C、-12.0 D、10E10

2、不属于字符型常量的是_________。

A.‘A’    B、'a'    C、“A”   D、'b'

3、下列表达式为关系表达式的为_________。(其中a为一整型变量)

A.3+4*5B、a==10 C、a>0?a:-a  D、a=1

4、下面不正确的赋值语句是_____________。

A.a=a+1    B、a==b  C、a+=b  D、a=1

5、下列对数组定义不正确的语句是______________。

A.int m[5];    B、char b[]={‘h’,’e’};

C、int a[10]={1,6,8,4};  D、char  p[];

6、若有以下定义,则______和______是对数组元素的正确引用。

int  a[5],*p=a

A. *&a[6]    B、*p+8 C、*(a+2)    D、*p

7、执行下列语句后,a的值是______。

int  a=8;

a+=a-=a*a;

A.-240  B、64   C、112    D、-112

8.指出下面正确的输入语句(  )。

A.scanf(“a=b=%d”,&a,&b) ;   B.scanf(“%d,%d”,&a,&b) ;

C.scanf(“%c”,c) ;    D.scanf(“%f\n”,&f) ;

9.下面的变量说明中正确的是____________。

A.int:a, b, c;   B.int  a; b; c; C.int  a, b, c  D.int  a, b, c;

10.C语言用( )表示逻辑“真”值。

A.True  B.t 或  y  C.非零整型值 D.整型值0

11.若x=5,y=4 则y*=x+5; y的值为(   ).

A.40   B.20    C.15  D.30

13.C语言中以追加方式打开一个文件应选择_______________参数。

A.“r”   B.“w” C.“rb”  D.“a”

14.Break语句的正确的用法是()。

A.无论在任何情况下,都中断程序的执行,退出到系统下一层。

B.在多重循环中,只能退出最靠近的那一层循环语句。

C.跳出多重循环。

D.只能修改控制变量。

15.两个指针变量的值相等时,表明两个指针变量是________________。

A.占据同一内存单元。   B.指向同一内存单元地址或者都为空。

C.是两个空指针。   D.都没有指向。

16.字符串指针变量中存入的是________________。

A.字符串的首地址。  B.字符串

C.第一个字符    D.字符串变量。

17.以_______________个是不正确的描述。

A.不论在主函数还是自定义函数中,只要说明了变量,就可为其分配存贮单元。

B.在定义函数时,必须指定形参的类型。

C.形参和实参之间可以是值传递。

D.数组名可以作为参数进行传递。

18  表达式“1?(0?3:2):(10?1:0)”的值为_____________________。

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

19.为表示关系x≥y≥z,应使用C语言表达式

A.(x>=y)&&(y>=z) B.(x>=y) AND (y>=z) C.(x>=y>=z)    D.(x>=z)&(y>=z)

20. 以下说法中正确的是_______________。

A.C语言程序总是从第一个定义的函数开始执行。

B.在C语言程序中,要调用的函数必须有main( ) 函数中定义。

C.C语言程序总是从main( ) 函数开始执行。

D.C语言程序中的main( ) 函数必须放在程序的开始部分。

21.设有数组定义:char array[]=”China”;则数组所占的存贮空间为__________。

A.4个字节   B.5个字节  C.6个字节 D.7个字节

22.根据C语言的语法规则,下列________个是不合法标识符。

A.While B.Name  C.Rern5 D._exam

三、读出下列程序,写出程序的运行结果。

1.int main()

  {   int a=8 , b=1;

a=a+b;

b=a*b;

printf("a=%d,b=%d",a,b);

}

该程序的运行结果是___________________________________。

2.int main()

  {    int i,num[5];

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

            num[i]=i*10 - 2;

printf("%d",num[3]);

   }

该程序的运行结果是___________________________________。

3.int main()

  {    float c,f;

c=30.0;

f=(6*c)/5+32;

printf("f=%f",f);

  }

该程序的运行结果是___________________________________。

4.int main()

  {     int a=6095 , b ;

b=a%1000 ;

printf("%d", b);

 }

该程序的运行结果是___________________________________。

5.# include

int main( )

{    int a[]={8,2,9,4,1}, *p;

     p=a;

     *(p+2)+=2;

     printf("%d, %d ", *p, *(p+2));

}

该程序的运行结果是___________________________________。

 

四、将下列程序中不正确的语句改正。

 1.int mian( )

 {    int k ; 

k=35555; 

printf ("%d", k) ;  

}

2.int main ( )

{    int  a , b ; 

scanf ( "input a ,b:",a , b ); 

printf ("a=%d, b=%d",a,b);

}

3.int main( )

{    int sum , k ;

       sum=0 ; 

       k= 1 ;

      while (k < =100 )

          sum = sum+k ; 

      k + + ; 

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

  }

 4.int main( )

   {     int  k , a( 8 ) ;  

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

             scanf("%d", &a(k));

         ......

}

 5.int main( )

   scanf("%d", a);

if (a = 1)

printf("One\n") ;

}

 

 


一、 单项选择题(共30分,每题1分)

1.在PC机中,‘\n’在内存占用的字节数是(  )

A.1    B.2    C. 3    D.4

2.字符串“ABC”在内存占用的字节数是(   )

A.3    B.  4    C.6    D.8

3.在C语言中,合法的长整型常数是(   )

A.0L   B.4962710    C.0.054838743    D.2.1869 e10

4.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次是(   )

A.3,3,2    B.3,2,2    C.3,2,3    D.2,3,2

5.设有语句int a=3;,则执行了语句a+=a-=a*a后,变量a的值是(  )

A.3 B.0 C.9    D.-12

6.设char k= 'A ';执行k=k+1;后k值为(   )

A.'A ' B.'B ' C.' b'    D.'a'

7.下列正确的标识符是()

A.hot_do B.a+b C.test! D.%y

8.设int a=5,使b不为2的表达式是(  )

A.b=6-(--a) B.b=a%2 C.b=a/2    D.b=a>3?2:1

9.执行x=(6*7%8+9)/5;后,x的值为( )

A.1  B.2 C.3 D.4

10.执行语句x=(a=3,b=a--)后,x,a,b的值依次为(   )

A.3,2,3    B.2,3,2    C.3,3,2    D.3,2,2

11.设a=-3;执行(a>0)?a:-a;后,a的值为()

A.3 B.1    C.0  D.-3

12.设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值为(   )

A.7 B.8 C.9 D.2

13.下面正确的字符常量是(  )

A."c " B.'\\ ' ' C.'W '    D. ' '

14.若有代数式3ae/bc,则不正确的c语言表达式是( )

A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D.a*e/c/c*3

15.在C语言中,要求运算数必须是整型的运算符是(   )

A./ B.++    C.!= D.%

16.若有说明语句:char c=’\72’;则变量c ( )

A.包含1个字符    B.包含2个字符   C.包含3个字符   D.说明不合法

17.sizeof (float)是(  )

A.一个双精度型表达式 B.一个整型表达式  

C.一种函数调用   D 一个不合法的表达式

18.设变量a 是整型,f是实型,i是双精度型,则表达式10+’a’+i*f值的数据类型是(  )

A.int B.folat    C.double    D.不确定

19.若有定义int a[10],*p=a;,则p+5表示( )

A.元素a[5]的地址  B.元素a[5]的值 C.元素a[6]的地址 D.元素a[6]的值

20.以下与int *q[5];等价的定义语句是(   )

A.int q[5]; B.int * q  C.int (q[5]) D.int (*q)[5]

21.若有定义int a[5],*p=a;则对a数组元素地址的正确引用是(   )

A.P+5    B.*a+1    C.&a+1 D  &a[0]

22.凡是函数中未指定存储类别的局部变量,其隐含的存储类别是(  )

A.auto  B.static C.extern D.register

23.若用数组名作为函数调用的实参,传递给形参的是()

A.数组的首地址   B.数组第一个元素的值

C.数组中全部元素的值 D.数组元素的个数

24.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是(   )

A.float B.int C.long D.double

25.以下对二维数组a的正确说明是()

A.int a[3][] B.float  a(3,4)  C.double a[1][4] D.float a(3)(4)

26.若有说明int a[3][4];则对a数组元素的正确引用是(A  )

A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(2)

26.语句while(!E);中的表达式!E等价于( )

A.E= =0    B.E!=1 C.E!=0 D.E= =1

27.C语言中while和do—while循环的主要区别是()

A. do—while的循环体至少无条件执行一次

B. While的循环控制条件比do—while的循环控制条件严格

C. do—while允许从外部转到循环体内

D. do—while循环体不能是复合语句

28.为了避免在嵌套的条件语句if—else中产生二义性,C语言规定:else子句总与()配对

A.缩排位置相同的if B.其之前最近的if  

C.其之后最近的if    D.同一行上的if

29.判断char型变量ch是否为大写字母的正确表达式是(  )

A.'A '<=ch<= 'Z' B.(ch>='A')&(ch<='Z') 

C.(ch>='A')&&(ch<='Z'    D.('A'<=ch)AND ('Z'>=ch)

30.以下能正确定义整型变量a、b、c并为其赋初值5的语句是(   )

A.int  a=b=c=5;   B.int  a,c, c=5; C.a=5,b=5,c=5; D.a=b=c=5;

二、 填空(20分,每空1分)

1.C语言中的实型变量分为两种类型,它们是()和( )。

2.C语言中的标识符只能由三种字符组成,它们是()、( )和(   )。

3.若有定义:char c=’\010’;则变量c中包含的字符个数是(  )。

4.C语言提供的三种逻辑运算符是()、()、( )。

5.设y为int型变量,请写出描述“y是奇数”的表达式(  )。

6.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式(  )。

7.在C语言中,二维数组元素在内存中的存放顺序是( )。

8.若有定义:double x[3][5];则x数组中行下标的下限为(  ),列小标的上限为( )。

   9.若有定义:int a[3][4]={ {1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是( ),a[2][2]得到的初值是(   )。

  10.若自定义函数要求返回一个值,则应在该函数体中有一条(  )语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符( )。

  11.函数中的形参和调用时的实参都是数组名时,传递方式为( ),都是变量时,传递方式为(  )。

 

三、 读程序(30分)

1.运行结果:

 int main()

{    int a=2,b=3,c;

      c=a;

         if (a>b) 

c=1;

         else if (a= =b) 

c=0;

   else 

c=-1;

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

 

2.运行结果:

int main()

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

switch (a>0)

        { case  1: swithch (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("#");break;

}

            default:printf("&");

printf ("\n");

}

 

3.运行结果:

#include 

int main()

{    int i;

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

        switch (i%5)

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

            case 1:printf("#");break;

            default:printf("\n");

            case 2:printf ("&");

         }

 }

 

4.运行结果:

int main()

{     int i,b,k=0;

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

{     b=i%2;

            while (b-->=0) k++;

}

       printf ("%d,%d",k,b);

}

 

5. 运行结果:

#include 

int main()

{ char ch[7]={"12ab56"};

        int i,s=0;

for (i=0;ch[i]>='0'&&ch[i]<='9';i+=2)

             s=s*10+ch[i]-‘0';  

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

}

6. 运行结果:

int main()

{     int a=2,i;

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

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

}

    f(int a)

    {     int b=0;static int c=3;

          b++;c++;

          return(a+b+c);

     }

 
一、 填空与选择

1.C语言从源程序的书写到上机运行输出结果要经过_______________四个步骤。

2.C语言的表达式与语句的区别在于___________________________________。

3.C语句_____________ (有、没有)输入、输出语句。

4.结构化程序的编写有_______________________________三种程序结构。

5.表达式10/3*9%10/2的值是___________________。

6.设有"int x=2,y"说明,则逗号表达式"y=x+5,x+y"的值是_________________。

7.设有"int x=1",则"x>0?2*x+1: 0"表达式的值是______________________。

 

8.变量Y满足以下两条件中的任意一个:①能被4整除,但不能被100整除;②能被400整除。请用逻辑表达式表示所给条件。______________________________

 

9.逻辑运算符"&&、||、 !"中的优先级是____________________

 

10.C语言是由________________基本单位组成的。

A.过程    B.语句 C.函数 D.程序

 

11.有如下语句: X+Y*Z>39 && X*Z||Y*Z是什么表达式__________

A.算术表达式   B.逻辑表达式 C.关系表达式   D.字符表达式

 

12.下面几种说法中哪个是正确的?_____________

A.else语句需与它前面的if语句配对使用;

B.else语句需与前面最接近它的if语句配对使用;

C.else语句需与前面最接近它,且没有和其它else语句配对的if语句配对;

D.以上都正确。

 

13.有说明语句:char a[ ]="this is a book"。请问该数组到底占了几个字节?

A.11   B.12   C.14   D.15

 

14.设整型变量a为5,使b不为2的表达式是___________

A.b=a/2   B.b=6-(--a) C.b=a%2   D.b=a>3?2:1

 

15.设整型变量n的值为2,执行语句"n+=n-=n*n"后,n的值是_________

A.0    B.2 C.-4   D.4

 

16.执行语句"x=(a=3,b=a--)"后,x,a,b的值依次为_________

A.3, 3, 2  B.3,2,2   C.3,2,3    D.2,3,2

 

17.如果X=5,执行语句X*=X+=X*3后,则X的值为__________

A.100  B.400  C.450  D.900

 

18.下列常量中哪个是不合法的_________________

A.2e32.6  B.0.2e-5  C."basic"    D.0x4b00

19.下列标识符错误的是_______

A.x1y    B._123 C.2ab D._ab

20.c语言中int型数-8在内存中的存储形式为_____

A.1111111111111000  B.1000000000001000

C.0000000000001000  D.1111111111110111

 

 

1.写出下列程序段的输出结果:

int main()

{    int x=5;  int y=10;

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

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

}

 

2. 下面程序的输出结果是什么?

#include 

int main()

{    int x=3;

     switch(x)

     {  case 1:

        case 2:printf("x<3\n");

        case 3:printf("x=3\n");

        case 4:

        case 5:printf("x>3\n");

          default:printf("x unknow\n");   

}

}

 

3.根据源程序,写出相应的数学表达式

#include 

int main()

{    int x,y;

     scanf("%d",&x);

     if (x<0) 

y= -1;

     else if (x== 0)

           y=0;

     else 

y=1;

printf("x=%d,y=%d\n",x,y);

}

 

4.读出下列程序的输出结果:

int main()

{    int a=1,b=1,c=1;

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

     a+=b+=++c;

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

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

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

 

三、 程序填空:(根据题意,将空缺的语句补上。)

1.下列程序的功能是计算圆的面积,将程序补充完整。

#define  PI = 3.14159

int main()

{   float  r,s;

    printf("Enter a number  r:");

____________________________

s=PI*r*r

___________________;

}

2.  该程序完成的功能是求1+2+3+…+10的累加和,并进行累加和的输出打印。变量sum是存放累加值的。

#include 

int main()

{     ________________

i=1,sum=0;

      for(; i<=10;)

      {     sum+=i;

_________ 

}

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

}

四、改错:

求Fibonacci数列40个数。这个数列有如下特点:第1,2 两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:

F1=1   (n=1)   F2=1  (n=2)   Fn=Fn-1+Fn-2   (n≥3)

程序如下,请改正:

int main()

{     long int f1,f2

      int i;

      f1=f2=1;

      for (i=1, i<=20 , i- -);

      {    printf("%12ld %12ld",f1,f2);

           if (i%4=0) 

printf("\n");

           f1=f1+f2

           f2=f2+f1; 

}

}

五、编程:

1. 给定一个正整数,判断它是否能同时被3、5、7整除。

 

一、单项选择题。(每题1分,共20分)

1.C程序的基本单位是:(    )

A.子程序 B.程序 C.子过程 D.函数

2.在C语言中,非法的八进制是:(    )

A.016 B.018 C.017 D.02

3.不是C语言实型常量的是:(    )

A.55.0 B.0.0 C.55.5 D.55e2.5

4 .字符串"xyzw"在内存中占用的字节数是:(    )

A.6 B.5 C.4 D.3

5.若已定义f,g为double类型,则表达式:f=1,g=f+5/4的值是:(    )

A.2.0 B.2.25 C.2.1 D.1.5

6.若有语句char c1='d',c2='g';printf("%c,%d\n",c2-'a',c2-c1);则输出结果为:(  )

A.M,2 B.G,3 C.G,2 D.D,g

7.使用语句scanf("a=%f,b=%d",&a,&b);输入数据时,正确的数据输入是:(    )

A.a=2.2,b=3 B.a=2.2 b=3 C.2.2 3 D.2.2,3

8.表示关系12<=x<=y的C语言表达式为:(    )

A.(12<=x)&(x<=y)   B.(12<=x)&&(x<=y)   C.(12<=x)|(x<=y)  D.(12<=x)||(x<=y)

9.设x=1,y=2,m=4,n=3,则表达式x>y?x:m

A.1 B.3 C.2 D.4

10.若有说明和语句:int a=5,b=6;b*=a+1;则b的值为:(    )

A.5 B.6 C.31 D.36

 

11.设整型变量s,t,c1,c2,c3,c4的值均为2,则执行语句(s=c1==c2)||(t=c3>c4)后,s,t的值为:(    )

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

12.语句for(a=0,b=0;b!=100&&a<5;a++)scanf("%d",&b);scanf最多可执行次数为:(   )

A.4 B.6 C.5 D.1

13.对于for(s=2;  ;s++)可以理解为:(    )

A.for(s=2;0 ;s++) B.for(s=2;1 ;s++) C.for(s=2;s<2 ;s++) D.for(s=2;s>2;s++)

 

14.若有char h='a',g='f';int a[6]={1,2,3,4,5,6};则数值为4的表达式为:(    )

A.a[g-h] B.a[4] C.a['d'-'h'] D.a['h'-'c']

 

15.设:char s[10]={"october"};则printf("%d\n",strlen(s));输出是:(  )

A.7 B.8 C.10 D.11

 

16.若有int a[3][5]={2,2},{2,6},{2,6,2}},则数组a共有个元素:(    )

A.8 B.5 C.3 D.15

17.设int a=5,b,*p=&a,则使b不等于5的语句为: (    )

A.b=*&a  B.b=*a  C.b=*p D.b=a 

  18.若有int a[7]={1,2,3,4,5,6,7},*p=a则不能表示数组元素的表达式是: (    )

A.*p B.*a C.a[7]   D.a[p-a]

19.若有int b[4]={0,1,2,3},*p则数值不为3的表达式是: (    )

A.p=s+2,*(p++)  B.p=s+3,*p++  C.p=s+2,*( ++p) D.s[3]

20.设有如下定义:struct jan{int a;float b;}c2,*p;若有p=&c2;则对c2中的成员a的正确引用是:(    )

A.(*p).c2.a  B.(*p).a  C.p->c2.a D.p.c2.a  

二、填空题。(每空1分,共15分)

1.C语言标识符由 _________、__________和___________来构造。

2.在C语言中,字符串常量是用一串字符。

3.若有说明和语句:int a=25,b=60;b=++a;则b的值是 。

4.若int x=5;while(x>0)printf("%d",x--);的循环执行次数为。

5.若有int a[5],*p=a;则p+2表示第   个元素的地址。

6.若有说明和语句:int a=5,b=6,y=6;b-=a;y=a++则b和y的值分别是  、  。

7.已知整型变量a=3,b=4,c=5,写出逻辑表达式a||b+c>c&&b-c的值是   。

8.C程序设计的三种基本结构是 ________、________和________。

9.数组是表示类型相同的数据,而结构体则是若干数据项的集合。

10.C语言中文件是指。

 

三、将下列程序补充完整。(每空2.5分,共30分)

1.输入三角形的三条边a,b,c,求三角形的面积。

  #include 

  #include 

int  main( )

{     float  a,b,c,d,t,s;

printf("请输入三角形的三条边:");

scanf("%f,%f,%f",&a,&b,&c);

      if(1)  

printf("%f%f%f不能构成三角形!", a,b,c);

else 

{    t=(a+b+c)/2;

s=  (2)  

printf("a=%7.2f,b=%7.2f,c=%7.2f,area=%7.2f\n", a,b,c,s);

}

}

(1) 

(2) 

 

2.输入两个整数,n1,n2(要求n1

#include 

int  main()

{     int n1,n2,j,n=0;

printf("\n请输入两个数:");

scanf (  (3)  );

if(n1>n2)

{   (4)}

for(j=n1;j<=n2,j++)

if(5) 

n++;

printf("a=%5d,b=%5d,n=%5d\n"n1,n2,n);

}

(3)  

(4)  

(5)  

3.输入两个整数,n1,n2(要求n1

#include 

#include 

int prime (int x)

{    int k;

for (6) 

if (x%k==0) 

return(0);

return(1)

}

int   main()

{    int a,b,j,n=0;

printf("\n请输入两个数:");

scanf("%d,%d",&a,&b);

if(a>b)

{

   (7)

}

for(j=a;j<=b,j++)

if(  (8)  ) 

n++;

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

}

(6) 

(7) 

(8) 

4.编写程序,输入n个整数(n由键盘输入),统计其中正数、负数和零的个数。

#include 

int main( )

{     int x,n,k,k1=0,k2=0,k3=0;

printf("input n=:");

(9) 

for(k=0;k

{

scanf("%d",&x);

if (x<0)

k1++;

(10);

else  

k3++;

printf("k1=%4d,k2=%4d,k3=%4d\n",k1,k2,k3)

}

}

(9)   

(10)   

 

5.设计一个程序完成以下功能:若从键盘输入英文字母,则原样输出;输入其他字符不理会,直到输入Q键结束.]

#include 

int main( )

{  char ch;

do{    ch=getchar();

if ( (11) )

break;

else if( (12) )

putchar(ch);

}while(1);

}

(11)   

(12)   

四、按格式写出程序运行结果。每题4分,共16分。

1.输出下列程序运行结果:

int  main()

{    int a=1,c=65,d=97;

     printf("a10=%d,a8=%o,a16=%x\n",a,a,a);

     printf("c10=%d,c8=%o,c16=%x,cc=%c\n"c,c,c,c);

d++;

     printf("d10=%d,dc=%c\n"d,d);

}

  

2.输出下列程序运行结果:

int main()

{    int y=9,k=1;

for(;y>0;y--)

{     if(y%3==0)

{     printf("%4d"--y);

continue;

}

            k++;

}

     printf("\nk=%4d,y=%4d\n",k,y);

}

3. 输出下列程序运行结果:

#include 

int   main( )

{     int k,j;

int a[]={3,-5,18,27,37,23,69,82,52,-15};

      for(k=0,j=k;k<10;k++)

          if(a[k]>a[j])

j=k;

      printf("m=%d,j=%d\n",a[j],j);

}

 

4. 输出下列程序运行结果:

int main( )

{ char *p,s[]="ABCD";

     for ( p=s;p

printf("%s\n",p);

}

 

五、按题目要求写出可运行程序:(19分)

1.求元素个数为10的一维数组元素中的最大值和最小值。

2.将矩阵 9   7   5  倒置为 9   3   4

 3   1   2 7   1   6

 4   6   8 5   2   8

3.编写函数:输入两个正整数m,n,求它们的最大公约数和最小公倍数。

编写程序如下:

 

 

 

 

 

一、选择题(1—14每题1分,15-18每题1.5分,共20分)

1.可选作用户标识符的一组标识符是(    )

A.void B.C5_b8 C.For D.3a

Define              _53                 -ab                 DO

WORD                IF                case                int

2.在C语言中,非法的八进制是:(    )

A.018 B.016 C.017 D.0257

3.在TC中,基本int a[4]类型变量所占的字节数是(    )

A.1 B.2 C.4 D.8

4.设x,y,z,k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为(   )

A.4 B.16 C.32 D.52

5.设int型变量a为5,使b不为2的表达式是(    )

A.b=a/2 B.b=6-(-a) C.b=a%2 D.b=a>3?2:1

6.一个C程序的执行是从(    )

A.main()函数开始,直到main()函数结束。 B.第一个函数开始,最后一个函数结束。

C.第一个语句开始,最后一个语句结束。 D.main()函数开始,直到最后一个函数。

7.C语言中用于结构化程序设计的三种基本结构是(    )

A.if、switch、break B.if   while   for

C.while   do- while   for   D.顺序结构、选择结构、循环结构

8.以下叙述中不正确的是(    )

A.在不同的函数中可以使用相同名字的变量。

B.函数中的形式参数是局部变量。

C.在一个函数内的符合语句中定义变量在本函数范围内有效。 

D.在一个函数内定义的变量只在本函数范围内有效。  

9.若k为int 类型,且k的值为3,执行语句k+=k-=k*k后,k的值为(    )

A.-3 B.6 C.-9 D.-12

 

10.执行有以下程序,输出结果(    )

int main()

{    int x=3,y=3,z=3; 

printf("%d   %d\n"(++x,y++),++z);

}

A.3  3 B.3  4 C.4  2 D.4  3

11.若有定义和语句:int a=21,b=021; printf("%x,%d \n",a,b); 执行后输出结果(    )

A.17,15  B.16,18  C.17,19  D.15,17

12.已有定义语句:int x=3,y=4,z=5;则值为0的表达式是(    )

A.x>y++  B.x<=++y  C.x!=y+z>y-z  D.y%z>=y-z

13.能正确表达逻辑关系"a≥10或a≤0"的C语言表达式是(    )

A.a>=10 or a<=0 B.a>=10||a<=0 C.a>=10&&a<=0 D.a>=10|a<=0

14.n为整型常量,且n=2;while(n--);printf("%d",n); 执行后的结果是:(    )

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

15.若有以下定义和赋值double  *q,a=5.5; int  *p,i=1; double  *q,a=5.5;int *p,i=1; p=&i; q=&a; 以下对赋值语句叙述错误的是()。

A.*p=*q 变i中的值。 

B.p=oxffd0;将改变p的值,使p指向地址为ffd0的存储单元。  

C.*q=*p;等同于a=i;  

D.*p=*q;是取q所指变量的值放在p所指的存储单元

16.若有以下定义语句double a[8],*p=a;   int i=5; 对数组元素错误的引用是()

A.*a  B.*a[5]  C.*(p+i)  D.p[8]

17.以下选项中不能使指针正确指向字符串的是()

A.char  *ch;*ch="hello"  B.char  *ch="hello"

C.char  *ch="hello";ch="bye" D.char  *ch";ch="hello"

18.若有以下说明和定义语句:union  uti {int n;double g;char ch[9];} 

 struct  srt{float xy;union  uti  uv;}aa;则变量aa所占内存的字节数是(    )

A. 9  B. 8 C. 13 D.17

 

二、填空题(每空1分,共12分)

1.C语言源程序文件的扩展名是 (1) ,经过编译后,生成文件的扩展名是 (2) ,经过连接后,生成文件的扩展名是 (3) 。

2.把a,b定义成长整型变量的定义语句是 (4) 

3.设x和y均为整型变量,且x=3,y=2,则1.0*x/y表达式的值为 (5) 

4.已有定义:float x=5.5;则表达式:x=(int)x+2的值为 (6) 

5.已有定义:int x=0,y=0;则表达式:(x+=2,y=x+3/2,y+5)后,变量x的值为 (7),变量y的值为 (8),表达式的值为 (9) 。

6.执行以下for(i=1;i++<=5)语句后,变量i的值为(10) 。

7.数组是表示类型相同的数据,而结构体则是若干(11)数据项的集合。

8.C语言中文件是指 (12)   。

 

三、程序补充题(每空3分,共24分)

1.从键盘上输入若干个学生成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。

int main()

{    float s,gmax,gmin;

scanf("%f,"&s);

gmax=s;gmin=s;

while  (1) 

{    if(s>gmax)

gmax=s;

if(2) 

gmin=s;

scanf("%f",&s);

}

printf("gmax=%f\ngmin=%f\n"gmax,gmin);

}

2.求任意两个正整数的最大公约数和最小公倍数

#include 

int main()

{    int r,m,n,temp,gcd,lcm;

printf("enter two number please:");

scanf("   (3)   ",&m,&n);

lcm=m*n;

while(m%n!=0)

{    r=m%n;

(4);

n=r;

}

gcd=n;

lcm=lcm/n;

printf("gcd=%d\nlcm=%d\n",gcd,lcm);

}

3.求y的x次方。

Double fun1(double y,int x)

int main()

{     int i;

double z=1.0;

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

z=   (6);

return z;

}

4.对输入一个整数进行判断,若是偶数,输出even,否则输出odd,在子函数fun2功能是判定整数是否为偶数,若是偶数,返回1,否则返回0。

int fun2(int x)

{    if(x%2==0)  

(7);

return  0;

}

int main()

{     int n;

scanf("%d",&n);

if(8)  

printf("even\n");

else 

printf("odd\n");

}

 

四、按格式写出程序运行结果。(每题4分共20分)

1. 执行下列程序写出运行结果:

#include 

int main()

{

      int a=10,c='A',d='B';

      printf("a8=%o,a16=%x\n",a,a); 

      printf("c10=%d,c8=%o,c16=%x,cc=%c\n",c,c,c,c);

      d++;

      printf("d10=%d,dc=%c\n",d,d);

}

 

2. 执行下列程序写出运行结果:

#include 

void f(int x,int y)

{    int t;

if(x

{     t=x;x=y;y=t;}

}

int main()

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

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

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

}

 

3. 执行下列程序写出运行结果:

#include 

int main()

{    int i=0,a=2;

if(i==0)

printf("**");

else 

printf("$$"); 

printf("*");

}

 

4. 当输入:1 程序运行的结果为

#include 

int main()

{    int sum=0,n;

scanf("%d",&n);

while(n<=5)

{    sum+=n;

n++;

}

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

}

 

5.执行以下程序段,输出的结果为(   )

#include 

int main()

{    int a[2][3]={ {3,2,7},{4,8,6}};

int *p,m;

p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4)); 

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

}

五、按题目要求写出可运行程序:(24分)

1.模拟计算器功能,编写程序,根据用户输入的运算符,对两个数进行运算。(用switch语句) ()

2.求3~100之间的全部素数,并统计素数个数。

 

3.编写程序完成矩阵转置,即将矩阵的行和列对换:

如将矩阵 9   7   5   1   倒置为 9   3   4

         3   1   2   8          7   1   6

         4   6   8   10         5   2   8

                                1   8   10

 

 

你可能感兴趣的:(简单,c语言,练习题)