C语言编程。第一 题求改错及分析 第二题求编程

1.从键盘输入一个字符串并存入字符数组中,分别统计其中的数字字符、字母、空格和其它字符的个数。
下面是我的代码
#include<stdio.h>
#include<string.h>
main()
{
char a[80]="";
int i=0,k=0,m=0,n=0;
gets(a);
while(a[i]=='\0')
i++;
while((a[i]>0&&a[i]<48)||(a[i]>92&&a[i]<96)||(a[i]>57&&a[i]<65))
k++;
while(a[i]>'0'&&a[i]<'9')
m++;
while((a[i]>'a'&&a[i]<'z')||(a[i]>'A'&&a[i]<'Z'))
n++;
printf("数字字符有%d个\n字母字符有%d个\n空格字符有%d个\n其它字符有%d个\n",m,n,i,k);

}

2.在整型数组M中存放12个非 0 整数,使用scanf( )函数将12个整数从键盘读入到M中,并要求M中有正数和负数,编写程序,将数组M中的所有正数存放在数组的前面,负数存放在数组的后面,并显示数组M中的各个元素的值。
第二题我是用的排大小的方法来做的。但我想能不能不排大小就能把正负分出来然后正数在前面负数在后面呢?求编程

第1个回答  2011-12-12
一:
#include<stdio.h>
#include<string.h>
void main()
{
char a[80]="";
int i=0,k=0,m=0,n=0;
gets(a);
for( int p=0; p<strlen(a); p++) // 帮你修改了一下,用一个for语句实现循环,一个个校验
{ //这里定义了变量p,因为你已经定义了全局变量i 了;
if(a[p]==32)//空格的ASIC码是32
{
i++ ;
}
else if(a[p]>='0'&&a[p]<='9' )
{
m++ ;
}
else if((a[p]>=97&&a[p]<=123)||(a[p]>=65&&a[p]<=96))
{
n++ ;
}
else
{
k++ ;
}
}
printf("数字字符有%d个\n字母字符有%d个\n空格字符有%d个\n其它字符有%d个\n",m,n,i,k);
}
第二题很简单自己想想吧追问

第二题我不会,我的构思跟楼下是一样的。但我不知道怎么把已经分出来正负的数赋给新的数组。。。我想想吧

追答

。。。帮你写了
#include
void main()
{
int M[12] ;
int i=0 ;
for( i=0; i0))
{
int temp = M[j] ;
M[j] = M[j+1] ;
M[j+1] = temp ;
}
}
}

for( i=0; i<12; i++)
{
printf("%d", M[i]) ;
if(i<11)
{
printf(",") ;
}
}
}//你看看,不懂再问

参考资料:

本回答被提问者采纳
第2个回答  2011-12-15
while(a[i]=='\0')
i++;//你这个命令错误!应这样理解啊a[i]!='\0'是一个条件
while((a[i]>0&&a[i]<48)||(a[i]>92&&a[i]<96)||(a[i]>57&&a[i]<65))
k++;//这句功能应实现空格 应为while(a[i]==" ")k++;
while(a[i]>'0'&&a[i]<'9')
m++;这句对啦
while((a[i]>'a'&&a[i]<'z')||(a[i]>'A'&&a[i]<'Z'))
n++;
//这句也对
改进:
#include<stdio.h>

main()
{
char a;
int i=0,k=0,m=0,n=0;

while((a=getchar())!='\n')

{if(a==' ')
k++;
else if(a>='0'&&a<='9')
m++;
else if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))
n++;
else i++;}
printf("数字字符有%d个\n字母字符有%d个\n空格字符有%d个\n其它字符有%d个\n",m,n,k,i);

}
其他办法我也想不出啦,不好意思
第3个回答  2011-12-12
第二道题输出的时候只是说让你把正数放在数组的前头,负数放在数组的后面,只用比较数组的内容和零的大小就可以了啊,为什么要排列大小呢??你可以引进两个别的数组,一个数组中放正数,另一个放负数,然后把两个数组再赋给原数组不就可以了!
第4个回答  2011-12-11
其实你可以不用这么写的 只遍历一遍就可以了 节省开销 while 下面 用if 判断就可以了

相关了解……

你可能感兴趣的内容

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