| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 788 人关注过本帖
标题:帮忙看两个C语言代码,错哪了啊?
只看楼主 加入收藏
ljcbc
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:15
专家分:9
注 册:2010-4-21
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:9 
帮忙看两个C语言代码,错哪了啊?
谢谢各位帮忙啊!
这是第一个,组建时就提示错误!

程序代码:
//输入一行字符,分别统计其中英文字母,空格,数字和其它字符的个数
#include<stdio.h>
void main()
{
        char c;
        int letters=0,space=0,digit=0,other=0;
        printf("请输入一行字符:\n");
        while((c=getchar())!='\n')
        {
                if(c>='a'&&c<='z'||c>='A'&&c<='Z')
                        letters++;
                else if(c==' ')
                        space++;
                else if(c>='0'&&C<='9')
                        digit++;
                else
                        other++;
        }
        printf("该行字符中,有英文字母%d个、空格%d个、数字%d个、其他字符%d个。",letters,space,digit,other);
}


这是第二个,问题在代码中说明了!位于代码快结束处
程序代码:
//*****************************************************//
//有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出
//该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”!
//*****************************************************//
#include<stdio.h>
#include<stdlib.h>
#define N 15
void main()
{
        int a[N]={45,678,34,67,233,65,93,12,69,49,36,84,91,47,75},top,bott,mid,loca,i,j,temp,m,flag=1;
        char c='Y';
        printf("已知数组中数据从高到低排序为:\n\n");
        for(i=0;i<=(N-1);i++)                     //对数据进行降序排序存放在原数组中
        {
                for(j=0;j<(N-1)-i;j++)
                {
                        if(a[(N-1)-j-1]<a[(N-1)-j])
                        {temp=a[(N-1)-j-1];a[(N-1)-j-1]=a[(N-1)-j];a[(N-1)-j]=temp;}
                }
                printf("%d ",a[i]);
        }
        printf("\n");            
//******************以下输入一个数并进行查找**********************//
        while(flag)
        {
                printf("请输入您要查找的数m:");
                scanf("%d",&m);
                top=0;
                bott=N-1;
                if(m<a[N-1]||m>a[0])
                        loca=-1;
                for(i=0;i<(N-1)/2;i++)
                {
                        mid=(bott+top)/2;
                        if(m==a[mid])
                                {loca=mid;i=(N-1)/2;}
                        else if(m<a[mid])
                                top=mid+1;
                        else bott=mid-1;
                }
                if(loca==-1) printf("查找无此数!\n");
                        else printf("该数位于数组中第%d号位置\n",loca+1);
//****为什么****为什么****运行时为什么不暂停让用户输入'c'的值??****为什么****为什么****
                printf("是否继续,按'Y'继续,按'N'结束!\n");
                scanf("%c",&c);
//****为什么****为什么****运行时为什么不暂停让用户输入'c'的值??****为什么****为什么****
                if(c=='N'||c=='n')
                        flag=0;
        }
        system("PAUSE");        /*让程序暂停,用前得加#include<stdlib.h>*/
} 


[ 本帖最后由 ljcbc 于 2010-4-21 14:04 编辑 ]
搜索更多相关主题的帖子: C语言 代码 
2010-04-21 13:51
小伊
Rank: 2
等 级:论坛游民
帖 子:27
专家分:33
注 册:2010-4-17
收藏
得分:3 
lz,你第一个代码else if(c>='0'&&C<='9')
  c你是用的大写
2010-04-21 14:25
yousuosi202
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-17
收藏
得分:0 
char c只能记一个字母吧。好像得用字符数组定义字符串。
得用循环提取每一个字符。然后才能用你的那个while
2010-04-21 14:50
hanzhenddd
Rank: 5Rank: 5
等 级:职业侠客
帖 子:90
专家分:361
注 册:2010-3-4
收藏
得分:7 
#include<stdio.h>
void main()
{
        char c;
        int letters=0,space=0,digit=0,other=0;
        printf("请输入一行 字符:\n");
        while((c=getchar())!='\n')
        {
                if(c>='a'&&c<='z'||c>='A'&&c<='Z')
                        letters++;
                else if(c==' ')
                        space++;
                else if(c>='0'&&C<='9')    c应该用小写!
                        digit++;
                else
                        other++;
        }
        printf("该行字符 中,有英文字母%d个、空格%d个、数字%d个、其他字符%d个。",letters,space,digit,other);

============================================

#include<stdio.h>
#include<stdlib.h>
#define N 15
void main()
{
        int a[N]={45,678,34,67,233,65,93,12,69,49,36,84,91,47,75},top,bott,mid,loca = 0,i,j,temp,m,flag=1;  //loca 赋初值
        char c='Y';
        int min;            // 增加min变量
        printf("已知数组中数据从高到低排序为:\n\n");

        for (i = 0; i < N-1; i++)                //重写排序
        {
            min = i;
            for (j = i+1; j < N; j++)
            {
                if (a[j] < a[min])
                    min = j;
            }
            if (min != i)
            {
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
            }
            printf ("%4d", a[i]);
        }
        printf ("\n");
//******************以下输入一个数并进行查找**********************//
        while(flag)
        {
                printf("请输入您要查找的数m:");
                scanf("%d",&m);
                printf ("m= %d",m);
                top=0;
                bott=N-1;
                if(m>a[N-1]||m<a[0])
                        loca=-1;

                mid = (bott+top)/2;

                while (1)                    //重写折半
                {
                    if (m < a[mid])
                        mid--;

                    if (m > a[mid])
                        mid++;
                    if (m == a[mid])
                        {
                            loca = mid;
                            break;
                        }

                 }
                if(loca==-1) printf("查找无此数!\n");
                        else printf("该数位于数组中第%d号位置\n",loca+1);
//****为什么****为什么****运行时为什么不暂停让用户输入'c'的值??****为什么****为什么****
                printf("是否继续,按'Y'继续,按'N'结束!\n");
                scanf("%c",&c);
//****为什么****为什么****运行时为什么不暂停让用户输入'c'的值??****为什么****为什么****
                if(c=='N'||c=='n')
                        flag=0;
        }
        system("PAUSE");        /*让程序暂停,用前得加#include<stdlib.h>*/
}


-----------------

此程序漏洞百出。。改不剩改。。思路混乱。。你就凑合用吧。。 早知道这么麻烦重新给你写个算了!~~~~ 目前只能查找正确查找数组内的数据。。。其他数据则死循环。。建议用 函数调用的方法来写!!~

2010-04-21 14:52
ljcbc
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:15
专家分:9
注 册:2010-4-21
收藏
得分:0 
回复 4楼 hanzhenddd
谢谢,我现在刚接触C语言才两星期,好多都不会!
我刚用了你改过的代码,好像如果没有找到的数程序就暂停不动了,还有我自己那代码好像我测试没有出现死循环,不知道你是说的哪啊,那确认是否的问题你那也还是一样没变化!
2010-04-21 15:41
yousuosi202
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2010-4-17
收藏
得分:0 
楼主加油,我改了好多也没运行出结果。
字符串以‘\0‘结。
第一个程序中!="\n"看不懂。
2010-04-21 15:54
hanzhenddd
Rank: 5Rank: 5
等 级:职业侠客
帖 子:90
专家分:361
注 册:2010-3-4
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 15

void sort (int a[], int len)                //选择排序
{
    int i,  j, min,  temp;
     for (i = 0; i < len; i++)
        {
            min = i;
            for (j = i+1; j < len; j++)
            {
                if (a[j] < a[min])
                    min = j;
            }
            if (min != i)
            {
                temp = a[i];
                a[i] = a[min];
                a[min] = temp;
            }
            printf ("%4d", a[i]);
        }
}

int bisearch (int a[], int len, int num)        //折半查找
{
    int high=len-1, low=0, mid;

    if (num > a[len-1] || num < a[0])
            return -1;

    while(high>low)
    {
        mid=(high+low)/2;
        if(num > a[mid])
            low = mid+1;
        else if(num < a[mid])
            high = mid;
        else return mid;
    }
    return -1;

}
int  main(int argc, char *argv[])
{
        int a[N]={45,678,34,67,233,65,93,12,69,49,36,84,91,47,75};
        int m, status;

        printf("已知数组中数据从低到高排序为:\n");
        sort(a, N);
        printf ("\n");

        do
        {
            printf("请输入您要查找的数m:");
            scanf("%d",&m);
            if ((status = bisearch (a, N, m))== -1)
                    printf ("the number is non-existent!\n");
            else
                    printf ("在数组中的位置是%d\n", status+1);
            printf ("按 ctrl+c 退出!\n");
        }while (getchar() != EOF);                //按ctrl+c 退出循环!

        return 0;

}


=============================
运行结果
已知数组中数据从低到高排序为:
  12  34  36  45  47  49  65  67  69  75  84  91  93 233 678
请输入您要查找的数m:35
the number is non-existent!
按 ctrl+c 退出!
请输入您要查找的数m:36
在数组中的位置是3
按 ctrl+c 退出!
请输入您要查找的数m:

   按照这个程序区运行吧。。我测试过的。。没什么问题!~~


[ 本帖最后由 hanzhenddd 于 2010-4-21 16:54 编辑 ]
2010-04-21 16:50
ljcbc
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:15
专家分:9
注 册:2010-4-21
收藏
得分:0 
回复 7楼 hanzhenddd
谢谢啊,你用了参数传递吧,我现在还有点看不懂,那章节还没看
刚我运行了下,查找最后一个数678时结果错误。
还有我有的时候同一个代码,CTRL+f7后为什么有时F7成功,有时F7时1 error(s), 0 warning(s)?
2010-04-21 18:00
ljcbc
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:15
专家分:9
注 册:2010-4-21
收藏
得分:0 
回复 6楼 yousuosi202
我现在也刚自学才两星期,不知道我这么理解是不是对的。我在写时就是这么理解后用上的
\n   是C语言里的转义字符,编译系统在遇到字符"\",就接着往后找,它和后面的n一起作为一个特殊字符处理,
\n就是一个换行的意思
2010-04-21 18:06
jack2106
Rank: 2
等 级:论坛游民
帖 子:89
专家分:19
注 册:2009-3-7
收藏
得分:0 
printf("是否继续,按'Y'继续,按'N'结束!\n");
fflush(stdin);  //加上这句,意思是清楚缓存,scanf每次都是从缓存读出,由于你前面输入太多,可能到这读出的就不是y和n了。
scanf("%c",&c);

比梦想更伟大的是实现梦想的行动力!
2010-04-21 19:07
快速回复:帮忙看两个C语言代码,错哪了啊?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031223 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved