请问这道c语言题怎么做?

这道C语言的题怎么做?~

您好,很高兴回答您的问题。
对于这个题目而言,主要是考查if~else函数的匹配使用情况。这个知识点就一定要记住:if总是与在它前面的、离它最近的、没有与别的if匹配的else匹配。有多层if语句的,一定要从最里层的if与else开始匹配。
所以整个匹配形式如图所示:


那么我们分析的时候,从最外层的if开始,if(a=b+c),其中a=b+c是赋值语句,是永远成立的条件,就不会执行a=b=c=-1这句话;并且在此情况下,a的值为0+-1=-1,那么也不满足a>0和a==0,所以执行的是倒数第二个else语句,所以最后的结果是a=b=c=1,所以答案应该选A。

这道题的意思是 如果这两个字符串没有结束且相同位置的字符相同的话就输出,
所以结果是Chin
x[i]!='\0'&&y[i]!='\0' 的含义是 当前两个字符串中同一位置的字符不为结束符'\0 ,也就是只要两个字符串都没有结束时进行循环
if(x[i]==y[i])
printf("%c",x[i++]);
else
i++;
这个条件分支的意思是如果相同位置的字符相同,就打印此字符,且位置增进1,以便于下次比较
如果相同位置的字符不相等,那么 增进1,继续比较下一个字符

从main函数开始,逐句分析:

main函数的第一句定义了三个int(整型)变量a, i, k,a的值被初始化为4;

第二句是一个循环,该循环将i的值定义为0,当i的值小于2时,循环条件通过,每循环一次,i的值就会加1,由此可知,该循环会执行两次

在循环体中,包含了语句k=f(a++);,由后置递增符的性质可知,后置递增符会先使用变量的值,使用完后,对变量进行递增。由此可知,传入函数的值即为a的值。

进入函数,f(int a)中的a的值即为传入的值,为4。逐句分析f()函数:

第一句,定义整型变量b的值为0,该变量的生存期和作用域为这个函数。

第二句,定义静态整型变量c的值为9,该变量的作用域为这个函数,但是生存期为整个文件。

第三句,由于使用的是后置递增符,先使用值,后递增,所以c的值被赋给a后才会增加,后接b++。本语句结束后,c和b的值都增加了1,c的值变成了10,b的值变成了1。

第四句,return以变量a的值作为返回值。

回到main函数的第二句,k的值被修改成为了f()函数的返回值,即在f()函数中a的值。要注意的是,以传值方式传入函数的值并不会改变值本身,而是相当于在函数中复制了一个副本使用。

该语句执行完毕后,main函数中的变量a的值增加了1。

此时是for循环的第一次循环结束,进入第二次循环,同样的传入a的值,由于之前递增过一次,所以现在它的值是5。重新进入f()函数。

在f()函数中,由于其他的变量的生存期是函数,在上一次f()函数结束时,变量b被销毁了,所以重新进入变量后,变量b的值又变回了0。但由于c的生存期没有结束,c的值不变,所以重新进入函数后,c的值仍然是10。c的值赋给a,所以在执行语句return a;时变量a的值是10,即函数的返回值是10。返回后该值赋给k,使得k的值变成了10。循环结束,跳出循环。

第三句,执行printf()函数,屏幕上输出的值是10。

第四句,return 0;  程序结束。

本题主要的难点在于对变量生存期的判定,即对static关键字的理解与掌握,忽视了函数中拥有文件生存期的变量在使用时值得变化原理。同时,后置递增运算符同样也是引起疑惑的原因之一。



注意,函数f返回的的是形参a的值,而形参a的值由表达式

a=c++决定

注意变量c的存储类型是static,所以即便推出了函数,变量的原值都会保存

共调用了2次f函数,,第二次调用f函数时,b值已经自增为10,所以打印输出10



#include <stdio.h>

#include <string.h>

void sort(int* s, int n)

{

int i = 0, j = 0, index = 0;

int c;

for (; i < n; i++)

{

c = s[i];

index = i;

for (j = i + 1; j < n; j++)

{

if (s[j] < c)

{

index = j;

c = s[j];

}

}

if (index != i)

{

c = s[index];

s[index] = s[i];

s[i] = c;

}

}

}

int duplicate(int* s, int n)

{

int j = 0;

for (int i = 0; i < n - 1;)

{

while (i < n - 1 && s[i] == s[i + 1]) i++;

if(i < n - 1 && s[j] != s[i + 1]) s[++j] = s[++i];

}

if (s[n - 1] != s[j]) s[++j] = s[n - 1];

return j + 1;

}

int main()

{

int n, s[101];

scanf("%d", &n);

for (int i = 0; i < n; i++)

scanf("%d", &s[i]);

sort(s, n);

int m = duplicate(s, n);

printf("%dn", m);

for (int i = 0; i < m; i++)

{

printf("%d ", s[i]);

}

printf("n");

return 0;

}



请问一下这道C语言编程题怎么做?
答:按照题目要求编写的用凯撒密码加密的C语言程序如下 include<stdio.h> int main(){ char s[80];int offset,i;fgets(s,80,stdin);scanf("%d",&offset);for(i=0;s[i]!='\0';i++){ if('A'<=s[i] && s[i]<='Z')if(offset>=0)s[i]='A'+(s[i]-'A'+offset)%26;else s...

C语言的问题,这道题怎么做?
答:不做任何操作 //循环至k=8时结束循环 if(k%2==0)//此时k=8,if条件成立,执行if大括号{}内语句,此处没有大括号,故执行if语句后面紧接着的一句代码 printf("%d",k);//输出k=8,故选C return 0;//程序结束}有不懂的可以再问,楼主若觉得回答有所帮助,望采纳,谢谢!

请问这个c语言程序题怎么做呀,能具体解释一下吗,谢谢啦
答:答案是A 表达是(!x==0)按照符号优先级,!大于== !(逻辑取反),C语言中非零为真 !x==0,只有当x为非零数成立,成立,即为真。当x为0时候,表达式不成立,为假。结论:x为0即为假,x不为0为真。B x :即x非零为真,正确。C x!= 0 :当x为0的时候为假,x不为0的时候成立...

这题C语言怎么做,要求太高了?
答:n=3 2.0645

请问这道c语言题咋做,24题讲解一下...谢谢
答:由while那句可知:本程序按单个字符扫描。由输入为2743可知:总共循环4次。到最后的回车程序停止。=== 第1次循环,输入的c为'2'。switch的判别值为0,,跳到case 0。说明:由于c语言中switch语句的特点case后面没有break的话会继续执行后面的case,所以本次循环依次执行case 0,1,2,直到遇见break才...

请教这道c语言的题怎么做(为什么是这个答案)?多谢
答:b=5 a=5/2 虽然a的类型是浮点 右侧是两个整数除法 返回值还是按整数运算的 a的值是2 b=b/2 由于b是整数类型 所以b值是2 b=2*2 b结果是4

请问这道C语言题怎么做?
答:当k=19时,while(i=18)执行循环,执行k-=3;后k=16,if和else if都不执行,执行i++;后i=19。当k=16时,while(i=15)执行循环,执行k-=3;后k=13,if和else if都不执行,执行i++;后i=16。当k=13时,while(i=12)执行循环,执行k-=3;后k=10,执行if,执行i++;后i=13,执行...

C语言的题目怎么做啊
答:{ char c;while((c=getchar( ))!=’?’) putchar(--c);} 程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为 。输出'Y'-1 X 5、以下程序运行后的输出结果是 。void fun(int x,int y){ x=x+y;y=x-y;x=x-y;printf(“%d,%d,”,x,y); } main(){ int x=2,y=3...

请问一下C语言这道题怎么做?
答:include<stdio.h>main(){ int n,i=1; long js=1; scanf("%d",&n); if(n>=0 && n<=12){ do{ js*=i; i++; }while(i<=n); printf("%ld\n",js); } else{ printf("shuruwuxiao\n"); }} 不解释 ...

c语言,请问这题做的过程该是什么样?
答:比如这题可以在循环内加一个printf("ch[i]=%c s=%d\n",ch[i],s);编译运行后看结果就很明显了 include <stdio.h>int main(void){ char ch[7]={"12ab56"}; int i,s=0; for(i=0;ch[i] >= '0' && ch[i] <= '9';i+=2) { s=10*s+ch[i]-'0'; ...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网