c语言编程题目(一)

 1人阅读 评论(0) 收藏 举报

转自:http://blog.csdn.NET/oqqhutu12345678/article/details/69524383


1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 




2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B)) 
注意大小写的问题、括号的问题
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
这个问题用几个解决方案。我首选的方案是: 
while(1) 


一些程序员更喜欢如下方案: 
for(;;) 


第三个方案是用 goto 
Loop: 
... 
goto Loop;


5. 用变量a给出下面的定义 
a) 一个整型数(An integer) int a
b) 一个指向整型数的指针(A pointer to an integer) int* ptr
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) int** ptr
d) 一个有10个整型数的数组(An array of 10 integers) int a[10]
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)int* p[10] 
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) in (*p)[10]
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) int (*p)(int)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )int (*p[10])(int)


答案是: 
a) int a; // An integer 
b) int *a; // A pointer to an integer 
c) int **a; // A pointer to a pointer to an integer 
d) int a[10]; // An array of 10 integers 
e) int *a[10]; // An array of 10 pointers to integers 
f) int (*a)[10]; // A pointer to an array of 10 integers 
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer 
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer 


6. 关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 


修饰变量:在函数内,表示此变量在调用的过程中它的值维持不变;
          在函数外,表示静态变量,可以被本文件使用,但不能被其他文件使用。
修饰函数:表示是静态函数,只能被该文件中其他函数调用;


7.关键字const是什么含意? 
const int a; 表示a是一个常整数
int const a; 表示a是一个常整数
const int *a; 表示a是一个指向常整数的指针
int * const a; 表示a是一个指向整数类型的常指针
int const * a const;表示a是一个指向常整数类型的常指针


前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。


8. 关键字volatile有什么含意 并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 
1). 并行设备的硬件寄存器(如:状态寄存器) 
2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 
3). 多线程应用中被几个任务共享的变量 


表示该变量是易变的,编译器不应该去优化该值,即编译器不会去假设这个变量的值。它必须去内存中重新获取该值,而不是用寄存器中保存的值。
(1)并行设备的硬件寄存器
(2)一个服务子程序中访问到的非自动变量。
(3)多线程应用中被几个任务共享的变量。




1). 一个参数既可以是const还可以是volatile吗?解释为什么。 
可以,比如寄存器变量,我们希望它是只读的,但是仍可能是易变的。
2). 一个指针可以是volatile 吗?解释为什么。 
buffer指向一个地址被A线程使用,B线程修改了buffer所指的地址,同时希望A线程使用新地址,设置volatile。
3). 下面的函数有什么错误: 
int square(volatile int *ptr) 

return *ptr * *ptr; 

Ptr由于是volatile类型,是易变的,两次取得的值可能不一样。因此此函数可能无法完成平方的功能。
Ptr内容可能被修改,无法保证两次取得同一个值,应该先取出值放入一个变量中,然后通过这个变量来计算
9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
#define BIT3 (0x1<<3) 
static int a; 
void set_bit3(void) 

a |= BIT3; 

void clear_bit3(void) 

a &= ~BIT3; 



#define BIT3 (0x1<<3) //注意括号
void set_bit3(void)

  a | =BIT3
}
Void clear_bit3
{
  A&=~BIT3
}


10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
Int *p;
P=(int*)0x67a9;
*p=0xaa66;


Int *p=(int *)0x67a9;
*p=0xaa6;




11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius) 

double area = PI * radius * radius; 
printf(" Area = %f", area); 
return area; 
}
(1)中断不应该有返回值
(2)中断子程序中应该尽量少使用浮点类型,因为不可重入,以及printf也是不可重入的,在不同平台移植会出错。
(3)中断不应该传参


12 . 下面的代码输出是什么,为什么?
void foo(void) 

unsigned int a = 6; 
int b = -20; 
(a+b > 6) puts("> 6") : puts("<= 6"); 
}
>6  
无符号整形和符号整形数字相加时,后者自动转化为无符号整形,因此应该是>6
13. 评价下面的代码片断:


unsigned int zero = 0; 
unsigned int compzero = 0xFFFF; 
/*1's complement of zero */
因为不知道该平台是几位的,因此这个写法是不对的,正确写法应该是
unsigned int compzero=~0;


14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
主要有三种类型:
内存泄露、
内存碎片、
内存崩溃  
内存崩溃是内存使用最严重的结果,主要原因有数组访问越界、写已经释放的内存、指针计算错误、访问堆栈地址越界等等。碎片收集的问题,变量的持行时间等等
下面的代码片段的输出是什么,为什么?


char *ptr; 
if ((ptr = (char *)malloc(0)) == NULL) 
puts("Got a null pointer"); 
else 
puts("Got a valid pointer"); 
该代码的输出是“Got a valid pointer”。




15. Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子: 
#define dPS struct s * 
typedef struct s * tPS; 


答案是:typedef更好。思考下面的例子: 
dPS p1,p2; 
tPS p3,p4;
第一个扩展为 
struct s * p1, p2;


上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。


16. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? 
int a = 5, b = 7, c; 
c = a+++b;
上面的代码被处理成: 
c = a++ + b; 
因此, 这段代码持行后a = 6, b = 7, c = 12。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java运行时内存

对于java程序员来说&#xff0c;并不必显示地对内存进行管理&#xff0c;一切都交给java虚拟机去做吧&#xff0c;而且&#xff0c;你也不一定做得比java虚拟机来得专业。好像所有内存管理都交给虚拟机去做就万事大吉了&#xff0c;但是&#xff0c;事实有时并非如此&#xff0…

中班机器人上课视频_家委会:出班费买智能扫地机器人,不用家长搞卫生了,莫名其妙...

【01】原来大家上学&#xff0c;几乎是很随意的样子&#xff0c;有人至没上过幼儿园&#xff0c;有的上过半年&#xff0c;然后就直接升小学。可即使是升小学了&#xff0c;家长也不会管&#xff0c;全凭自己了。可如今随着社会的发展&#xff0c;父母们都非常重视孩子们的学习…

Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记...

睡眠机制 我们活着的时候&#xff0c;大脑会产生脑电波。脑电图仪器通过贴在人头上的一些电极读出脑电波的活动&#xff0c;然后把活动用图表显示出来。 睡眠过程可以分为5个过程&#xff0c;划分依据与大脑发出的脑电波类型。 当人清醒时&#xff0c;大脑发出β脑电波&#xf…

ue4集合类型_UE4粒子系统渲染管线概述

本文基于UE4版本4.25.3&#xff0c;对Cascade粒子系统的移动端渲染管线进行简单的概括和描述。Game Thread部分粒子系统Actor被Spawn&#xff08;或所在的Level被加载&#xff09;的时候&#xff0c;UParticleSystemComponent注册和初始化&#xff0c;并通过CreateSceneProxy函…

ip反查MAC地址

打开DOS命令提示符窗口&#xff0c;在窗口中输入命令“nbtstat -a IP”&#xff0c;如以上面查到的“10.10.3.21”为例&#xff0c;输入“nbtstat -a 10.10.3.21”转载于:https://www.cnblogs.com/jtm789/p/3715535.html

2、Sprite,SpriteBatch,Texture,TextureRegion的初步认识

昨天搭建了环境&#xff0c;今天就初步接触这个4个控件&#xff08;Sprite&#xff0c;SpriteBatch&#xff0c;Texture&#xff0c;TextureRegion&#xff09; 1、SpriteBatch 这个吗&#xff0c;我没有看api文档&#xff0c;偶是直接看土豆的博客学习的&#xff0c;我看了代码…

nedc和epa续航里程什么意思_NEDC、WLTP和EPA续航里程哪种最真实,用车注意事项都有什么...

我的理解是&#xff1a;从目前来看&#xff0c;衡量一款新能源电动汽车的性能指标&#xff0c;其中最为关键的就是车辆的续航里程&#xff0c;而这个续航里程使用不同的测试方法又会有不同的表现。从现有的续航里程测试标准来看&#xff0c;主要有NEDC、WLTP、EPA三种方式&…

javascript系列之执行上下文

写在前面&#xff1a;一 直想系统的总结一下学过的javascript知识&#xff0c;喜欢这门语言也热爱这门语言。未来想从事前端方面的工作&#xff0c;提前把自己的知识梳理一下。前面写了些 DOM的知识&#xff0c;略觉水平有限。没几个月就要开赴找工作的前线&#xff0c;奈何自己…

linux系统在虚拟机中迁移的技术难点

linux系统在虚拟机迁移中的技术难点通常我们期望虚拟机的迁移能够全部自动化或者部分自动化完成&#xff0c;但实际上Linux系统在P2V&#xff08;Physical to virtual 物理到虚拟&#xff09;和V2V&#xff08;virtual to virtual&#xff09;的迁移中可能遇到一些困难。1.磁盘…

Altium Designer 09简易教程(一)

【写的不好请谅解】 1、首先需要先准备好软件&#xff0c;这个大家就直接去网上找一下&#xff0c;安装也不难&#xff0c;如果有需要也可以给我留言哈嘻嘻嘻&#xff1b; 2、打开ad09&#xff1b; 3、大家会发现整个界面都是英语&#xff0c;可能看起来有点累吧&#xff0c;就…

莒南机器人_莒南42项重点建设项目公布!一定有你关注的

10日&#xff0c;县发改局公布莒南县2020年重点建设项目表&#xff01;涉及工业、服务业、基础设施、现代农业等行业&#xff0c;共42项。详↓工业1、山东钢铁集团永锋临港有限公司临港先进优特钢产业基地一期项目投资方&#xff1a;山东钢铁集团永锋临港有限公司建设地点&…

配置Mysql实现主从复制与读写分离

环境说明 主从复制使用mysql自带的master与slave机制&#xff1b;读写分离使用mysql-proxy实现&#xff01; 有服务器三台&#xff1a;s1,s2,s3。 s1为web服务器&#xff0c;装有httpd&#xff0c;php&#xff0c;mysql&#xff0c;mysql-proxy。 s2为主数据库服务器&#xff0…

js两个小技巧【看到了就记录一下】

1、不声明第三个变量实现交换 var a1,b2; a[b,ba][0];//执行完这句代码之后 a的值为2 b的值为1了 2、&&和||的用法 &#xff08;学会了立马感觉高大尚了吧&#xff09; var day(new Date).getDay()0; //传统if语句 if (day) {alert(Today is Sunday!); }; //运用逻辑…

c语言题目集合

转自&#xff1a;http://blog.csdn.NET/oqqhutu12345678/article/details/69524383 1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏M…

arduino 土壤温湿度传感器_嫌arduino太贵?太大?试试ATTINY85!DIY温湿度计入门级教程...

ATTINY85做主控&#xff0c;OLED显示的温湿度计。简介&#xff1a;通过Arduino开发环境&#xff0c;对ATTINY85进行编程&#xff0c;利用DH11温湿度传感器&#xff0c;在SSD1306(128*64)OLED显示屏上显示温度和湿度。材料&#xff1a;ATTINY85DHT11SSD1306 (12864 OLED)电池盒纸…

认识事件冒泡和事件捕获

一.事件冒泡就是多个元素同时响应了同一个事件&#xff0c;前提是这些元素都绑定了这一个事件。这只是我的定义&#xff0c;感觉好理解些。 称它为冒泡&#xff0c;是因为事件会按照DOM元素的层次结构依次执行&#xff0c;就像水泡一样不断浮向顶端。所以称之为事件冒泡。 这个…

BSD配置SSH服务

转载&#xff1a;因为是在vmware上装的FreeBSD&#xff0c;用vmware console把玩系统有点麻烦&#xff0c;就是想起可以开启FreeBSD系统的SSH服务器&#xff0c;再用ssh客户端软件(putty)来更省事一点。以下是配置过程&#xff0c;备忘1&#xff0e;开机启动ssh服务,编辑/etc/r…

计算abc=a!+b!+c!

根据题目&#xff0c;即求abca!b!c! 下面我们设计算法&#xff1a; 设三位数为n,取出每一位数分别放在a、b、c中 通过定义形参&#xff0c;求每位数的阶乘&#xff0c;通过函数返回值返回 主函数中&#xff0c;调用返回值&#xff0c;每一位的阶乘相加与该三位数比较&#xff0…

docker选择安装位置_自定义WSL的安装位置,别再装到C盘啦

本文使用 Zhihu On VSCode 创作并发布为了用docker,今天才决定更新到win10 2004打算另外装一个WSL2的发行版折腾docker和GPU&#xff0c;发现之前装WSL到非系统盘的教程找不到了。现在网上也没找到有这方面的东西&#xff0c;干脆自己写一个留作记录吧~WSL(Windows Subsystem f…

[讨论帖] 程序员如何赚外快?

昨天的一篇文章一个程序员如何快速赚到一百万&#xff1f;引起了大家的热门讨论&#xff0c;现在另开一个贴&#xff0c;讨论一下如何赚钱。 -------------------------- 挣外快需要的是大量的业余时间和强大的意志&#xff0c;如果你是个每天工作十几个小时天天累得像狗一样的…