当前位置:首页 » 编程语言 » c语言书后习题讲解
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言书后习题讲解

发布时间: 2023-01-05 06:38:29

‘壹’ 求一道c语言题详解

错误在于sqrt误打成了sprt

#include<stdio.h>
#include<math.h>
void main()
{
int m,i,k,count=0,leap;
printf("\n\n");
for(m=101;m<=200;m+=2)//偶数不可能是素数
{
k=sqrt(m); leap=1;
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;} //如果能被i整除,说明他不是素数;
if(leap==1)//循环结束有2个方式,,其中一种使leap=0;;但现在leap==1,,
//循环结束的原因是必然是i>k了,,就是说明m是素数..
{printf("%-5d",m);count++;}
}
printf("\n The total is %d",count);
}

‘贰’ c语言程序设计课后习题答案(高等教育出版社何钦铭 颜晖 主编)

大学学习资料免费下载网 有

在 其他公共课程 版块

标题:

C语言程序设计第三版谭浩强课后习题答案完整版txt

谭浩强C语言程序设计习题参考解答

C程序设计题解与上机指导 答案

还有很多相关资料:

谭浩强编《C语言程序设计》视频教程(曾怡讲解) 在线 下载
谭浩强编《C语言程序设计》(电子书+纸质书)
......

下载不用积分
我可以帮助你,你先设置我最佳答案后,我网络Hii教你。

‘叁’ 求下列C语言题目详解

1。13个元素,hello\nworld\n这是12个元素,最后字符串结束标志是'\0',所以又13个

2. 首先int *p =&a[0]+1 ,这聚会等价于p指向了a[1],即p= &a[1],所以*p= a[1] = 3
3.首先8非0,所以!8=0,那么!!8=1
4.答案是15(绝对是15!!),应为define是简单的文本替换
所以10*MIN(10,15)等价于

10*10<15?10*10 : 15

所以是15
5.a=-264,
a+=a-=a*a等价于

1).a=a-a*a = 12-12*12= -132;
2).a= a+a = -132+(-132) = -264
6.首先算的是5>4?3:2 值是3,所以变为8>7?6:3,因为8>7所以值为6

‘肆’ 求此C语言题详解

想了半天真不知道怎么详解

回去结合函数调用那部分再看看C语言指针 都是些非常基础的东西、

void main()
{
int a=1,b=2,c=3;
sub(a,b,&a); //调用sub(int x,int y,int *z) 执行完毕 a=1 (*z=y-x(即a=b-a (z为指针变量 在此处指向变量a的地址&a *z即变量a))),b=2,c=3
sub(b,a,&b); //调用sub(int x,int y,int *z) 执行完毕 a=1,b=-1(原理同上),c=3
sub(a,b,&c); //调用sub(int x,int y,int *z) 执行完毕 a=1,b=-1,c=-2(同上)
printf("%d,%d,%d\n",a,b,c);
}

‘伍’ 《C语言程序设计基础》陈东方着清华大学出版社课后习题答案求详解

大学学习资料免费下载网有

其他公共课程论坛

标题类似的信息:陈东方C语言编程基础实验和问题的解决方案(答案)
中国校企网络技术联盟

‘陆’ c语言的题目,谁来解释一下这磨人的++啊啊 求详解

很不喜欢这类题目,出这种题的,都是脑子进水的二货。
为什么这么说呢,因为这种式子,它的编译结果与编译器的实现有关。
大家都知道左++,右++的规则,但在具体使用这种代码时,很可能与你期望的结果不一致。据说,世界上超过95%的C程序员,搞不清楚这东西的运算。
所以,规则就是:不使用这种你无法预计的代码。所以我说,出这种题的老师都是混蛋。
闲话少说。

按照C语言的语法规则:这题应该先计算()中的内容,所以,应该是先计算3次--x,结果是x=6
最后再把3个()计算的结果相加,所以,最后结果应该是18,这是按照C语言语法规则得出的结论。
你说的TC中计算结果是这个,就是采用了这种规则。

另外一种说法:第1个()中计算结果是8,第2个()计算结果是7,第3个()中计算结果是6
所以,结果应该是:8+7+6=21。

还有一种,你想不到的计算方式:如上图中反编译结果(gcc)
粉色框中,你可以看到,编译器先进行了2次--x;的计算,然后把计算得到的结果x=7相加,得到结果14
然后再计算一次--x;此时x=6,14再加上这个6=20,这就是20的由来。(红色框)
vc6我没有反编译,但估计过程应该和这个一致。
我没有查到这样做的原因,也没有找到相关的规则说明。

只能感叹:流氓的世界我不懂!

这个规则适用更多计算式:(--x)+(--x)+(--x)+(--x)...
实际上就相应于[(--x)+(--x)]+(--x)+(--x)...
先运算开头2项的,然后后面一个一个的计算。
结果就是:7x2+6+5+...

很搞笑吧。

还有更搞笑的,如果把x的类型改为charx=9;或int16_tx=9;
那么,计算结果是21,发生了什么?
因为这时,编译器就按照我在上面第2种说法里的方式去编译运行了!

所以呢,你别纠结这道题为什么为选A了,再碰到老师出这种题,拿着不同的结果去打他脸!

因为这不是你的错。

‘柒’ C语言课本题目求详解,设有int x=2,y=3,z=5,s=1,t=2,则表达式!(a+b)+c-1&&b+c/2的值为多少

破书出的烂题。

答案永远不可能为3 。

表达式!(a+b)+c-1&&b+c/2中的变量跟前面的定义没有星点关系,

而且该表达式的本质是&&,

(!(a+b)+c-1)&&(b+c/2)
//最后所得要么是1,要么是0

‘捌’ C语言书上的一道题不太懂高手请指点一下

for(m=3;m<=100;m=m+2)
m从3开始,然后第2次循环是5,每次加2,知道m=101,判断大于100,不在运行循环内的程序。
k=sqrt(m);
这是K=根号m,的意思,math库函数中有这个函数sqrt()为开根号。
for(i=2;i<=k:i++)
/*总之这一段讲解一下哈
if(m%i==0)
/*还这
和下面几行
break;
如果m可以整除i就跳出这个循环
if(i>k)
{
printf("%5d",m);
}
如果m都不能被i整除,打印出m
if(n%5==0)
printf("\n");
每打印5个数,换行输出;
整个程序的功能是:输出3到100以内的素数
程序结果是对的,但是格式不对,应该是3,5,7
前面都有4个空格,17~97前面都有3个空格。因为你是printf("%5d",m);
的%5d!

‘玖’ C语言书上例题看不懂,能帮忙看一下吗

我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)


这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度

那么我们知道:如果传递的n是10,数组长度是10的话,它的元素的索引应该是0-9,也就是最大索引是9,n-1所表示的就是索引最大值。

目标是返顺序存放,那么也就意味着应该将第一个元素(索引是0)与最后一个元素(索引是9)进行互换,将第二个元素(索引是1)和倒数第二个元素(索引是8)进行互换......以此类推,直到中间位置也就是索引是4和5进行交换的时候。这个时候的话,4这个截止条件与n的关系是什么呢?4=(n-1)/2,这里不是数学,因为n是整型变量,所以等号右边出来的只会是整数部分。这就是m=(n-1)/2的来源了,也就是设定交换的最后一个元素的索引号。这里你可以拿奇数个元素去试试,也是同样成立的。

根据交换过程,那么也就相应的有了:

i=0时,j=9=10-1-0

i=1时,j=8=10-1-1

...

也就是j=n-1-i这个式子的由来。


知道了左边,其实右边和左边是对应的,只不过左边用的数组的方式,右边使用的指针的方式。

注意右边的i,j声明的是整型的指针,也就是他只能指向一个整型的变量。题目中输入*x就是相当于给定数组头部的位置索引,所以i=x就是相当于让i这个指针指向数组第一个元素。数组就是一系列整型数字连续顺序存储的结果,所以i+1表示的就是i这个元素的下一个元素,也就是数组的第二个元素,因此j=x+n-1表示i这个指针指向到数组第n个元素,也就是数组的末尾了,此时i,j和前面不一样的,是都不再表示数组的索引号,而是都是指向某个数组元素的指针了。

这里还声明了一个p指针,移动了m位,m和上一个定义没有区别,就是找到中间位置和开头位置相差多少个元素,于是p=x+m也就是让p这个指针指向数组中间的元素。

‘拾’ 一些c语言题求详解

2.A(d的类型不变)
3.B(\t a \017 b c)
4.C(取整7/3=2)
6.C(%d对应int型a,%lf对应doublr型b)
7.D(一般会输出0)
8.D(注意scanf要等CR才生效,而getchar不等待CR)