标签 代码段 下的文章

C 猜数字讲讲输入输出

题目:

用两分搜索策略来猜数字(1-100),比如程序最初猜50,让其询问用户该猜测是大还是小,如果猜测值小,那么下一次猜测值为50-100的中值。

两分法查找的思路+练习输入输出,为了作为一个游戏增强一下卖萌性所以……还是先来看看源码吧

- 阅读剩余部分 -

C 关于递归

经过一道杨辉三角的题,总算差不多知道了关于递归的几个问题。

  1. 递归里怎么看return
  2. 为什么说递归效率低,能不用就不用

方便阅读期间,我们直接在这里再次贴出代码:

#include <stdio.h>

int Yang(int row, int col)
{
    int len = row;
    if (row == 1 || col == 1 || col == len)
        return 1;
    if (col > len)
        return 0;
    return Yang(row - 1, col - 1) + Yang(row - 1, col);
}

int main(void)
{
    int row, i;

    scanf("%d", &row);

    for (i = 1; i <= row; ++i)
        printf("%d ", Yang(row, i));
    printf("\n");

    return 0;
}

- 阅读剩余部分 -

C 分解素因数

比如 输入120,输出120 = 2 2 2 3 5

当然结果还是没有完全按照这个来输出,基本思路是实现了的。
可是最终我用的是递归,递归么……咳咳

#include <stdio.h>

int Prime(int num);

int main(void)
{
    int num, array[50];

    printf("请输入一个数: ");
    scanf("%d", &num);
    printf("%d = ", num);
    Prime(num);

    return 0;
}

int Prime(int num)
{
    int i;

    for (i = 2; i <= num; i++)
        if (num % i == 0) {
            printf("% d", i);
            return (Prime(num / i));
        }
}

- 阅读剩余部分 -

C 关于素数的两道题和相关算法

这道题目有点意思。

1.如果一个数是素数,则指出是素数,否则写出因数。
2.输入一个整数,显示所有小于等于该数的素数。

首先明确什么是素数再说,实际上概念我忘得差不多了:

質數,又称素数,指在大於1的自然数中,除了1和此整数自身外,無法被其他自然数整除的数(也可定義為只有1和本身两个因数的数)。

- 阅读剩余部分 -

C 一个程序说说scanf()判断

一道实例引起了关于scanf()的一点特性的思考:

#include <stdio.h>

int main(void)
{
    long num;
    long sum = 0L;
    int status;

    printf("Please enter an integer to be summed. ");
    printf("(q to quit): ");
    status = scanf("%ld", &num);
    while (status == 1)
    {
        sum = sum + num;
        printf("Please enter next integer (q to quit):");
        status = scanf("%ld", &num);
    }
    printf("Those integers sum to %ld.\n", sum);
    return 0;
}

这里用到了:

    status = scanf("%ld", &num);
    while (status == 1)

很明显赋值是给num的,那么status拿来何用?看起来似乎如果输入字符与格式符号不符(不能用%ld说明符读取),就会返回0,符合则返回1,这样就可以判断输入的是否是指定的格式了。

C printf()和scanf()的*修饰符

关于printf()scanf()有个神奇的*修饰符,他和通配其实没什么关系,而且printfscanf的作用不一样,所以一个个来看吧。

#include <stdio.h>

int main(void)
{
    unsigned width, precision;
    int number = 256;
    double weight = 242.5;

    printf("What field width?\n");
    scanf("%d", &width);
    printf("The number is: %*d: \n", width, number);
    printf("Now enter a width and a precision: \n");
    scanf("%d %d", &width, &precision);
    printf("Weight = %*.*f\n", width, precision, weight);
    return 0;
}

- 阅读剩余部分 -

C 不用与或改一个循环语句 小解枚举型变量

题目:

for (i = 0;i < lim - 1 && (c = getchar()) != '\n' && c != EOF; ++i)
    s[i] = c;
不用&&和||的条件下编写一个与上面的for循环语句等价的循环语句

题目看着不难,我当时就想着用whileif的结合就OK了吧,结果思路方向错了,我想先ifwhile可是这样就跳过了两个条件的重复利用,先whileif才是正解,正好答案中还有枚举型的出现,就码来研究了一下。

- 阅读剩余部分 -

C 将字符串s转换为相应的整数型

将字符串s(实际上是数字)转换为相应的整数型。

来看一下这个:

int atoi(char s[])
{
    int i, n;

    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
        n = 10 * n + (s[i] - '0');

    return n;
}

刚开始的时候没看懂为什么n = 10 * n + (s[i] - '0');,然后就试着运行了一下,发现确实,如果输入56的话,输出就是56(但肯定改变了类型)

虽然还没有学到数组那个章节,可是根据前面所说的,字符串其实是字符分开储存成数组(最后有\0[当然可以忽略NULL]),他字符一格格储存的,换句话说s[0] = 5; s[1] = 6;差不多类似于这种,然后就好理解了。

关于'0'可见:http://codesky.me/archives/c-variable-const-type.wind

C 编写函数统计字符串长度

这个函数貌似挺能让人接受的OTZ……功能与<string.h>里的strlen()功能一模一样

int strlen(char s[])
{
    int i;

    i = 0;
    while (s[i] != '\0')
        ++i;
    return i;
}

这种类型的代码我们已经屡见不鲜了吧