求助:几道简单C语言练习题

来源:百度知道 编辑:UC知道 时间:2024/06/06 12:58:39
以下几个习题答案都知道,关键是要分析过程!!!麻烦各位大侠讲解以下!!答的好悬赏就25分!!!
❶程序段如下(C)
int k ;
while(k++<=2); printf("last=%d\n",k);
则执行结果是last=___
A.2 B.3 C.4 D.无结果
❷if(x=y+z)
printf("***");

if(x==y+z)
printf("***");
有什么不同啊,到底哪个对啊?
=不是赋值号吗,==不是等于号吗?那怎么能用x=y+z呢?
❸以下程序的执行结果是(D)
main()
{
int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d,%d",x--,y);
}
A.10 ,10,9,1

❹我对函数的直接递归调用和间接递归调用之间的区别不是很明白哦?
❺有以下程序段
char arr[]="ABCDE";
char *ptr;
for(ptr=arr;ptr<arr+5;ptr++)
printf("%s\n",ptr);
输出结果是(D)
D).
ABCDE
BCDE
CDE
DE
E
❻设有以下结构类型说明和变量定义,则变量a在内存所占字节数是(22)
struct stud
{char num[6];
int s[4];
double ave;
}a;

1.当k=3时,表达式k++的值为3,因此条件不成立,循环结束;但k自加后变为4,所以打印出为4。
2. 都能打印出“*”,第一个是赋值,第二个是判断罢了。
3. 楼主再好好看看书。
4. 第一次循环时,ptr 指向字符串的开头,所以打印出ABCDE,第二次循环时,ptr 指向字符串的第二个字符,数据格式要求为%s,所以从B开始打印....
5. 6+4*2+8=22

第一题while(k++<=2); printf("last=%d\n",k); 由于k没有赋初值,选D
第二题if(x=y+z)
printf("***"); 这句编译不能通过,因为括号里面返回的不是一个逻辑结果(真、假)第二个对 可以这样定义一个m ,if(x==(m=y+z))
printf("***");
第三题...第一步是for(i=0;x>8)然后输出10,10 ,此时x=9,y=10,i=0第二步是for(i=0;x>8;y=++i) ,输出x=9,y=1,最终x=8,y=1,i=2

第四题 直接递归就是只调用一个函数,间接递归不少于两个函数
第五题 指针ptr就是arr【0】第一次循环输出整个数组 循环一次就成了arr【1】
第六题... 没看懂

第一个 k 没有初值 所以 无结果
第二个 x=y+z 指把y+z的值给X 如果X不等于0 则输出
而x==y+z 指 如果两者相等则输出
第三个 运行结果是 10,10,9,1; x--是在执行之后在自减 所以第一次X输出仍然是10,第二次自减一为9;而for语句的最后一条是for中间的程序执行后再执行的,所以一开始还是输出10
第四个 程序相当于

char arr[]="ABCDE";
char i,j;
for(i=0;i<5;i++)
{
for(j=i;j<5;j++)
printf("%c"