几道C语言,求大神帮忙看下~~答案已给,求讲解~~能讲几道讲几道~~谢谢

1.有以下程序
#include <stdio.h>
main()
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{default: c+=k
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d\n”,c);
}
程序运行后的输出结果是
A) 3 B) 5 C)7 D)9 答案为A

2.
有以下程序
#include <stdio.h>
main()
{ char s[]={“012xy”};int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
printf(“%d\n”,n);
} 程序运行后的输出结果是
A)0 B) 2 C)3 D)5 答案为B
3.
有以下程序
#include <stdio.h>
#include<string.h>
main()
{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s\n”,p);
} 程序运行后的输出结果是
A)9,One*World B)9,One*Dream C)10,One*Dream D)10,One*World 答案为C
4.
有以下程序
#include <stdio.h>
int f(int n);
main()
{ int a=3,s;
s=f(a);s=s+f(a);printf(“%d\n”,s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
} 程序运行以后的输出结果是
A)7 B)8 C)9 D)10
答案为C(static为静态全局变量,不是会保持a的值为1吗?除非赋新值,a++是赋新值?)
5.
)有以下程序
#include <stdio.h>
#define f(x) x*x*x
main()
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d\n’,s,t);
} 程序运行后的输出结果是
A)10,64 B)10,10 C)64,10 D)64,64 答案为A

1、
k=1时执行default,c=c+k=0+1=1,因为default后面没有break,不跳出switch语句,继续执行case2,得c=2;
k=2时,执行case2,c=3。
2、
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
for循环是为了让if可以判断数组里面的元素,if语句的意思是,如果数组里面出现小写字母,则统计小写字母的个数,个数存放在n里面,你看你的数组里面只有2个小写字母,所以答案为2.
3、
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
p=str[1];/*第1行0列的地地址给p*/
strlen(p)指从第1行0列地址开始计算,直到遇到'\0','\0'是字符串的结束标志,所以统计的个数为10,即one*Dream!的个数.
printf("%s\n",p);/*p代表地1行0列元素的地址,因为输出的格式控制字符是%s,所以只要给出首元素的地址,就会自动输出一串字符,直到遇到'\0'时。所以输出的是第1行元素One*Dream */
4、
第一次调用f函数,得n=n+a=3+1=4;然后执行a++,a=2,返回n值给主函数,则s=4;
第二次调用f函数,得s=4+f(a)。值传递,n=n+a=3+2=5,因为f函数中a是静态局部变量,在函数调用结束后,他不释放,仍保留第一次调用结束时的结果,所以a的值为2(如果a不是局部静态变量,则每次调用完f函数后a的值所在的区间会被释放,直到下次再调用f函数时再给他分配空间,重新给他赋值1)。然后a++,a=3.把n值返回给主函数,得s=9.
5、
s=f(a+1);根据宏定义得s=a+1*a+1*a+1=3+1*3+1*3+1=10;
t=f((a+1));根据宏定义得t=(a+1)*(a+1)*(a+1)=4*4*4=64.
这些题目确实蛮基础的,楼主没有认真看书就开始做题了,还是先认真看书好点,先把基本的东西弄清楚。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-18
k=1
default: c+=k
case 2: c++;break;
k=2
case 2: c++;break;

输出3

if(s[i]>=’a’&&s[i]<=’z’) 即如果是小写,n++ ,答案是2个小写,输出2

“One*Dream!”},*p=str[1]; 就是说p 指向“One*Dream!” ,长度是10

n=3+1 a=2
s=4
n=3+2 a=3
s=s+f(a)=4+5=9 (static 是指值保持上一次的,第一次之后a=2,所以第二次n+=a就是n+=2)

s=f(a+1); s=3+1*3+1*3+1=10 t=(3+1)*(3+1)*(3+1)=64本回答被网友采纳
第2个回答  2012-09-18
第一题:k为1时,进入switch,c=k+c,然后,由于没有break,c再自增,此时,c为2,k为2时,执行c++,所以c最终为3。
第二题的话主要注意一下for判断条件里面那个0,没有加双引号跟单引号,那就是ASCNII里面的数值了。。
其他题我就不说了,你可以自己去用软件调试一下,自己去看一下程序是怎么走的,看完你就会懂的了
第3个回答  2012-09-18
真心不知道该怎么跟你说,都是基础啊,看看谭浩强的c语言程序设计把,勿在浮沙筑高台啊
第4个回答  2012-09-18
都非常容易啊, 第4道题,注意static int a=1,第一次调用,a的值为1,后自加1;第二次调用a的值为2
相似回答
大家正在搜