求几道C语言问题的详细解答过程

2024-12-26 06:23:32
推荐回答(5个)
回答1:

我也在学C,说说我的看法,希望我们能相互交流,共同进步。

1、\是转义的意思,除了一些固定的转义字符如\n, \t之外,\后面是什么内容就输出什么。

2、if(a)
d=d-10;
else
if(!b)
if(!c)
d=15;
else
d=25;
这个在VC编译器中显示应该是这样吧,if()内为逻辑判断,即真或假,一个数的话为零即是假,不为零就是真,这里a=0,为假,所以应执行第一个else后的代码,b=20,即!b=0,也为假,所以下面什么都没执行,b=20。

3、赋值语句是这样,后一个赋值当然要覆盖前一个赋值。

4、这是变量的作用域的原因,因为x是在函数内定义的(无论主函数还是被调函数)都是局部变量(全局变量在函数外定义),局部变量只在定义它的函数内起作用,这里的两个x是在不同函数中定义的,所以即是两个不同的变量, 换句话说两个x的值存储在不同的内存单元,函数调用只是把主函数中x的值赋给被调函数中的x,被调函数中修改的它自己的x值,当然不会影响到主函数中的x值了,然后两个依次输出各自的x值。如果被调函数传递的参数为指针就不一样了,即被调函数是这样:
#include
func(int * x) //指针接收
{
*x=10; //这里x是指针,指针只能接收地址,所以赋10时要在x前加
//* 号,*x表示取出x指针中的值,上面我们已经把主函数中的
//x地址赋给了被调函数的指针x,所以这里的10其实是赋到
//了主函数中的x中去了,
printf("%d,",*x); //这里输出用 *x 跟上面一样是把主函数的x值
//拿来输出
}
main( )
{
int x=20;
func(&x); //传递地址
printf("%d", x);
}
这时运行结果就是:10,10 了,在这里虽然两个x仍然是局部变量,只作用在其定义函数中,但主函数却把它的x的地址传递给了被调函数的x,也就是说func函数中的指针x存储了main函数中x的内存单元,所以两个函数中任何一个x被修改了也就修改了存储它的内存单元的值,所以两个都是10了。

5.下列程序的功能是从输入的整数中,统计大于零的整数个数和小于零的整数个数。用输入0来结束输入,用i,j来放统计数,请填空完成程序。
main()
{ int n,i=0,j=0;
printf(“input a integer,0 for end\n”);
scanf(“%d”,&n);
while(n) //这里跟第2题中if(a)一样,n为零才为假
{ if(n>0) i=i+1;
if(n<0) j=j+1;
scanf(“%d”,&n); //循环输入,输一个判断一个,直到输入n为零
}
printf(“i=%4d,j=%4d\n”,i,j);
}

6、下面程序的功能是在a数组中查找与x值相同的元素所在位置。数据从a[1]元素开始存放,请填空。
#include
main()
{
int a[11],i,x;
printf(“input 10 integers:”);
for(i=1;i<=10;i++)
scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”, &x);
a[0]=x; i=10;
while(x!=a[i])
i--; //这里是从后往前比较
if(i>0)
printf(“the pos of x is:%d\n”,i);
else
printf(“can not find x!\n”);
}

7、下面程序的功能是在a数组中查找与x值相同的元素所在位置。
#include
main()
{
int a[10],i,x;
printf(“input 10 integers:”);
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”,&x);
for (i=0;i<10;i++)
if(a[i]==x)
break; //这里是从前往比较
if(i<10)
printf(“the pos of x is:%d\n”,i+1);
else
printf(“can not find x!\n”);
}

差不多就这样了,填空题不知道你有什么地方不清楚,所以说得也不详细
希望我的回答对你有所帮助

回答2:

第一个\'cat的问题,由于'符号是C语言中的标识符,参与程序,为了区别,如果'作为单独的字符显示输出要在前面加\。
第二个,所谓的真假判断,就是判断里面的值是1还是0,1为真,0为假,由于a=0,if(a)就是if(0),为假,不执行,其他类似,!是非运算符
第三个,对,由于a是变量,最后的有效赋值才是有效地,所以a=5,执行default语句,b=10
第四个,主函数中有一个输出语句,子函数还有一个输出语句,在主函数中调用子函数时,就执行了子函数中的输出语句,输出了10,之后主函数中有执行了自己的输出语句,输出了20,所以最后输出两个数。
程序题第一个:这个只有写goto语句才能实现你所描述的功能
main()
{label:int n,i=0,j=0;//i是大于0的个数,j是小于0的个数
printf(“input a integer,0 for end\n”);
scanf(“%d”,&n); //输入一个整数
while (n!=0) //判断是否为0
{ if(n>0) i=i+1;//大于0 i+1
if(n<0) j=j+1;//小于0 j+1
goto label; }// 回到程序开头处,再次进行输入操作
printf(“i=%4d,j=%4d\n”,i,j);// 输入结束,输出i和j的值
}
第二个:
#include
main()
{ int a[11],i,x;
printf(“input 10 integers:”);
for(i=1;i<=10;i++) scanf(“%d”,&a[i]);//给数组a赋值 printf(“input the number you want to find x:”);// 给x赋值
scanf(“%d”, &x );
a[0]=x; i=10;//把x的值放到a[0]
while(x!=a[i]) i--; //查找是否有和x相等的值
if(i!=-1) printf(“the pos of x is:%d\n”,i);//有,输出位置
else printf(“can not find x!\n”);//没有,输出未找到
}
第三个:
#include
main()
{ int a[10],i,x;
printf(“input 10 integers:”);//前面和上个程序一样
for(i=0;i<10;i++) scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”,&x);
for (i=0;i<10;i++) //这个是用for循环判断,如果找到相等的,跳出循环
if(a[i]==x)
break;

if(i!=10)
printf(“the pos of x is:%d\n”,i+1);//找到了,输出位置
else printf(“can not find x!\n”);//没有,提示未找到 }

回答3:

1." \' "就是输出一个" ' "
2.if(a) 因为a=0 所以下面的语句 d=d-10 不执行
else if(!b) 因为b=1 所以!b=0 所以if(!c) 也不执行所以下面的d=15;else d=25;不执行
所以最后输出是d=20
3.输入的5给了a,所以原来的1被5给覆盖了,执行缺省值default b=10 所以最后输出b=10
4.局部变量的作用域,局部变量是函数内或者复合语句内定义的变量或者形参,作用范围为当前的函数,所以func()函数里x只在func()里面生效,外部的x=20是main()变量,在main的整个函数内生效
5.
main()
{ n,i=0,j=0;
printf(“input a integer,0 for end\n”);
scanf(“%d”,&n);
while (1)
{ if(n>0) i= i+1 ;
if(n<0) j= j+1 ;
break ; }
printf(“i=%4d,j=%4d\n”,i,j);
}

2.
#include
main()
{ int a[11],i,x;
printf(“input 10 integers:”);
for(i=1;i<=10;i++) scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”,&x);
a[0]=x; i=10;
while(x!=a[i] ) i-- ;
if( x==a[i] ) printf(“the pos of x is:%d\n”,i);
else printf(“can not find x!\n”);
}

3.
#include
main()
{ int a[10],i,x;
printf(“input 10 integers:”);
for(i=0;i<10;i++) scanf(“%d”,&a[i]);
printf(“input the number you want to find x:”);
scanf(“%d”,&x);
for (i=0;i<10;i++)
if(a[i]==x)
break ;
if(i<10)
printf(“the pos of x is:%d\n”,i+1);
else printf(“can not find x!\n”);
}

回答4:

具体运行过程如下:

所谓的真假判断,就是判断里面的值是1还是0,1为真,0为假,由于a=0,if(a)就是if(0),为假,不执行,其他类似,!是非运算符

回答5:

不错,有问题才有进步!不喜欢帮懒人或不上进的人
1.\是转义字符的意思,因为有些组合有特别的含义,比如\n是换行!要输出'的话就要用\' 输出\就要用\\
2.if(a) c语言中,a代表非零为真,零为假
3.是,a的值改变了
4.因为传过去的是值,不是指针,所以值不一样,两次输出当然是打印2个了

暂时就答有问题的,该做的东西自己做

强烈建议看下书,把基础学好