标签:c
转载请标明出处:http://blog.csdn.net/u012637501
1.什么叫分配内存,什么叫释放内存
分配内存:操作系统把某一块内存空间的使用权力分配给该程序
内存释放:操作系统把分配给该程序的内存空间的使用权力收回,
该程序就不能使用这块内存空间
附注:释放内存不是把该内存的数据清零
2.变量为什么必须初始化
不初始化,变量通常是垃圾值,很可能是上次程序结束遗留下来的数据。
3.详细说明系统如何执行:int i = 5; 这条语句的
1> Vc++6.0软件请求操作系统为i分配存储空间
2> 操作系统会在内存中寻找一块空闲的区域,把该区域当作i来使用
3> Vc++6.0会把i和这块空间区域关联起来,今后对字母i操作就是对这块空闲的区域操作。
4> 把5存储到字母i所关联的内存区域中
附注:所谓内存区域也就是内存的一块存储单元
4.详细列出C语言所有基本类型
intlong intshort intcharfloat double
5.在printf函数中,int用%d输出,请问:long intchardouble float分别用什么输出?
%ld %c %lf%f
6.函数的优点
1>避免重复操作
2>有利于程序的模块化
7.谈谈你对函数的理解
... ...
8.什么是指针,什么是地址,什么是指针变量,三者之间的关系?
地址是内存单元的编号 指针就是地址 指针和地址是同一个概念
指针变量是存放内存单元编号的变量
指针变量和指针是两个完全不同的概念,只不过人们通常把指针变量称作指针
9.请写出静态变量和动态变量的异同
◆相同点:
都需要分配内存
◆不同点:
静态变量是由系统自动分配,自动释放,程序员无法在程序运行的过程当中手动分配,也无法在程序运行的过程中手动释放。静态变量是在栈中分配的,只有在函数终止之后,静态变量的存储空间会被系统自动释放。
动态内存是由程序员手动分配,程序员可以在程序运行的过程当中手动分配,手动释放。动态变量是在堆中分配的,程序员可以在行是执行过程中的任何时刻手动释放动态变量的空间不需要等到函数终止才释放。
10.C语言中哪些知识点是我们学习的重点,请一一列举出来
流程控制 函数 指针 静态内存和动态内存
11.for(1;2;3)
A;
B;
1> 2成立,会继续执行哪条语句:A
2> 3执行完毕后,会继续执行哪条语句: 2
3> A执行完毕后,会继续执行哪个语句:3
4> 1总共会执行几次:1次
12.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语句是否一定会被执行 不会 (2或5不成)
7> C语句是否一定会执行 是
13.for(1;2;3)
{
while(4)
5;
6;
break;
if(7)
8;
9;
}
10;
1> 5执行完毕后,会继续执行哪个语句:4
2> break终止什么? 终止for, break终止最里层包裹它的循环
3> 如果8是break语句,则8执行完毕之后会继续执行哪个语句 10
4> 如果7不成立,会继续执行哪条语句 9
方法:调整清楚
for(1;2;3)
{
while(4)
{
5;
}
6;
break;
if(7)
{
8;
}
9;
}
10;
14 判断下列程序语法上是否有错误,说出错误原因
A) int *p; *p = 10; 错 p没有指向,*p数据不可读和操作
B) char *p; char ch=A; p=&ch; 错 A改成‘A‘ A非法无意义
C) int i,j; i=j=0; int *p; p=&i;对 i=j=0; 从右向左
D) int *p; int **q; q = &p; 对 指针的指针是int ** 类型
E) int *p; int i=5; p=&i; *p=10;对 p指向i,*p=5;把10赋值给*p
15 编程实现:如果x大于0,则y为1.如果x小于0,则y为-1,如果x等于0,则y为0,
以下程序段中,不能根据x值正确计算出y值的是 CD
A)if(x>0) y=1;
else if(x==0) y=0;
else y=-1;
B) y=0;
if(x>0) y=1;
else if(x<0) y=-1;
C) y=0;
if(x>=0);(;空语句)
if(x>0) y=1;
D) if(x>=0)
if(x>0) y=1;
else y=0;
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);
输出结果是:B
A)程序段有语法错误B)3,5,3
C)3,5,5D) 3,5,7
17.执行以下程序后,输出‘#‘的个数是:6
#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;
}
18.有以下程序
#include <stdio.h>
int main(void)
{
int i,s=0;
for(i=1; i<10; i+=2)
s+=i+1; //s = s + (i + 1);
printf("%d\n", s);
return 0;
}
程序执行后的结果是: D
A) 自然数1~9的累加和
B) 自然数1~10的累加和
C) 自然数1~9中的奇数之和
D) 自然数1~10中偶数之和
19.若有一些定义和语句
int a = 4;
int b = 3;
int *p;
int *q;
int *w;
p=&a;
q=&b;
w = q;
q = NULL;
则以下选项中错误的语句是 A
A)*q=0;B)w=q; C)*p=88;D)*p=*w;
20 以下程序
#include <stdio.h>
void fun(char *a, char *b)
{
a=b; //指针ab相互指向,则他们的值相同
(*a)++;
}
int main(void)
{
char c1=‘A‘, c2=‘a‘, *p1, *p2;
p1=&c1;
p2=&c2;
fun(p1,p2);
printf("%c%c\n", c1, c2);
}
程序运行后的输出结果是:Ab
实验程序
/*
#include <stdio.h>
void fun(char *a, char *b)
{
printf("%c %c\n", *a, *b);// A a
a=b;
printf("%c %c\n", *a, *b);// a a
(*a)++;
printf("%c %c\n", *a, *b);// b b
}
int main(void)
{
char c1=‘A‘, c2=‘a‘, *p1, *p2;
p1=&c1;
p2=&c2;
fun(p1,p2);
printf("%c %c\n", c1, c2);// A b
}
*/
#include <stdio.h>
int main(void)
{
int i = 0;
int j = 1;
int *a = &i;
int *b = &j;
a=b;//OK 互为指向 *a=*b=1;
printf("%d %d\n", *a, *b);//1 1
*/
*a+=1;
printf("%d %d\n", *a, *b);
//2 2指针a和指针互为指向,改变*a的值,就是改变*b的值
/*
a=a+2;//把指针a的址编号加2,b不指向a,
//b仍然指向a原来的地址无法知道与a地址相隔2个单元的内容*a.
printf("%d %d\n", *a, *b);//1245088 2
return 0;
}
21. 若有定义:int k;
以下程序段的输出结果是:##2##4
for(int k=2; k<6; K++, K++)
printf("##%d", k);
K++,K++ = 1个循环因子
22. break
23. 进制转化
24. C的一些认识问题。
标签:c
原文地址:http://blog.csdn.net/u012637501/article/details/45269599