C语言笔试题!求答案!另送100积分!

1. 说说下列声明的不同之处

char *a = "abc";
char b[] = "abc";
char c[3] = "abc";
a是一个字符型指针变量,起内容为字符串”abc”的首地址,字符串”abc”存放在常量区。
b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’
c[3]占3个字节,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’

2.以下为Windows NT下的32位C程序,请填空 。
例如:int i; long int j; char k; sizeof(i) = 4; sizeof(j) = 8; sizeof(k) = 1;
在32位系统下,整形所占的字节数是4。长整形所占的字节数是8,字符型所占的字节数是1。

(1)
typedef struct
{
int iPara1;
union
{
char iPara2[5];
int iPara3;
char iPara4;
} Params;
char cPara5;
char cPara6[12];
} TEST_INFO_T;

TEST_INFO_T stTestInfo;

请计算
sizeof (stTestInfo ) = 28

(2)
void Func ( char str[3])
请计算
sizeof( str ) =4

(3)
void *p = malloc( strlen(“hello world”) );
请计算
sizeof ( p ) =4
(4)
char str[] = “Hello” ;
char *p = str ;
int n = 10;

请计算
sizeof (str ) =6
sizeof ( p ) =4
sizeof ( n ) =4

3. 请问运行此程序后,在终端上输出的结果是什么?

char acFileName_p[2][50]; /*全局变量,在整个程序运行期间有效*/

int FileExists(char* name)
{
int i;

for(i = 0; i < 2; i++)
{
if( strcmp (( char*) name, (char*)acFileName_p [i] ) = = 0)
{
return 1;
}
}
return 0;
}
void CheckFileName(char *name)
{
static char suffix[3] = "_1";
if( FileExists(name) )
{
if(suffix[1] != '1')
{
name[strlen(name) - 2] = '\0';
}
strcat(name, suffix);
suffix[1]++;
CheckFileName(name);
}
else
{
suffix[1] = '1';
}
}
main
{
char cString1[50];
char cString2[50];

strcpy(acFileName_p[0], "test1");
strcpy(cString1, "test1");
strcpy(cString2, "test2");

CheckFileName(cString1);
printf("Output1 = %s\n", cString1);

CheckFileName(cString2);
printf("Output1 = %s\n", cString2);

strcpy(acFileName_p[1], cString1);
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
}
答:

4、请找出下面代码中的所有错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

(1)#include"string.h"
(2)main()
(3){
(4) char*src="hello,world";
(5) char* dest=NULL;
(6) int len=strlen(src);
(7) dest=(char*)malloc(len);
(8) char* d=dest;
(9) char* s=src[len];
(10) while(len--!=0)
(11) d++=s--;
(12) printf("%s",dest);
(13) return 0;
(14)}

我看你前面带答案了。我就做了最后两个。我把整体的再给你发一遍!

1. 说说下列声明的不同之处

char *a = "abc";
char b[] = "abc";
char c[3] = "abc";
a是一个字符型指针变量,起内容为字符串”abc”的首地址,字符串”abc”存放在常量区。
b[ ]占4个字节,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’
c[3]占3个字节,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’

2.以下为Windows NT下的32位C程序,请填空 。
例如:int i; long int j; char k; sizeof(i) = 4; sizeof(j) = 8; sizeof(k) = 1;
在32位系统下,整形所占的字节数是4。长整形所占的字节数是8,字符型所占的字节数是1。

(1)
typedef struct
{
int iPara1;
union
{
char iPara2[5];
int iPara3;
char iPara4;
} Params;
char cPara5;
char cPara6[12];
} TEST_INFO_T;

TEST_INFO_T stTestInfo;

请计算
sizeof (stTestInfo ) = 28
(这个答案我没验证,但是我感觉结构体的大小得看对齐位数是多少。正常对齐位数是4,可能不一样的系统默认的设置不一样。我记得我原来用的Solaris默认是8,你也可以自己改。)

(2)
void Func ( char str[3])
请计算
sizeof( str ) =4

(3)
void *p = malloc( strlen(“hello world”) );
请计算
sizeof ( p ) =4
(4)
char str[] = “Hello” ;
char *p = str ;
int n = 10;

请计算
sizeof (str ) =6
sizeof ( p ) =4
sizeof ( n ) =4

3. 请问运行此程序后,在终端上输出的结果是什么?

char acFileName_p[2][50]; /*全局变量,在整个程序运行期间有效*/

int FileExists(char* name)
{
int i;

for(i = 0; i < 2; i++)
{
if( strcmp (( char*) name, (char*)acFileName_p [i] ) = = 0)
{
return 1;
}
}
return 0;
}
void CheckFileName(char *name)
{
static char suffix[3] = "_1";
if( FileExists(name) )
{
if(suffix[1] != '1')
{
name[strlen(name) - 2] = '\0';
}
strcat(name, suffix);
suffix[1]++;
CheckFileName(name);
}
else
{
suffix[1] = '1';
}
}
main
{
char cString1[50];
char cString2[50];

strcpy(acFileName_p[0], "test1");
strcpy(cString1, "test1");
strcpy(cString2, "test2");

CheckFileName(cString1);
printf("Output1 = %s\n", cString1);

CheckFileName(cString2);
printf("Output1 = %s\n", cString2);

strcpy(acFileName_p[1], cString1);
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
}
答:
Output1 = test1_1
Output1 = test2
Output1 = test1_1_1

你的代码有错误,最明显的main函数你得加对小括号啊!!!

4、请找出下面代码中的所有错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

(1)#include"string.h"
(2)main()
(3){
(4) char*src="hello,world";
(5) char* dest=NULL;
(6) int len=strlen(src);
(7) dest=(char*)malloc(len);
(8) char* d=dest;
(9) char* s=src[len];
(10) while(len--!=0)
(11) d++=s--;
(12) printf("%s",dest);
(13) return 0;
(14)}

我把改过的重新写了一遍,
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char *src = "hello,world";
char* dest =NULL;
int len = strlen(src);
dest = (char*)malloc(len);
char* d = dest;
char* s= &src[len-1];
printf("%s\n",s);
printf("%d\n",len);
while(len--!=0){
*(d++) = *(s--);
}
printf("%s\n",dest);
free(dest);
dest=NULL;
return 0;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-12-01
第一题
char *a="abc"; 是把字符串“abc”的首地址赋值给指针变量a;
char b[]="abc"; 定义一个字符串数组,因为是字符串 “abc”最后有一个‘\0’ 数组长度为4;
char c[3]="abc" 写法有问题,由于数组大小给定为3,最后一个‘\0’写不进数组,有的编译器会报错。
第二题
1) struct 结构体分配内存特点是:大小等于所有成员所点内存大小的和。
union 联合体分配内存特点是:大小等于成员中占内存最大的内存的大小。所以一共是4个int 13个char 答案是:4*4+13*1=29(相信自己做的)
2) 答案是3 PS:谁给的答案,坑爹呢吧
3) 答案是8 PS:不要被迷惑,这题是陷阱,指针的大小都是无符号长整型 大小是8
4) 答案是6,8(同上题),4。
第三题
1) 答案是
Output1 = test1_1
Output1 = test2
Output1 = test1_1_1
2)(1)头文件没有标准输入输出 #include<stdio.h>
(9)错,左值为指针,右值为数组元素,不能赋值,所以应改为char *s=&src[len]
(11)不应是指针之间的赋值,应该是内容赋值,所以改为 *d++=*s--;
(12)如果按%s即字符串输出的话,dest所指的字符串结尾没有‘\0'结尾可能出现溢出,解决的方法是在(12)前加一句 *d='\0';

有不清楚的扣729480205,一起学习本回答被提问者采纳