C语言部分.docx
《C语言部分.docx》由会员分享,可在线阅读,更多相关《C语言部分.docx(20页珍藏版)》请在冰点文库上搜索。
C语言部分
C语言部分:
1.写一个宏,求两个整数的最大值.
#include
#defineMAXa>b?
a:
b;
Voidmain{
Inta,b;
Printf(“请输入两个数:
”);
Scanf(“%d%d”,&a,&b);
Printf(“max=%d”,MAX);
}
2.内存如何划分(地址从高到低),每个分区的特点是什么?
内存分为五大区,分别是:
栈区、堆区、静态区、常量区、代码区
1.栈区:
内存为8M,地址从高到低排列,函数调用时,在栈区开辟内存,函数调用结束时就会立马被系统回收
2.堆区:
开辟内存用函数malloccalloc给开辟的内存清零realloc重新分配内存
生命周期为从程序开始一直到程序结束
3.静态区:
静态区关键字为static,在主函数外定义的变量是全局变量,可被改写,作用域在整个程序,他的生命周期重程序开始一直到程序结束
4.常量区:
存储常量数字,字符或字符串,是立即数,立即使用立即释放,存储在CPU中,在使用是通常从常量区拷贝到栈区开辟的变量空间中
5.代码区:
存储代码,生命周期从程序开始到程序结束
3.变量定义三要素__变量类型___、__变量名____和__变量值____
4.编写程序,实现两个整数的交换
#include
Voidmain{
Inta,b;
Inttemp=a;
A=b;
B=temp;
}
5.逻辑运算符包括__&&____、__||____和__!
____
6.分支结构的分类和格式;
If(条件){表达式}
Else{表达式}
Switch:
Case1:
表达式1;
Case2:
表达式2;
...,
Default:
表达式
7.编写程序,输入一个年份,判断该年份是否是闰年
#import
Voidmain{
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
#definesecond365*24*60*60;
12.static的作用
Static静态变量的关键词,定义静态变量,作用域是整个程序
13.堆和栈的区别
(1)栈区是由编译器自动管理,一旦函数调用结束内存有系统自动的回收,无需手动释放,其进栈方式是先进后出,进栈出栈有指令进行,效率较高,当内存空间超过8M时,会出现溢出。
其分配方式有静态分配(由编译器完成)和(alloc函数完成)动态分配
(2)堆是高地址扩展的数据结构,不是连续的内存空间,遍历方向是由低地址向高地址,其释放是由程序员控制,容易产生内存泄漏;其内存大小受限于计算机系统的中有效虚拟内存,数据的存入提取均由函数库完成。
堆得分配方式是动态分配(alloc函数完成)有程序员手动释放。
14.堆区常见的内存问题
堆是一种经过排序的树形数据结构,每个结点都有一个值。
通常所说的堆的数据结构,是指二叉堆。
堆的特点是根结点的值最小,且根结点的两个子树也是一个堆。
由于堆的这个特性,常用来实现优先队列,堆的存取是随意,这就如同在图书馆的书架上取书,虽然书的摆放是有顺序的,但是想取任意一本时不必像栈一样,先取出前面所有的书,书架这种机制不同于箱子,可以直接取出想要的书。
15.指出下述变量a的含义:
inta[10]:
数组名
int*a:
变量名
int(*a)(int):
函数变量
16.变量名的命名规范是什么?
1).以字母下划线开头
2).非系统关键字
3).包含字母、数字、下划线
17.指针和地址是什么关系?
指针就是地址
18.局部变量能否和全局变量重名?
19.请写出下列代码的输出内容
#include
intmain(void)
{
inta,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:
%d,%d,%d",b,c,d);
return0;
}
b,c,d:
10,12,120
20.编程题,有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
For(inti=1;i<5;i++)
{
Intcount=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(intj=1;j
printf("%d*%d=%d",i,j,i*j);
}
printf("\n");
}
22.编程题,输入两个整数m和n,求最大公约数和最小公倍数
Intmin=mm:
n;
While(max!
=0){
Max=m%n;
M=n;
N=max;
}
Printf(“最大公约数是:
%d”,max);
Printf(“最小公倍数是:
%d”,max*min);
23.编程题,输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
Main{
Printf(“请输入一行字符:
”);
Scanf(“%s”,s);
IntlettersCount=0;
IntnumCount=0;
IntspaceCount=0;
Intcount=0;
For(inti=0;i{
If(s[i]>‘0’&&s[i]<‘9’){
numCount+=1;}
elseif(s[i]>64&&s[i]<91||s[i]>96&&s[i]<123){
lettersCount+=1;}
elseif(s[i]=0){
spaceCount+=1;}
elseif{
count+=1;}
}
}
24.下面程序的输出是?
#include
voidmain()
{
intk=11;
printf("k=%d,k=%o,k=%x\n",k,k,k);
}
输出的结果是:
k=11,k=013,k=xB
25.下面程序的输出是?
#include
voidmain()
{
intx=10,y=3;
printf("%d\n",y=x/y);
}
3
26.下面程序的输出是?
#include
voidmain()
{
charch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);
}
‘67’,D
27.下面程序的输出是?
#include
voidmain()
{
intx=10,y=10;
printf("%d%d\n",x--,--y);
}
109
28.下面程序的输出是?
设有如下定义:
intx=10,y=3,z;
则语句
printf("%d\n",z=(x%y,x/y));
3
29.下面程序的输出是?
intk,n,m;
n=10;m=1;k=1;
while(k<=n){m*=2;k+=4;}
printf("%d\n",m);
8
30.下面程序的输出是?
#include
voidmain()
{
inta[]={5,4,3,2,1},i,j;
longs=0;
for(i=0;i<5;i++){s=s*10+a[i];}
printf("s=%ld\n",s);
}
54321
34.下面程序的输出是?
#include
voidmain()
{
inti,a[10];
for(i=9;i>=0;i--){a[i]=10-i;}
printf("%d%d%d",a[2],a[5],a[8]);
}
852
31.下面程序的输出是?
#include
intm=13;
intfun2(intx,inty)
{
intm=3;
return(x*y-m);
}
voidmain()
{
inta=7,b=5;
printf("%d\n",fun2(a,b)/m);
}
34
32.以下程序的输出结果是?
#include
inta,b;
voidfun()
{
a=100;b=200;
}
voidmain()
{
inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
57
33.以下程序的输出结果是?
#include
intfun(intx,inty,intz)
{
z=x*x+y*y;
return0;
}
voidmain()
{
inta=31;
fun(5,2,a);
printf("%d",a);
}
31
34.以下程序的输出结果是?
intfun3(intx)
{
staticinta=3;
a+=x;
return(a);
}
voidmain()
{
intk=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);
}
6
35.____c___代表函数的首地址?
A、返回值类型B、参数C、函数名D、函数体
36.下列函数指针p调用一个求两个数最大值的函数正确的是____b___?
A、p()B、p(3,5)C、*p(3,5)D、(*p)(3,5)
37.下列函数指针定义正确的是___d_____?
A、int*p(int,int)B、int**p(int,int)C、*intp(int,int)D、int(*p)(int,int)
38.声明为voidprintArray(int*p,intcount)的函数的函数指针类型为__voidprintArray(int*int)___________?
39.编程题,猴子吃桃子问题。
猴子第一天摘下若干个桃,当即只一半,又多吃一个。
第二天早上又将剩下
的一半吃掉一半,双多吃一个。
以后每天早上都吃了前天剩下的一半零一个,到第10天早上只剩下最后一个桃。
问第一天摘了几个桃
函数的递归
Func(intn){
N=n/2–1;
Returnn;}
Voidmain{
Ints=0;
Intn;
S=func
(1);
}
40.编程题,写一个函数,交换两个变量的值
changeTwoNum(inta,intb){
inttemp=a;
a=b;
b=temp;}
41.以下程序的输出结果是?
main()
{
inta[10]={0};
for(inti=9;i>=0;i--){
a[i]=10-i;
}
printf(“%d%d%d",a[2],a[5],a[8]);
}
852
42.以下程序运行后,输出结果是?
main()
{
intn[5]={0,0,0},k=2;
for(inti=0;in[i]=n[i]+1;
}
printf("%d\n",n[k]);
}
0
43.以下程序运行后,输出结果是?
main()
{
inty=18,i=0,a[8]={0};
do{
a[i]=y%2;
i++;
y=y/2;
}while(y>=1);
for(intj=i-1;j>=0;j--)
{
printf("%d",a[j]);
}
printf("\n");
}
10010
44.以下程序运行后,输出结果是?
main()
{
inta[10]={0},a1[]={1,3,6,9,10},a2[]={2,4,7,8,15},i=0,j=0;
for(intk=0;k<4;k++){
if(a1[i]a[k]=a1[i++];
}else{
a[k]=a2[j++];
}
}
for(intk=0;k<4;k++){
printf("%d",a[k]);
}
}
1234
45.编程找出下列整型数组中的最大值和最小值及其所在位置的下标inta[]={5,-9,32,77,64,-24,14,0,21,45};
IntFindMaxNum(int*a,intcount)
{
Intmax=0;
For(inti=0;i{
If(a[i]{
Max=i;
}
}
Returnmax;
}
IntfindMinNum(int*a,intcount)
{
Intmin=0;
For(intj=0;j{
If(a[i]>min)
{
Min=i;
}
}
Returnmin;
}
46.编写一个程序:
intarray1[5]={8,6,4,2,0};
intarray2[5]={9,7,5,3,1};
先将两个数组升序排列,然后将这两个数组合并成一个升序数组
sortArrayByAsc(int*array1,int5)
{
For(inti=0;i<5-1;i++)
{
For(intj=0;j<5-1-i;j++)
{
If(array1[j]>array1[j+1])
{
Inttemp=array1[j];
Array1[j]=array1[j+1];
Array1[j+1]=temp;
}
}
}
}
sortArrayByDes(int*array2,int5)
{
For(inti=0;i<5-1;i++)
{
For(intj=0;j<5-1-i;j++)
{
If(array2[j]>array2[j+1])
{
Inttemp=array2[j];
Array2[j]=array2[j+1];
Array2[j+1]=temp;
}
}
}
}
sortArray(int*array1,int10)
{
For(inti=0;i<5-1;i++)
{
For(intj=5-1;j<10-1-i;j++)
{
If(array1[j]>array1[j+1])
{
Inttemp=array1[j];
Array1[j]=array1[j+1];
Array1[j+1]=temp;
}
}
}
}
OC部分:
1、定义一个人类Person,实例变量name,age,gender,要求写出自定义初始化方法,便利构造器
Person{
NSStringname;
Intage;
NSStringgender;
}
-initWithNameNSString:
name
andAgeint:
age
andGenderNSString:
gender{
NSStringname=name;
Intage=age;
NSStringgender=gender;
}
-
2、写出@property(nonatomic,assgin)NSIntegercount;生成setter和getter方法
3、写出@property(nonatomic,retain)NSString*brand;生成setter和getter方法
4、写出@property(nonatomic,copy)NSString*type;生成setter和getter方法
5、说一下#import,#include,@class的区别
include是c语言中导入头文件的关键字,在OC中同样可以使用,但是会出现重复导入重复导入重复编译的问题.
import是OC中导入头文件的关键字,只能在OC中使用,解决了重复编译的问题.
6、描述一下self和super
Super:
指从父类属性中继承
Self:
指从自身自定义中调用
7、面向对象和面向过程有什么区别?
面向对象,注重的是对实例变量属性的操作
面向过程,注重的是算法,过程的具体实现
8、什么是类?
什么是对象?
类和对象有什么关系?
举例说明
类是:
具有相同特征和⾏为的事物的抽象。
对象:
对象是类的实例,万事万物皆对象。
当我们看到某个概念的时候如果每个⼈的⼤脑中想到的都是同⼀个事物的时候,此时就是对象;反之则是类。
9、OC中的类包含几部分?
名称属性方法
10、创建对象需要几步?
创建类,实现定义,调用
11、实例变量的可见度有哪几种?
默认的是什么?
@private,@public
默认的是@private
12、子类继承得到了哪些内容?
OC中的根类是什么?
子类继承了父类中的一切属性,其跟类是NSObject
13、OC的方法分为_类方法_和_实例方法_
14、id、nil代表什么?
Nil表示空对象
Id表示泛对象
OC预习作业
1、描述一下内存管理的原则
2、内存管理的操作有哪些,有什么作用
3、ARC和MRC分别是什么?
有什么不同?
4、手写单例的实现
5、自动释放池是什么?
如何工作?
6、截取字符串”20|”中,”|”字符前面和后面的数据,分别输出
7、如何将一个字符串的某个敏感词变成**
8、NSRange是什么数据类型,成员变量有哪些,都有什么作用?
NSRange和NSString怎么相互转换。
9、数组有什么特点?
字典有什么特点?
10、执行autorelease的对象是在什么时候被release的。
v