78 1234
发新话题
打印

[TIPS]C学习笔记 发少量谭浩强C程序设计SE课后题答案

统计字符个数
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>

int file_exists(char *filename);  

int main( void )
{
    char ch, source[80];
    int  index;
    long count[127];
    FILE *fp;

    fprintf(stderr, "\nEnter source file name: ");
    gets(source);


    if (!file_exists(source))
    {
        fprintf(stderr, "\n%s does not exist.\n", source);
        exit(1);
    }
    if ((fp = fopen(source, "rb")) == NULL)
    {
        fprintf(stderr, "\nError opening %s.\n", source);
        exit(1);
    }
    for (index = 31; index < 127 ; index++)
        count[index] = 0;

    while ( 1 )
    {
        ch = fgetc(fp);
        if (feof(fp))
            break;
        if (ch > 31 && ch < 127)
            count[ch]++;  //关键的统计过程
    }

    printf("\nChar\t\tCount\n");
    for (index = 32; index < 127 ; index++)
    printf("[%c]\t%d\n", index, count[index]);

    fclose(fp);
    return(0);
}

int file_exists(char *filename)
{
    FILE *fp;
    if ((fp = fopen(filename, "r")) == NULL)
        return 0;
    else
    {
        fclose(fp);
        return 1;
    }
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

为了考试 真不得不关注细节
复制内容到剪贴板
代码:
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char f, l, m[80];

    printf("Input first name:");
    scanf("%c", &f);
    fflush(stdin);
    printf("Input last name:");
    scanf("%c", &l);
    fflush(stdin);
    printf("Input middle name:");
    scanf("%s", m);
    fflush(stdin);
    printf("%c. %c.%s", toupper(f), toupper(l), m);

    return 0;
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

我修改的来源
http://www.cnhacker.com/bbs/read ... page=1&toread=1
复制内容到剪贴板
代码:
#include <stdio.h>

void seqsearch(int p[]);  //直接查抄函数原型
void binsearch(int p[]);  //折半查找函数原型
void bubblesort(int r[]); //起泡无敌风火轮

void menu(void);  //菜单

int ch = 0;  //用全局变量要多加小心 但是这里适合

void menu(void)  //菜单打印
{
    printf("1.seqsearch()\n");
    printf("2.binsearch()\n");
    printf("3.exit()\n");
    printf("please select the method: ");
}

int main(void)
{
    int i = 0, j = 1;
    int a[10];  //用来存放数字的10个元素的数组

    for(i = 0; i < 10; i ++)
      {
          printf("please input the No.%d data: ", i+1);
          scanf("%d", &a[i]);  //依次放入相应的数组元素
      }
    while(j)
    {
            menu();
        scanf("%d", &ch);  //读入菜单选择结果
        switch(ch)
        {
            case 1:
                seqsearch(a);  //是1则调用直接查找函数
                break;
            case 2:
                binsearch(a);  //是2则调用折半查找函数
                break;
            case 3:
                j = 0;  //是3则退出
                break;
            default:
                printf("Error! No %d for select!", ch);  //这里break就是多此一举
        }
        printf("\n");  //晕 还挺注意美观的
    }
    return 0;  //主函数完成 符合C99 表扬
}

void seqsearch(int p[])  //直接查找函数
{
    int i = 0, data = 0;
    printf("please input find data:");  //输入要找的数字
    scanf("%d", &data);  //放到data的内存空间

    while(data != p[i] && i < 10)  //开始一个一个的找
      {
        i ++;
      }
    if(i >= 10)  //如果等于n那就没了
        printf("The data is not found!\n");
    else  //出此以外 那么打印
        printf("the %d position is %d\n", data, i+1);
}

void binsearch(int p[])  //折半法
{
    int data, low = 0, high = 10, mid, find = 0;

    bubblesort(p);  //风火轮排序

    for(data = 0; data < 10; data ++)
        printf("%d ", p[data]);  //循环打印排序后的数组 恐怕不行
      printf("\n");
    printf("please input find data: ");  //输入要找的数字
    scanf("%d", &data);
    while(low <= high && !find)  //如果
    {
        mid = (low + high)/2;
        if(data < p[mid])
            high = mid - 1;
        else if(data > p[mid])
            low = mid + 1;
        else
            find = 1;
    }
    if(!find)  //如果是前面条件导致退出 find必然为0
        printf("the data is not found!\n");
    else  //否则就找到了
        printf("the %d position is %d\n", data, mid+1);
}

void bubblesort(int r[])  //排序程序
{
    int i, j, temp;  //局部变量

    for(j = 0; j < 9; j ++)  //排序
    {
        for(i = 0; i < 9; i ++)
        {
            if(r[i] > r[i + 1])
            {
                temp = r[i];  //交换
                r[i] = r[i + 1];
                r[i + 1] = temp;
            }

        }
    }
   
}
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

 78 1234
发新话题