第一章 C语言程序设计概述
- c程序基本结构特点
- 函数与主函数
- 程序由一个或多个函数组成,函数由函数头和函数体构成。程序的基本组成模块是函数。
- 必须有且只能有一个主函数main()
- 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。
- main函数在程序中的位置任意,可以在程序的开头、中间或者尾部。
- 程序语句
- C程序由语句组成,用“;”作为语句终止符
- /* */或 / /后的内容 作为注释,不能嵌套,不产生编译代码
- 编译预处理不是C语言的一部分
- 函数与主函数
- C程序的运行步骤
运行一个C程序,从输入源程序开始,要经过编辑源程序文件(•C)、编译生成目标文件(•obj)、连接生成可执行文件(•exe)和执行四个步骤
第三章 数据类型、运算符和表达式
-
- 标识符命名原则:
-
- 合法的要求是由字母,数字,下划线组成,并且第一个必须为字母或则是下划线。关键字不可以作为用户标识符号。
- main define scanf printf 及其他库函数的函数名都不是关键字可以用作标识符。
- If与if不同,If是可以做为用户标识符,因为C区分大小写。
-
- 基本数据类型:
- 基本数据类型有哪些?所占空间大小及说明符。
- 整型、实型、字符型常量的合法表示形式,字符串的表示形式。
- 标识符命名原则:
a)实型数据的合法形式:小数形式和指数形式-----尤其要注意指数形式的格式e前必有数,e后必为整数。2.333e-1 是合法的,1e.111是非法的。
b) 字符数据的合法形式:以单引号括起来的一个字符,注意转义字符P48表3-3。
如‘\x6d’是合法的字符,ASCII码为十六进制的6d,‘\141’也合法,ASCII码为八进制141,‘\108’不合法。
c) 字符常量和字符串的区别:'a' 是字符占一个字节,
"a"是字符串占两个字节(含有一个结束符号)。
-
- 常量和变量
- 符号常量的定义格式:eg #define PI 3.14159 (注意宏定义后无分号结尾)
- 变量的定义格式:
- 变量赋初值的方式。 int a=b=c=3;不合法
- 数据混合计算时数据类型的转换:P54图3-10。
- 常量和变量
-
- 强制类型转换:一定是(int)a 不是 int(a),注意类型上一定有括号的。
- 注意(int)(a+b)和(int)a+b 的区别。 前是把a+b转型,后是把a转型再加b。
- 运算符
1. 运算符的优先级别和结合方向:
- 单目运算>双目运算
- 算术> 关系运算>逻辑运算>条件运算>赋值运算>逗号运算
2. 算术运算符:
- %要求左右两边都是整型数,运算结果为余数。
- /运算若左右两边都是整型数,结果为整数。
- 自增自减运算符,前置先自增减,再运算;后置先运算,再自增减。自增自减运算符只能作用于变量,不能作用于常量和表达式。
如:#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. 计算表达式的值,注意优先级别和结合方向。
- 输入输出函数
-
- printf函数的格式考查:
-
a)格式:printf(“格式控制串”,输出表)
b)输出表:要输出的数据(可以没有,多个时以“,”分隔)
格式控制串:包含两种信息
-
-
-
- 格式说明: %[修饰符]格式字符 ,用于指定输出格式
- 普通字符或转义序列:原样输出
-
-
c)修饰符m、n、l的功能:
修饰符 |
功能 |
m |
输出数据域宽,数据长度<m,左补空格;否则按实际输出 |
.n |
对实数,指定小数点后位数(四舍五入) 对字符串,指定实际输出位数 |
L |
在d,o,x,u前,指定输出精度为long型 在e,f,g前,指定输出精度为double型 |
-
-
- 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 类型任意,都可省略,但分号;不可省
-
- 循环嵌套:
- 执行时先内存循环,后外层循环。
- 外层循环可包含两个以上内循环,但不能相互交叉
- break和continue (注意程序中两者的区别)
- 循环嵌套:
1. break语句在循环语句和switch语句中,终止并跳出循环体或开关体
2. break只能终止并跳出最近一层的结构
3. continue语句,结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断
4. continue仅用于循环语句中
第七章 数组
- 一维数组:
-
- 一维数组的定义:数据类型 数组名[常量表达式];
-
(a)常量表达式表示数组元素个数,从0开始计算。
(b)不能用变量来表示元素的个数,可以是符号常量或常量表达式。
(c)数组名为地址常量
-
-
- 一维数组元素的引用:数组名[下标]
-
(a)只能逐个引用数组元素,不能一次引用整个数组
-
-
- 一维数组初始化:类型说明符 数组名[常量表达式]={值1,值2,…… ,};
-
(a)只给部分数组元素赋初值,当{}中值的个数少于元素个数时,只给前面部分元素赋值,其余自动赋零。
(b)当全部数组元素赋初值时,可不指定数组长度
- 二维数组:
-
- 二维数组的定义:数据类型 数组名[常量表达式] [常量表达式];
-
(a)数组元素的存放顺序:按行序优先
-
-
- 二维数组元素的引用:数组名[行下标] [列下标]
-
(a)只能逐个引用数组元素,不能一次引用整个数组
-
-
- 二维数组初始化:
-
(a)可以按行赋值,也可逐元素赋值。
(b)当全部数组元素赋初值时,可不指定数组长度
- 字符数组:
-
- 字符数组的定义: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命令包含在源文件前部
- 函数调用:
- 格式:函数名(实际参数表) 。对无参函数调用时则无实际参数表。 实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。 各实参之间用逗号分隔。
- 函数调用时的求值顺序,各系统不同,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. 说明的一般形式为: 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
………………