c语言循环FOR循环有LEN不用加STRE

一道c语言编程题,关于实现不同进制数间转换_百度知道
一道c语言编程题,关于实现不同进制数间转换
请输入要转换的数;&&string[i]&=&#39,甚至任意进制转换为十进制;)。主函数可以将待转换的多个16进制或其它进制数据以数组方式传入转换函数;i++)
printf(&void Function(char str[]):nsystem=8;str[i]:nsystem=16;
switch(nsystem)
case 2;&&string[i]&
if(str[i+1];i&n&quot!='#include &quot:nsystem=2;i++)
string[j]=str[i];
default:十六进制&quot,转换函数处理完毕后回传主函数;
} printf(&
case 3,并于主函数中实现结果打印;
k++,number[i]);选择你要转换的进制; 'i&a'%d &quot,k=0,但通过传入参数不同;int nsystem=0:&#92,执行时会出错;='
else if(string[i]&='F&#39.h&,j; Function(str););)
string[i]-=87;
number[k]=transform(string);,使之既能对二进制数做转换。#include &
else if (string[i]&=' &#39.h&i++) {
if(string[i]&9&#39,c;&&string[i]&lt,又能对16进制做转换; printf(& len=strlen(string);)
string[i]-=48.h&len:八进制 3;}void Function(char str[100]){ int i=0; long num=0;A&#39:\
j++;='
scanf(&quot。下面是我的程序;='f'int number[100];void main(){ char str[100]; for(int i=0; int i=0;
for(; }}long transform(char string[]){
gets(str)!=',谁能帮忙改改;
0&#39:二进制 2;
char string[100]; while(1) {
j=0;%d&=k;n1,len-i-1)*string[i];#include & c=getchar(); for (i=0,&nsystem);long transform(char string[]);
num=num+pow( } return(num);)
i++:break程序调用同一个转换函数;)
string[i]-=55
提问者采纳
k++; } /9'将n进制转换为十进制 /z&#39,或者把你在main函数里最后的for循环中条件改为i&\而停止读入时,0'Z';
scanf(&/str[i]; } //0&#39:\&#47,请用空格分开;
str--,应让str退一步以指回向'8'\
} &#47,num);= '9' while((i &0') || (str[i] == SPACE))) {
i++;; long num=0;0'#include &定义字符串最大长度#define SPACE 'f'for
printf(&\ for(i=0.h&quot!= 16)) {
printf(&/ &#39,k=0,你等等哈~~ 先帮你改错吧; gets(str); /void Function(char str[]);A'选择你要转换的进制;= '如果上面*p是遇到'
continue:\ while(1) {
j=0;=k: &} / printf(&n&
j++;;= '%d& }}long transform(char string[]){ int i,则str自减一也只是退一步重新指向了空格符;) || (str[i] == SPACE))) { /}代码优化;
case 2;int nsystem=0; = &#39,请重新输入.h&#define MAX_STR_LEN 100 &#47,正在贴代码;
if(str[i];
for(;= ')
string[i]-=55!= 2) && ( printf(&f'
getchar(); /\0'如果到了字符串末尾;转换后为; for (i=0;if
if((nsystem == 8) && ((str[i] &gt,j;}void Function(char str[100]){ int i=0;这些为十六进制合法字符
i++;遇到空格或'); p =\
} /0'); ') && (str[i] &void main(){ char str[100]!= &#39,注意是分号结尾
*++p = *str++; Function(str);) && (str[i] &= 'n1;//#include &lt!= 8) && (= '= &#39:&#92:二进制 2.h&break,这样strlen函数才能正确统计出其长度
number[k]=transform(string),nsystem);&&string[i]&/) temp[i] = temp[i]-'请输入要转换的数(如有多个; c=getchar();/) && (str[i] &\a'
else if(temp[i] &\/ MAX_STR_LEN-2) && ((str[i] = getchar()) :\='0'将输入缓冲区设置为空
i = 0;%d&quot,c:十六进制&/if
if((nsystem == 16) && ((str[i] & int i=0;a'n&吃掉输入产生的回车符 while((此为将二;)) {
if((nsystem == 2) && ((str[i] &
else if(string[i]&k
\) {/while printf(& return 0;
case 3;='/n&i++) /a'&#47:\%d &quot:(加了一些防错处理功能)#include &lt,&nsystem); &#47,str),请重新输入;;由于加了输入防错处理;0&#39,char str[]) { &#47,如果是遇到空格而停止读入的;= '
getchar(); transform() || (str[i] == SPACE))) {
scanf(& && str[i];&&string[i]&; i = 0;;&#47:八进制 3;while str[i] = 'transformint main() { int i!\&#47,所以temp[i]肯定是合法字符
if(temp[i] &lt,&nsystem);0&#39。
i++;) temp[i] -= ' while((*p = *str) ; } return(num);您输入的%d进制数不合法:
&quot!=');A'0'if
printf(& &#39,nsystem,对后续操作不影响
num = 0; /;;&#92,MAX_STR_LEN-1),temp[MAX_STR_LEN];;定义空格符void transform(n进制 char str[MAX_STR_LEN];/
setbuf(+10; len=strlen(string); printf(&&#47!='F'while
*p = &#39!=' i &0'A'i&lt,&nsystem); printf(&= '%d&//\/while} /请选择要转换的进制(输入2或8或16),*p才停止读入
*++p = *str++;='
for(i = 0;\) || (str[i] &;9'
switch(nsystem)
case 1;时;='
else if(temp[i] &跳过前导空格,);= '0'
num += pow(nsystem:nsystem=2;&#47,再帮你优化优化哈~#include &) {
while((*p = *str++) == SPACE);请输入要转换的数;; scanf(& char *p;
p = temp,应退出循环!= '0&#39:nsystem=16;='i&
char string[100],length-1-i) * temp[i],不要忘了字符串结束标志是&#39,不超过%d个字符);= 'i++) /) temp[i] = temp[i]-'
else if (string[i]&gt!= &#39:0'0&#39,len-i-1)*string[i];1'很多编译器如vc不支持c语言中for括号里定义变量;; /
} printf(&quot,number[i])!='
num=num+pow()
string[i]-=87;);循环条件很重要;您输入的进制错误;);i++)
printf(&&#92我已经好了,十六进制转换为十进制程序;
;/)) { /#include &
length = strlen(temp);) && (str[i] & } /&#47,八;n&#39.h&)
string[i]-=48; && str[i+1];/&&string[i]& i++) { &#47.h& /long transform(char string[]),因为如果是跳出循环的话k不该自增的;\n&n&
string[j]=str[i];F'n&string!= SPACE) && (*int number[100];stdio,NULL);/&#47,为兼容性考虑;= '0&#39,应先在上面定义i {
if(string[i]&) && (str[i] &);#include &) || (str[i] & printf(&
string[j] = '+10:nsystem=8;='k++ 应该放在这;复制字符串时不要忘了加上结束标志.h&quot
提问者评价
厉害,这问题困扰我一晚上了。
来自团队:
其他类似问题
为您推荐:
您可能关注的推广
c语言编程的相关知识
其他1条回答
暂时发现4处错误(其实都是同一类型的)。我都在错误的地方改正了,并且用//进行了注释。问题就在于,同ASCII码的97对应'a'一样,ASCII码的0对应'\0',也就是说字符串的末尾应该写成\0
#include &stdio.h&
#include &string.h&
#include &math.h&
long transform(char string[]);
void Function(char str[]);
int nsystem=0,k=0;
int number[100];
void main()
char str[100],c;
printf(&选择你要转换的进制:\n1:二进制 2:八进制 3:十六进制&);
scanf(&%d&,&nsystem);
switch(nsystem)
case 1:nsystem=2;
case 2:nsystem=8;
case 3:nsystem=16;
printf(&请输入要转换的数:\n&);
c=getchar();
运行后得到的结果不正确啊,是算法出了问题吗?
重新理解你的程序以后,我发现我之前的理解有偏差了。你是想通过空格把输入的多个数分开对吧?改正后如下,这个Function是基于你的程序改的,因此我之前的回答你就无视好了。改动了3个地方。还是字符串的结尾'\0'的问题。输入&1&,输出&8 14 5 &void Function(char str[100]){ int i=0,j;
char string[100]; while(1) {
for(j=0;str[i]!=' ' && str[i]!='\0';i++,j++)//跳出循环的条件为:当前读到空格,或者读到字符串的末尾'\0'
string[j]=str[i];
string[j]='\0';//当上一个for循环退出后,string没有末尾的'\0'标记,因此手动加上
number[k]=transform(string);
if(str[i]!= '\0')//如果str的当前位置不是字符串的结尾,则继续
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言中,什么时候使用while语句比使用for语句更加适合?_百度知道
C语言中,什么时候使用while语句比使用for语句更加适合?
逻辑值 while(逻辑值){
循环体,同样。。,也就是说。。。,其实这两个就是一样的;}for(初始值 。哎,不一定要放在循环体里面。那么就从内存使用情况来考虑了。。。总之。我也不知道怎么解释,变量的个数一样:如果它们定义的变量类型一样;改变变量的值)
循环体,亦可以放在循环体里面,它们工作原理是一样的,“改变变量的值“不一定放在括号里,没多大区别。。那么。。。;}其实。。比如。。,在for中,while的逻辑值可以是一个”逗号表达式“。,可以让变量的改变放到逗号表达式中
其他类似问题
为您推荐:
其他9条回答
需要满足一个条件的时候,不用多使用一个变量自加,while好使一点,浪费空间,当然for循环也可以不要变量。for(,弄个死循环;
一般经验是当你的循环条件有多个(或很复杂),条件不是整数,或循环变量步长不为固定值时char*char*while(*++p!='\0') {
*++a=*p;}若用for:char*char*unsigned int len = strlen(p);for(i=0;i&i++){
a[i]=p[i];}
能用for循环处理的问题,一定可以用while循环代替,但反过来不一定成立。 当你无法预先判断循环执行的次数时,就只能使用while循环,例如对任意一个文本文件进行阅读处理时,你想用循环每次读入一行,你预先无法确定文件有多少行,你是无法使用for循环的,只能用while循环读到文件结束标志为止。
while语句和for语句的执行形式是一样的,只不过for语句给人的直观效果好,易读性强,而且使用很方便。while循环一般用于给出了继续执行循环的条件,就是()的,但是只给出循环次数就不可以了,而for循环就可以,所以建议用for循环
事实上,C语言中的While与For在流程是完全相同的,不过人们习惯在未知循环次数时用While,而已知时用For比如:1-100
For(i=1;i&=100;i++)
用While就是
i=1;while(i&=100) i++;
所执行的函数至少执行一次的时候,还有判断条件需要函数复杂执行的时候。但是编译链接后在CPU里面执行效果是一样的。
先执行循环体,然后判断,就使用while语句比较适合
不知道次数时不需要i变量时
一样的吧。
while的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c语言 循环移位_百度知道
c语言 循环移位
!。n<0左移!,右移4位, n为位移的位数!。如n=4。会的人请帮帮忙 ,左移3位,n=-3。调用函数为,n>0右移,v为要循环移位的数,n):move(v. 编一个函数move实现左右循环移位6
tt = buffer[0];j&abs(shift);
buffer[len-1] =
buffer[0] =
for(j=len-1;
int len=sizeof(buffer);i++)
if(shift&j--)
buffer[j] = buffer[j-1];
if(shift==0) return? 字符数组可以参考下面这个void CircleShift(int buffer[];i&j++)
buffer[j] = buffer[j+1];0)
tt = buffer[len-1];j&lt,j,int shift){0,tt你要移动什么类型的?还是,字符数组嘛
其他类似问题
为您推荐:
其他1条回答
return n&&gt, int v){ if( v & } else return n&(-v);&ltint move( int n
您可能关注的推广
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个简单的c语言问题_百度知道
一个简单的c语言问题
h& return 0;17行 int i#include&}谁能帮我解释下11行--17行这段是什么意思; int len = strlen(src); while(j--;i++)
printf(&\ char *dest = (char*)malloc(len+1);#include&i&#include& dest = NULL;
//
char *b =; for(i=0;);int main(void){ char *src = &&#47,为什么这么写; printf(&11行 char *a = &src[len-1]; j =n&!=0)
*b++ = *a--.h&%c& free(dest);
/abcdef&quot,dest[i]); int j.h&gt
详细点,一定要详细点
提问者采纳
char *dest = (char*)malloc( len+1)!=0)
*b++ = *a--;
循环len次 while(j--;
用J计数循环 j = len,赋值;
把dest的第一个的地址赋值给b
这句是给dest申请空间char *a = &src[len-1]你其实是想做字符串逆序输出对吧;
把src数组的最后一个地址赋值给a char *b = dest,最后一个赋给第一个,stc最后一个前移;
提问者评价
谢谢,芦荟_老王 同学,说的比较容易理解
其他类似问题
&#47,继续拷贝*b++ = *a--,而src有len个字符。char *dest = (char*)malloc(len+1); a = a-1;因为要将src倒着拷贝到dest 里面;等同于 *b = *a;a 指向src字符串最后一个字符的地址 char *b =/&#47!=0 等于 j=j-1;
&#47,也就是说指向刚申请的地址区域的首地址
/ j--;/申请一个长度为len+1的连续地址并且dest指向这个地址区域的头地址,所以总共要拷贝len次while(j--!=0)
&#47,每次拷贝1个字符,这相当于创建了一个 [length+1]的数组char *a = &src[len-1];/j =/ b指向dest的地址;
/ b = b+1!=0 就是说我每循环(拷贝一次)剩下的工作还要拷贝j-1次,如果当前还剩余的次数不为0这个程序的目的是将输入的字符串倒过来用另一个字符串存储并且输出
来自团队:
为您推荐:
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言中出现问题:local function definitions are illegal_百度知道
C语言中出现问题:local function definitions are illegal
&& j&&#47.data[k];0'}bool Replace(SqString &S;/len2.len ) {
if(S;i;;/新串的长度
int i=Index(S;//0&#39.data[j];MaxSize)///
j++;}SqS将新串赋值给S做循环替换
return S;mn&&#47.len=len2;
j=0;main&#39!='/将不用替换的后部分存入数组q
q[n]=p[b],char cstr[])/ char r[]=&j&替换子串
int b=i+len1;l&lt,j变为0
if(j&将字符串常量赋给串s.len-i-len1+1].len=i;;#define MaxSize 20typedef struct&#47,T),M;len2;stdlib,SqString &T;m&lt.}void main(){
SqString S,SqString &R)/sp指向最后的最后
char *sp=cstr: local function definitions are illegal error C2601;de&&#47,T);求T在S中的位置{
int i=0;i为返回长度
return true.len-T;&#47.m++)
q[m]=R.Replace&#39,j; && i& while(i&.len+S;l1++)
for(int l=0;/存储新串的数组
for(int j=i+len1;/aaaadeaaaadecccde&&#47./
&#47.data[i]==T;回溯开始新一趟 ;sp不指向空
S;&#47,j=0;i+R.len.len.data[i]=*sp,q!=-1)
int len2=R: 'n++)&#47,T: local function definitions are illegal fatal error C1004;指针sp指向字符串的首地址
while((*sp);
if((*sp)=='S;
for(int l1=0.data[m-i];/l++)
S;T;将原串S的所有子串T都替换为插入串R{
int len1=T;/
}/ char s[]=&&#47.data[l]=q[l1]; ;/
q=StrAssign(T; ; j=StrAssign(R;
else数组q存储着新串
S,T;/}int Index(SqString S;&#47: unexpected end of file foundES;
p[j]=S;bool StrAssign(SqString &S;/\l1&
for(int n=i+R;
i=i-j+1;k&)/=T,R);字符相等则依次往后移
i++;分配一个Sqstring存储单词和单词长度{
char data[MaxSize];返回T在S中的位置
return -1;&#47为什么出现error C2601,r);将不用替换的后部分存入数组p
for(int k=0,即生成一个值等于cstr的串s{
int i=0;/
while(Index(S,t); char t[]=&/
for(int m=i;k++)
q[k]=S,R;*sp赋给s的第i个字符
i++;调用子串定位函数
char *p=new char[S,s);///n&len2;sp++.#include & p=StrAssign(S;&#47,SqString T)&#47.len)
return i-T,k: i变为此趟比较之前原i的后一位.data[j])&#47./临时数组
char *q=new char[len2];/
k=Replace(S;
len.h&gt: '&#92
提问者采纳
括号有没有问题。请采纳看看是不是程序大括号和小括号不成对的问题,你这括号太多,看得我眼花缭乱,你和其他部分连起来看看
提问者评价
谢谢 , 已经发现少一个大括号
相关专业回答
C语言 local function definitions are illegal是:本地函数定义不合法的意思!
造成这种问题的原因通常是因为函数的嵌套定义造成的。
C语言不允许函数嵌套定义,也就是在函数里面定义函数。
通常造成函数嵌套定义的原因有两种:
①直接在函数里面定义另一个函数(新手最常犯的错误,在main函数里面定义函数)。如:
#include &stdio.h&int main(){
其他类似问题
为您推荐:
local的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言循环语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信