二级计算机C语言的问题!!!

题目,从输入的若干个大于零的正整数中选出最大值,用-1结束输入
#include<stdio.h>
main()
{int x,max;
printf("Enter -1 to end:\n");
do
{printf("Enter x:");scanf("%d",&x);
}while(x<0 && x!=-1);
max=x;
while(x!=-1)
{printf("Enter x:");sancf("%d",&x);
if(x>0 && x>max)max=x;
}
if(max!=-1)printf("max=%d\n",max);
}
为什么不行 ????谢谢了!

19题:中while(i++);i++是先运算后,再自加一;++i是先自加
一,再运算!
所以,先判断while(i++)是否成立,此时i依然为0,不成
立,跳出循环,然后,i加一,所以,答案是:B。
24题:在for(i=1;i<=3;i++) for(j=3;j<=i;j++) m=m%j;的二重循环
中,当i为1,2时,j<=i不成立,所以m=m%j未执行。直到i==3
时,条件j<=i成立,执行m=m%j也就是m=55%3,所以,m==1。
选:B。
34题:首先读主函数,再读子函数!
数组名是该数组的首地址,所以c+4,是将指针移四个位
位置,此时c+4也就是c[4]的地址,换句话说,*(c+4)等于
c[4]。
fun(c+4,6):形参为c+4,也就是给自c[4]以后的元素从大
到小排序,而c[0],c[1],c[2],c[3]未被调用,没有参与排
续,所以答案为:1,2,3,4,9,8,7,6,5,0, 选D。
38题:首先读主函数,再读子函数!
while(*t!=0)t++;中*t!=0相当于*t!='\0'。这个循环的作
是将指针移到数组元素的末端,第一个'\0'处,也就是相
当于ss[3]的位置。
while((*t++=*s++)!=0);相当于库函数strcat(t,s)的作
用。(*t++=*s++)!=0相当于(*t++=*s++)!='\0',指针描述
过于抽象,我将其转化一下,意思相当于:
int i;
for(i=0;i<strlen(aa);i++)
ss[3+i]=aa[i];

所以,运行后ss[10]为accbbxxyy,而aa未变。
选:D。
41题:首先读主函数,再读子函数!
第一次循环:k==6;
第二次循环:k==13;
最后:k+=a相当于k=k+a;k=13+1;k=14。
注意:全局变量int a=1;在子函数中被static int a=2;
屏蔽了,所以子函数中a的初始值为2,因为static 定义
静态变量,所以,循环后a又变为3。
同样,在for(i=0;i<2;i++){int a=3;k+=f(a);}中,
f(a)里的a为3。全局变量int a=1;再次被int a=3;
屏蔽。
只有最后一个k+=a;中的a为1,没有被屏蔽!
所以,选A。
45题:是动态链表,很简单的,你看一下书就行了!在结构那一
章。
选:D。
46题:结构题,简单的结构赋值运算,STU f(STU a)的作用是将
b={"Zhao",'m',85.0,90.0}的值赋给c={"Qian",'f',95.0,92.0},
所以运算结果为:Zhao,m,85,90
选:C。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-19
你的x没储存,所以while(x!=-1)的时候x就是-1。

这是我的代码;
#include<stdio.h>
int main()
{
int x, max;
scanf("%d", &x); //先读取第一个数
max = x;
while(x != -1) { //当x!=-1的时候读取
scanf("%d", &x);
if(x > max) //更新最大数
max = x;
}
printf("%d\n", max); //输出

return 0;
}
第2个回答  2014-12-19
#include<stdio.h>
main()
{int x,max;
printf("Enter -1 to end:\n");
do
{printf("Enter x:");scanf("%d",&x);
}while(x<0 && x!=-1);
max=x;
while(x!=-1)
{printf("Enter x:");scanf("%d",&x);
if(x>0 && x>max)max=x;
}
if(max!=-1)printf("max=%d\n",max);
getch();
}
语法错误scanf本回答被网友采纳