翁凯C语言

C语言是古老而长青的编程语言,它具备了现代程序设计的基础要求,它的语法是很多其他编程语言的基础,在系统程序、嵌入式系统等领域依然是无可替代的编程语言,在各类编程语言排行榜上常年占据前两名的位置。 本课程是零基础的编程入门课,是后续的操作系统、编译原理、体系结构等课程的基石

1. 程序设计与C语言

编程语言就是用来描述我们要计算机如何做事情的语言。

1.1. 编程语言和计算机

计算机里的CPU可以直接运行人类编写的程序吗?为什么说编程语言不是和计算机交谈的语言?

不可以,计算机只可以读懂二进制语言,人类编写的语言需经过程序翻译成计算机语言,计算机才可以运行。

1.2. 编译执行与解释执行

编译:借助一个程序,就像一个翻译,把程序翻译成计算机真正能懂的语言—机器语言—写的程序,然后这个机器语言写的程序就能直接执行了。

解释:借助一个程序,程序能试图理解程序,按照要求执行。

有的编程语言,源代码经过编译后形成目标代码,但是这样的目标代码不能直接在CPU上执行,而是需要由一个仿真器程序来解释执行。这样的执行方式称为解释执行。

语言本身没有解释/编译之分,我们不能说它是编译型语言或者解释型语言,只是编译或者解释是我们常用的方式。如Java是需要编译的,但是没有直接编译成机器语言,而是编译成字节码,然后在Java虚拟机上用解释的方式执行字节码。

1.3. C语言

编程语言排名: https://www.tiobe.com/tiobe-index//

1.3.1. 介绍

C语言在工业界有重要的地位,在很多领域无可替代,几乎所有和硬件打交道的地方都得要用C语言。

现代的编程语言在语法上的差异很小,几乎都是C-like语言

C语言是伴随着Unix一起起来的,作为一个有着40多年历史的语言,它是当代很多新兴语言的基础参考体系,但是它也无可避免地带着1970年代的时代烙印。今天的编程语言,基本上都是一家主持的,标准统一,编译运行环境单纯。而C语言只有所谓的标准,每个实现C语言编译器和运行库的厂家都在往里面加入自己的方言。

1.3.2. 版本

1989年ANSI发布了一个标准——ANSI C

1990年ISO接受了ANSI的标准——C89

C的标准在1995年和1999年两次更新——C95和C99

所有当代编译器支持C99

1.3.3. 编译软件

在线开发环境:https://clin.icourse163.org/

Windows:Dev C++ 5.11Dev C++ 5.10、Code::Blocks

macOS:Xcode、Sublime Text

1.3.4. GCC

听到有人说他学的是Visual C,有人学的是Turbo C,不是我们学的什么Dev C,是他们的比我们的高级吗?还有GCC到底是什么?

不是,GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。 GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC是一种编译器,visual C也是一种编译器上面编译运行的C语言。Turbo C,Dev C等都分别指的是在不同的编译器上运行的C语言,其本质是相同的,但具体的语法规则会有细微的不同。都是不同的c语言的编译器而已,没有更高级。

2. 计算

2.1. 变量定义

变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个的不同的名字。

标识符的构造原则是只能由字母,数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字不可以用来做为标识符。

2.2. 变量初始化

<类型名称> <变量名称> = <初始值>;

int price = 0;

定义了一个变量,变量的名字是price,类型是int,初始值是0。

这里的”=”是一个赋值运算符,表示将“=”右边的值赋给左边的变量。

跟数学不同,数学中a=b表示关系,a和b值一样,而在程序设计中,a=b表示要求计算机做一个动作:将b赋值给a。关系是静态的,而动作是动态的。在数学中,a=b等价,而在程序设计中,两者意思完全相反。

2.3. QA

  • 给定:int a,b; scanf(“%d %d”, &a, &b); 则以下哪些输入方式是正确的?

    A. 1 2

    B. 1,2

    C. 1(回车)2

    D. 1、2

【AC】

3. 数组运算

4. 指针与字符串

5. 编程练习

5.1. 水仙花数

N位正整数,它的每个位的数字的N次幂之和等于它本身。例如:153=$1^3$+$5^3$+$3^3$,求所有N位水仙花数

输入

3

输出

153

370

371

407

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
#include<math.h>
int main(){
int n;
//3
scanf("%d",&n);
//划定范围
int first = 1;
int i = 1;
while(i<n){
first *= 10;
i++;
}
i = first;
first*=10;

//100 - 999
while(i<first){
int sum = i;
int t = i;
int ans = 0;

//每个位相加
do{
ans+=pow(t%10,n);
t/=10;
}while(t!=0);
//判断结果
if(sum==ans){
printf("%d\n",ans);
}
i++;
}
return 0;
}

5.2. 打印九九口诀表

1
2
3
4
5
6
7
8
9
1*1=1   
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

要求对任意给定的1位正整数N,输出从1*1N*N的部分口诀表。等号右边数字占4位,左对齐。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
打印九九口诀表
*/
#include<cstdio>
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
int ans = i*j;
printf("%d*%d=%d", j,i,ans);

if(ans<10){
printf(" ");
}
else{
printf(" ");
}
}
printf("\n");
}
return 0;
}

5.3. 前N项和

多项式前N项和,每一项分子是前一项分子分母之和,分母是前一项的分子

2/1+3/2+5/3+8/5…

输入

20

输出

32.66

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<cstdio>
int main(){
int n;
scanf("%d",&n);
double sum = 0.0;
int dividend = 2;
int divisor = 1;
for (int i = 0; i < n; ++i)
{
sum+=1.0*dividend/divisor;
int temp = dividend;
dividend+=divisor;
divisor = temp;
}
printf("%.2f\n",sum);
return 0;
}
本文结束  感谢您的阅读
  • 本文作者: Wang Ting
  • 本文链接: /zh-CN/2018/05/01/翁凯C语言/
  • 发布时间: 2018-05-01 15:14
  • 更新时间: 2023-04-15 16:18
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!