目录

期末复习:

1、什么叫分配内存,什么叫释放内存:

2、变量为什么必须初始化:

3、详细说明系统是如何执行:int i=5;这个语句的

4、请详细列出C语言所有的基本类型:

5、在printf函数中int用%d输出,请问longint、char、double、float分别用什么输出? 

6、函数的优点是什么? 

7、谈谈你对函数的理解: 

8、什么是指针,什么是地址,什么是指针变量,三者之间是什么关系?

9、请写出静态变量和动态变量的异同:

10、C语言中那些知识点是我们学习的重点,请一一列举出来:

11、for语句题目1:

12、for语句题目2:

13、for语句题目3:

14、判断下列程序语法上是否错误:

15、编程实现:

 16、若变量已正确定义,有以下程序段:

17、执行以下程序后,输出‘#’号的个数是:

18、有以下程序:

19、若有一些定义和语句:

20、有以下程序: 

21、以下程序: 

 22、以下程序: 

23、进制题目:

24、以下叙述正确的是: 

 25、以下叙述正确的是: 

编程题: 

1、

2、

3、

4、

5、


期末复习:

1、什么叫分配内存,什么叫释放内存:

操作系统该某一块内存空间的使用权限分配给该程序叫分配内存

操作系统把分配给该程序的内存空间的使用权利收回,该程序就不能够再使用这一块内存空间,这叫释放内存。

附注:释放内存不是把该内存的内容清零

2、变量为什么必须初始化:

不初始化,则变量通常是垃圾值

不初始化,输出语句,编译会报错。

3、详细说明系统是如何执行:int i=5;这个语句的

1、vs2019软件请求操作系统为i分配存储空间

2、操作系统会在内存中寻找一块空闲的局域,把该区域当i来使用

3、vs2019会把i和这块空闲区域关联起来,今后对字母i操作就是对这块空闲的区域操作

4、把5存储到字母i所关联的内存区域中

附注:所谓的内存区域也就是内存的一块存储单元

4、请详细列出C语言所有的基本类型:

int        longint        shorint        char        float        double

5、在printf函数中int用%d输出,请问longint、char、double、float分别用什么输出? 

%ld        %c        %lf        %f 

6、函数的优点是什么? 

1、避免重复性操作

2、有利于程序的模块化

7、谈谈你对函数的理解: 

略,看个人笔记函数部分

8、什么是指针,什么是地址,什么是指针变量,三者之间是什么关系?

地址是内存单元的编号,指针就是地址,指针和地址是同一个概念

指针变量是存放内存单元编号的变量,指针变量和指针是两个完全不同的概念

只不过人们通常把指针变量简称指针

9、请写出静态变量和动态变量的异同:

相同:

        都需要分配内存

不同

        静态变量是由系统自动分配的,自动释放,程序员无法在程序运行的过程中手动分配,也无法在程序运行的过程中手动释放

        静态变量是在栈中分配的

        函数终止之后,静态变量的存储空间才会被系统自动释放

 

        动态变量是由程序员手动分配的,手动释放,程序员可以在程序运行的过程中手动分配,可以在程序运行的过程中手动释放

        动态变量是在堆中分配的

        程序员可以函数执行的过程当中的任何一个时刻手动的释放动态变量的空间,不需要等到函数终止时才释放。

10、C语言中那些知识点是我们学习的重点,请一一列举出来:

 流程控制        函数        指针        静态内存和动态内存

11、for语句题目1:

 for (1; 2; 3)
        A;
        B;

1、2成立,会继续执行那个语句:A

2、3执行完毕后,会继续执行那个语句:2

3、A执行完毕,会继续执行那个语句:3

4、1总共执行几次:1

12、for语句题目2:

 for (1; 2; 3)

        for(4;5;6){

                A;

                B;

        }

        C;

1、6执行完毕,会继续执行那个语句:5

2、5成立,会继续执行那个语句:A

3、5不成立,会继续执行那个语句:3

4、2不成立,会继续执行那个语句:C

5、2成立,会继续执行那个语句:4

6、A和B语句是否一定会被执行:不一定

7、C语句是否一定会执行:一定

13、for语句题目3:

for(1;2;3){

        while(4){

                5;

        }

                6;

        if(7){

                8;

        }

                9;

}

10;

一次顺序:12454(不成立)67(成立)8932(不成立)10(可以看黑色读一遍)

1、5执行完毕后,会继续执行那个文件:4

2、如果8是break语句,则8执行完毕之后会继续执行那个语句:10

3、如果7不成立,会继续执行那个语句:9

14、判断下列程序语法上是否错误:

A:int *p;        *p=10        (x,10不是地址)

B:char *p;        char ch= A;        p=&ch;        (x,字符要用单引号)

C:int i.j;        i=j=0;        int *p;        p=&;        (√)

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值的是:CD

 16、若变量已正确定义,有以下程序段:

17、执行以下程序后,输出‘#’号的个数是:

i        1        2        3        4

j        0        1        2        3

1+2+3=6 

内层结束后回到外层for循环内层的值会回到初始。

18、有以下程序:

s=s+(i+1)

i        1        3        5        7        9

s=1+1+3+1+5+1+7+1+9+1 

19、若有一些定义和语句:

NULL本质也是零,而这个零不代表数字零,而表示的是内存单元的编号零(地址0)
    我们计算机规定了,以零为编号的存储单元的内容不可读,不可写

20、有以下程序: 

*a接受p1 (&c1)       *b接受p2(&c2)        

a=b a变成c2地址        *a表示a a++ a+1=b(ascall)

A的值没有修改,所以输出Ab

21、以下程序: 

k         2        4

         ##2        ##4

 22、以下程序: 

#include <stdio.h>
void main()
{
    int x = 1, y = 0, a = 0, b = 0;


    switch (x)
    {
    case 1:
        switch (y)
        {
        case 0:
            a++;
            break;//执行break把这个switch (y)终止了
        case 1:
            b++;
            break;//执行break把这个switch (y)终止了
        }
    case 2:
        a++;
        b++;
        break;//执行break把switch (x)终止了执行输出
    case 3:
        a++;
        b++;
    }
    printf("a=%d,b=%d\n", a, b);//a=2,b=1
}

终止的语句记得看分号,分清楚已经结束那个语句

23、进制题目:

解析: 

128 64 32 16 8 4 2 1

          1   1   0  0 1 0 0---10进制10转2进制

1、100、100---砍3位

1     421    421

得出144

 

128 64 32 16 8 4 2 1

          1   1   0  0 1 0 0---10进制10转2进制

1100100---砍四位

110、0100

421    8421

得出64

24、以下叙述正确的是: 

 25、以下叙述正确的是: 

编程题: 

1、

代码解析: 

# include <stdio.h>
int main() {
	int i;
	int sum = 0;

	for (i = 1; i <= 1000; i++) {
		sum = sum + i;
	}
	printf("%d\n", sum);
	return 0;
}
/*
编程求出1---1000之和

输出结果:500500

*/

2、

代码解析: 

#include <stdio.h>
int main() {
	int i;
	float sum = 0;
	for (i = 1; i <= 100; i++) {
		sum = sum + 1 / (float)(i);//强制类型转换把后面i的值强制转换为float 一个整数/小数商是小数
		//sum=sum+(float)(1/i);这样写是错误的因为:sum=sum+1/1=1.000000 + 0.000000 ...0.000000
		//更简单的方法是:sum=sum+1.0/i; 
	}
	printf("sum: %f\n", sum);//float必须用%f输出0.000000(默认6位)
	return 0; 
}
 
/*
1+1/2+1/3+...+1/100的程序
输出结果:sum: 5.187378
详细步骤举例:
1-> i=1 1<100 成立
	sum=0+1/1.0  i++ i=2
 
2-> i=2 2<100 成立
	sum=1+1/2.0 i++ i=3
	(以此类推)
*/

3、

 代码解析: 

# include <stdio.h>
int main() {
	int i, j;
	float ave1 = 0 ;//偶奇的平均数
	float ave2 = 0;
	
	int cnt1 = 0;//偶奇的个数
	int cnt2 = 0;

	//计算偶数:
	for (i = 2; i <= 100; i+=2) {
		ave1 = ave1 + i;//偶数的和
		cnt1 = cnt1 + 1;//偶数的个数
	}

	//计算奇数:
	for (j = 1; j <= 100; j += 2) {
		ave2 = ave2 + j;//奇数的和
		cnt2 = cnt2 + 1;//奇数的个数
	}

	printf("1到100之间的偶数平均数:%f\n", ave1 / cnt1);
	printf("1到100之间的偶数的个数:%d\n", cnt1);
	printf("\n");

	printf("1到100之间的奇数平均数:%f\n", ave2 / cnt2);
	printf("1到100之间的奇数的个数:%d\n", cnt2);
	return 0;
}

/*
运行结果:
1到100之间的偶数平均数:51.000000
1到100之间的偶数的个数:50

1到100之间的奇数平均数:50.000000
1到100之间的奇数的个数:50

*/

4、

  代码解析:

#include <stdio.h>
bool Isprime(int val) {
	int i;
	for (i = 2; i < val; i++) {
		if (val % i == 0) {
			break;
		}
 
	}
	if (i == val) {
		return true;
	}
	else {
		return false;
	}	
}
int main() {
	int m;
	int i;
	scanf("%d", &m);
	if (Isprime(m)){//表达式不为0就会判断为真 true是真 false是假
		printf("Yes!\n");
	}
	else {
		printf("No!\n");
	}
	return 0;
}

5、

   代码解析:

#include <stdio.h>
int main()
{
	int i;
	for (i = 2; i <= 100; i++)    //1不是素数
	{
		int j = 0;
		for (j = 2; j <= i; j++)    //从j->i取余,如果余数为0则不是素数,跳出循环
		{
			if (i % j == 0)
			{
				break;
			}
		}
		if (i == j)
		{
			printf("%d\n", i);
		}
	}
	return 0;
}

/*
输出结果:
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

*/

更多推荐

C语言期末考试测试题及答案