C语言考试题
1. 什么叫分配内存,什么叫释放内存
操作系统把某一块内存空间的使用权力分配给该程序叫分配内存。
操作系统把分配给该程序的内存空间的使用权力收回,该程序就不能够再使用这一块内存空间,这叫释放内存。
附注:释放内存不是把该内存的内容清零
2. 变量为什么必须得初始化
不初始化,则变量通常就是垃圾值
3. 详细说明系统是如果执行:int i =5;这个语句的
-
请求操作系统为i分配存储空间
-
操作系统会在内存中寻找一块空闲的区域,把该区域当做i来使用
-
把i和这快空闲区域关联起来,今后对字符i操作就是对这块空闲的区域操作
-
把5存储到字母i所关联的内存区域中
附注:所谓内存区域也就是内存的一块存储单元
4. 请详细列出C语言所有的基本类型
int
long int
short int
float
char
5. 在printf函数中Int用%d输出,请问:long int char double float 分别用什么输出?
%ld, %c, %lf, %f
6. 函数的优点是什么?
- 避免重复性操作
- 有利于程序的模块化
7. 谈谈你对函数的理解
8. 什么是指针,什么是地址,什么是指针变量,三者之间是什么关系?
地址是内存单元的编号,指针就是地址,指针和地址是同一概念
指针变量是存放内存单元编号的变量,指针变量和指针是两个完全不同的概念,只不过人们通常指针变量简称为指针
9. 写出静态变量和动态变量的异同
相同:都需要分配内存
不同:
静态变量由系统自动分类,自动释放,程序员无法在程序运行的过程中手动分配,也无法在程序运行的过程当中手动释放。静态变量是在栈中分配的,函数终止之后,静态变量的存储空间才会被系统自动释放。
动态变量是由程序员手动分配,手动释放,程序员可以在程序运行的过程当中手动分配,也可以在程序运行的过程当中手动释放,动态变量是在堆中分配的,程序员可以在函数执行的过程当中的任何一个时刻手动的释放动态变量的空间,不需要等到函数终止时才释放
10. C语言中重点
流程控制
函数
指针
静态内存和动态内存
11. for(1;2;3)
A;
B;
- 2成立,会继续执行哪个语句,答:A
- 3执行完毕后,会继续执行哪个语句,答:2
- A执行完毕后,会继续执行哪个语句,答:3
- 1总共会执行几次,答:1次
12. for(1;2;3)
for(4;5;6)
{
A;
B;
}
C;
- 6执行完毕后,会继续执行哪个语句,答:5
- 5成立,会继续执行哪个语句,答:A
- 5不成立,会继续执行哪个语句,答:3
- 2不成立,会继续执行哪个语句,答:C
- 2成立,会继续执行哪个语句,答:4
- A和B语句是否一定会被执行,答:否
- C语句是否一定会被执行,答:是
13.
for (1;2;3)
{
while (4)
5;
6;
if (7)
8;
9;
}
10;
- 5执行完毕后,会继续执行哪个语句,答:4
- 如果8是break语句,则8执行完毕后会继续执行哪个语句,答:10
- 如果7不成立,会继续执行哪个语句,答:9
14. 判断
- A) int *p; p = 10; X
B)char* p;char ch =A;p=&ch; X - C)int i, j; i=j=0;int * p;p =&i; √
- D)int p;int* q; q = &p; √
- E)int * p;int i= 5; p = &i;*p= 10; √
15. 编程实现:如果x大于0,则y为1,如果x小于0,则y为-1,如x等于0,则y为0,以下程序段中不能根据x值正确计算出y值的是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t1jnjvvy-1627044278330)(C:\Users\98614\AppData\Roaming\Typora\typora-user-images\image-20210723181455302.png)]
CD
16. 若变量已正确定义,有以下程序段
int a = 3, b = 5, c = 7;
if (a>b) a=b; c=a;
if (c!=a) c=b;
printf("%d,%d,%d\n",a,b,c);
其输出结果为:3,5,3
17. 执行以下程序后,输出“#”号的个数是
#include <stdio.h>
int main(void)
{
int i, j;
for(i=1;i<5;i++)
for(j=2;j<=i;j++) printf("%c\n", '#')
return 0;
}
6次
18. 程序
#include <stdio.h>
main()
{int i, s=0;
for (i=1;i<10; i+=2)
s+=i+1 ;
Printf(%d ln", s) ;
程序执行后的输出结果是:自然数1~10中的偶数之和
19. 若有一些定义和语句
int a=4, b=3, *p, *q, *w;
p = &a;
q = &b;
w = q;
q = NULL;
则以下选项中错误的语句是
A) *q = 0; B) w=p; C) *p=88; D) *p=*w
答A
20. 有以下程序
#include <stdio.h>
void fun (char *a,char *b)
{ a=b; (*a)++;}
main ()
{ char c1='A’, c2='a’, *p1, *p2;
p1=&c1; p2=&c2;
fun(p1, p2);
printf("%c%c\n", c1, c2);
}
程序运行后的输出结果是Ab
21. 若有定义: int k;,以下程序段的输出结果是
for(int k=2;k<6 ; k++, k++) printf(“##%d”, k);
##2##4
22. 程序
#include <stdio.h>void main()
{
int x=1, y=0, a=O, b=0;
switch(x)
{
case 1 :
switch(y)
{
case o:
a++;
break;
case 1 :
b++;
break;
}
case 2:
a++;
b++;
break;
case 3:
a++;
b++;
}
printf("%a=%d, b=%d\n", a, b);
}
2,1
23、十进制100的八进制表示是O144,十进制100的十六进制表示是OX64
24.以下叙述正确的是
A)程序中的注释只能出现在程序的开始位置和语句的后面
B)C程序书写格式严格,要求一行内只能写一个语句
c)C程序书写格式自由,一个语句可以写在多行上
D)一个C程序可以有多个main函数
C
25.以下叙述中正确的是
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数
C)main()函数必须放在其它函数之前
D)所有被调用的函数一定要在调用之前进行定义
函数不能套着定义。A
26.编程求出1+2+3+。. . . +1000之和
#include <stdio.h>
int main(void)
{
int i, sum = 0;
for (i = 0; i <= 1000; i++)
sum += i;
printf("%d\n", sum);
return 0;
}
27.编程求出1+1/2+1/3+1/4+.a… + 1/100的和
#include <stdio.h>
int main(void)
{
int i;
float sum = 0.;
for (i = 1; i <= 100; i++)
sum = sum + 1. / i;
printf("%f\n", sum);
return 0;
}
28.编一程序,要求完成如下功能:求1到100之间偶数的平均值,偶数的个数,奇数的平均值,奇数的个数,并分别在显示器上输出这些值(即把1到1 00之间髃数的平均值,偶数的个数,奇数的平均值,奇数的个数全部输出到显示器上)
要求:偶数的平均值用ave1表示偶数的个数cnt1表示
奇数的平均值用ave2表示奇数的个数cnt2表示
#include <stdio.h>
int main(void)
{
int i, sum1 = 0, sum2 = 0, cnt1 = 0, cnt2 = 0;
float ave1, ave2;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 0)
{
cnt1++;
sum1 += i;
}
else
{
cnt2++;
sum2 += i;
}
}
ave1 = (float)(sum1) / (float)(cnt1);
ave2 = (float)(sum2) / (float)(cnt2);
printf("偶数的平均值为%f, 个数为%d\n", ave1, cnt1);
printf("奇数的平均值为%f, 个数为%d\n", ave2, cnt2);
return 0;
}
29.编程实现:判断n是否是素数,是,输出yes!,不是输出no!补全下面
#include <stdio.h>
#include <stdbool.h>
bool IsPrime(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n%i == 0)
break;
}
if (i == n)
return true;
else
return false;
}
int main(void)
{
int n;
printf("请输入一个数字:\n");
scanf_s("%d", &n);
if (IsPrime(n))
printf("yes!\n");
else
printf("no!\n");
return 0;
}
30.编程实现把1到100之间的素数全部打印到显示器上,每行打印一个素数,补全下面代码:
#include <stdio.h>
#include <stdbool.h>
bool IsPrime(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n%i == 0)
break;
}
if (i == n)
return true;
else
return false;
}
int main(void)
{
int i;
for (i = 2; i <= 100; i++)
{
if (IsPrime(i))
printf("%d ", i);
}
printf("\n");
return 0;
}
return 0;
}
## 30.编程实现把1到100之间的素数全部打印到显示器上,每行打印一个素数,补全下面代码:
```c
#include <stdio.h>
#include <stdbool.h>
bool IsPrime(int n)
{
int i;
for (i = 2; i < n; i++)
{
if (n%i == 0)
break;
}
if (i == n)
return true;
else
return false;
}
int main(void)
{
int i;
for (i = 2; i <= 100; i++)
{
if (IsPrime(i))
printf("%d ", i);
}
printf("\n");
return 0;
}