1.判断字符变量x是小写字母符的C语言表达式是
if(x>'a' && x< 'z')
return TRUE;
2.设有定义“char buffer[x];”,要将字符串“www.baidu.com”赋值给buffer的安全语句是
strcpy_s(buffer, "www.baidu.com");
3.以下为Linux下的32位C程序,请计算sizeof的值:
char str[] = "hello";// 6 加上一个‘\n’
char* p =str; //4 指针固定4个字节
int n = strlen(p); //4 int类型 4个字节
4.h头文件中的ifndef/define/endif的作用?
防止头文件被重复定义
5.#include<file.h>与#include"file.h"的区别?
搜索顺序不同
用#include“file.h”时,先搜索当前工作目录->搜索库->资源库;
用#include<file.h>时,编译器先从标准库路径->资源库目录->当前工作目录。
6.若x=15,y=29,z=13,则表达式(p=(x<y?x:y)>z?p:z)的值
p
7.已知一个数组table,用一个宏定义,求出数据的元素个数
#define TNTBL(table) (sizeof(table)/sizeof(table[0]))
8.有定义:int a[][3]={1,2,3,4,5,6,7,8,9,10},则*(*(a+1)+2)的值为
6
9. IP地址的编码分为哪两个部分?
网络号和主机号
10.简要说明动态库和静态库的区别
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库;
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。
11.以下while循环执行多少次
char i = 88;
while(i++<100000);
越界死循环,无限次
12. 列举C/C++源代码文件转化为可执行文件过程的步骤,并简要说明各步骤。
.c文件
1).预处理,产生.i文件
2).编译,产生汇编文件(.s文件)
3).汇编,产生目标文件(.o或.obj文件)
4).链接,产生可执行文件(.out或.exe文件)
记忆:ISO镜像文件
13.进程和线程的区别
进程是资源分配的最小单位,线程是程序执行的最小单位。
进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵;而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
14.求下面函数的返回值,写出计算思路
int func(x)
{
int count = 0;
while(x)
{
count++;
x =x&(x-1);
}
return count;
}
假定x = 9999,count的值为
8
求解x的二进制数中1的个数
9999=11 1110 0111
15.一个int全局变量i=0,5个线程并发执行1000次i++,请问最终结果是多少?
最小值为1000,最大值为5000;
原因:五个线程在i=0进行,得到1000;
一个线程计算到1000之后,再下一个进程,...,最后一个线程从4000开始,最后输出5000.
ps:有点类似串行跟并行。并行得到1000,串行得到5000
16.
17.各类指针的定义
18.UNIX时间戳(英文为Unix time,POSIX time或Unix timestamp)是从UNIX纪元(Epoch)(1970年1月1日00:00:00UTC开始所经过的秒数。)
现请你完成一个简单的程序,这个程序读取一个1970年1月1日后的合法日期,然后计算该日期是距离1970年1月1日起的第几天(1970年1月1日算第0天)?
(注:普通年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年);
世纪年:能被400整除的为世纪闰年。(如2000年是闰年,1900年不是闰年)
)
样例输入
1970 02 01
样例输出
31
#include<iostream>
using namespace std;
bool isleapyear(int y)
{
return ((y % 4 == 0 && y %100 != 0) || y % 400 == 0);
}
int sum(int y, int m, int d)
{
int md[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int cnt = y * 365;
//判断闰年有几个
cnt += (y - 1) / 4 + 1;
cnt -= (y - 1) / 100 + 1;
cnt += (y - 1) / 400 + 1;
for (int i = 1; i < m; i++)//加上月份
{
cnt += md[i];
}
cnt += d; //加上日
if (m > 2 && isleapyear)//判断该年是否为闰年
cnt += 1;
return cnt;
}
int count(int y1, int m1, int d1, int y2, int m2, int d2)
{
return (sum(y2, m2, d2) - sum(y1, m1, d1));
}
int main()
{
int y1=1970, m1=01, d1=01, y2, m2, d2;
cin >> y2 >> m2 >> d2;
cout << count(y1, m1, d1, y2, m2, d2);
system("pause");
return 0;
}
19.在一个很大很大的国际象棋棋盘上有一枚妻子国王(King),一开始它坐落于(x1,y1)点,请问到达(x2,y2)点最少要走几步?国王的走法规则是:横、直、斜都可以走,但每次限走一步)轻便鞋程序解决这个问题。程序输入的第一行是两个整数x1和y1,第二行两个整数x2和y2(0<=x1,y1,x2,y2<=1000000000);请输入一个整数表示最少的步数,
样例输入:
2 5
1 3
样例输出:
2
#include<iostream>
#include<math.h>
using namespace std;
int step(int x, int y)
{
int res = 0;
while (x != 0 && y != 0)//如果存在不在x轴或y轴的,就走对角
{
x = x - 1;
y = y - 1;
res++;
}
return res + x + y;
}
int main()
{
int x1,x2,y1,y2;
int x, y;
cin >> x1 >> y1;
cin >> x2 >> y2;
x = abs(x1 - x2);
y = abs(y1 - y2);
cout << step(x,y);
system("pause");
return 0;
}
20. 有一个从1到N编号的32位无符号整数序列A,请问里面有多少个<i,j>下标对(1<=i<=j<N)满足Ai*2=Aj,请写出程序。
程序输入的第一行是N(2<n=<=100000),接下去一行是N个由空格隔开的数字,表示序列A。
样例输入:
5
2 4 5 4 8
样例输出:
4
样例输出解释(<1,2>,<1,4><2,5>和<4,5>这四个下标对)
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int step(int x, int y)
{
int res = 0;
while (x != 0 && y != 0)
{
x = x - 1;
y = y - 1;
res++;
}
return res + x + y;
}
int main()
{
int n;
int temp;
int res = 0;
vector<int> vec;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> temp;
vec.push_back(temp);
}
for(int i=0;i<n;i++)
for (int j = 1; j < n; j++)
{
if (vec[i]*2 == vec[j])
res++;
}
cout << res;
system("pause");
return 0;
}
21.从坐标原点出发,路径如下,每次走一步,求走到给出的任意坐标值的路径。
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int fun1(int x,int y)//x正半轴
{
if (x == 1)
return 1;//+y
else
return fun1(x - 1, 0) + 8 * x - 7;
}
int fun2(int x, int y)//y负半轴
{
y = abs(y);
if (y == 1)
return 7;//+x
else
return fun2(0, y-1) + 8 * y - 1;
}
int fun3(int x, int y)//y正半轴
{
if (y == 1)
return 3;//-x
else
return fun3(0, y - 1) + 8 * y -5;
}
int fun4(int x, int y)//x负半轴
{
x = abs(x);
if (x == 1)
return 5;//-y
else
return fun4(x-1,0) + 8 * x -3;
}
int main()
{
int x, y;
int res=0;
while(1)
{
cin >> x >> y;
// cout << fun3(x, y);
if (x >= 0 && y >= 0)//一象限
{
if (abs(x) > abs(y))
{
res = fun1(x, y)+y;
}
else
{
res = fun3(x, y)-x;
}
}
if (x < 0 && y > 0)//二象限
{
if (abs(x) > abs(y))
{
res = fun4(x, y)-y;
}
else
{
res = fun3(x, y)-x;
}
}
if (x <= 0 && y <= 0)//三象限
{
if (abs(x) > abs(y))
{
res = fun4(x, y)-y;
}
else
{
res = fun2(x, y)+x;
}
}
if (x > 0 && y < 0)//三象限
{
if (abs(x) > abs(y))
{
res = fun1(x, y)+y;
}
else
{
res = fun2(x, y)+x;
}
}
cout << res;
}
system("pause");
return 0;
}