C语言题目简答题
1、(c=65 c=90)?(c=c+32):(c=c) /*符合你的要求,不是C语句,而是C表达式*/
2、a%10==5 /*符合你的要求,不是C语句,而是C表达式*/
3、【题目不全啊】
4、【题目不全啊】
5、这个题算是所有6个题中最难的了。
首先,fun函数中定义了一个static类型的变量,含义如下:
有时希望函数中的 局部 变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。
这道题还有一个迷惑点是,该程序还在“文件包含”命令下面定义了一个全局变量,变量名同样也是d。全局变量(或全程变量)可以为本文件中其它函数所共用,其有效范围从定义变量的位置开始,到本源文件结束。
这里要注意,这两个d虽然名字相同,但他们不是一个变量,两者地址不同,即占用的存储单元不一样。
要解决这道题,你还应该了解:一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最开头,也可以放在程序最后,或在一些函数之前,或在另一些函数之后)。
上面的问题清楚之后,下面就容易了。先执行main函数,第一句
int a=1;
定义了整型变量a并赋初值为1。然后调用输出函数
printf("%5d\n",fun(a+fun(d)));
这里,printf函数的输出列表中调用了fun函数,而fun函数中的参数是一个表达式a+fun(d),这个表达式中也有fun函数,其参数是d,这里,这个d 作为实参,必定是在“文件包含”命令下面定义的全局变量d,即先执行了fun(1)。
好,我们看看执行fun(1)是什么效果。首先形参p得到了实参的值1,然后
static int d=5;
定义了一个局部静态变量d, 并初始化为5,然后
d+=p;
就相当于“d=d+p;”,即d=5+1,d的值为6,然后
printf("%5d",d);
输出了当前局部静态变量d的值6,然后
return d;
即函数返回值为6,main函数中fun(d)就可以用数字6代替,a+fun(d)就是7了。
然后又调用了一次fun函数,fun(a+fun(d)),即fun(7)。
好,我们继续看这时函数应该如何调用。还是形参p得到了实参值7,然后
static int d=5;
由于fun函数里的d是静态变量,在第一次调用该函数时d已经被定义,系统已经为它分配了存储存单元,所以,这次再调用fun函数的时候,d不用再定义了,而且保留上次的值6,也就是说,这次的“d=5”是不会被执行的。继续,
d+=p;
即d=d+p,也就是6+7,这次fun函数里的局部静态变量d的值为13,
printf("%5d",d);
输出d的值13,然后
return d;
fun函数返回值为13。回到main函数,fun(a+fun(d))即可用13 来代替,然后
printf("%5d\n",fun(a+fun(d)));
输出13,换行,程序运行结束。
分析完执行过程,这个题的答案就有了。由于printf函数中写在%和d之间的整数代表输出字段宽度为5(如果数据的位数小于5,则左补空格,若大于5,则按实际位数输出),fun函数的printf函数的格式控制字符串中没有换行符'\n',所以最终输出结果应该只有一行:
6 13 13
press any key to continue
要注意,6前面有4个空格,6和第一个13之间有3个空格,两个13之间也有3个空格,第二个13后面什么都没有直接换行。最后的“press any key to continue”是Visual C++ 6.0系统自动生成的,提示程序已经运行完毕,按任意键退出。
6、Visual C++ 6.0 或 Turbo C++ 3.0
艾玛,打这么多字累屎了。。。。。。
C语言程序设计,简答题,求正解啊.
1. 以下程序的输出结果是什么。
#includestdio.h
void main( )
{
int a=1,b=0;
switch(a) {
//switch选择语句,a = 1,那么就选择case 1执行.
case 1://注意此处case 1没有break,所以后面的case 2也执行.
switch(b) {
//switch选择语句,b = 0,那么就选择case 0执行.
case0: printf(“0”); break;
//执行case 0,输出0,它有break终止语句,所以后面的case 2就不执行了.
case 1:printf(“1”); break;
}
case 2: printf(“2”); break;
//执行case 2,输出2.
}
}
//总的输出结果:02
//知识点:理解选择分支结构,case遇到break才会终止后面的执行.
2. 以下程序的输出结果是什么。
#includestdio.h
void main( )
{
inta=3,b=2,c=1;
//a、b、c的作用域在main函数内.
{
int b=5,c=12;
//b、c的作用域在{}内.
c-=b*2;
//此时b、c调用的值是{}内的b = 5、c = 12,那么c = 12 - 5*2 = 2
a+=c;
//此时的a是调用的main函数的a = 3, c调用的是c = 2. 即结果a = 3 + 2 = 5.
}
printf(“a=%d,b=%d,c=%d\n”,a,b,c);//此时a、b、c都是调用的main函数内的变量,a有经过操作,a = 5,b、c没有经过操作,b = 2,c = 1.
}
//总的输出结果为:a=5,b=2,c=1
//知识点:考查变量的作用域,记住自动变量的作用域只在{}内,超出作用域就不生效了.
3.以下程序的输出结果是什么。
#includestdio.h
int main(void)
{
intx=1,y=2,z=2;
if(x) z += 1;
//x0为真,执行z += 1; z变为3
if(!y) z += 2;//!y 0为假,不执行.
if(z) z += 3;
//z0为真,执行z += 3; z变为6
printf("%d\n",z);
//输出6
return 0;
}
//总的输出结果为:6
//知识点:对if语句的判断条件,真执行、假不执行.
4 以下程序的输出结果是什么。
#includestdio.h
int main(void)
{
int a=3,b=4,c=5,d=6;
if(ab)
//ab为假,所以后面的语句不执行.
if(bc) printf("%d", c);
else printf("%d",b);
//注意这里,else总是与上面的if匹配.
printf("%d\n",d);
//输出d = 6,没有经过任何语句操作.
return 0;
}
//总的输出结果:6
//知识点: else总是与最近的if匹配.
5. 以下程序的输出结果是什么。
#includestdio.h
void main( )
{
ints,t,a,b;
a=2;b=4;
s=t=1;
if(a0) s+=1;
//a0为真,执行s += 1;s变为2
if(ab) t=s+t;//ab为假,所以执行else语句,else为if下面的第一个,最近的.
else
if(a= =b) t=5;
//执行if( a == b )不成立,所以执行else语句,else为if下面的第一个,最近的.
else t=2*s;
//执行t = 2*s;即t = 2*2 = 4.
printf(“%d\n”,t);
}
//总的输出结果为:4
//知识点: else总是与最近的if匹配.(if找它下面的第一个else,else找它上面的第一个if,前提是if、else没有括号()限制优先级)
C语言程序设计
1.B 2.B 3.C 4.A 5.C 6.D 7.B 8.B 9.A 10.C
1、编写程序。从键盘输入100个数,将正数升序排列到数组的前端,把0放在中间,负数按降序排列在0的后面。
#include"stdio.h"
void main()
{
int i,j,k,s,a[100],b[100]={0},m=0,n=0;
printf("input:");
for(i=0;i100;i++)
scanf("%d",a[i]);
for(i=0,j=0;i100;i++)
if(a[i]0){b[j++]=a[i];m++;}//m正数个数
for(i=0,j=99;i100;i++)
if(a[i]0){b[j--]=a[i]; n++;}//n负数个数
for(i=0;im-1;i++)//正数排序
{ k=i
for(j=i+1;jm;j++)
if(b[i]b[j])k=j;
if(i!=k)
{s=b[i];b[i]=b[k];b[k]=s;}
}
for(i=100-n;i99;i++)//负数排序
{ k=i
for(j=i+1;j100;j--)
if(b[i]b[j])k=j;
if(i!=k)
{s=b[i];b[i]=b[k];b[k]=s;}
}
for(i=0;i100;i++)
printf("%d ",b[i]);
printf("\n")
}