【章节知识点概括】

第一章  C语言程序设计概述

  • c程序基本结构特点
    • 函数与主函数
      1. 程序由一个或多个函数组成,函数由函数头和函数体构成。程序的基本组成模块是函数。
      2. 必须有且只能有一个主函数main()
      3. 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。
      4. main函数在程序中的位置任意,可以在程序的开头、中间或者尾部。
    • 程序语句
      1. C程序由语句组成,用“;”作为语句终止符
      2. /*        */或  / /后的内容  作为注释,不能嵌套,不产生编译代码
    •  编译预处理不是C语言的一部分
  • C程序的运行步骤

运行一个C程序,从输入源程序开始,要经过编辑源程序文件(•C)、编译生成目标文件(•obj)、连接生成可执行文件(•exe)和执行四个步骤

 

第三章  数据类型、运算符和表达式

    • 标识符命名原则:
        1. 合法的要求是由字母,数字,下划线组成,并且第一个必须为字母或则是下划线。关键字不可以作为用户标识符号。
        2. main  define  scanf  printf 及其他库函数的函数名都不是关键字可以用作标识符。
        3. If与if不同,If是可以做为用户标识符,因为C区分大小写。
    • 基本数据类型:
      1. 基本数据类型有哪些?所占空间大小及说明符。
      2. 整型、实型、字符型常量的合法表示形式,字符串的表示形式。

a)实型数据的合法形式:小数形式和指数形式-----尤其要注意指数形式的格式e前必有数,e后必为整数。2.333e-1 是合法的,1e.111是非法的。

b) 字符数据的合法形式:以单引号括起来的一个字符,注意转义字符P48表3-3。

如‘\x6d’是合法的字符,ASCII码为十六进制的6d,‘\141’也合法,ASCII码为八进制141,‘\108’不合法。

c) 字符常量和字符串的区别:'a' 是字符占一个字节,

"a"是字符串占两个字节(含有一个结束符号)。

    • 常量和变量
      1. 符号常量的定义格式:eg #define  PI  3.14159   (注意宏定义后无分号结尾)
      2. 变量的定义格式:
      3. 变量赋初值的方式。  int a=b=c=3;不合法
    • 数据混合计算时数据类型的转换:P54图3-10。
    1. 强制类型转换:一定是(int)a 不是  int(a),注意类型上一定有括号的。
    2. 注意(int)(a+b)和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
  • 运算符

1. 运算符的优先级别和结合方向:

  1. 单目运算>双目运算
  2. 算术> 关系运算>逻辑运算>条件运算>赋值运算>逗号运算

2. 算术运算符:

  1. %要求左右两边都是整型数,运算结果为余数。
  2. /运算若左右两边都是整型数,结果为整数。
  3. 自增自减运算符,前置先自增减,再运算;后置先运算,再自增减。自增自减运算符只能作用于变量,不能作用于常量和表达式。

如:#define A  3

                        A++;是错误写法。

3. 关系运算符:

  a)注意赋值=与关系= =的区别。

  b)  c语言中没有逻辑类型,逻辑“真”用非0表示,逻辑“假”用0表示,

  c) x在[a,b]间的关系表达式为x>=a && x<=b,不能写为a>=x>=b。但该表达式语法成立,有运算结果。如3>=1>=5运算时从左向右依次运算,即3>=1为真,值为1,此时,表达式为1>=5,运算结果为假,值为0。所以整个1>=3>=5的值为0.

 

4. 逻辑运算符:

 a)  !为单目运算符优先级别比较高 。

 b) &&和||运算时注意短路原则

 

5. 赋值运算符:自右向左的结合方向

 a)复合赋值运算符的使用。如a=12,则a+=a-=a*=a;运算后a的值

 

6. 条件运算符:(表达式1?表达式2:表达式3)

 a)结合方向从右向左。

 

7. 逗号运算符:优先级别最低;也叫顺序执行运算符,表达式的数值逗号最右边的那个表达式的数值。(2,3,4)的表达式的数值就是4

  • 表达式

1. 能将数学表达式写成c表达式

2. 计算表达式的值,注意优先级别和结合方向。

 

第四章  顺序程序设计

  • 输入输出函数
      1. printf函数的格式考查:

a)格式:printf(“格式控制串”,输出表)

  b)输出表:要输出的数据(可以没有,多个时以“,”分隔)

格式控制串:包含两种信息

        1. 格式说明:     %[修饰符]格式字符  ,用于指定输出格式
        2. 普通字符或转义序列:原样输出

c)修饰符m、n、l的功能:

修饰符

功能

m

输出数据域宽,数据长度<m,左补空格;否则按实际输出

.n

对实数,指定小数点后位数(四舍五入)

对字符串,指定实际输出位数

L

在d,o,x,u前,指定输出精度为long型

在e,f,g前,指定输出精度为double型

 

      1. scanf

  a)格式:scanf(“格式控制串”,地址表)

 b)格式控制字符串中包含的非格式控制字符要原样输入;如:scanf(“sum=%d”,&a);  输入时”sum=”也要输入。

scanf函数中没有精度控制,如:scanf(“%5.2f”,&a) ;是非法的。

3. getchar( )获取一个字符。

a)格式:char c;

        c=getchar();

4.  putchar()输出一个字符,括号中的参数是一个字符变量或常量

a)格式:putchar(‘a’);

 

第五章  选择结构程序设计

  • 三种程序结构:顺序结构、选择结构、循环结构
  • if语句(条件选择语句)

a)if语句的三种形式:

b)if后面的表达式类型任意的;若执行语句是多条,必须为复合语句,即

   写在一对花括号内。

c)if结构可以嵌套,注意缺省{ }时,else总是和它上面离它最近的未配对的if配对

  • switch语句

a)格式中,E1,E2,…En是常量表达式,且值必须互不相同

b)注意执行时语句中有break和无break时,执行流程的区别。

     c)default可以不写。

 

第六章  循环结构

    • 三种循环结构:

1. while 语句

  a)当型结构,条件成立执行循环体。

b)先判断表达式,后执行循环体。循环体有可能一次都不执行

2. do ~ while 语句

a)先执行后判断,至少执行一次循环体

b)do~while语句表达式后面必须加分号

3. for 语句

 a)for语句中expr1, expr2 ,expr3 类型任意,都可省略,但分号;不可省

 

    • 循环嵌套:
      1. 执行时先内存循环,后外层循环。
      2. 外层循环可包含两个以上内循环,但不能相互交叉
    • break和continue   (注意程序中两者的区别)

1. break语句在循环语句和switch语句中,终止并跳出循环体或开关体

2. break只能终止并跳出最近一层的结构

3. continue语句,结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断

4. continue仅用于循环语句中

 

第七章  数组

  • 一维数组:
      1. 一维数组的定义:数据类型  数组名[常量表达式];

(a)常量表达式表示数组元素个数,从0开始计算。

(b)不能用变量来表示元素的个数,可以是符号常量或常量表达式。

 (c)数组名为地址常量

      1. 一维数组元素的引用:数组名[下标]   

(a)只能逐个引用数组元素,不能一次引用整个数组

      1. 一维数组初始化:类型说明符  数组名[常量表达式]={值1,值2,…… ,};              

(a)只给部分数组元素赋初值,当{}中值的个数少于元素个数时,只给前面部分元素赋值,其余自动赋零。

(b当全部数组元素赋初值时,可不指定数组长度

  • 二维数组:
      1. 二维数组的定义:数据类型  数组名[常量表达式] [常量表达式];

(a)数组元素的存放顺序:按行序优先

      1. 二维数组元素的引用:数组名[行下标] [列下标]   

(a)只能逐个引用数组元素,不能一次引用整个数组

      1. 二维数组初始化:               

(a)可以按行赋值,也可逐元素赋值。               

(b)当全部数组元素赋初值时,可不指定数组长度

  • 字符数组:
      1. 字符数组的定义:char  数组名[常量表达式];

(a)数组元素的存放顺序:按行序优先

     2.字符数组的输入输出:

       (a)按字符输入输出 (getchar、putchar、printf+%c控制字符、scanf+%c)

       (b)字符串输入输出 (gets、puts、printf+%s控制字符、scanf+%s)(此方法的4个函数格式要重点掌握)

     3.字符串处理函数

        (a)头文件 #include<string.h>

         (b)  常用函数:strlen  strcat   strcmp  strcpy

 

第八章  函数

    • 函数定义的一般形式
    • 1.  类型说明符 函数名(参数类型说明  形式参数[ ,参数类型说明  形式参数] )
      { 类型说明
        语句
      }
    • 2. 有返回值函数中至少应有一个return语句。
    • 3. 函数无返回值,指定它的返回为“空类型”, 空类型的说明符为“void”,此时,函数体内无return语句。
    • 4. 在C程序中,一个函数的定义可以放在任意位置
    • 函数说明:
    • 1.  格式:
    •    (a)类型说明符 被调函数名(类型 形参,类型 形参…);
      (b)类型说明符 被调函数名(类型,类型…);
    •    (c)类型说明符 被调函数名();
    • 2. 如果被调函数的返回值是整型或字符型时, 可以不对被调函数作说明,而直接调用。
    • 3. 当被调函数的函数定义出现在主调函数之前时,可以不对被调函数作说明。
    • 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用include命令包含在源文件前部
    • 函数调用:
      1. 格式:函数名(实际参数表) 。对无参函数调用时则无实际参数表。 实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。 各实参之间用逗号分隔。
      2. 函数调用时的求值顺序,各系统不同,TC环境从右向左求值。

     void main()

{ int i=8;

printf("%d\n%d\n%d\n%d\n",++i,--i,i++,i--);  //  8,7,7,8

}

    • 函数的参数和函数的值:
    •       1. 函数的参数:形参和实参
    •            (a)形参变量是局部变量,只在函数内部有效,在被调用时才分配内存单元
    •             (b)实参可以是常量、变量、表达式、函数等.
    • (c) 实参和形参在数量上,类型上,顺序上应严格一致,否则会 “类型不匹配”
      (d) 参数传递采用“单向传值”方式。形参的改变不影响实参。
    •        2. 函数的值:
    •             (a)函数返回值类型和函数定义中的类型应保持一致。不一致,以函数类型为准
    •            (b)函数值为整型,在函数定义时可以省去类型说明
    • 数组名作为函数参数:

      1. 例: void nzp(int a[],int n) ,a后必须有[ ]符合说明a是数组

2. 数组名作为函数参数时还应注意以下几点:

(a) 形参数组和实参数组的类型必须一致,否则将引起错误。
(b) 形参数组和实参数组的长度可以不相同,

3. 实参只需给出数组名即可。

  • 函数的嵌套调用和递归调用
  • 变量的作用域和生存周期

         1.全局变量定义在所有函数外部,作用范围从变量定义位置起到文件介绍

         2.静态变量 +static说明。程序运行期间空间都不释放。

 

第九章  指针

    • 指针概念:
    • 指针变量:
    • 1. 定义格式:类型说明符 *变量名;
    • 2. 初始化和赋值:不允许把一个数赋予指针变量, int *p;p=1000;-----错误!
    • &运算和*运算
    • int a=5,*p=&a; p是指针,*p是p所指向的目标变量,即a
    • 必须有且只能有一个主函数main()
    • 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。
    • 指针与一维数组(常考!!)
    • int a[5],*pa=a;则pa指针保存数组a的首地址,pa指向a的第一个元素。
    • p++,p- -相当于p指向下一个或上一个数组元素。
    • 加减运算
      对指向数组,字符串的指针变量可以进行加减运算,如p+n,p-n,p++,p--等。对指向同一数组的两个指针变量可以相减。对指向其它类型的指针变量作加减运算是无意义的。
    • 关系运算: 指向同一数组的两个指针变量之间可以进行大于、小于、 等于比较运算。指针可与0比较,p==0表示p为空指针。
    • 多维数组的地址表示方法:注意区别行地址和列地址
    • 数组名和数组指针变量都可做函数参数
    • 相关概念:
      int *p;     p为指向整型量的指针变量
      int *p[n];   p为指针数组,由n个指向整型量的指针元素组成。
      int (*p)[n];  p为指向整型二维数组的指针变量,二维数组的列数为n
      int *p()    p为返回指针值的函数,该指针指向整型量
      int (*p)()   p为指向函数的指针,该函数返回整型量
      int **p     p为一个指向另一指针的指针变量,该指针指向一个整型量。

 

 

第十章  结构体和共用体

    • 结构体类型的定义
    • 定义一个结构的一般形式为:
  • struct 结构名
  • {
  • 成员表列
  • };
    • 结构体变量的定义:一般有三种形式,常用在定义结构类型的同时说明结构变量。
    • 例如:

struct stu

{

int num;

   char name[20];

   char sex;
}boy1,boy2;

    •   boy1,boy2就是该结构体类型的两个变量。
    • 结构体变量的引用:
      1. 结构变量成员的一般形式是: 结构变量名. 成员名
    • 结构数组
      数组的元素也可以是结构类型的。 因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。 在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。
    • 结构指针变量
    • 1. 说明的一般形式为: struct 结构名*结构指针变量名
    • 2. 访问的一般形式为:
    • (a)   (*结构指针变量).成员名 
      (b)   结构指针变量->成员名
    • 链表:

  1. 概念

 建立链表的方法

 

第十一章 预处理命令

  •  宏定义
  •   在C语言源程序中允许用一个标识符来表示一个字符串, 称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换, 这称为“宏代换”或“宏展开”。
  • 带参宏定义
  •   1. 带参宏定义的一般形式为: #define  宏名(形参表) 字符串 在字符串中含有各个形参。带参宏调用的一般形式为: 宏名(实参表);

2. 在宏定义中的参数称为形式参数, 在宏调用中的参数称为实际参数。对带参数的宏,在调用中,先进行宏展开, 再用实参去代换形参。(常考,容易出错)

    • 文件包含
    • 1. 一般形式为: #include"文件名"

例如: #include"stdio.h"

       #include"math.h"

 

【知识点练习】

一、选择题

1. 以下不能定义为用户标识符的是:

(A)    INT    (B)        _int          (C)    2int          (D)    int25

2.以下说法中正确的是 :(    )

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

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

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

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

 

3. 在一个C语言程序中                                           (      )

A) main函数必须出现在所有函数之前       B) main函数可以在任何地方出现

C) main函数必须出现在所有函数之后       D) main函数必须出现在固定位置

4.以下程序运行后,输出结果是。

main( )

{ char  *p="123456" ;

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

}                                                    

(A)123456                   (B)456

(C)23456                   (D)3456                 (    )

5.以下程序运行后,输出结果是。

#define  N   3

#define S(x)  x+N

main( )

{

printf("%d\n",S(2) * S(2)) ; }                             

(A)4                     (B)9

(C)25                    (D)11                     (    )

6.下列程序的输出结果是

main( )

{ int a[10]={1 ,3 ,5 , 7, 9 ,11 ,13 , 15 , 17, 19}, *p;

p=a+4;   

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

(A)5                     (B)7

(C)9                     (D)11                        (    )

7.下面程序段的运行结果是。

struct  student

{ int  a;  float  b;  char  c;};

printf(“%d\n”, sizeof (struct  student ));                       

(A)7                      (B)4

(C)2                      (D)8                        (     )

8.判断字符串s1是否大于字符串s2,应当使用。          

(A)if(s1>s2)               (B)if(a==b)

(C)if(strcpy(s2,s1)>0)       (D)if(stcmp(s1,s2)>0)          (    )                      

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

main( )

{ int  a=15 ;

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

(A)16  15                   (B)15  15

(C)17  16                   (D)16  16                  (    ) 

10.若x、i、j和k都是int型变量,计算x=(x=4,x=16,k=32)表达式后,x的值为。     

(A)4                       (B)16

(C)32                      (D)52                           (    )

11.执行以下语句后,a,b的值分别为。

int  a ,b ,c ; a=b=c=1 ; ++a||++b&&++c;

(A)2 ,2                  (B)1 ,1

(C)2 ,1                   (D)1 ,2                          (    )

12.下面程序段的运行结果是:

union stu

{ int  num;  char name[10];  float scrose ; };

 printf(“%d\n”, sizeof (union  stu ));                           

  (A)18                   (B)16

(C)10                   (D)2                             (    )

13.数组定义为:int a[4][5]; 引用“a[1]+3”表示的是。

(A)a数组第2行第4列元素的地址 (B)a数组第2行第4列元素的值                    

(C)a数组第4行的首地址  (D)a数组第1行第3个元素的地址     (    )

14.下面函数

f(double x)

{printf(“%6d”,x);}的类型为                                    (     )

A. 实型      B. void 类型   C. int 类型    D. 均不正确

15.C语言中,简单变量做实参时,它和对应的形参之间的数据传递方式是。

(A)地址传递          (B)单向值传递

(C)由实参传给形参,再由形参传递给实参

(D)同用户指定传递方式

16.若使用一维数组名作函数实参, 则以下正确的说法是                (     )

A. 必须在主调函数中说明此数组的大小

B. 实参数组类型与形参数组类型可以不匹配

C. 在被调用函数中, 不需要考虑形参数组的大小

D. 实参数组名与形参数组名必须一致

17.关于指针概念说法不正确的是                                    (     )

A. 一个指针变量只能指向同一类型变量

B. 一个变量的地址称为该变量的指针

C. 只有同一类型变量的地址才能放到指向该类型变量的指针变量之中

D. 指针变量可以由整数赋, 不能用浮点赋

18.在C语言中,以下说法中正确的是                               (     )

A. 实参与其对应的形参各占用独立的存储单元

B. 实参与其对应的形参占用同一个存储单元

C. 只有当实参与形参同名时才占用同一个存储单元

D. 实参占用存储单元,但形参是虚拟的,不占用存储单元

19.执行语句:for(i=1;i<=9; i++);后; 变量i的值是。                 (     )

A. 10           B. 9       C. 不定           D. 11                 

20.以下程序的输出结果是。                                        (     )

main()

{ char ch[3][5]={"1111" , "222", "33" };

printf ( "%s\n" , ch[0] ) ; }

A. 1111           B. 222           C. 111122233           D. 33    

21.以下程序运行后,输出结果是。                                  (     )

#define S(x)  x*x

main( )

{ printf("%d\n",S(1+2)) ;  }

A. 9           B. 7            C. 5               (D)6       

22.下列程序的输出结果是                                       (    )

main()

{ int x, y, z ;

   x=y=z=1 ;

   ++x&&++y||++z ;

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

     }

A.1 1 1       B. 2 2 2        C. 2 2 1      D. 2 1 1                

23.设int *p[4]; 则以下叙述中正确的是。                       (    )

A. p是指向包含4整型元素的一维数组的指针;

B. p是指向int型数据的指针变量;

C. p是指向函数的指针, 该函数返回一个int型数据;         

D. p是一个指针数组

24.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量

a、b、c的语句是                                               (       )

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

C) scanf("%d%d%d",a,b,d);          D) scanf("%d%d%d",a,b,*d);

25.以下定义语句中正确的是                                    (      )

A)char a='A'b='B';   B)float a=b=10.0;   C)int a=10,*b=&a;   D)float *a,b=&a;

26.设a=6,b=4,则表达式b*=a+3的值为                       (      )

A)3       B)18       C)27       D)36

27.有数组定义:char array[]=”Computer”;则数组array所占的存储空间为 (      )

A)7个字节         B) 8个字节        C)9个字节        D)10个字节

28.已知int a[2][3]={{1,3,5},{2,4,6}};则*(*(a+1)+2)的值是    (      )

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

29.有如下程序段,其输出结果是:                                (       )

int a=3;

float b=15.6,f=1.5;

printf(“%d”,a+(int)b/2+(int)f%3);

A)10         B)11        C)12         D)13

30. 已知int a=5,b=7,c=3;则逻辑表达式a<b||++c运算后,c的值为  (      )

A) 1      B) =0    C)3    D)4

31.若有如下程序,其输出的结果为                               (       )

main()

{ unsigned int x=3,y=7;

  printf(“%d\n”,x<<3|y>>1);

}

A)26         B)27)       C)15          D)31

32.有以下程序

#include <stdio.h>

int f(int x,int y)

{return ((y-x)*x);}

main()

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

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

   printf("%d",d);

}

程序运行后的输出结果是                                        (    )

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

33.以下运算符中,优先级最高的运算符是                       (    )

A. =           B. !=

C. *(乘号)     D. ()                                           

34.经过以下语句定义后, 表达式z+=x>y?++x:++y 的值为.         (    )

int x=1,y=2,z=3;

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

35.下列选项中正确的语句组是                                  (    )

A. char s[8]; s={"Beijing"};

B. char *s; s={"Beijing"};

C. char s[8]; s="Beijing";

D. char *s; s="Beijing";

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

A. 在C 程序中所用的变量必须先定义后使用

B. 程序中,APH 和aph 是两个不同的变量

C. 若a 和b 类型相同, 在执行了赋值语句a=b; 后b 中的值将放入a 中,b 中的值不变

D: 当输入数值数据时, 对于整型变量只能输入整型值; 对于实型变量只能输入实型值

37.以下程序的输出结果是                              (    )

main(  )

{  int  x=10,y=10,i;

for(i=0;x>8;y=++i)

printf("%d,%d  ",x- -,y);

}

A. 10  1  9  2        B. 9  8  7  6   

C. 10  9  9  0        D. 10  10  9  1

38.若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为    (     )

A. 确定值      B) a的地址      C) 512      D) 511

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

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

40.变量p 为指针变量,若p=&a,下列说法不正确的是                  (    )

A. &*p==&a   B. *&a==a   C. (*p)++==a++   D. *(p++)==a++

41.以下程序的输出结果是                                          (     )

main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}

A. 5    B. 4    C. 6    D. 不确定

42.设有语句scanf(“%d,%d”,&m,&n);要使m、n的值依次为2,3,正确的输入是 (     )

A. 2⊔3↙   B. 2,3↙   C. 2;3   D. 2↙

                                      3↙

43.C标准库函数中,字符串处理函数的原形在       头文件中                 (     )

A. stdio.h    B. math.h    C. string.h    D. ctype.h

 

44.以下一维数组a的正确定义是                                 (    )

A. int a(10);                 B. int n=10,a[n];   

C. int n;                     D. #define N 10

scanf(“%d”,&n);             int a[N];

int a[n];

45.已知赋值语句wang.year=2017合法;则wang的变量类型是

A. 字符或文件    B. 整型或实型    C. 共用或结构    D. 实型或指针

 

二、程序填空题

1、下面程序的功能是:将二维数组a的行和列元素互换后存到另一个二维数组b中。请完善程序:

main()

{ int i,j,b[3][2],a[2][3]={{1,2,3},{4,5,6}};

  printf("array a :\n");

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

     {for(j=0;_                ___;j++)

         {printf("%5d",a[i][j]);

           b[j][i]=_                _____;  }

        printf("\n");

      }

  printf("array a :\n");

  for(i=0;__                __;i++)

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

      printf("%5d",b[i][j]);

      printf("\n");}

}

 

2、以下程序从输入终端读入数据到数组中,统计其中正数的个数,并计算正数之和及平均值。

main()

{ int i,a[20],count;float ave,sum;

sum=0.0;count=0;ave=0;

for(i=0;i<20;i++) scanf("%d",           );

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

{ if(            )

{ count++;

sum+=                   ;

}

}

ave=             

printf("sum=%f,count=%d,ave=%.2f\n",sum,count,ave); }

 

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

   int  n=0, ch;

   ch=getchar( );

   while( ______________ )

{  if ( _______________ )  n++;

     c=getchar( ); 

   }

 

4、 #include <stdio.h>

   void main( )

   {              

     fp1=fopen(“file1.dat”, “r”);

     fp2=fopen(“file2.dat”, “w”);

     while(                  ) putchar(getchar(fp1));

     putchar(10);

     while(!feof(fp1))                        

     fclose(fp1); fclose(fp2);

   }

 

5、 下列程序段是输出100到200之间的能被3整除的数。

   int  i;

   for (i=100; i<201; i++)

   {if (        )

     printf(“%5d”, i);

             ; }

 

6用数组来处理求Fibonacci数列问题。

main(  )

{

int  i;

                            ;

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

                            ;

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

{

if(i%3= =0) printf(“\n”);

printf(“%10d” , f[i]);

}

}

 

三、看程序,写结果。

1下列程序的输出结果是:

main( )

{  int x=1, y=2;

switch(x)              

       {case 0 :

 case 1 : switch(y)      

{ case 1:

case 2: y+=2;  }

         case 2 : x++;        }

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

 

2、下列程序的输出结果是:

main()

{   int age(int  n );

  int  i, j, k;

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

      {  for(j=1;  j<=31-i;  j++)printf(" ");

         for(k=1;  k<=2*i-1 ; k++)printf("*");

         printf("\n");                

          }

}

 int age(int  n )

      { int c;

if(n= =1) c=20;

else  c=age(n-1)+2;              

return(c) ; }                  

main( )

{int  x=5;

printf("%d" ,age(x) ) ;

}

 

3、下列程序的输出结果是:

struct atudent

{  int num;

char  name[10];

int  age;};

main( )

{ struct atudent  a[2]={{2,”Li”,20}, {2,”zhang”,21}},*p;

  p=a+1;          

printf(“%s\n”, p->name) ;  }  

                      

4、下列程序的输出结果是:

#include<stdio.h>

void mIn(void)

{int i, a[10];

int *p;

p=a;

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

scanf("%d", p++)              

if(*p%2) printf("%3d", *p);}

 

5、下列程序的输出结果是:

#include <stdio.h>

main()

{

  int i,a[10];

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

  a[i]=i;

  for(i=10;i>=1;i--)

    printf("%5d",a[i-1]);         

  printf("\n");

}

 

6、  下列程序的输出结果是:

main()

{ char *s="12134211";

int v1=0,v2=0,v3=0,v4=0,k;

for(k=0;s[k];k++)

switch(s[k])

{ case '1': v1++;

case '3': v3++;break;

case '2': v2++;

default: v4++;

}

printf("v1=%d, v2=%d, v3=%d, v4=%d\n",v1,v2,v3,v4);  结果:

}

 

7、源程序如下,运行时假定键盘输入字符串为“2017”后回车,则运行的结果为:

            #include <stdio.h>

            void main(void)

            {

            int n=0;

            char c;

            while( (c=getchar( )) ! =`\n` ) /*字符型数字*/

            {

            if (c>=`0`&&c<=`9` )

            n = n*10 + c- `0` ; /*数字*/

            }

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

            }

 

8、下列程序的输出结果是:

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

case 2: printf("$"); break;

}

default: printf("&");                  

}

printf(" "); }

 

9、下列程序的输出结果是:                                      

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

{

int  i, s=0;

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

s=s+b[i];

return   s ; 

}

main()

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

x=f (a , 3 ,5 );

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

}

 

10、若有以下程序段,执行后输出结果是

int m=32767,n=0327,k=28,j=-32768;

printf("%d,%o,%x,%d\n",m+1,n,k,--j);

 

11、有以下程序执行后输出结果是

main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;

while( i<7 && p[i]%2 )

{ k=k+p[i];    i++; }

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

}

 

12. 有以下程序,执行后输出的结果是:

void f(int x,int y)

{ int t;

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

}

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

}

 

 

 

四、程序设计题

1、输入两个正整数m和n,求其最大公约数和最小公倍数。

 

2、输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。

 

3、从键盘输入3个整数,按照从大到小的顺序输出。

 

4、设计程序求自然数1~100(不包含1和100)中所有素数的和。

 

5、求1+2+3+……+100之和。分别用三种循环语句实现(while,do-while,for)。

 

6、编写程序,将两个字符串连接起来,不要用库函数strcat。

 

7、打印斐波那契数列前20项,一行打印5个,输出格式为%6d。

 

8、编程,输入x,求y值。

y=   x                     x>00                       x=0x+1x2+2                 x<0

 

9、试编写程序求100~300间的全部素数。一行打印5个,输出格式为%6d

 

10、分别使用冒泡排序法和选择排序法写一个排序的函数(要求升序)。

函数首部均为:void popSort( int a[], int n) 

 

11、写程序,使用下面的公式求出e的近似值。

e≈1+11!+12!+13!+……1n!+……(精确要求

 

12、编写程序,比较两个字符串的大小,不要用库函数(strcmp)。

   若两个字符串相等,输出0,若大于输出1,小于输出-1。

 

13、打印100~999(包括100和999)之间的水仙花数,一行打印3个,输出格式为%6d

 

14、打印杨辉三角。(前10行)输出格式为%7d

 

15、输出1~10的阶乘

输出格式为:

1!=1

2!=2

3!=6

………………