鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[课后作业] S1E2:第一个程序 | 课后测试题及答案

    [复制链接]
发表于 2020-2-11 14:20:15 | 显示全部楼层
零基础入门学习C语言封面
《零基础入门学习C语言》
小甲鱼 著
立即购买
RE: S1E2:第一个程序 | 课后测试题及答案 [修改]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 14:37:06 | 显示全部楼层
7
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 14:39:16 | 显示全部楼层
# S1E2:第一个程序

## 测试题

0. 为什么我们说计算机其实是“二傻子”?

1. CPU 唯一认识的语言是什么语言?

2. C 语言编写的源代码转换为汇编语言的过程叫什么?

3. 编译型语言和解释型语言的本质区别是什么?

4. 在 Linux 系统上用 C 语言编译的可执行程序,是否能在 Windows 系统上执行?

5. 解释型编程语言是如何实现跨平台的?

6. 莫斯密码的原理其实是什么?

7. 视频中小甲鱼“故弄玄虚”的那段密文还原后是什么内容(中文)?
![密文](https://xxx.ilovefishc.com/forum ... 00htlkyklecl7r7.png)

## 动动手

0. 不是说一个合格的程序员需要累积 10 万行的代码量嘛!  
那么这节课的动动手环节就让大家写一个计算代码量的程序吧~  
程序要求:统计当前目录及所有子目录下,C 语言源文件的代码总行数。

Linux 和 MacOS:

```c
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>

#define MAX 256

long total;

int countLines(const char *filename);
int isCode(const char *filename);
void findAllDirs(const char *path);

int countLines(const char *filename)
{
        FILE *fp;
        int count = 0;
        int temp;

        if ((fp = fopen(filename, "r")) == NULL)
        {
                fprintf(stderr, "Can not open the file: %s\n", filename);
                return 0;
        }

        while ((temp = fgetc(fp)) != EOF)
        {
                if (temp == '\n')
                {
                        count++;
                }
        }

        fclose(fp);

        return count;
}

int isCode(const char *filename)
{
        int length;

        length = strlen(filename);

        if (!strcmp(filename + (length - 2), ".c"))
        {
                return 1;
        }
        else
        {
                return 0;
        }
}

void findAllDirs(const char *path)
{
        DIR *dp;
        struct dirent *entry;
        struct stat statbuf;

        if ((dp = opendir(path)) == NULL)
        {
                fprintf(stderr, "The path %s is wrong!\n", path);
                return;
        }

        chdir(path);
        while ((entry = readdir(dp)) != NULL)
        {
                lstat(entry->d_name, &statbuf);

                if (!strcmp(".", entry->d_name) || !strcmp("..", entry->d_name))
                        continue;

                if (S_ISDIR(statbuf.st_mode))
                {
                        findAllDirs(entry->d_name);
                }
                else
                {
                        if (isCode(entry->d_name))
                        {
                                total += countLines(entry->d_name);
                        }
                }
        }

        chdir("..");
        closedir(dp);
}

int main()
{
        char path[MAX] = ".";

        printf("计算中...\n");

        findAllDirs(path);

        printf("目前你总共写了 %ld 行代码!\n\n", total);

        return 0;
}
```

Windows:

```c

#include <io.h>
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX        256

long total;

int countLines(const char *filename);
void findAllCodes(const char *path);
void findALLFiles(const char *path);

int countLines(const char *filename)
{
        FILE *fp;
        int count = 0;
        int temp;

        if ((fp = fopen(filename, "r")) == NULL)
        {
                fprintf(stderr, "Can not open the file:%s\n", filename);
                return 0;
        }

        while ((temp = fgetc(fp)) != EOF)
        {
                if (temp == '\n')
                {
                        count++;
                }
        }

        fclose(fp);

        return count;
}

void findAllCodes(const char *path)
{
        struct _finddata_t fa;
        long handle;
        char thePath[MAX], target[MAX];

        strcpy(thePath, path);
        if((handle = _findfirst(strcat(thePath, "/*.c"), &fa)) != -1L)
        {
                do
                {
                        sprintf(target, "%s/%s", path, fa.name);
                        total += countLines(target);
                }while (_findnext(handle, &fa) == 0);
        }

        _findclose(handle);
}

void findALLDirs(const char *path)
{
        struct _finddata_t fa;
        long handle;
        char thePath[MAX];

        strcpy(thePath, path);
        if((handle = _findfirst(strcat(thePath, "/*"), &fa)) == -1L)
        {
            fprintf(stderr, "The path %s is wrong!\n",path);
            return;
        }

        do
        {
            if (!strcmp(fa.name, ".") || !strcmp(fa.name, ".."))
                continue;

            if( fa.attrib == _A_SUBDIR)
            {
                    sprintf(thePath, "%s/%s", path, fa.name);
                    findAllCodes(thePath);
                    findALLDirs(thePath);
            }
        }while (_findnext(handle, &fa) == 0);

        _findclose(handle);
}

int main()
{
        char path[MAX] = ".";

        printf("计算中...\n");

        findAllCodes(path);
        findALLDirs(path);

        printf("目前你总共写了 %ld 行代码!\n\n", total);
        system("pause");

        return 0;
}
```
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 14:43:53 | 显示全部楼层
nice
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 14:47:33 | 显示全部楼层
打卡
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 14:51:29 | 显示全部楼层
感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:09:25 | 显示全部楼层
对于C语言希望能坚持下去!yoyoyo!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 15:11:57 | 显示全部楼层
1111
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 15:32:39 | 显示全部楼层
666
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 15:50:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 16:04:04 | 显示全部楼层
I love FishC
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:10:11 | 显示全部楼层
老打错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:16:41 | 显示全部楼层
132
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 16:16:48 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 16:21:13 | 显示全部楼层
我自己打的很多错,复制了原题目也编译不对是为什么
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:29:41 | 显示全部楼层
回复
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-11 16:37:26 | 显示全部楼层
168行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:42:39 | 显示全部楼层
谢谢楼主
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 16:57:48 | 显示全部楼层
答案在哪里???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-11 17:35:50 | 显示全部楼层
本帖最后由 憨憨. 于 2020-2-11 18:59 编辑

1因为它只懂得二进制0和1
2机器语言
3编译
4编译型语言直接翻译成机器码,解释型语言转换给中间代码在发送给解释器然后在编译给cpu
5解释型语言转换给中间代码在发送给解释器然后在编译给cpu
6查看摩斯密码表
7亲们趁敌人吃饭时发起进攻
代码第一次打不对,让后复制您的对照,您的运行后显示210行。。然后我对照好的保存后显示108行。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表