C语言部分

  • 格式:doc
  • 大小:43.19 KB
  • 文档页数:17

C语言部分: 1.写一个宏, 求两个整数的最大值. #include #define MAX a>b?a:b; Void main{ Int a ,b; Printf(“请输入两个数:”); Scanf(“%d %d”,&a,&b); Printf(“max = %d”,MAX); } 2.内存如何划分(地址从高到低), 每个分区的特点是什么? 内存分为五大区,分别是:栈区、堆区、静态区、常量区、代码区 1.栈区:内存为8M,地址从高到低排列,函数调用时,在栈区开辟内存,函数调用结束时就会立马被系统回收 2.堆区:开辟内存用函数malloc calloc给开辟的内存清零 realloc重新分配内存 生命周期为从程序开始一直到程序结束 3.静态区:静态区关键字为static,在主函数外定义的变量是全局变量,可被改写,作用域在整个程序,他的生命周期重程序开始一直到程序结束 4.常量区:存储常量数字 ,字符或字符串,是立即数,立即使用立即释放,存储在CPU中,在使用是通常从常量区拷贝到栈区开辟的变量空间中 5.代码区:存储代码,生命周期从程序开始到程序结束

3.变量定义三要素__变量类型___、__变量名____和__变量值____

4.编写程序,实现两个整数的交换 #include Void main { Int a, b; Int temp = a; A = b; B = temp; }

5.逻辑运算符包括__&&____、__||____和__!____ 6.分支结构的分类和格式; If(条件){表达式} Else{表达式} Switch: Case1:表达式1; Case2:表达式2; ..., Default:表达式 7.编写程序, 输入一个年份, 判断该年份是否是闰年

#import Void main { Printf(‚请输入年份:‛); Scanf(‚%d‛,&a); If(a % 4 ==0 || a & 100 == 0){ Printf(‚该年是闰年‛) } Else printf(‚该年不是闰年‚); } 8.for循环包含__循环变量初值____、__循环条件____、__循环步长____和__循环体____四部分 9.break和continue的作用 Break是结束本次循环 Contiue是跳出本次循环,直接进入下次循环

10.sizeof和strlen的区别 Sizeof是指变量所占空间 字节长度 Strlen是指字符串的长度 11.用预处理指令#define声明一个常数,用以表明1年中有多少秒

(忽略闰年问题) #import #define second 365*24*60*60; 12.static的作用

Static 静态变量的关键词,定义静态变量,作用域是整个程序 13.堆和栈的区别 (1)栈区是由编译器自动管理,一旦函数调用结束内存有系统自动的回收,无需手动释放,其进栈方式是先进后出,进栈出栈有指令进行,效率较高,当内存空间超过8M时,会出现溢出。其分配方式有静态分配(由编译器完成)和(alloc函数完成)动态分配 (2)堆是高地址扩展的数据结构,不是连续的内存空间,遍历方向是由低地址向高地址,其释放是由程序员控制,容易产生内存泄漏;其内存大小受限于计算机系统的中有效虚拟内存,数据的存入提取均由函数库完成。堆得分配方式是动态分配(alloc函数完成)有程序员手动释放。

14.堆区常见的内存问题

堆是一种经过排序的树形数据结构,每个结点都有一个值。通常所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小,且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同在图书馆的书架上取书,虽然书的摆放是有顺序的,但是想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,可以直接取出想要的书。

15.指出下述变量a的含义: int a[10] :数组名 int *a :变量名 int (*a)(int) :函数变量

16.变量名的命名规范是什么? 1).以字母 下划线开头 2).非系统关键字 3).包含字母、数字、下划线

17.指针和地址是什么关系? 指针就是地址

18.局部变量能否和全局变量重名? 19.请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } b,c,d:10,12,120 20.编程题, 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

For(int i = 1; i < 5; i ++) { Int count = 0; For(j = 1; j < 5; j ++) { If(i != j) { For(k = 1; k < 5; k++) { If(j != k) { Count ++; Print(“%d”,100 * i + 10 * j + k); } } } } }

21.编程题, 输出99乘法口诀表

for(inti = 1;i <10;i++){ for (int j = 1; j < i+1; j++) { printf("%d * %d = %d ",i,j,i*j); } printf("\n"); }

22.编程题, 输入两个整数m和n, 求最大公约数和最小公倍数 Int min = m While(max != 0){ Max = m % n; M = n ; N = max; } Printf(‚最大公约数是:%d‛,max); Printf(‚最小公倍数是:%d‛,max * min);

23.编程题, 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 Main{ Printf(‚请输入一行字符:‛); Scanf(‚%s‛,s); Int lettersCount = 0; Int numCount = 0; Int spaceCount = 0; Int count = 0; For(int i = 0;i < strlen(s) + 1;i++) { If(s[i] >‘0’&& s[i] <‘9’){ numCount += 1;} else if(s[i] > 64 && s[i] < 91 || s[i] > 96 && s[i] < 123){ lettersCount += 1;} else if(s[i] = 0){ spaceCount += 1;} else if{ count += 1;} } } 24.下面程序的输出是? #include void main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } 输出的结果是:k = 11,k = 013,k = xB

25.下面程序的输出是? #include void main() { int x=10,y=3; printf("%d\n",y=x/y); } 3

26.下面程序的输出是? #include void main() { char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); } „67‟,D

27.下面程序的输出是? #include

void main() { int x=10,y=10; printf("%d %d\n",x--,--y); } 10 9

28.下面程序的输出是? 设有如下定义: int x=10,y=3,z; 则语句 printf("%d\n",z=(x%y,x/y)); 3

29.下面程序的输出是? int k,n,m; n=10;m=1;k=1; while (k<=n) {m*=2;k+=4;} printf("%d\n",m); 8

30.下面程序的输出是? #include void main( ) { int a[ ]={5,4,3,2,1},i,j; long s=0; for(i=0;i<5;i++) { s=s*10+a[i]; } printf("s=%ld\n",s); } 54321

34.下面程序的输出是? #include void main() {