帮忙看下这C语言有什么约瑟夫问题c语言

求大神帮忙看下这个C语言问题。_百度知道
求大神帮忙看下这个C语言问题。
stdio。横线处应填什么?# include& int i=0.h&int main(){ char str[80];# include&%c&quot,j.h&gt, system(& scanf(& gets(str); fflush(stdin);;pause&quot,&ch);
i++; while(str[i]) {
if(str[i]==ch)
for(j=i;str[j];j++)
__________________; } puts(str);)删除字符串中指定的字符
提问者采纳
str[j]=str[j+1]
strcpy(str+j,str+(j+1));为什么这个不行呢?我看到题目中有string.h以为要用到字符串处理的函数。。
前面有for循环语句,for(j=i;str[j];j++),意思就是从当前字符开始一直到字符串最后一个字符,下面的语句都要执行。如果没有这个for语句,你用strcpy(str+j,str+(j+1))是可以的(当然还要记得在原来最后一个字符的位置上改为'\0'字符),但是有这个for语句,你在拷贝的时候,每经过一个字符,你都会把字符串往前减少一个字符,实际上只需要减少下标为i的一个字符就可以了。
搞不懂为什么每经过一个字符就会减少一个。。
举个例子:原字符串:abcdefg要删除字符:c那么当i下标为2的时候,就发现这个c,然后j从2开始进行strcpy第一次,j=2的时候,把defg拷贝到了下标2,字符串变成abdefg第二次,j=3,3下标的位置现在是e,继续进行拷贝,把fg拷贝到下标3,字符串变成abdfg第三次,j=4,4下标的位置现在是g,继续进行拷贝,把后面的空字符串拷贝到下标4,字符串变成abdf明白了吧?每次循环都要往前覆盖一个字符。
提问者评价
嗯嗯,明白,太感谢了!
来自团队:
其他类似问题
为您推荐:
其他3条回答
&nbspstr[j] = str[j+1]://h.jpg" esrc="pause&quot.baidu.jpg" />system(&quot://h.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.hiphotos.h&gt.baidu.)./zhidao/pic//zhidao/wh%3D600%2C800/sign=00fafab71e30e924cff23e/dcc451da81cb39dbb10f80e9d3045;要加上头文件#include &lt:///zhidao/wh%3D450%2C600/sign=aef39e876f061d957d133f3c4ec426e7/dcc451da81cb39dbb10f80e9d3045;<a href="http
用后面一个字符把前面那个踩掉,如果字串abcde去掉c,就是让de向前步进一个字符覆盖
str[j] = str[j+1]
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于网友提出的“c语言题目求助~~~大家帮忙看一下这个代码有啥错误”问题疑问,本网通过在网上对“c语言题目求助~~~大家帮忙看一下这个代码有啥错误”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。**它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。但是,它发散的很慢:前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?**请填写这个整数。注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。** #include&stdio.h&
int main()
double s=0;
for(i=1;s&15.0;i++)
printf("%ld",i);
正确结果是1835421 可我这个代码结果是1835422解决方案1:for循环是先执行循环体,然后i++,然后再判断条件是否满足。for(语句1;语句2;语句3)
循环体;相当于下面这个while语句1;
while(语句2)
}解决方案2: for(i=1;s&15.0;i++)
s+=1.0/(double)i++;
} while (s & 15.0);
解决方案3:退出循环时多加了一次,修改: #include&stdio.h&
int main()
double s=0;
for(i=1; ;i++)
if(s&15.0)
printf("%ld",i);
以上介绍了“c语言题目求助~~~大家帮忙看一下这个代码有啥错误”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/wd/594696.html
上一篇: 下一篇:21:50 提问
大家帮忙看一下这个c语言数组程序哪里有缺陷呀
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
#include&stdio.h&
int main()
int a[100],i,min,n,//min记录最小数所在的下标
scanf("%d",&n);
for(i=0;i&n;i++)/*输入n个数并保存到数组a*/
scanf("%d",&a[i]);
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */
{min=a[0];
for(i=1;i&=n-1;i++)
if(a[i]&min) {min=a[i];
index=i;}}
if(n==1) index=0;
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
printf("min=%d,位于第%d个\n",a[index],index+1);
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */
就是那个隐藏的测试用例不对,,,,应该是程序有缺陷
按赞数排序
#include&stdio.h&
int main()
int a[100],i,min,n,//min记录最小数所在的下标
printf("请输入数据个数:");
scanf("%d",&n);
}while( n&1 || n&100);
for(i=0;i&n;i++)/*输入n个数并保存到数组a*/
scanf("%d",&a[i]);
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */
for(i=1;i&=n-1;i++)
if(a[i]&min) {min=a[i]; index=i;}
if(n==1) { min=a[0]; index=0; }
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
printf("min=%d,位于第%d个\n",a[index],index+1);
我感觉错误在于不能连续测试数据。lz稍微改一下吧
首先,这编码规范。。不忍直视。其次。数组大小限定为100个就要对输入做限定。。。
#include&stdio.h&
int main()
int a[100],i,min,n,//min记录最小数所在的下标
scanf("%d",&n);
for(i=0;i&n;i++)/*输入n个数并保存到数组a*/
scanf("%d",&a[i]);
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */
index=0; //这少了一步
for(i=1;i&=n-1;i++)
if(a[i]&min) {min=a[i]; index=i;}
if(n==1) index=0;
/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
printf("min=%d,位于第%d个\n",a[index],index+1);
for(i=1;i&=n-1;i++)
if(a[i]&min) {
n!=1没有必要
代码写的规范一点啊。。好乱啊
228关注|280收录
42关注|57收录
395关注|2288收录
其他相似问题
相关参考资料麻烦帮我看看这个c语言程序有什么问题.原题:1-1/2+1/3-1/4-1/5-1/6+1/7-.前40项的和.#include #include #define N 40void main(){float x,sum=0;int i,n=1;for(i=1;i
御板御板08611
x虽然是浮点型 但是i是整形 (-1)/i 还是整形 它的值就是1或者0 这样X的值就只能是1或0了这块要改成(-1.0)/i 或者加个强制类型转换
为您推荐:
其他类似问题
扫描下载二维码谁能帮我解释一下这道c语言题目啊 不懂, 谁能帮我解释一下这道c语言题目
谁能帮我解释一下这道c语言题目啊 不懂 stryct w{};union u{}main(){uu.word=0x1234;printf(&wordvalue:础讥壁客撰九辩循菠末%04x&#92;n&,uu.word);printf(&highvalue:%02x&#92;n&,byte.high);printf(&lowvalue:%02x&#92;n&,uu.byte.low);uu.byte.low=0printf(&wordvalue:%04x&#92;n&,uu.word);} 匿名 谁能帮我解释一下这道c语言题目啊 不懂
union 共享内存段的 所以 byte 和 word 实际上指向同一个内存地址 对 uu.word==0x1234;的赋值也会对byte进行赋值,由于在内存中 高低自己是反着存的 所以 low=32 high=12结果如下wordvalue:1234highv础讥壁客撰九辩循菠末alue:12lowvalue:34wordvalue:12ff
程序有点问题stryct w改为struct w printf(&highvalue:%02x&#92;n&,byte.high);改为printf(&highvalue:%02x&#92;n&,uu.byte.high); 这个程序就是给一个地址附上值1234,然后输出这个这个值1234, 然后又按高位低位分别输出12和34最后把这个值的低位改成ff,再输出这个值12ff
这个是结构体跟共用体的关系基本上是这样的结构体是每个字节都有自己的内错空间而共用体 是所有的功用一片没存空间你现在给uu.word 赋值1234的话就是共用体整个是1234,因为整个共用体 都是在用word申请的内存,也就是4个字节,四个字节的前两个字节就是结构体所础讥壁客撰九辩循菠末占有的,也就是说low和high各占一个,打印结果是:word= 1234,high=03,low = 04,最后的那个是12ff希望对你有帮助
不是stryct w,应该是struct w;不是printf(&highvalue:%02x&#92;n&,byte.high);应该是printf(&highvalue:%02x&#92;n&,uu.byte.high);这里重点要理解union的含义,union是联合,用它定义的时候所占空间的大小是按里面联合体最大的来算的。这里w是两个字节,word是整形四个字节。所以uu占四个字节,这四个字节到底什么意思,如果看成word那就是和普通int一样。如果看成w那就是两个字节了,而这两个字节又有low和high两个部分。
输入一个八进制数,输出带符号八进制数,分别输出高位和底位。关键是联合体每次只能存储一个值。byte.high是不是要改成uu. byte. high。
格式这么乱,怎么看啊…………
热心网友

我要回帖

更多关于 老师帮忙解决生理问题 的文章

 

随机推荐