char a[20] = "xyz",
它的前4个元素通过字符串"xyz"被指定为:
a[0] = 'x', a[1] = 'y', a[2] = 'z', a[3] = '\0',后面的元素应该也都是自动初始化为'\0'。
紧接着声明两个指针变量:
p = a, p1;
p指向数组a的第一个元素的地址a[0],没有为p1指定要指向的地址,系统随机分配一个地址。
第一个for循环:从a[0]开始,让p依次指向数组a中的每个元素的地址,当p指向的地址中的字符是'\0'时,即p指向数组a中第4个元素a[3]的地址时,条件表达式值为0,结束循环。
所以第一个for循环结束时,p = &a[3]。
第二个for循环:
通过p1 = p,令p1指向 p所指向的地址的之前一个地址:&a[3]之前的一个地址,也就是a[2]的地址&a[2],a[2]的值为'z'。
即p = &a[3],p1 = &a[2]。
第1次迭代:
执行循环体:p = p1;把现在p1指向的地址&a[2]中的值'z'赋给p现在p指向的地址&a[3]。
此时p == p1 == 'z',数组a中的元素情况:
{'x', 'y', 'z', 'z', '\0', '\0', '\0', }
然后执行末尾循环体:p1--, p++;
令p1指向它之前一个元素的地址&a[1],令p指向它之后一个元素的地址&a[4]。
即p == &a[4],p1 == &a[1]
第2次迭代:
p == p1 == 'y'
{'x', 'y', 'z', 'z', 'y', '\0', '\0', }
p == &a[5],p1 == &a[0]
第3次迭代:
p == p1 =='x'
{'x', 'y', 'z', 'z', 'y', 'x', '\0', }
p == &a[6], p1 == &a[-1]
第4次迭代:
因为p1 == &a[-1],a == &a[0],所以 p1 >= a不成立。
第二个for循环结束,此时p == &a[6]。
数组元素情况不变。
接着:通过 p = 0,把p指向的地址中的内容,也就是a[6]设为空字符'\0',作为字符串结束标志,
打印字符串“xyzzyx”
考察的是:
全局变量和局部变量的作用域问题;注意main函数中的i是局部变量,fun函数中的i是全局变量;
static存储类型变量的生存期问题;注意fun函数中的m为staic修饰,只初始化依次,生存期直至退出程序
函数递归调用问题;
全局变量定义未初始化,默认值为0;全局变量i初值为0
第一次调用fun函数fun(i,&j),i为局部变量,值为1,j值为2 全局变量i=0+2+1=3,m=3,main中的j值自增为3,输出3,3,fun函数返回3
第二次调用fun函数,fun(3,&j),j值为3,全局变量i=3+3+3=9,m=4,main中的j值自增为4,输出9,4
两次输出合在一起就成了3,39,4
先说一点需要的知识
scanf:
① 遇空格、“回车”、“跳格”键,结束当前输入
② 遇宽度结束,结束当前输入
③ 遇非法输入,结束所有输入
scanf的返回值表示输入成功的数的个数,若遇到输入意外返回EOF
你的这个程序,输入逗号是遇到非法字符,scanf结束所有输入同时返回1(因为第一个值是正确的)
也就是说
如果
int ret=scanf("%d%d%d",&x,&y,&z);
printf("%d",ret);
如果输入的是
25,13,10<CR>
则程序会打印1,x的值是输入的第一个数25,但y z却是申请空间时的随机数,所以最后的printf("x+y+z=%d",x+y+z);输出是不确定的
for(i=0;i<2;i++)
for(j=0;j<2;j++)
n[i+1][j+1]+=n[i][j];
当运行玩这个循环后,i和j都是2
所以printf("%d\n",n[i][j]);会输出n[2][2]的值
具体多少,自己算,或者做个小程序算一下
1 8 10 16
#include<stdioh>void main()
{
int i=010,//0开头表示8进制
j=10,k=0x10;//0x表示16进制
printf("%d %d %d\n",i,j,k);
}
2 输入两个整数,输出两数之差
四
#include <stdioh>void main()
{
int x,a,b,c;
printf("输入一个100-999之间的正整数:");
scanf("%d",&x);
printf("\n");
a=x/100;
b=(x-a100)/10;
c=x%10 ;
printf("%d的个位数是%d,十位数是%d,百位数是%d\n",x,c,b,a);
}
您好,很高兴回答您的问题。
您的这个程序主要是学会指针与数组的关系,以及数字字符型数据之间的关系。首先是定义字符型数组s,包含6个字符。然后定义指针变量p,指向字符型数据,并且p指向数组a。接下来往p所指向的位置,就是a数组中输入字符数据。当p指向的位置数据不为\0,即字符结束的标志时,对n的数据乘以8,再加上当前p所指向的字符减去字符0。需要注意的时,两个数字型字符相减,得到的就是两个数字相减的结果。
所以这个题目的结果为第一次n=08+3-0=3,第二次=38+2-0=26,第三次=268+1-0=209。所以最终输出结果为209。
第1个答案:1,2,3
1,2,5
第2个答案:是6 try()是C语言里面的关键字,最好不要用来当函数名
第3个答案:输出字符串(ps)的长度
第4个答案:y=876
第5个答案:9876
第6个答案:1
第7个答案:统计字符的个数
以上就是关于一道C语言程序阅读题,问题如下全部的内容,包括:一道C语言程序阅读题,问题如下、C语言指针读程题、c语言 阅读以下程序,当输入数据的形式为 25,13,10<CR> 正确的输出结果 为 (D) 。 为什么不是A等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)