2024年4月14日发(作者:典暄)
一、简答题
1、请问指针有哪些类型?
指针的类型,跟他所指向的数据结构有关,基本类型的指
针指向基本类型的数据结构。
2、函数式宏定义和函数调有什么不同?
(1)函数式宏定义的参数没有类型,预处理器只负责做
形式上的替换,而不做参数类型检查,所以传参时要格外小
心。
(2)调用真正函数的代码和调用函数式宏定义的代码编
译生成的指令不同。
(3)函数式宏定义要注意格式,尤其是括号。
(4)若函数参数为表达式,则普通函数的调用与函数式
8、C语言的语句有哪几种?
(1)表达式语句 (2)函数调用语句 (3)控制语句 (4)
复合语句 (5)空语句
9、运行C程序的步骤
编辑(预处理)→编译→链接→运行
10、算法的特征
(1)有穷性(2)确切性(3)输入(4)输出(5)可行性
11、C语言变量的储存类别分为哪四种?
(1)auto(自动)(2)extern(外部)(3)static(静态)
(4)register(寄存器)
12、函数的嵌套调用和递归调用有什么区别?
递归调用 是自己调用自己,函数嵌套可以是调
宏定义的替换过程是不一样的。
(5)函数式宏定义往往会导致较低的代码执行效率。
3、请问指针编程有哪些优点?
(1)提高传输速度,又节省大量内存。
(2)可以用来做数据类型转换,比较常用于通讯缓冲区的
填充。
(3)可以用在大量分支处理的实例当中。
(4)在数据结构中,链表、树、图等大量的应用都离不开
指针。
4、C语言中,变量为什么要先定义后使用?
(1)对于编译器处理更方便。
(2)不容易出错。
(3)程序更清晰。
5、二维数组的初始化定义的正确形式有哪些?请举例说明
(1)分行赋初值
例如:int a[2][3]={ {1,3,4},{2,3,1},{7,9,0} };
(2)按顺序初始化
例如:int a[2][3]={1,3,4,2,3,1,7,9,0};
(3)省略一维长度的赋值
例如:int a[][3]={1,3,4,2,3,1,7,9,0};
(4)对数组的前几行元素初始化,其他元素自动初始化为
0
例如:int a[2][3]={ {1},{2,3} };
6、while与do while相同点与不同点是什么?
(1)while语句是先测试条件再执行语句,条件不符后终
止;do while语句是先执行语句再测试条件,条件不符后终
止,所以do while循环至少执行一次
7、请写出一个C程序的构成
(1)C程序是由若干个函数构成的
(2)每个函数(包括主函数)的定义分为两个部分:函
数说明部分和函数体。
(3)C程序中的语句最后总要有一个“分号(;)”,作
为每个语句的结束。
(4)可以用“”括住任意字符,称为“注释”。
(5)C程序的书写格式很灵活,在一行上可以书写多个语
句,一个语句也可以写在多行上。
(6)C程序的执行总是从主函数开始,并在主函数中结束。
(7)主函数可以调用任何非主函数;任何非主函数都可
以相互调用,但是不能调用主函数
用其他函数。
13、请描述一个算法,求1+4+7+…+100的和
#include
void main()
{
int i;
int sum = 0;
for(i=1;i<=100;i+=3)
{
sum += i;
}
printf("%dn",sum);
return;
}
14、循环结构中break语句和continue语句的作用是什么?
二者有何区别
(1)作用:break语句通常用在循环语句和开关语句中。
continue语句的作用是跳过循环体中剩余的语句而强行执
行下一次循环。
(2)区别:continue语句只结束本次循环,而不是终止整
个循环的执行。break语句则是结束整个循环过程,不再判
断执行循环的条件是否成立。
15、指针与地址有什么联系?在使用指针的过程中应注意哪
些细节?
(1)联系:①指针和地址最大的区别就是指针是有类型的,
地址是没有类型的。②指针是由地址和类型两部分构成的。
(2)注意细节:①指针变量和普通变量概念使用方式相混
淆②指针变量的赋值(初始化,传递地址)方式有误③指针
变量的类型与所指元素的类型不一致④指针移动不恰当⑤
指针在使用过程中发生了不必要的导致错误的改变⑥多重
的指针指向指针,导致形成难以理清的逻辑关系.
16、C语言中参数传递有什么特点?我们应当注意些什么?
(1)数值传递:被调用函数中对形参的操作不影响主调用
函数中的实参值。
(2)地址传递:可以通过被调用函数中对形参的操作来修
改主调用函数中的实参值。
注意事项:用malloc 或new申请内存之后,应该立即
检查指针值是否为NULL。防止使用指针值为NULL 的内存。
17、C语言中进行函数声明的作用是什么?
(1)把函数的名字,函数类型以及形参的类型、个数和顺
序通知编译系统,以便在调用该函数时进行对照检查,它不
包括函数体。
18、字符常量与字符串常量有什么区别?
(1)形式上:字符常量是单引号引起的一个字符;字符串
常量是双引号引起的若干个字符;
(2)含义上:字符常量相当于一个整型值,可以参加表达
式的运算;字符串常量代表一个地址值(该字符串在内存中
存放的位置);
(3)占内存大小:字符常量只占一个字节;字符串常量占
若干个字节,(至少一个字符结束标志)
19、C语言中如何表示“真”与“假”
(1)定义假为0,真为1。(2)建立自己的枚举类型
else printf("no");
return 0;
}
24、if语句中条件表达式可以是任意合法的表达式吗?
switch语句中break的作用是什么?
(1)if语句中的表达式不限于逻辑表达式,可以是任意的
数值类型。
(2)当break用于开关语句switch中时,可使程序跳出
switch而执行switch以后的语句;如果没有break语句,
则会从满足条件的地方开始执行,直到switch结构结束。
25、C语言循环结构主要有哪几种?每种循环结构的一般形式
分别是什么样的?
(1)do……while :先循环,在判断 (2)
20、字符数组与字符串是否相同?若不相同,有何区别?
不相同。(1)字符指针中存的是字符串第一个字符的首地
址。而字符数组中存的整个字符串
(2)字符数组只能在定义是进行初始化;
char a[]="abc";不可以char
a[10] ;a[10]="abc"而字符指针可以。
21、关键字与一般标识符有什么不同?
(1)关键字是标识符的一种。标识符是指: 可以当作变
量名, 函数名等的。
(2)标识符是非常多的(但C语言支持最长的标识符是32
个)而关键字只有32个。
22、使用swicth的注意事项。
(1)switch语句后面的小括号只能写整数类型的表达式,
否则会报错。
(2)switch小括号后面不要加分号,可以加分号加在大括
号后面。
23、请用两种方式写出如何判断某一年为闰年的C语句。
(1)#include
main()
{ int n;
printf(“请输入年份:n");
scanf(“%d",&n);
if(n%100==0)
if(n%400==0)
printf(“是闰年");
else
printf(“不是闰年");
else
if(n%4==8)
printf(“是闰年");
else
printf(“不是闰年")
}
(2)#include
int main()
{int a;
scanf("%d",&a);
if(a%400==0||a%4==0&&a%100)printf("yes");
while :先判断后循环
(3)for:一般可以代替上面两个
26、预处理命令主要有哪几种?每种预处理命令的一般形式
是什么样的?
(1)宏定义命令:#define、#undef,用来定义和解除宏。
(2)文件包含命令:#include "文件名" 或
者 #include <文件名>。
(3)条件编译:#ifdef、#else、#endif、#elif 等。
27、请写出C语言标识符的命名规则
(1)必须用字母或下划线开头。
(2)只能是字母、下划线、数字的组合,不能出现其他
符号。例如¥_st,就是个错误的标识符,它出现了“¥”
符号。
(3)大小写的含义是不同的,例如标识符 TEA和tea是不
同的。
(4)标识符的名称不能是C语言中的关键字,关键字是具
有特定含义的标识符,用户只能根据系统的规定使用它
们。
28、请简述while型循环和until型循环的区别
WHILE型和UNTIL型语句本质上是等价的,当型循环
有时称为前测试型循环,直到型循环有时称为后测试型
循环.
29、C语言中的语句有哪几类?
(1)表达式语句(2)函数调用语(3)控制语句(4)复合语句
(5)空语句
30、局部变量和全局变量有何区别?
全局变量就是整个源程序都有效的变量;而局部变量会
在其所属.
二、编程题
1、以下4种水果,[1]苹果[2]梨[3]桔子[4]芒果,单价分
别是2.0元/公斤,2.5元/公斤,3.0元/公斤,4.5元/公斤,
请输入水果编号,重量,计算应付款。
解答:#include
#include
int main()
{ double weight,pay,price;
int num;
printf("请输入水果编号、重量:");
scanf("%d%lf",&num,&weight);
switch(num){
case 1:price=2;break;
case 2:price=2.5;break;
case 3:price=3;break;
case 4:price=4.5;break;
default:printf("你输入的编号有误!n");exit (0);
}
pay=weight*price;
printf("应付款:%.2lfn",pay);
return 0;
}
2、输入某学生成绩(成绩分为100分制,可以为89.5,如
果输入的成绩不在0-100之间,请给出错误提示)经处理后
给出学生的等级,等级分类如下:
90分以下(包括90分):A
80至90分(包括80分):B
70至80分(包括70分):C
60至70分(包括60分):D
60分以下:E
#include "stdio.h"
void main ()
{
double key;
printf("请输入学生成绩n");
scanf("%lf",&kay);
if(key>=0 && key=<60)
printf("分数等级:En');
else if(key>=60&&key=<69)
printf("分数等级:Dn');
else if(key>=70&&key=<79)
printf("分数等级:Cn');
else if(key>=80&&key=<89)
printf("分数等级:Bn');
else if(key>=90&&key=<100)
printf("分数等级:An');
else
printf("输入有误请重新输入:");
scanf("%If",&key);
}
3、编程实现求1-10之间的所有数的乘积并输出。
#include
void main( )
{ int i;
long sum=1;
for(i=1; i<=10; i=i+1)
sum=sum*i;
printf(“the sum of odd is :%ld”,sum);
}
4、从键盘输入两个数,求出其最大值(要求使用函数完成
求最大值,并在主函数中调用该函数)。
#include
int max(int x,int y)
{return (x > y) ? x : y;
}
int main()
{int a,b;
printf("输入两个整数(空格隔开):");
scanf("%d%d",&a,&b);
printf("最大数:%dn",max(a,b));
return 0;
}
5、已知函数y=f(x),编程实现输入一个x值,输出y值。
2024年4月14日发(作者:典暄)
一、简答题
1、请问指针有哪些类型?
指针的类型,跟他所指向的数据结构有关,基本类型的指
针指向基本类型的数据结构。
2、函数式宏定义和函数调有什么不同?
(1)函数式宏定义的参数没有类型,预处理器只负责做
形式上的替换,而不做参数类型检查,所以传参时要格外小
心。
(2)调用真正函数的代码和调用函数式宏定义的代码编
译生成的指令不同。
(3)函数式宏定义要注意格式,尤其是括号。
(4)若函数参数为表达式,则普通函数的调用与函数式
8、C语言的语句有哪几种?
(1)表达式语句 (2)函数调用语句 (3)控制语句 (4)
复合语句 (5)空语句
9、运行C程序的步骤
编辑(预处理)→编译→链接→运行
10、算法的特征
(1)有穷性(2)确切性(3)输入(4)输出(5)可行性
11、C语言变量的储存类别分为哪四种?
(1)auto(自动)(2)extern(外部)(3)static(静态)
(4)register(寄存器)
12、函数的嵌套调用和递归调用有什么区别?
递归调用 是自己调用自己,函数嵌套可以是调
宏定义的替换过程是不一样的。
(5)函数式宏定义往往会导致较低的代码执行效率。
3、请问指针编程有哪些优点?
(1)提高传输速度,又节省大量内存。
(2)可以用来做数据类型转换,比较常用于通讯缓冲区的
填充。
(3)可以用在大量分支处理的实例当中。
(4)在数据结构中,链表、树、图等大量的应用都离不开
指针。
4、C语言中,变量为什么要先定义后使用?
(1)对于编译器处理更方便。
(2)不容易出错。
(3)程序更清晰。
5、二维数组的初始化定义的正确形式有哪些?请举例说明
(1)分行赋初值
例如:int a[2][3]={ {1,3,4},{2,3,1},{7,9,0} };
(2)按顺序初始化
例如:int a[2][3]={1,3,4,2,3,1,7,9,0};
(3)省略一维长度的赋值
例如:int a[][3]={1,3,4,2,3,1,7,9,0};
(4)对数组的前几行元素初始化,其他元素自动初始化为
0
例如:int a[2][3]={ {1},{2,3} };
6、while与do while相同点与不同点是什么?
(1)while语句是先测试条件再执行语句,条件不符后终
止;do while语句是先执行语句再测试条件,条件不符后终
止,所以do while循环至少执行一次
7、请写出一个C程序的构成
(1)C程序是由若干个函数构成的
(2)每个函数(包括主函数)的定义分为两个部分:函
数说明部分和函数体。
(3)C程序中的语句最后总要有一个“分号(;)”,作
为每个语句的结束。
(4)可以用“”括住任意字符,称为“注释”。
(5)C程序的书写格式很灵活,在一行上可以书写多个语
句,一个语句也可以写在多行上。
(6)C程序的执行总是从主函数开始,并在主函数中结束。
(7)主函数可以调用任何非主函数;任何非主函数都可
以相互调用,但是不能调用主函数
用其他函数。
13、请描述一个算法,求1+4+7+…+100的和
#include
void main()
{
int i;
int sum = 0;
for(i=1;i<=100;i+=3)
{
sum += i;
}
printf("%dn",sum);
return;
}
14、循环结构中break语句和continue语句的作用是什么?
二者有何区别
(1)作用:break语句通常用在循环语句和开关语句中。
continue语句的作用是跳过循环体中剩余的语句而强行执
行下一次循环。
(2)区别:continue语句只结束本次循环,而不是终止整
个循环的执行。break语句则是结束整个循环过程,不再判
断执行循环的条件是否成立。
15、指针与地址有什么联系?在使用指针的过程中应注意哪
些细节?
(1)联系:①指针和地址最大的区别就是指针是有类型的,
地址是没有类型的。②指针是由地址和类型两部分构成的。
(2)注意细节:①指针变量和普通变量概念使用方式相混
淆②指针变量的赋值(初始化,传递地址)方式有误③指针
变量的类型与所指元素的类型不一致④指针移动不恰当⑤
指针在使用过程中发生了不必要的导致错误的改变⑥多重
的指针指向指针,导致形成难以理清的逻辑关系.
16、C语言中参数传递有什么特点?我们应当注意些什么?
(1)数值传递:被调用函数中对形参的操作不影响主调用
函数中的实参值。
(2)地址传递:可以通过被调用函数中对形参的操作来修
改主调用函数中的实参值。
注意事项:用malloc 或new申请内存之后,应该立即
检查指针值是否为NULL。防止使用指针值为NULL 的内存。
17、C语言中进行函数声明的作用是什么?
(1)把函数的名字,函数类型以及形参的类型、个数和顺
序通知编译系统,以便在调用该函数时进行对照检查,它不
包括函数体。
18、字符常量与字符串常量有什么区别?
(1)形式上:字符常量是单引号引起的一个字符;字符串
常量是双引号引起的若干个字符;
(2)含义上:字符常量相当于一个整型值,可以参加表达
式的运算;字符串常量代表一个地址值(该字符串在内存中
存放的位置);
(3)占内存大小:字符常量只占一个字节;字符串常量占
若干个字节,(至少一个字符结束标志)
19、C语言中如何表示“真”与“假”
(1)定义假为0,真为1。(2)建立自己的枚举类型
else printf("no");
return 0;
}
24、if语句中条件表达式可以是任意合法的表达式吗?
switch语句中break的作用是什么?
(1)if语句中的表达式不限于逻辑表达式,可以是任意的
数值类型。
(2)当break用于开关语句switch中时,可使程序跳出
switch而执行switch以后的语句;如果没有break语句,
则会从满足条件的地方开始执行,直到switch结构结束。
25、C语言循环结构主要有哪几种?每种循环结构的一般形式
分别是什么样的?
(1)do……while :先循环,在判断 (2)
20、字符数组与字符串是否相同?若不相同,有何区别?
不相同。(1)字符指针中存的是字符串第一个字符的首地
址。而字符数组中存的整个字符串
(2)字符数组只能在定义是进行初始化;
char a[]="abc";不可以char
a[10] ;a[10]="abc"而字符指针可以。
21、关键字与一般标识符有什么不同?
(1)关键字是标识符的一种。标识符是指: 可以当作变
量名, 函数名等的。
(2)标识符是非常多的(但C语言支持最长的标识符是32
个)而关键字只有32个。
22、使用swicth的注意事项。
(1)switch语句后面的小括号只能写整数类型的表达式,
否则会报错。
(2)switch小括号后面不要加分号,可以加分号加在大括
号后面。
23、请用两种方式写出如何判断某一年为闰年的C语句。
(1)#include
main()
{ int n;
printf(“请输入年份:n");
scanf(“%d",&n);
if(n%100==0)
if(n%400==0)
printf(“是闰年");
else
printf(“不是闰年");
else
if(n%4==8)
printf(“是闰年");
else
printf(“不是闰年")
}
(2)#include
int main()
{int a;
scanf("%d",&a);
if(a%400==0||a%4==0&&a%100)printf("yes");
while :先判断后循环
(3)for:一般可以代替上面两个
26、预处理命令主要有哪几种?每种预处理命令的一般形式
是什么样的?
(1)宏定义命令:#define、#undef,用来定义和解除宏。
(2)文件包含命令:#include "文件名" 或
者 #include <文件名>。
(3)条件编译:#ifdef、#else、#endif、#elif 等。
27、请写出C语言标识符的命名规则
(1)必须用字母或下划线开头。
(2)只能是字母、下划线、数字的组合,不能出现其他
符号。例如¥_st,就是个错误的标识符,它出现了“¥”
符号。
(3)大小写的含义是不同的,例如标识符 TEA和tea是不
同的。
(4)标识符的名称不能是C语言中的关键字,关键字是具
有特定含义的标识符,用户只能根据系统的规定使用它
们。
28、请简述while型循环和until型循环的区别
WHILE型和UNTIL型语句本质上是等价的,当型循环
有时称为前测试型循环,直到型循环有时称为后测试型
循环.
29、C语言中的语句有哪几类?
(1)表达式语句(2)函数调用语(3)控制语句(4)复合语句
(5)空语句
30、局部变量和全局变量有何区别?
全局变量就是整个源程序都有效的变量;而局部变量会
在其所属.
二、编程题
1、以下4种水果,[1]苹果[2]梨[3]桔子[4]芒果,单价分
别是2.0元/公斤,2.5元/公斤,3.0元/公斤,4.5元/公斤,
请输入水果编号,重量,计算应付款。
解答:#include
#include
int main()
{ double weight,pay,price;
int num;
printf("请输入水果编号、重量:");
scanf("%d%lf",&num,&weight);
switch(num){
case 1:price=2;break;
case 2:price=2.5;break;
case 3:price=3;break;
case 4:price=4.5;break;
default:printf("你输入的编号有误!n");exit (0);
}
pay=weight*price;
printf("应付款:%.2lfn",pay);
return 0;
}
2、输入某学生成绩(成绩分为100分制,可以为89.5,如
果输入的成绩不在0-100之间,请给出错误提示)经处理后
给出学生的等级,等级分类如下:
90分以下(包括90分):A
80至90分(包括80分):B
70至80分(包括70分):C
60至70分(包括60分):D
60分以下:E
#include "stdio.h"
void main ()
{
double key;
printf("请输入学生成绩n");
scanf("%lf",&kay);
if(key>=0 && key=<60)
printf("分数等级:En');
else if(key>=60&&key=<69)
printf("分数等级:Dn');
else if(key>=70&&key=<79)
printf("分数等级:Cn');
else if(key>=80&&key=<89)
printf("分数等级:Bn');
else if(key>=90&&key=<100)
printf("分数等级:An');
else
printf("输入有误请重新输入:");
scanf("%If",&key);
}
3、编程实现求1-10之间的所有数的乘积并输出。
#include
void main( )
{ int i;
long sum=1;
for(i=1; i<=10; i=i+1)
sum=sum*i;
printf(“the sum of odd is :%ld”,sum);
}
4、从键盘输入两个数,求出其最大值(要求使用函数完成
求最大值,并在主函数中调用该函数)。
#include
int max(int x,int y)
{return (x > y) ? x : y;
}
int main()
{int a,b;
printf("输入两个整数(空格隔开):");
scanf("%d%d",&a,&b);
printf("最大数:%dn",max(a,b));
return 0;
}
5、已知函数y=f(x),编程实现输入一个x值,输出y值。