unsigned short array[]={1,2,3,4,5,6,7};int i = 3;*(array + i) = ?
unsigned short array[]={1,2,3,4,5,6,7};
int i = 3;
*(array + i) = ?
unsigned short array[]={1,2,3,4,5,6,7};
int i = 3;
*(array + i) = ?
阅读以下程序段,在实模式存储管理方案中,gvCh存放在(36)中;main函数编译后的代码存入在(37)中;指针p存放在(38)中。
#include<malloc. h>
unsigned char gvCh;
unsigned short gvShort
unsigned int gvInt=0x12345678
unsigned long gvLong=0x23456789;
ovid main(void)
{ unsigned char array[10], *p;
p=malloc(10 * sizeof(char))
while(1)
}
A..text段
B..data段
C..bss段
D.堆空间
(18 )下列各组类型声明符中,含义相同的一组是
A ) unsigned long int 和 long
B ) signed short int 和 short
C ) unsigned short 和 short
D ) short int 和 int
以下程序的输出结果是()
#include<stdio.h>
main()
{ unsigned short a=65537; int b;
printf("%d/n" ,b=a);
}
A.00007FFEH
B.OOOOFFFEiH
C.FFFF7FFEH
D.FFFFFFFEH
以下程序的输出结果是【 】。
main()
{ unsigned short a=65536; int b;
printfC%d\n",b=a);
}
试题五 (共15 分 )
阅读以下关于嵌入式C语言编程方面的问题,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
嵌入式C语言编程中常涉及位运算、宏定义的问题,以及大端方式(Big-endian)、小端方式(Little-endian)的访问问题。
【 问题1 】(4 )
嵌入式系统中常要求用户对变量或寄存器进行位操作。下面的两个函数分别为设置和清除变量 a 的第 5位。请使用下面的宏定义 BIT5 按要求对变量 a 进行相应的处理。在函数set_bit5中,用位或赋值操作(=)设置变量a的第5位,在函数clear_bit5中,用位与赋值操作(&=)清除变量a的第5位。
define BIT5 (0x01<<5)
static int a;
void set_bit5(void)
{
① ; /* 设置变量a的第5位 */
}
void clear_bit5(void)
{
② ; /* 清除变量a的第5位 */
}
【 问题2】(5 分 )
图5-1所示代码的设计意图是计算1~100各数的平方。 该段代码运行后,没有得到应有的结果,请说明出错原因,将答案填入答题纸的对应栏内。
”
【问题3】(6分)
某嵌入式处理器工作在大端方式 (Big-endian)下, 其中unsigned int为32位, unsigned short为16位,unsigned char为8位。仔细阅读并分析下面的C 语言代码,写出其打印输出的结果,将答案填入答题纸的对应栏内。
include "stdio.h"
include "stdlib.h"
void *MEM_ADDR;
void mem_test(void)
{
unsigned int *pint_addr = NULL;
unsigned short *pshort_addr = NULL;
unsigned char *pchar_addr = NULL;
MEM_ADDR = (void *)malloc(sizeof(int));
pint_addr = (unsigned int *)MEM_ADDR;
pshort_addr = (unsigned short *)MEM_ADDR;
pchar_addr = (unsigned char *)MEM_ADDR;
*pint_addr = 0x12345678;
printf("0x%x, 0x%x\n", *pshort_addr, *pchar_addr);
/* 第一次输出 */
pshort_addr++;
*pshort_addr = 0x5555;
printf("0x%x, 0x%x\n", *pint_addr, *pchar_addr);
/* 第二次输出 */
pchar_addr++;
*pchar_addr = 0xAA;
printf("0x%x, 0x%x\n", *pint_addr, *pshort_addr);
/* 第三次输出 */
}
下面程序的输出结果是【 】。
unsigned fun6(unsigned num)
{ unsigned k=1;
do { k*=hum%10;
num/=10;}while(num);
return(k); }
main()
{ unsigned n=26;
printf("%d\n",fun6(n));}
下列语句段中,正确的是()。
A.street { int x; float y; int a[2]; unsigned b[3]; char name[ 10]; };
B.struct stu { unsigned a[3]; unsigned b[4]; }x; int *p=& x.a;
C.stmct stu { int a; float x[4]; }y={1,1.0}; float data=y.x;
D.struct nd { int a,b; unsigned c[2]=5; };
以下程序的输出结果是【18】。
unsigned fun6(unsigned num)
{ unsigned k=1;
do{k *=num;num/=10;}
while (num);
return k;
}
main()
{ unsigned n=26;
printf("%d\n", fun6(n));
}