一、简要回答下列问题
1. 简述C
语言中标识符的规定;在给变量、数组和函数起名时,应注意什么?
答:在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符,C
语言规定标识符只能由字母、数字、下划线3种字符组成,且第1个字符必须为字母或下划线。
2. 什么是表达式?若在某程序中,已有定义int x
:请问x=5
是表达式吗?若是,其值和类型各是什么?
答:用C
语言运算符将运算对象连接起来的式子叫做表达式,x=5
是表达式,其类型为int
,值为5。
3. 有定义语句char ch
;ch
是什么类型的变量?在内存中占几个字节?可用什么函数求其字节数?此类型变量通常存放什么数据?试举一例。
答:ch
是字符型变量,在内存中占用1个字节,可以通过sizeof
函数求其对应的字节数,此类型变量通常用来存放字符,如char ch = 'A'
定义了一个字符变量ch
其初值为A
,由于其实质上是一个字节的整型变量,故可以将0~127之间的整数赋给一个字符变量。
4. 写出if...else
语句的一般形式,并画出流程图。
答:一般形式如下:
代码语言:javascript复制if(表达式){
语句1
}else{
语句2
}
流程图如下:
上图中,p
表示判断条件,当判断条件成立时,执行A
框中的程序,若判断条件不成立,则执行B
框中的程序。
5. 写出for
语句的一般形式,并画出流程图。
答:一般形式如下:
代码语言:javascript复制for(表达式1;表达式2;表达式3){
语句
}
其中,表达式1用来设置初始条件,只执行一次;表达式2是循环条件表达式,用来判定是否继续循环;表达式3作为循环调整,一般在循环体后才执行。
流程图如下:
6. 若有以下二维数组的定义float x[3][4]
:请按在内存中的存放次序一一列出x
的每个元素;一般而言,若一个数组有m
列,请问该数组第i
行,第j
列的元素之前有多少个元素?
答:二维数组在内存中的排列顺序是按行存放的,即在内存中先顺序存放第1行元素,接着再存放第2行元素,依此类推,对于二维数组float x[3][4]
来说,其在内存中的存放次序为:x[0][0],x[0][1],x[0][2],x[0][3],x[1][0],x[1][1],x[1][2],x[1][3],x[2][0],x[2][1],x[2][2],x[2][3]
,对于一个有m
列的数组,数组元素a[i][j]
之前有i*m j
个元素。
7. 一个程序最多能有一个main
函数?main
函数由谁调用?返回值一般用来做什么?
答:一个程序最多有一个main
函数,main
函数是被操作系统调用的,其返回值用于说明程序的退出状态,如果返回0,则代表程序正常退出,返回其他数字的含义则由系统决定,通常情况下,返回非零代表程序异常退出。
8. 若一个指针p
指向了一个整型变量a
,请问变量p
中存放的内容是什么?表达式(char *)p
指向了什么?表达式(char *)p 1
又指向了什么?
答:变量p
中存放的是整型变量a
的地址,(char *)p
指向了一个字符型指针,(char *)p 1
同样也指向一个字符型指针,(char *)p 1
和(char *)p
两个指针之间所指的位置相差一个字节。
请看演示案例:
代码语言:javascript复制#include<stdio.h>
#include<stdlib.h>
int main(){
int a = 3;
int *p = &a;
printf("%dn",(char *)(p 1)-(char *)p); // 4
printf("%dn",(char *)p 1-(char *)p); // 1
return 0;
}
9. 在一程序中有struct pos2d{int x,int y;};
这个语句定义了什么?pos2d
是什么?系统给它分配内存吗?在此之后又有struct pos2d point;
请问定义了什么?给point
分配了内存吗?若分配,如何得到分配的字节数?
答:该语句定义了一个结构体名为pos2d
的结构体,其中包含了2个成员,分别是整型变量x
和整型变量y
;pos2d
是结构体名;由于上述代码只是建立了一个结构体模型,并没有定义变量,其中并无具体的数据,系统对之也不分配存储单元;struct pos2d point;
定义了一个名为point
的结构体变量,系统会对其分配存储单元,共占用8(4 4)个字节。
10. 某个程序中调用了文件打开函数如下:fp=fopen("file.dat","rb");
请叙述其功能,另外请说出文本文件和二进制文件的区别。
答:该行代码通过fopen
函数以二进制读取模式打开file.dat
文件,若成功打开该文件,则返回一个FILE
类型的指针,若打开失败,则返回NULL
,其返回值被保存在fp
中。
二进制文件和文本文件的区别:
二进制文件 是指数据在内存中以二进制形式存储,且不加转换的输出到外存,可以认为它就是存储在内存的数据映像,即映像文件;如果要求在外存上以ASCII
代码形式存储,则需要在存储前进行转换,ASCII
文件又称 文本文件,每一个字节存放一个字符的ASCII
代码。一般情况下,字符一律以ASCII
形式存储,数值型数据既可以用ASCII
形式存储,也可以用二进制形式存储。
二、程序阅读题
1. 字符指针变量
代码语言:javascript复制#include<stdio.h>
void f1(char *t,char *s);
int main() {
char *p="a1b2c3d4e5", st[20];
printf("%sn",p 2);
f1(st,p);
printf("%sn",st);
return 0;
}
void f1(char *t,char *s) {
int i;
for(i=0;*(s i)!='