z=x;
elsez=y;
则可以用条件表达式来表示:
().
5.putchar()函数的函数功能是()。
二.选择题
1.下列类型中错误的是()
A.unsignedB.unsignedfloatC.unsignedlongintD.unsignedint
2.下列说法错误的是()
A.else总是和它上面的,离它最近的if配对
B.条件表达式可以不用括号括起来.
C.整个if语句在程序中被看作是一条语句
D.if语句中的各语句可以是一条语句,也可以是复合语句
3.关于switch语句说法不正确的是()
A.case的次序不影响执行结果
B.每个case语句后面的常量可以不同
C.在执行完一个case语句后转到下一个case语句执行
D.每个case语句后面表达式只能是常量
4.下列说法错误的是()
A.for语句中,<表达式1>、<表达式2>和<表达式3>都可以缺省.
B.<表达式2>缺省,系统会认为此处的值是0
C.for语句的三个表达式可以是任何类型的表达式
D.for语句可以嵌套使用
5.下面关于do-while语句和while语句说法正确的是()
A.while语句和do-while语句肯定都要执行
B.两者运行结果不同
C.do-while在判断条件之前先执行循环体一次
D.while语句至少执行一次
三、问答题
1.编写一个程序,要求能够将输入的任意一个三位数颠倒过来.
2.将三个整数输入计算机,编写程序,将居中的值显示出来.
3.编写一个求一元二次方程
的根的程序.
4.用双重循环输出9*9口诀。
5.编写如下程序:
从键盘先输入两个实数,再输入四则运算符“+”、“-”、“*”、“/”中的一个,然后进行四则运算.若输入其他字符,则显示出错信息.
第四章数组
本章要点:
1.一维数组
2.二维数组
3.字符数组
4.数组综合应用
本章目标:
1.了解一维数组、二维数组的基本概念
2.掌握数组类型变量的定义与引用
3.掌握数组元素的引用
本章重点:
1.一维数组、二维数组的定义与引用
2.字符数组的定义与引用、常用字符串处理函数及字符处理函数
3.数组的应用
本章难点:
1.数组引用与地址之间的关系
2.数组的综合应用
作业题
一、填空题
1.我们定义了一个含有N各元素的数组,那么下标的取值范围为()。
2.inta[4][5]定义了一个二维数组,假设a数组在内存中的起始地址为1000,则a[2][1]的地址为()。
3.对于数组inta[5][6]的数组元素的引用最多到()。
4.标准字符串处理函数的头文件是()。
5.Staticchara[15]={‘H’‘,’‘a’‘,’‘p’‘,’‘p’‘,’‘y’‘,’‘.’};这个初始化语句中有9个数组元素没有给出初值,系统会自动对它们赋值为()或()。
二、选择题
1.关于数组,下列说法错误的是()
A.在任何一个数组中,数组元素的类型都是一致的
B.<常量表达式>不允许是变量
C.一维数组中的各个元素在内存中是按顺序存放的
D.C语言运行时要检查数组的边界,即下标值超界时,系统会报错
2.关于数组,下列说法正确的是()
A.对数组的初始化操作在定义数组的同时进行
B.给数组赋初值时,必须所有数组元素都被赋值
C.给数组元素全部赋初值时,一定要指明数组的大小.
D.引用数组元素的时候,可以一次引用数组中的全部元素
3.字符数组chara[]=”Howdoyoudo?
”;的大小为()
A.10B.11C.14D.15
4.有如下的数组staticinta[10];则()
A.该数组没有被初始化B.数组的所有元素都被赋值为0
C.数组的第一个元素是a[1]D.数组共有11个元素
5.关于字符数组,下列说法错误的是()
A.字符型数组中的每一个元素只能存放一个字符型数据
B.逐个输入输出字符时,要用“%c”格式符
C.scanf(“%s”,&s);的写法是正确的
D.数组名就是数组的起始地址
三.问答题
1.计算fibonacci数列的前15个数.Fibonacci数列具有以下特点:
第1和第2个数分别是0和1,从第3个数开始每个数是它前两个数之和.
2.用选择法对任意输入的一个10元整数数组排序(从小到大).
3.利用冒泡法将10个数组元素按从小到大顺序排列.
4.求一个3×3矩阵对角线元素之和.
5.输入一行字符,统计其中有多少个单词.(单词以空格分隔,例如:
输入“Iamaboy”,有4个单词)
第五章函数
本章要点:
1.函数定义
2.函数参数与函数的返回值
3.函数的调用
4.函数嵌套调用和递归调用
5.数组作为函数参数
6.变量作用域
7.变量存储类别与生存周期
8.内部函数和外部函数
本章目标:
1.掌握函数的定义与调用
2.掌握函数参数的传递方式
3.领会变量存储类型的概念及各种存储类型变量的生存期和有效范围
4.领会函数的嵌套调用与递归调用
本章重点:
1.函数定义、函数调用、函数声明等基本概念
2.函数的嵌套调用与递归调用
3.数组作为函数的参数、变量的存储类别与作用域
本章难点:
1.函数的嵌套调用与递归调用
2.各种存储类型变量的生存期和有效范围
作业题
一、填空题
1.程序设计中,常常将重复使用的功能或功能独立的模块定义成一个()。
2.形参与形参的类型说明可以分开描述,如
fun(x,y,z)
intx,y,z;
也可以放在一起,写成:
()。
3.C程序必须从()函数开始执行。
4.静态存储变量分为:
()、()。
5.根据函数是否能被其他源程序文件调用,又将函数分为()和()。
二/选择题
1.以下说法错误的是()
A.C语言函数分为由系统提供的标准库函数和由程序员自己定义的函数
B.在主函数main()中可以调用其他函数,其他函数之间不可以相互调用
C.C语言的程序是由一个函数或多个函数组成的
D.对于一个很大的任务,一般把它分解成若干源文件,分别编写和调试
2.以下说法错误的是()
A.C程序必须从main()函数开始执行
B.所有函数在定义上讲都是相互独立的,不存在嵌套定义
C.C语言中有两类函数,系统提供的库函数和用户自定义的函数
D.参数的作用是向函数传递不同的数据
3.关于形式参数,下面说法错误的是()
A.对于形参,虽然定义了它,只有当函数被调用时,形参才在内存中开辟空间
B.调用结束后,形参自动从内存中被释放掉
C.在函数定义中,可以不给出形参类型,调用的时候再定义。
D.实参与形参的关系是赋值与被赋值的关系
4.关于return语句,下面说法错误的是()
A.它的功能是将表达式的值作为函数的返回值返回
B.函数中可以有多个return语句,执行到哪个就从那一个return语句返回
C.return可以返回多个值
D.return(表达式)语句中的表达式值的类型应与定义函数时函数的类型一致
5.关于函数调用,下面说法错误的是()
A.被调用函数必须是已经存在的函数、库函数或用户已定义过的函数
B.没有头文件也可以对库函数进行调用
C.如果使用用户自定义的函数,还要在主调用函数中说明用户函数的返回值类型.
D.在主函数main()中可以调用其他函数,其他函数也可以相互调用
三、简答题
1.指出下列程序中的错误或不合理之处,并改正.
main()
{
ints,x,n;
s=power(x,n);
}
power(y)
{
inti,p=1;
for(i=1;i<=n;++i)
p=p*y;
}
2.编写一个程序,从键盘输入立方体的长、宽、高,在屏幕上输出立方体的体积.
3.编写一个程序,求1+1/2+1/3+……+1/n的值
4.写出下面程序的运行结果.
#include"stdio.h"
sqr(x)
intx;
{
x=x*x;
return(x);
}
voidmain()
{
inti=25;
printf("Thevalueofiinmain()beforcallingsqr(x)is%d\n",i);
printf("Callingsqr(x):
sqr(%d)=%d\n",i,sqr(i));
printf("Thevalueofiinmain()aftercallingsqr(x)is%d\n",i);
getch();
}
5.编写一程序,利用函数的递归调用求x的n次方的值,其中n为正整数.
第六章指针
本章要点:
1.指针的概念
2.指针变量
3.数组与指针
4.字符串与指针
5.函数与指针
6.指针数组与指向指针的指针
本章目标:
1.了解指针与地址的概念
2.掌握指针变量的定义、初始化及指针的运算
3.掌握指针与数组、指针数组、二级指针等知识
4.了解指针与函数的概念
5.掌握指针作为函数参数的应用
本章重点:
1.指针与地址的基本概念、指针与变量的关系
2.指针与数组
3.指针与字符串、指针数组与二级指针
4.指针的应用
本章难点:
1.指针与数组的关系
2.指针与字符串、指针数组与二级指针
作业题
一、填空题
1.如果有一个变量专门用来存放另一个变量的地址,则它称为(),当它的值为零时,我们称它为()。
2.写出下面3个表达式的含义:
(1)(*s)++:
()
(2)(*++s):
()
(3)(*s++):
()
3.有如下的表达式:
inta[20],*p;
p=a;
那么p+3表示的是()的地址.
4.任何能由数组下标完成的操作,都可以用()实现。
5.在C语言中,字符串实际上是指字符串第一个字符的(),所以字符串数组中的每一个元素实际上是每一个字符串的()。
6.由于指针变量直接指向变量,所以称为()。
而如果通过指向指针的指针变量来访问变量则构成()。
二、选择题
1.下面关于表达式:
inti,*ip=&i说法正确的是()
A.此表达式写法错误
B.此表达式表示用&i对ip进行初始化
C.此表达式表示用&i对*ip进行初始化
D.此表达式表示用&i分别对*ip和i进行初始化
2.关于指针,下列说法错误的是()
A.指针变量是用来存放内存地址的
B.&表示取变量地址运算
C.*表示取指针变量所指向的变量内容的运算
D.可以将整数赋给指针变量
3.对于如下的表达式:
inta[3][4],*p;
p=*a;
执行p++操作之后,*p表示取()的内容.
A.a[0][0]B.a[1][0]C.a[1][1]D.a[0][1]
4.以下说法错误的是()
A.int(*p)();表示p被定义为一个指向返回值为整数的函数的指针
B.使用指向函数的指针是结构化程序设计的一种有效手段.
C.char**p相当于char*(*p)
D.指针数组的元素补仅能存放地址,还可以存放其他数组的元素.
三、问答题
1.用指针设计一个可以计算字符串长度的程序.
2.编写一个可以实际交换两个变量数值的函数.
3.想输出a数组10个元素,用以下程序行不行?
为什么?
请修改程序使之能实现题目要求.
#include
voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=0;i<10;i++,a++;)
{
printf("%d",*a);
}
}
4.写出下面2个程序的运行结果.
(1)
#include
intmax(intx,inty)
{
return(x>y?
x:
y);
}
voidmain()
{
inta=10,b=12;
int(*p)();
p=max;
printf("%d",(*p)(a,b));
}
(2)
#include
voidmain()
{
char*ps="thisisabook";
intn=10;
ps+=n;
printf("%s\n",ps);
}
(3)
#include
voidmain()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int*pa[3];
int*p=a,i;
for(i=0;i<3;i++)
pa[i]=a[i];
for(i=0;i<3;i++)
printf("%p--%d\n",pa[i],*pa[i]);
for(i=0;i<3;i++)
{
intj;
for(j=0;j<3;j++)
{printf("%p--%d",p,*p);p=p+1;}
printf("\n");
}
}
5.写一个程序,求一个字符串的长度,在main函数中输入字符串,并输出其长度.
6.什么是双重指针?
请自己编写一个使用双重指针的程序,并运行之.
第七章结构体与共同体
本章要点:
1.结构体的概念与定义
2.结构体数组
3.结构体与指针
4.结构体作为函数参数
5.动态数据结构――链表
6.位段
7.共同体
本章目标:
1.掌握结构体和共用体类型的说明、结构体和共用体变量的定义及初始化方法
2.掌握结构体与共用体变量成员的引用
3.领会存储动态分配和释放
4.领会链表的基本概念和基本操作
5.领会枚举类型变量的定义
6.了解typedef的作用
本章重点:
1.结构体的基本概念、结构类型及变量的定义、结构数组
2.用指针处理链表
3.共用体及枚举类型的基本概念、typedef的基本概念
本章难点:
1.存储动态分配和释放
2.用指针处理链表
作业题
一、填空题
1.C语言用()描述由多个有一定内在联系、但通常类型不完全相同的数据项组合而成的数据。
2.在C语言中,为了直观和使用方便,可以把(*pstu).score改用为()来代替。
3.在编制程序时,有时需要把一个结构变量的值传给另一个函数,但是旧的C标准不允许把结构整体作为一个参数传给另一个函数。
结构传递给函数时,一般采用()传递方式。
4.链表的每个结点包含()和()两部分,链指针总是指向链表中的()。
5.使用动态申请空间的标准库函数的时候,必须包含头文件()。
6.所谓建立链表是指从无到有地建立起一个链表,即()。
7.链表的遍历是指()。
二、选择题
1.结构体如下所示:
structemployees;
{
charname[30];
intage;
floatwage;
};
下面说法错误的是:
()
A.上述形式的定义在程序运行时不会为该结构体类型分配内存空间。
B.结构体变量在内存中存放时,占用连续的一段存储空间
C.上述结构体必须有关键字struct
D.上述结构体成员的类型不可以是已经定义过的结构体类型。
2.关于结构体,下列说法错误的是()
A.不能将一个结构体变量作为一个整体进行输入和输出。
B.对成员变量可以像普通变量一样进行各种运算。
C.结构体变量的地址主要用作函数参数传递结构体的地址。
D.结构体变量赋初值与数组不同,可以不一一对应。
3.关于链表,下列说法错误的是()
A.链表是动态分配的一种结构,它根据需要开辟内存单元
B.链表有头指针变量head,它是链表的第一个结点
C.如果要在链表中增加新的结点,需要申请存储空间
D.如果不再使用链表,则应释放所占的存储空间
4.以下函数,哪个不属于动态申请空间的标准库函数()
A.malloc()B.calloc()C.free()D.strcmp()
5.关于链表的插入和删除,下列说法错误的是()
A.插入位置包括表头、表中和表尾
B.从链表中删除一个结点,就是把它从内存中抹掉。
C.要删除链表中的某个结点,需自己定义删除函数。
D.删除结点要注意删除的结点是否是头结点
三、问答题
1.写出下面程序的运行结果
#include"stdio.h"
structstudent
{
intx;
charc;
}a;
f(structstudentb)
{
b.x=20;
b.c='y';
}
main()
{
a.x=3;
a.c='a';
f(a);