首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

麻烦高手帮小弟我看看这些题目,万分感谢

2012-02-27 
麻烦高手帮我看看这些题目,万分感谢试卷开始(1)一般情况下,操作数左移2位的结果是原操作数()A)整除2  B)乘

麻烦高手帮我看看这些题目,万分感谢
试卷开始
(1)   一般情况下,操作数左移2位的结果是原操作数     (             )
A)整除2        B)乘以2        C)整除4        D)乘以4

(2)   以下定义语句中,正确的是(多选)   (                               )
A)int   a[]={1,2};  
B)   char   *a[3];  
C)char   s[10]= "test ";  
D)   int   n=5,a[n];

(3)   假定int类型变量占用两个字节,其有定义:int   x[10]={0,2,4};,则数组x在内存中所占字节数是                  

(4)以下程序的输出结果是                    
    main()
    {
int   a=12,b=12;
            printf(“%d   %d   \n”,--a   ,b);
    }

(5)   以下程序的输出结果是                
main()
{  
char   st[20]=   "hello\\\0\t ";
printf(%d   ,   %d   \n ",strlen(st),sizeof(st));
}

(6)   下列程序的输出结果是                    
main()  
{  
char   a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf( "%d   ,   %d ",*--p,--*p);
}

(7)   若变量n中的值为24,则prnt函数共输出                 行,最后一行有                   个数。
void   prnt(int   n,   int   aa[   ])
{  
int   i;
for(i=1;   i <=n;i++)
{  
printf( "%d   ",   aa[i]);
if(   !(i%5)   )   "   printf( "\n);
}
printf( "\n ");
}

(8)   以下程序的输出结果是                  
struct   HAR  
{  
int   x,   y;  
struct   HAR   *p;
}   h[3];  
main()  
{  
        HAR   *ptr;
h[0].x=1;h[0].y=2;  
h[1].x=3;h[1].y=4;
h[0].p   =   &h[1];
h[1].p   =   h;  
ptr   =   &h[1];
printf( "%d   ,   %d   \n ",(--ptr)-> p-> x   ,ptr-> p-> y);  
}

(9)   将下列段落翻译为中文(如遇到不理解的单词可直接写原英文单词)
SMS   (Short   Message   Service)   allow   you   to   send   and   receive   text   messages   on   your   phone.   Services   are   available   from   many   of   the   world 's   GSM   networks   today   -   in   addition   to   simple   user   generated   text   message   services   -   include   news,   sport,   financial,   language   and   location   based   services.
The   Short   Message   Service   (SMS)   is   the   ability   to   send   and   receive   text   messages   to   and   from   mobile   telephones.   SMS   was   created   as   part   of   the   GSM   Phase   1   standard.   The   first   short   message   is   believed   to   have   been   sent   in   December   1992   from   a   Personal   Computer   (PC)   to   a   mobile   phone   on   the   Vodafone(沃达丰)   GSM   network   in   the   UK.    


(10)   编写一段程序将结构数组struct_data中的元素首尾倒置,即第一个元素与最后一个元素互换,第二个与倒数第二个互换,依此类推。要求使用指针和内存操作完成代码。

数据定义如下:
typedef   struct{
unsigned   char     char_data;
unsigned   short   short_data;
void                       *first_func_ptr;
unsigned   long     *second_func_ptr;
int                         int_data;
BOOL                       focus;
}   DATA_STRUCT_T;

DATA_STRUCT_T   struct_data[2345];


 




[解决办法]
试卷开始
(1) 一般情况下,操作数左移2位的结果是原操作数 ( )
A)整除2    B)乘以2    C)整除4    D)乘以4
答案是B,左移相当于乘以2。

(2) 以下定义语句中,正确的是(多选) ( )
A) int a[]={1,2};
B) char *a[3];
C) char s[10]= "test ";
D) int n=5,a[n];
答案:A、B、C 这里选项 D 是错误的,C语言里面是不允许这样来声明一个数组的。

(3) 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是

答案是: 20 (10 * 2 = 20)

(4)以下程序的输出结果是
main()
{
int a=12,b=12;
printf(“%d %d \n”,--a ,b);
}

答案:11 12 (--a,先减 1 后使用,所以值是11)

(5) 以下程序的输出结果是
main()
{
char st[20]= "hello\\\0\t ";
printf(%d , %d \n ",strlen(st),sizeof(st));
}

答案:6,20 (st里面是 hello\ ,所以长度是 6,数组本身大小是20,并没有改变)

(6) 下列程序的输出结果是
main()
{
char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf( "%d , %d ",*--p,--*p);
}

答案:5,3
这个题出的有些问题,不同的编译器结果不同,因为不同编译器,函数参数入栈顺序不一样。
有的编译器是按照从右向左的顺序压栈,有的是按照从左向右的顺序压栈。
这里我们假设,压栈的顺序是从右向左。

*p=a+5 // p 指向 4。

--*p //先算 *p 再算减 1,所以结果是 3。

*--p //先算--p , p 指向 5,*--p 的值是5。


(7) 若变量n中的值为24,则prnt函数共输出 行,最后一行有 个数。
void prnt(int n, int aa[ ])
{
int i;
for(i=1; i <=n;i++)
{
printf( "%d ", aa[i]);
if( !(i%5) ) " printf( "\n);
}
printf( "\n ");
}
因为if( !(i%5) ) printf( "\n "); 这句话控制了每行打印的个数 (5个)
24个,共打印5行,最后一行是4个。

(8) 以下程序的输出结果是
struct HAR
{
int x, y;
struct HAR *p;
} h[3];
main()
{
HAR *ptr;
h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p = &h[1];
h[1].p = h;
ptr = &h[1];
printf( "%d , %d \n ",(--ptr)-> p-> x ,ptr-> p-> y);
}
答案:3,2

ptr = &h[1];//此时ptr指向第 1 项
(--ptr)-> p-> x//取第 0 项的下一项,即第 1 项的x的值,x值是3;ptr此时指向第 0 项
ptr-> p-> y //取第 0 项的y的值,y的值是2

(9) 将下列段落翻译为中文(如遇到不理解的单词可直接写原英文单词)
SMS (Short Message Service) allow you to send and receive text messages on your phone. Services are available from many of the world 's GSM networks today - in addition to simple user generated text message services - include news, sport, financial, language and location based services.
The Short Message Service (SMS) is the ability to send and receive text messages to and from mobile telephones. SMS was created as part of the GSM Phase 1 standard. The first short message is believed to have been sent in December 1992 from a Personal Computer (PC) to a mobile phone on the Vodafone(沃达丰) GSM network in the UK.

答案:这个恐怕得靠楼主自己了。

(10) 编写一段程序将结构数组struct_data中的元素首尾倒置,即第一个元素与最后一个元素互换,第二个与倒数第二个互换,依此类推。要求使用指针和内存操作完成代码。

数据定义如下:
typedef struct{
unsigned char char_data;
unsigned short short_data;
void *first_func_ptr;
unsigned long *second_func_ptr;
int int_data;
BOOL focus;


} DATA_STRUCT_T;

DATA_STRUCT_T struct_data[2345];

答案:
办法一:
这种办法只是利用指针和一个临时变量来解决这个问题。
不过同样也能达到目的。
void swap(DATA_STRUCT_T * start,DATA_STRUCT_T * end)
{
DATA_STRUCT_T tt;

if(start == NULL || end == NULL)
return;

while(start < end)
{
tt = *start;
*start++ = *end;
*end-- = tt;
}
}

办法二:
这个办法其实和办法一类似,仅仅是这里使用了内存拷贝来完成交换的。
如果按照题目要求的话,也许这种办法更符合题目的要求。
void swap(DATA_STRUCT_T * start,DATA_STRUCT_T * end)
{
DATA_STRUCT_T *p = (DATA_STRUCT_T *)malloc(sizeof(DATA_STRUCT_T));

if(start == NULL || end == NULL)
return;

while(start < end)
{
memcpy(p,start,sizeof(DATA_STRUCT_T));
memcpy(start++,end,sizeof(DATA_STRUCT_T));
memcpy(end--,p,sizeof(DATA_STRUCT_T));
}

free(p);
}

热点排行