C语言的一道问题。

作者&投稿:载禄 (若有异议请与网页底部的电邮联系)
一道c语言的问题~

执行过程如下:
初始c='A', k=0;
switch 语句判断的是c,所以是'A', 然后c++='B'
进入case 'A', k++=1; 退出switch, 再k++=2
执行while, c='B'<G,继续do

switch 语句判断的是c,所以是'B', 然后c++='C'
进入case 'B', k--=1; 退出switch,由于case 'B'没break,继续执行case 'C', k+=2, k=3; 退出switch, 再k++=4
执行while, c='C'<G,继续do

switch 语句判断的是c,所以是'C', 然后c++='D'
进入case 'C', k+=2, k=6; 退出switch, 再k++=7
执行while, c='D'<G,继续do

switch 语句判断的是c,所以是'D', 然后c++='E'
进入case 'D', k=k%2=7%2=1; 直接continue,即退出到判断while
执行while, c='E'<G,继续do

switch 语句判断的是c,所以是'E', 然后c++='F'
进入default, k=k*10=10; 退出switch, 再k++=11
执行while, c='F'<G,继续do

switch 语句判断的是c,所以是'F', 然后c++='G'
进入case 'A', k=k/3=10/3=3; 退出switch, 再k++=4
执行while, c='G'<G不满足,结束while循环
输出k, 结果为4

fp前面一行,就是第15行结束时应该是分号,不是逗号

% 取余运算,结果为余数
/ 除法运算,结果为商
C语言中 非0 表示真 1表示假
do ……while 先执行后判断

第一次执行do后
k=k*num%10 = 6
num = num/10 = 2
while(2) 为真,继续do循环
k=k*num%10 = 6 * 2 = 12
num = num /10 = 0
while(0) 为假,循环结束

#include<stdio.h>
unsigned  fun6(unsigned num)
{  
unsigned k = 1;
    do
{    
k*=num%10 ;
num/=10;//这里应该是num/=10;
}
while (num);
return  k;
}
main()
{  
unsigned n=26;
printf( "%d
",fun6 ( n ) );//少个;
}

代码改过之后,输出的的确是12

fun6函数实现的是得到一个整数各个位上数的乘积

你的程序里面就是2*6=12了


至于子函数fun6是如何实现的,分析一下:

k=1存放整数num中各个位上数的乘积,初始化为1

num%10是取余,得到num的个位数,和k相乘,结果赋给k

num/=10;等价于num=num/10;把num除10取整,因为num是int型对象,除法有取整的效果,比如

本例中26/10就等于2



这个程序的功能就是求一个数各数位之积,看函数体
do
{ k* =num%10 ; num/10; }
while (num);
开始num=26,k=1,k* =num%10就是k=k*(num%10),即先对26求余得6在乘以k,再赋给k,得k=6,‘num/10’应该写错了,应该是num/=10,得num=2,while判断后为真,继续执行循环体 k* =num%10 ; num/=10,注意,现在num=2,k=6,num%10等于2再乘以k得12,num/=10得num=0,执行while判断后,条件为假,退出循环,返回k=12

n=26
k=k*(n%10) n=n/10
当n为非零的时候代码执行 然后n=26 代码执行两次 所以就是12了 注意返回值类型是unsigned

进入fun6之后
num%10=6 k*=6 所以k=6 然后 num/10=2
num%10=2 k*=2 k=12 num/10=0
(num/10;应该是num/=10或者num=num/10吧)


一道c语言问题,请各位高手们帮帮忙,谢谢
char p[][20]={“get”,”put”,”out”};p是一个有3个元素的数组,数组中的每个元素都是一个char[20]类型的数组。也就是说,p是一个二维数组。strlen(p[0])+strlen(p[1])+ strlen(p[2])即计算p中的三个字符串的长度总和,为3+3+3=9。

一道关于C语言中函数的问题
输出结果为:10,10 int x=10;int y=x++;\/\/对于x++来说,是先将原先的x值代入计算表达式的值,再进行++处理,所以,这里y等于0,赋值处理后x等于11 printf("%d,%d",(x++,y),y++);对于这个语句,涉及了逗号表达式的一个特点:对于逗号表达式,它是从左向右计算的,并且将其最右值作为逗号...

一道C++语言的问题,为什么最后的输出是一个很怪的数字
因为你定义的x是unsigned int类型,无符号整型,也就是非负数,所以z-y的结果虽然是-50但是会被转化为对应的无符号整数也就是4294967246

求助一道c语言问题
do {*t=*s; t++; s++;} while (*s);是不是这样,你最好上机单步调试一下。假如我写的是对的,这意味着对于abc\\0,当复制完字符c后,由于++的作用,s指向了下一个字符,使得*s=\\0,导致while为假不再循环。这意味着目标字符串没有终止符\\0,这就完蛋了。对于空串\\0,也是++的问题,...

C语言一道关系语句问题
这个式子要这样分析:1<=a<=5 -> (1<=a)<=5 无论1<=a为真(1),还是为假(0),它都小于5,整个式子为真。所以答案为1 。不明白可以hi我。

一道简单的C语言问题
int a=5,b=4,c=3,d=2;if(a>b>c) \/\/这里你可能想错了,a>b的值为1,然后1>c的值为0 \/\/所以这个条件为假,所以这里的printf语句不执行 printf("%d\\n",d);else if((c-1>=d)==1)\/\/这里(c-1)>=d的值为1,所以(c-1)>=d==1的值为1,即为真,所以执行下面的printf语...

一道C语言指针的问题 求解答 谢谢 !
&c和&ca:这两个是肯定不相等的,c是指向字符串的首地址即c的值等于字符串的首地址,而c本身需要一个地址空间存放即&c(就像i=3,i的值等于3,而&i是存放3的地址)。当把c[]传入fun时,ca也指向该字符串即ca的值等于c的值的副本,而这个值也许要一个地址空间存放即&ca。所以他们不相等。+...

一道C语言的问题、
定义char a【15】是一个字符数组,a相当于指针,a+7表示从地址为a的地方后移一个单位(因为你前面定义的是char ,这里的单位就是 char 字符)。输出格式为“%s”是用字符串的格式,所以输出:98

问一道C语言编程的问题,看下图
按你的提问,每天都吃一半多两个,第6天剩一个。程序按图片中的程序照猫画虎即可。计算结果,第一天摘了156个桃子,而不是100个。include <stdio.h>int main(){int day,x1,x2;day=5;x2=1;while(day>0){x1=(x2+2)*2;x2=x1;day--;}printf("total=%d\\n",x1);return 0;} 用...

一道c语言基础问题
首先&&运算符是与运算符 当参与运算的两方都不为0(true)时,则得到的运算结果不为0(true),或者换句话说,运算两方都为真(true)时,运算结果才为真,否则为false while(pa&&pb)首先分解为两个表达式 while(pc)pc = pa&&pb 当pa和pb都为true时,则pc为true while(pc)则是pc为true时满足...

连南瑶族自治县19861525298: c语言的一道题 -
笃官康博: *(prt+0)=2,x=8,*(prt+y)<x成立.所以z取后面的*prt+y=2+0=2,所以z=2 第2轮循环:y=2,*(prt+1)=4,x=8,*(prt+y)<x成立.所以z取后面的*prt+y=2+1=3,所以z=3 第3轮循环:第1轮循环:y=1:y=0不多说了

连南瑶族自治县19861525298: 一道C语言问题 -
笃官康博: 正确答案是A 空格和回车都是C语言系统默认的输入分隔符,Tab的作用和空格相同.只有当 scanf 语句的格式描述为 ( “%d,%d”, &a, &b ); 即两个%d 之间写了逗号,输入操作时,才能使用逗号做分隔符.

连南瑶族自治县19861525298: c语言的一道问题 -
笃官康博: 首先char **s是一个指针的指针,你也可以把它看成一个二维数组,也就是char s[][] 这样就好辨别了.首先看A,s="ABCDEF"; 这个肯定就不对了,因为s是指向一个二维数组,而"ABCDEF"就是一个字符串,也可以看成是一维字符数组.在看B,*s="ABCDEF"; 这个就没有问题了,*s是对s这个二级指针取一级地址,这个取出来其实就是一个char s[] 再看C**s="ABCDEF"; 这个就不对了,对一个二级指针进行两次取地址,实际上取到的是这个二维数组的第一个元素,也就是等同于s[0][0] 再看D*s实际就是一个char s[]数组,所以不正确.

连南瑶族自治县19861525298: c语言的一道题目 -
笃官康博: 正确答案是3,分析如下:首先是j=10,满足循环条件(j>3),进入循环.进入if判断语句,由于10%3结果是1,为真,j自减一次,为9.然后是两个自减语句,j=7.还有最关键的一句不要忘了,那就是循环...

连南瑶族自治县19861525298: 一道C语言的题 -
笃官康博: 答案没有错误 void fun(char *a, char *b) { a=b; //把b的地址给a,也就是把p2的值给p1,也就是把c2的地址给p1 (*a)++; //此时a中所存的是c2的地址,*a即为c2,c2++就是把ASCII码加1,也就是从a变为了b } main() { char c1='A',c2='a',*p1,*p2; p1...

连南瑶族自治县19861525298: 一道简单的C语言问题
笃官康博: /*求出100到200以内最大的素数和最小的素数,并求出两者的差值:求出两个素数;big one:* small one:* 两者的差值 result:* */ #include "stdio.h" #include "math.h" int isprime(int n) { int j; for(j=2;j<=sqrt(n);j++) { if(n%j==0)break; } if(j>sqrt(n)) ...

连南瑶族自治县19861525298: 关于c语言的一道题
笃官康博: 这个程序的书写有错误,在 void swap(int *a,int *b) {int t;printf("(2)x=%d y=%d\n",x,y);t=*a; *a=*b; *b=t;printf("(3)x=%d y=%d\n",x,y); } 肯定会输出错误信息,编译是通不过的,因为,x,y 为定义 这段代码应改为 void swap(int *a,int *b) {int t...

连南瑶族自治县19861525298: C语言的一道问题,求解! -
笃官康博: 运行结果是Ne1Nc2N. 首先当k = 0的时候执行default子语句的内容.也就是输出N.k自加1.k=1.执行子语句case 1: 输出c c是='e' 然后输出n的值是1(因为++n是先加在进行其他运算的).这...

连南瑶族自治县19861525298: c语言的一道编程题目,求解~~~ -
笃官康博: c语言一道题目,求解 悬赏分:0 - 离问题结束还有 14 天 23 小时 题目是:把一个链表按反序排序,即将原链头当作链尾,原链尾当作链头.将链表的数据保存在文中,并能读取出来,用函数实现.我把程序写成如下了,可是为什么保存不了呢...

连南瑶族自治县19861525298: C语言一道问题 -
笃官康博: #include<iostream.h> void main() {int X=3,Y=2; cout<<(X-=Y,X*=Y+8/5); } 注意书写规范 解释:cout后面是一个逗号表达式,返回值为后面的结果 X-=Y表示 X=X-Y,此时有X=3-2=1;X*=Y+8/5表示X=X*(Y+8/5),计算机中8/5=1,于是有X=1*(2+1)=3.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网