程序设计基础复习浙江大学 计算机学院颜晖
2003.6.9 杭州目录
1,基本要求
2,基本内容
1,基本要求
熟练掌握 C 语言的基本知识
具备基本的 C程序设计能力,能熟练地阅读、理解和编制简短的 C程序。
2,基本内容
2.1 数据的定义
2.2 运算及流程控制
2.3 程序结构和函数
2.4 数据的输入和输出
2.5 命令行参数和编译预处理
2.6 常用算法
2.1 数据的定义数据的定义包括数据类型和存储类别
1,基本类型基本类型指整型,实型和字符型 ( 主要是 int,
float,double,char; 还包括 long,unsigned,
short)
(1) 常量熟练掌握各种表示形式的整数,实数,和字符 (串 )常量,符号常量的定义和使用 。
包括整数的十进制,八进制和十六进制的表示形式,长整型常量的表示形式,实数的浮点表示法和科学记数法,字符的转义序列,常用符号常量的含义 ( 如 NULL、
EOF等 )
(2) 变量熟练掌握变量的定义和初始化
printf(‖%x,%o―,16,10);
printf ("%d,%o,%x",0x12,12,012);
printf("%d,%d\n",NULL,EOF);
2,构造类型构造类型包括数组和结构
(1) 数组熟练掌握一维和二维数组的定义和初始化,
数组元素的引用 。
包括一维字符数组和字符串,二维字符数组和字符串数组数组定义为 int a[3][2]={1,2,3,4,5,6},数组元素 a[2][1] 的值为 6。
不正确的赋值或赋初值的方式是 ______。
A,char str[]="string";
B,char str[7]={'s','t','r','i','n','g'};
C,char str[10]; str="string";
D,char str[7]={'s','t','r','i','n','g',‘\0‘};
表达式 strcmp(―box‖,―boss‖) 的值是一个 ____.
A,正数 B,负数 C,0 D,不确定的数
#include <stdio.h>
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
void main()
{ int s,k;
for(s=0,k=0; k<3; k++)
s+=a[k][k];
printf("%d--",s);
for(s=0,k=0; k<3; k++)
s+=a[k][3-k];
printf("%d--",s);
for(s=0,k=0; k<4; k++)
s+=*(a[1]+k);
printf("%d\n",s);
}
将输入的 n 个字符串连接成 1个字符串后输出,
#include <stdio.h>
#include <string.h>
void main()
{ char str[10][20],string[200]; int k,n;
scanf("%d",&n);
for (k=0; k<n; k++)
gets(str[k]);
strcpy(string,str[0]);
for (k=1; k<n; k++) strcat(string,str[k]);
puts(string);
}
(2) 结构熟练掌握结构类型的定义,结构变量的定义和初始化,结构变量成员的引用 。
3,指针
(1) 熟练掌握指针和地址的概念
(2) 熟练掌握指针变量的定义和初始化
(3) 熟练掌握通过指针引用指向实体
9 a
int *pa,a;
pa=&a;
printf("%d,%d",*pa,a);
printf("%x,%x",pa,&a);
pa
若变量已正确定义并且指针 p已经指向某个变量 x,则 (*p)++相当于 _____。
A,p++ B,x++ C,*(p++) D,&x++
若 p1,p2都是整型指针,p1已经指向变量 x,
要使 p2也指向 x,_____是正确的 。
A,p2=p1; B,p2=**p1;
C,p2=&p1; D,p2=*p1;
下列语句定义 pf为指向 float类型变量 f的指针,
_____是正确的 。
A,float f,*pf = f; B,float f,*pf = &f;
C,float *pf = &f,f; D,float f,pf = f;
对于如下说明,语法和语义都正确的赋值是
_____。
int c,*s,a[ ]={1,3,5};
A,c=*s; B,s[0]=a[0];
C,s=&a[1]; D,c=a;
4,构造类型和指针类型的混合定义及应用
(1) 熟练掌握指针,数组和地址间的关系
int c[ ]={1,3,5};
int *k=c+1;
printf("%d",*++k);
char str[ ]="hello\tworld\n";
printf("%d,%c\n",sizeof(str),*(str+10));
(2) 熟练掌握指针数组写出下列程序段的输出结果 。
char *st[ ]={"one","two","three","four"};
printf("%s\n",*(st+3)+1);
(3) 熟练掌握结构数组输入某班 50位学生的姓名及数学,英语成绩,
计算每位学生的平均分;然后输出平均分最高的学生的姓名及其数学和英语成绩 。
#include <stdio.h>
#define SIZE 50
struct student{
char name[10]; int math,eng; float aver;
};
void main()
{ struct student s[SIZE];
int k,sub=0;
for(k=0; k<SIZE; k++) {
scanf("%s%d%d",s[k].name,&s[k].math,&s[k].eng);
s[k].aver = (s[k].math+s[k].eng)/2.0
}
for(k=1; k<SZIE; k++)
if(s[k].aver>s[sub].aver ) sub = k;
printf("%10s%3d%3d\n",s[sub].name,s[sub].math,s
[sub].eng);
}
(4) 熟练掌握结构指针
(5) 掌握结构中含指针或数组
(6) 掌握嵌套结构
(7) 掌握指向指针的指针 ( 二级 )
(8) 单向链表掌握单向链表的建立和遍历了解插入和删除单向链表中的一个节点
++p->str中的 ++加在 _____。
struct {
int len;
char *str;
} *p;
A,指针 str上 B,指针 p上
C,str指的内容上 D,以上均不是
main( )
{ struct st {
int x,y;
}a[4]={{10,20},{30,40},{50,60},{70,80}};
struct st *p=a;
printf("%d,",p++->x);
printf("%d,",++p->y);
printf("%d\n",(a+3)->x);
}
5,空类型 void
掌握空类型的定义和使用
6,变量的存储类别,作用域和生存期
(1) 掌握变量的存储类别
auto 自动型,static 静态型,extern 外部参照型
(2) 掌握全局变量和局部变量注意区分:自动局部变量和静态局部变量,全局变量和静态全局变量,外部变量
C语言中,形参的缺省的存储类说明是
______。
A,auto B,static
C,register D,extern
对于以下函数 f,计算 f(f(2))的值 。
int f(int x)
{ static int k=0;
x+=k++;
return x;
}
2.2 运算及流程控制
1,基本运算熟练掌握运算符的功能熟练掌握运算符的优先级,结合性和目数熟练掌握隐式类型转换和强制类型转换
2,表达式熟练掌握各类表达式的组成规则和计算过程
() [ ] ->,
! ~ ++ -- - (类型名 ) * & sizeof 从右向左
* / %
+ -
<< >>
< <= > >=
== !=
& (按位与 )
^ (按位异或 )
| (按位或 )
&&
||
,右
= += -= *= /= %= >>= <<= &= ^= |= 右
,
若变量已正确定义且 k 的值是 4,计算表达式 ( j = k--) 后,j和 k的 值分别是 _____。
已知字符 ‘ a‘ 的 ASCII码为 97,执行下列语句的输出是 _____。
printf ("%d,%c",‘b‘,‘b‘-1 ) ;
判断 i和 j至少有一个值为非 0的表达式是
_____。
A,i!=0 && j!=0 B,i || j
C,!(i==0 || j==0) D,i&&j
表达式 !x 等价于 _____。
A,x==0 B,x==1
C,x != 0 D,x != 1
若 x是单精度实型变量,表达式 (x = 10/4) 的值是 _____ 。
A,2.5 B,2.0 C,3 D,2
写出下列程序段的输出结果 。
float x1,x2;
x1=3/2;
x2=x1/2;
printf("%d,%.1f",(int)x1,x2) ;
表达式 sizeof(―key‖) 的值是 ______。
A,1 B,2 C,3 D,4
static char s[ ]="student";
printf("%d,%c\n",sizeof(s),*(s+2));
若 a是整型变量,表达式 ~(a ^ ~a ) 等价于
______。
A,~a B,1 C,0 D,2
表达式 (7<<1>>2^2 ) 的值是 _______。
下列运算符中,优先级最低的是 _____。
A,* B,! = C,+ D,=
算术运算符,赋值运算符和关系运算符的运算优先级按从高到低的顺序依次为 _____。
A,算术运算,赋值运算,关系运算
B,关系运算,赋值运算,算术运算
C,算术运算,关系运算,赋值运算
D,关系运算,算术运算,赋值运算
3,语句
(1) 熟练掌握表达式语句,空语句,复合语句;
(2) 熟练掌握简单控制语句
break,continue,return
(3) 熟练掌握选择控制语句 if,switch
(4) 熟练掌握重复控制语句
for,while,do—while
C 语言程序的三种基本结构是顺序结构,选择结构和 ______结构 。
A,循环 B,递归
C,转移 D,嵌套写出下列程序段的输出结果 。
char c,k;
c=‘b‘; k=4;
switch(c){
case?a‘,k=1;
case?b‘,k=2;
case?c‘,k=3;
}
printf("%d\n",k);
写出下列程序段的输出结果 。
int k,x;
for (k=0,x=0; k<=9&&x!=10; k++)
x+=2;
printf ("%d,%d",k,x) ;
输入 12345#后,写出下列程序的输出结果。
void main()
{ char c;
for(c=getchar(); getchar()!=‘#‘; c=getchar())
putchar(c);
}
int k ; char *s = ―ABC‖;
for( k=10; k != 0; k-- ) ;
printf ( "%d",k );
while( *s++ ) putchar( *s );
2.3 程序结构和函数
1,程序结构熟练掌握 main函数与其他函数之间的关系包括标准库函数和自定义函数
2,函数的定义
(1) 熟练掌握函数定义的 ANSI C格式
(2) 熟练掌握函数的参数 ( 形式参数和实在参数 ) 及参数传递,包括指针作为函数的参数
(3) 熟练掌握函数的返回值,包括指针作为函数的返回值要调用数学函数时,在 #include命令行中应包含 _____。
A,‖stdio.h‖ B,‖string.h‖
C,‖math.h‖ D,‖ctype.h‖
在 C语言程序中,若对函数类型未加显式说明,则函数的隐含类型是 int.
int z;
void p(int *x,int y)
{ ++*x;
y--;
z=*x+y+z;
printf("%d,%d,%d#",*x,y,z);
}
void main()
{ int x=1,y=5,z=9;
p(&x,y);
printf("%d,%d,%d#",x,y,z);
}
3,函数的调用
(1) 函数调用的一般格式熟练掌握通过函数名调用函数,了解通过函数指针调用函数
(2) 掌握函数的嵌套调用和递归调用
int f(int k)
{
return ((k<0)?1:f(k-2)+2);
}
(3) 熟练掌握标准库函数的调用常用数学函数:
cos,sqrt,pow,exp,fabs,log,log10等常用字符函数:
isalnum,isalpha,isdigit,islower,toupper等常用字符串函数:
strcpy,strcmp,strcat,strlen等输入 m和 n( m≥n≥0) 后,计算下列表达式的值并输出 。
m!
n!(m-n)!
要求将计算阶乘的运算写成函数 fact(n),函数返回值的类型为 float。
#include <stdio.h>
float fact(int k);
void main()
{ int m,n;
scanf("%d%d",&m,&n);
printf("%f\n",fact(m)/fact(n)/fact(m-n));
}
float fact(int k)
{ float y=1; int i;
for(i=2;i<=k;i++)
y*=i;
return y;
}
2.4 数据的输入和输出
1,文件熟练掌握文件的基本概念
2,标准文件的输入和输出熟练掌握常用输入输出函数,scanf,printf、
getchar,putchar,gets,puts等
3,缓冲文件系统 ( 文本文件 )
(1) 熟练掌握文件的打开和关闭常用函数,fopen和 fclose
(2) 熟练掌握文件的基本读写操作常用函数,fscanf,fprintf,fgetc,fputc、
fgets,fputs等
(3) 熟练掌握文件的状态检测常用函数,feof等统计当前目录下文本文件 data.txt中字符 ’ $’ 出现的次数,并将统计结果写入当前目录下的文本文件 res.txt。
#include <stdio.h>
void main()
{ FILE *fp1,*fp2;
char ch; int count=0;
if((fp1=fopen("data.txt","r"))==NULL){
printf("不能打开文件 data.txt!\n");
exit(0);
}
if((fp1=fopen("res.txt","w"))==NULL){
printf("不能打开文件 res.txt!\n");
exit(0);
}
while((ch=fgetc(fp1))!=EOF)
if(ch==’$’) count++;
fprintf(fp2,"%d",count);
fclose(fp1);
fclose(fp2);
}
2.5 命令行参数和编译预处理
1,命令行参数 ( argc,argv) 的说明,含义和使用 。
执行程序 find –nx ould text.txt时,
*++argv[1]的值是 _______。
2,熟练掌握编译预处理的基本概念
3,掌握宏定义
4,掌握文件包含写出下列程序段的输出结果 。
#define T 16
#define S (T+10)-7
printf("%d\n",S*2);
2.7 常用算法以下算法针对本大纲中列出的各种数据结构
1,分类 ( 排序 ) 算法冒泡,选择,插入
2,检索 ( 查找 ) 算法
(1) 无序数据序列的查找 ( 见遍历算法 )
(2) 有序数据序列的查找:二分法
3,遍历算法
(1) 一维数组和二维数组的遍历
(2) 文件的遍历
4,其它基本算法