C语言基础102道练习题

by admin on 2020年1月18日

整理的102道C语言基础练习题,是我们老师总结出来的,我就是改了一下排版,应该对刚刚开始学习C语言有帮助的吧,希望能够帮到其他学者,澳门新葡亰平台官网 1我也是刚刚开始学的,菜鸟一个,大家一起努力啊澳门新葡亰平台官网 2,上传的文件名命名有些问题,是102道题,不是100道sorry。。。

前一段时间疯狂的学python,也逐渐认识到了python在某些方面的局限性以及写python在某些方面对自身锻炼不足。于是重新拾起大一曾经参加过的acm,准备用C好好加强自己造轮子的能力。

入门

ACM入门可以从语言、算法、阅读能力三个方面着手。

C语言基础练习100题.pdf

大学四年中,第一年就学了C,当时觉得C语言是世界上最好的语言,用C实现了不少小功能。四年多过去,期间用过C++处理图像,用jsp写过后端,用Java写过小游戏,后来又用python爬虫,数据分析等等。

语言基础

语言基础偏指编程语言基础和其他计算机技能基础。IPCP世界总决赛使用的语言有C/C++、Java、Python2/Python3以及Kotlin。各分赛区支持的语言有所差异,但一定支持C/C++和Java。中国大学的计算机课程教授C++和Java语言。

提升编程能力需要多实践,多在计算机上实际操作。C语言自学入门推荐从《C
Primmer
Plus》开始,不必事无巨细地掌握书中的知识点,但求掌握语言框架理清思路,及时完成章节后面的思考题和练习题。C++/Java的学习可紧跟课程进度,完成课堂练习。

在计算机专业,课堂上学到的东西永远是不够的。

回过头来看看,还是觉得C最能锻炼一个人的思维能力,算法实现能力。去杭电OJ注册了一个号,从第一题开始写起,没想到第一题就浪费了很长时间。因此想着写下刷题日志,一方面激励自己,一方面也是和大家一起交流,共同进步。

算法基础

算法基础涉及数学能力以及算法知识。ACM是综合性的比赛,算法知识是重点考察的内容。

《算法导论》可能是程序人的“新华字典”。它是一本介绍算法知识的书籍,内容比较难,需要一定的数学基础。它并不是为ACM专门编写的书,但能实实在在地提升读者的算法水平。

澳门新葡亰平台官网,此外,有许多ACM选手津津乐道的优秀书籍。比如清华大学出版社的《ACM国际大学生程序设计竞赛》系列丛书,以及《算法设计与分析——以ACM大学生程序设计竞赛在线题库为例》等。它们是专为ACM比赛编写的。

我会每周写一次这方面的感悟,并把这一周所刷的题的答案公布出来,有共同志趣的朋友,可以一起研究,研究如何用最小的成本实现最美的程序。

阅读能力

IPCP的试题语言为英文,选手需要一定的英文阅读技能才能理解题目。不过不必刻意提升这方面能力,随着做题数量的增多,英语阅读能力自然慢慢增强。一般而言,比赛主办方允许选手携带字典参赛。

澳门新葡亰平台官网 3

练习

互联网为程序人提供了实实在在的便利。有许多网上测评系统可以助我们一臂之力。这些线上测评系统题目难度由浅入深,风格各有特色。不必等到掌握一门编程语言再开始在网上练习,它们题目的梯度技能满足刚刚开始学习语言的新同学。完全可以边学边玩边练习。

第一阶段的练习不妨从杭州电子科技大学的在线评测系统(HDOJ)和北京大学的在线评测系统(POJ)开始。北京大学的在线评测系统可能是中国最早的线上评测系统之一。它的网站模板是开源的,因此许多在线评测系统(包括航电OJ在内)使用的是它的模板。尽管POJ似乎已经超过两年没有举行过线上比赛了,但POJ一直是编程爱好者十分热衷的网站。HDOJ在POJ的基础上做了一些调整和改进。HDOJ不断举行赛事,刚刚举办过百度之星线上竞赛。理论上可以从任何一个OJ开始玩,但基于上面的原因我推荐从航电OJ开始玩。

可以先试着解决OJ的第一道练习,题目编号通常为1000。通过解决编号1000的题目会使你对整个OJ的流程有所了解。遇到问题不妨看看OJ的FAQ(Frequently
Asked Questions)。讨论区卧虎藏龙,时常有大神分享自己的成功代码。

看FAQ时可以了解到OJ使用的编译器和其他运行环境信息,大多数OJ使用的C语言编译器支持C99标准,也就是《C
Primer
Plus(第五版)》中介绍的C标准。(也就意味着C11标准不能使用,影响比较大的一点是:不能在for循环中的第一个语句初始化循环控制变量)

下面介绍一些OJ的黑话。AC=Accepted,程序判定为正确解答。AK=All
Killed,在比赛时限内做完所有赛题,无题可做了。线下比赛可能有学长送你小红花。PE=Presentation
Error,程序正确但是输出的格式不对。WA=Wrong
Answer,程序写得不对哦。CE=Compilation
Error,程序格式不对无法编译。TLE/MLE/OLE=Time/Memory/Ouput Limit
Exceeded,超出时间/内存/输出限制。

把航电OJ的5000道题差不多做完或者想换换OJ的时候,可以尝试在Virtual
Judge上接触更多题目。Virtual
Judge近年来逐渐流行。本质上Virtual
Judge不是一个OJ,它能够在别的OJ上抓取题目并且能让你提交自己的解答。也就是说在VJudge一个平台上你可以做到许多其他OJ平台的题目。目前VJudge支持的OJ有POJ、ZOJ、UVALive等32个OJ。

三月第三周.png

比赛

不时参加线上比赛对提升能力很有帮助。许多OJ会不定期地举办比赛,这里介绍HihoCoder,Hiho不定期举行比赛。有的赛事奖品颇丰,喜欢的同学千万不要错过。

上周六刚刚开始写,比较生疏,结果一个周末就做出了六题,还是比较水的六题,算是一个开始,也算是对acm的致敬吧。

链接

Lightyears在Github上维护了一个仓库,打算把他自己对航电OJ题目的解答放到仓库里。目前仓库还处于初始阶段,有兴趣的同学不妨看看吧。

[文] Lightyears

ID 1000

#include <stdio.h>  
int main(void)
{
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF)
        printf("%dn", a + b);
    return 0;
}

这题很简单,但是骚就骚在它题目要求了,要end of
file
。因此用scanf输入时后面必须有个是否等于EOF的判断。

ID 1001

#include <stdio.h>
int main()
{
    int n, sum, i;
    while (scanf("%d", &n) != EOF)
    {
        sum = 0;
        for (i = 0; i <= n; i++)
        {
            sum += i;
        }
        printf("%dnn", sum);
    }
    return 0;
}

ID 2000

#include <stdio.h>  
int main()
{
    char a, b, c, temp;
    while (scanf("%c%c%c", &a, &b, &c) != EOF)
    {
        getchar();//不加getchar()函数不正确  
        if (a > b)
        {
            temp = a;
            a = b;
            b = temp;
        }
        if (c <= a)
        {
            temp = c;
            c = b;
            b = temp;
            temp = b;
            b = a;
            a = temp;
        }
        else if (c > a && c < b)
        {
            temp = c;
            c = b;
            b = temp;
        }
        printf("%c %c %cn", a, b, c);
    }
    return 0;
}

这一题,前面必须加上getchar()以此来消化输入三个字符后打出的很容易忽略的空格。

ID 2001

#include <stdio.h>  
#include<math.h>
int main()
{
    double a, b, c, d;
    double e;
    while (scanf("%lf %lf %lf %lf", &a, &b, &c, &d) != EOF)
    {
        e = sqrt((c - a)*(c - a) + (d - b)*(d - b));
        printf("%.2lfn", e);
    }
    return 0;
}

ID 2002

#define PI 3.1415927
#include <stdio.h>  
int main()
{    
    double r;
    double V;
    while (scanf("%lf", &r) != EOF)
    {
        V = (4.0/3.0) * PI * r * r * r;
        printf("%.3lfn", V);
    }
    return 0;
}

这一题要注意,如用4/3得到的是1,因为系统默认3、4都是整型数字。

ID 2003

#include<stdio.h>

int main()
{
    double num;
    while (scanf("%lf", &num) != EOF)
    {
        if (num >= 0)
            printf("%.2lfn", num);
        else
            printf("%.2lfn", -num);
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图