C语言的题,都不难,帮忙解答,追加悬赏喔。麻烦把各个选项都解释解释最好了:)

若有以下定义和语句:
struct st
{ int n;
struct st * next ;
};
struct st a[3], *p;
a[0].n=5 ; a[0].next=&a[1] ; a[1].n=7 ; a[1].next=&a[2] ; a[2].n=9 ; a[2].next='\0' ; p=&a[0];
则以下值为6的表达式是( D )
p++ -> n B)p-> n++ C)++(*p).n D)++p -> n

有以下程序:
#include<stdio.h>
main()
{ union {short i[2];
long k;
char c[4];
}r, *s = &r;
s->i[0] = 0x39 ; s->i[1] = 0x38;
printf("%x\n", s ->c[0]);
}
已知字符0的ASCII码值的十进制数是48,且数组的第0个元素在低位。以上程序的运行结果是( A )
A)39 B)9 C)38 D)8

有以下程序(若long型和int型数据均占4个字节):
#include<stdio.h>
typedef union {long x[2];int y[4];char z[8];}MYTYPE;
MYTYPE them;
main()
{ printf("%d\n",sizeof(them));}
程序的运行结果是( B )
A)32 B)16 C)8 D)24

设有以下定义和语句
struct STD
{ char name[10];
int age; int sex;
} s[5],*ps;
ps = &s[0];
下面scanf函数调用语句中对结构体变量成员引用错误的是( D )
A)scanf("%s",s[0].name); B)scanf("%d",&s[0].age); C)scanf("%d",&(ps -> sex)); D)scanf("%d",ps -> age);

设变量已定义,以下不能统计出一行中输入字符个数(不含回车符)的程序段是( C )
A)n=0;while ((ch=getchar())!=‘\n’)n++;
B)n=0;while (getchar()!=‘\n’)n++;
C)for(n=0;getchar()!=‘\n’;n++);
D)n=0;for(ch=getchar();ch!=‘\n’;n++);

有以下程序:
#include<stdio.h>
struct ord
{ int x,y;}dt[2]={1,2,3,4};
main()
{ struct ord *p=dt;
printf("%d,",++p->x);printf("%d\n",++p->y);
}
程序的运行结果是( D )
A)1,2 B)2,3 C)3,4 D)4,1

以下正确的字符串常量是( D )
A)"\\\" B)‘abc’ C)OlympicGames D)""

若有定义语句:int a[2][3],*p[3]; ,则以下语句中正确的是( C )
A)p=a; B)p[0]=a; C) p[0]=&a[1][2]; D)p[1]=&a;

有以下程序:
#include
void fun(char *t,char *s)
{
while(*t!=0)t++;
while((*t++=*s++)!=0);
}
main()
{
char ss[10]=”acc”,aa[10]=”bbxxyy”;
fun(ss,aa);
printf(“%s,%s\n”,ss,aa);
}
程序运行结果是( D )
A) accxyy , bbxxyy B) acc, bbxxyy
C) accxxyy,bbxxyy D) accbbxxyy,bbxxyy

以下定义语句中正确的是 ( D )
A)int a=b=0 ; B)char A=65+1,b='b';
C)float a=1,*b=&a,*c=&b ; D)double a=0.0,b=1.1;

若变量已正确定义,有以下程序段
int a=3,b=5,c=7;
if(a>b) a=b; c=a;
if(c!=a) c=b;
printf("%d,%d,%d\n",a,b,c);
其输出结果是 ( B )
A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7

以下错误的定义语句是 ( C )
A)int x[][3]={{0},{1},{1,2,3}};
B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D)int x[][3]={1,2,3,4};

有以下程序
#include <stdio.h>
#include <string.h>
void fun(char *s[ ],int n)
{ char *t; int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;}
}
main()
{char *ss[]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};
fun(ss,5); printf(“%s,%s\n”,ss[0],ss[4]);
}
程序的运行结果是 ( C )
A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc
括号里都是给的答案~ 不知道为什么,帮忙讲解一下~

那个...,忘了分题号了,很抱歉...~

我估计答案应该有问题...

第一题:
这里的p是一个指针,他指向数组a的第一个元素,其实这里的p就可以认为是a了。
还有就是这个P++与++P的问题了,P++是先返回P的值在把p递增。++p则是把P先递增再返回。
所以P++ —>n 相当于a[0].n = 5;p->n ++ 相当于(p->n)++是先返回在递增,注意->运算符的优先级大于++,所以还是相当于a[0].n = 5;同理 ++ p->n 就相当于++(p->n) = ++a[0]. n = 6;++(*p).n 是把p的地址递增一,也就是相当于a[1].n = 7.

第二题:
这个union是表示,一块储存空间用short,long,char,三种类型来描述,所以c[0] 与i[0]一样的。这个程序是要打印s->c[0],printf("%x\n", s ->c[0])这句里的%x表示打印的数字是十六进制的。由于c[0]里面放的是0x39,所以这里打印的正好是39.
第三题:
与第二题类似,注意这里求的是them的空间大小,因为them表示成两个long型的数组,一个long是32位,及八个字节,所以两个就是16个字节。所以答案是16.
第四题:
D)scanf("%d",ps -> age);这里的ps->age 并不能表示地址,他只是返回age的值,ABC中的都表示的是地址。

第五题:
这个题是因为C选项for语句在读入一个换行之后就停止了,所以并不能统计所有输入。

第六题:
这里的p是指针,他就相当于dt,++p->x = (d[1].x) = ++3 = 4,注意这里的++是作用于P的,所以要先递增p,后面的++p—>y,其实这个值是不确定的,以为p现在已经不是指向a中的元素了。所以有前面的值确定答案的。

第七题:
字符串首先是用双引号引起来,常量就是一般的字符,“”这个表示的的是空字符,他也是一个字符常量,“\\\”这个反斜杠是用来表示转义的,单引号表示字符的ASCN码运算。

第八题:
a[][] 是一个二维数组,*p[3]这是定义一个Int型的指针数组,表示p[i]中存的是指针(地址),所以C正确,他是a[1][2]的地址存放到p[0]中。因为a二维数组的地址,p指向的是一维数组所以A,B,C错。

第九题:
fun函数的作用是把字符s接到字符t后面,所以在主函数中调用fun(ss,aa)后,ss="accbbxxyy",aa不变。所以输出结果是D

第十题:
A)int a=b=0 ;不允许这样赋值,可以int b=0;a=b;
B)char A=65+1,b='b';这个A的赋值错误,
C)float a=1,*b=&a,*c=&b ; 这个&b的是指针类型,而C却是float
D)double a=0.0,b=1.1; 正确

第十一题:
先判断a>b,不是,所以a=b不执行,接着执行c=a,所以这时c,a都是3,在判断c!=a,不是,所以直接打印,结果是3,5,3

第十二题:
定义二维数组a[m][n]的时候,m可以没有,但是n必须给出。C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 这个错了。

第十三题:
这段程序,中fun函数的作用是;首先有个char型指针数组s[]参数,还有一个n表示长度,从数组(每个数组元素中存放的是字符串)的下标为0的元素开始到下标为n-1的元素为止一共n个元素,依次与该元素后面的一共n-1个元素进行比较(比较数组元素中的字符串),就是s[0]要和s[1]到s[n—1]中的每个元素比较,如果这字符串的长度大于后面的字符串的长度,就把这两个数组元素中的字符串互换。
这个操作和冒泡排序比较类似
所以main()中fun(aa,5)执行之后,ss[] = {"xy","bbc","bbcc","aabcc","aaaacc"}
那么输出结果应该是xy,aabcc。
好了,都搞定了,因为水平有限,很难保证全对,但是我也是很认真的做了,希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-25
向字符串的首字符。
说一下s++ 和 ++s的区别:s++ 是使用了s再递增,++s是递增后使用。
在这里,先判断*p是否是空格,判断结束后*p递增(即指向下一个字符),这时的*p已经是指向前面的*p后面的位置了,可以看似一辆开动的车,然后再判断是否是空格。
谢谢!
第2个回答  2011-03-24
1,2,3...n共n个人围成一个圈,从1开始报数,数到k的人离开圈子,下面的人
从1开始重新数,请问,最后剩下的人是几号?的代码
第3个回答  2011-03-24
设变量已定义,以下不能统计出一行中输入字符个数(不含回车符)的程序段是( C )
A)n=0;while ((ch=getchar())!=‘\n’)n++;
B)n=0;while (getchar()!=‘\n’)n++;
C)for(n=0;getchar()!=‘\n’;n++);
D)n=0;for(ch=getchar();ch!=‘\n’;n++);

这个题目选C,主要考察了for(A;B;C)的执行顺序。
A; C; B; C; B;.....
相似回答