
这是函数的递归调用问题,执行顺序是这样的,主函数传递给fun函数的参数是6,在if语句中进行判断,由于6/2=3>0,所以继续调用fun函数,这次传递的参数是3,注意这时候是在调用fun函数,下面的printf语句并没有执行。3这次调用fun传递进来的参数是3,由于3/2=1>0(注意整型数据除法保存为不大于结果的整数),所以继续调用fun函数,里面的printf还是没有执行,第三次调用fun函数时的参数就是1了,1/2=0,所以不再调用fun,而是执行后面的printf语句,由于这时x=1,所以输出的是1,然后函数返回到第二次调用那里,执行后面的printf语句,由于第二次调用时x=3,所以输出3,再返回到第一次调用时,这里x=6,所以输出6,然后再返回到主函数,后面没有语句了,程序结束
9下面程序段中循环体的执行次数是__3_____。
a=10;
b=0;
do{b+=2;a-=2+b;}while(a>=0);
10下面程序段的运行结果是______。
x=2;
do{{printf(‘’);x--;}while(!x==0);
11下面程序段胡运行结果是__a=-5_____。
i=1; a=0; s=1;
do{a=a+sI; s=-s; i++;}while(i<=10);
printf(“a=%d\n”,a);
scanf()函数读入数据后,会将最后的空白符(<space>、<Tab>和<CR>)留在输入缓冲区,如
int a;char str[100];
scanf("%d%s",&a,str);
用 23 asd<CR>响应时,3前面的空格和3与a之间的空格被当作分隔符读入后丢弃,而最后的<CR>仍保留在输入缓冲区中。
gets()函数对空白符的处理方法与scanf()不同,会将所有的空白符看作是串的一部分,以<CR>作为结束读入的字符,这个<CR>不会保存在串中,遇到<CR>后,会在串为添加串结束符'\0',也就是说,gets()函数会将输入缓冲区中每个字符都读出来。
为了防止读入的字符串长度超过数组长度,目前流行的做法是用fgets(char str[],const size_t size,stdin)函数读取字符串,读到size - 1个字符后,立刻结束读入过程,并将str[size]置为'\0'。如果输入的字符数不到size - 1个,则会将'\n'作为字符串的最后一个有效字符保存在str中(这些美国人是怎么想的?)。
编程中要注意的问题是:
一、如果scanf()后还是scanf(),第一个scanf()留下的空白符不会影响到下一个scanf()得到有效数据。
二、如果scanf()后是gets(),那么scanf()留下的<CR>会使gets()立即结束读入过程,根据gets()的转换规则,从而使gets()读取的字符串的第一个字符为'\0'(空串)。
三、如果scanf()后是fgets(),情况与二相同。
四、如果gets()或fgets()后是scanf(),gets()不会留下任何残留,即使留,也不会影响scanf()的正常读入。
通过以上的介绍,我们知道,在读入数据过程中,偶尔会添加语句getchar()的目的何在,事实上,只有在scanf()后是gets()或fgets()时是必要的,其他情况下是不必要的。
以上说的都是个人不全面的理解,偏颇之处难以避免,欢迎各位吐槽
以上就是关于C语言例题求解全部的内容,包括:C语言例题求解、C语言练习题、C语言:一个指针的程序例题,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)