大家好,欢迎来到IT知识分享网。
一、什么是程序
- 程序(program)是一个精确说明如何进行计算的指令(instruction)序列。
- 人和计算机交换信息所用的语言,称为计算机语言。
程序 = 算法 + 数据结构
#include<stdio.h> int main( ) { char p[] = "Hello world!"; printf("%s\n",p); return 0; }
1.自然语言和形式语言
- 什么是自然语言?
- 什么是形式语言?
两者区别和联系:
歧义性
冗余性
与字面意思的一致性
2.软件的形成
- 软件的形成
- 程序员(programmer)编写程序源代码(Source Code)
- 编译器(Compiler)把源代码转化为可被计算机理解的机器代码(Machine Code)
- 并把计算机代码以可以执行文件(Executable File)的形式保存在磁盘上
程序 = 文档 = 软件
1)求1~100的和
#include<stdio.h> int main( ) { int total = 0; int i; for(i = 1; i <= 100; i++) { total = total + 1; } printf("%d\n",total); return 0; }
2)加法计算
#include<stdio.h> int main( ) { int a = 3; int b = 5; a = a + b; printf("%d %d\n", a, b,); return 0; }
3.指令的分类
- 输入:从键盘、文件或者其他设备获取数据。
- 输出:把数据显示到屏幕,或者存入一个文件,或者发送到其他设备。
- 基本运算:执行最基本的数学运算(加减乘除)和数据存取。
- 测试和分支:测试某个条件,然后根据不同的测试结果执行不同的后续指令。
- 循环:重复执行一系列操作。
scanf("%d %d", &a, &b); printf("%d %d\n", a, b);
1)交换函数
- 加一个媒介temp
#include<stdio.h> int main( ) { int a = 3; int b = 5; int temp; printf("%d %d\n", a, b); temp = a; a = b; b = temp; printf("%d %d\n", a, b); return 0; }
- 加法交换
#include<stddio.h> int main() { int a = 3; int b = 5; printf("%d %d\n", a, b); a = a + b; b = a - b; a = a - b; printf("%d %d\n", a, b); return 0; }
2)两数比较大小
- if语句
#include<stdio.h> int main( ) { int a = 3; int b = 5; printf("%d %d\n", a,b); if(a > b) printf("a 比 b 大\n"); else if(a == b) printf("a 等于 b \n"); else printf("a 比 b 小\n"); return 0; }
4.计算机基本工作过程
- 编程的本质是把复杂的任务分解成子任务,把子任务在分解成跟简单的任务,层层分解,直到最后简单得可以用以上所述指令来完成。
练习目录
1.
求
123
各位之和
求
123
各位之和
2.
请通过程序统计
1~100
中数字
9
的个数
请通过程序统计
1~100
中数字
9
的个数
3.
编程求
100
以内的素数,并打印
编程求
100
以内的素数,并打印
4.
计算
π
的值:
计算
π
的值:
根据下面的公式计算
π
的值
π
的值
请打印出一个表格来显示:用公式中的
1
项、
2
项、
3
项
…
计算出来的
π
的近似值。
1
项、
2
项、
3
项
…
计算出来的
π
的近似值。
5.
求完数
求完数
一个数如果恰好等于它的因子之和
,
这个数被称为
“
完数
”,
例如
:6=1+2+3.
请编程找出
1000
以内的完数 。
,
这个数被称为
“
完数
”,
例如
:6=1+2+3.
请编程找出
1000
以内的完数 。
6.
打印所有的水仙花数
打印所有的水仙花数
水仙花数是指一个
3
位数 ,它的每个位上的数字的
3
次幂之和等于它本身(例如:
3
位数 ,它的每个位上的数字的
3
次幂之和等于它本身(例如:
7.
神秘的三位数。
神秘的三位数。
有这样一个
3
位数,组成它的
3
个数字阶乘之和正好等于它本身。即: abc = a! + b! +c!
3
位数,组成它的
3
个数字阶乘之和正好等于它本身。即: abc = a! + b! +c!
找出所有的这样的三位数
1)求一个三位数各位数和
- 分别取余后求和
#include<stdio.h> #include<stdlib.h> int main() { int a = 123; int total; total = a % 10 + a / 10 % 10 + a /100 % 10; printf("%d\n", total); return 0; }
- 循环 迭代
#include<stdio.h> #include<stdlib.h> int main() { int a = 12345; int total = 0; while(a > 0) { total = total + a % 10; a = a / 10; } printf("%d\n", total); return 0; }
#include<stdio.h> int my_atoi(char *str) { int total = 0; int i = 0; //迭代 while(str[i] !='\0') { total = total * 10 + (str[i] - '0'); i++; } return total; } int main() { char str[5] = "123"; int total = 0; //total = (str[0] - '0') * 100 + (str [1] - '0') * 10 + (str[2] - '0') * 1; total = my_atoi(str); printf("%d\n",total); return 0; }
1)求1~100的和
#include<stdio.h> int main( ) { int total = 0; int i; for(i = 1; i <= 100; i++) { total = total + 1; } printf("%d\n",total); return 0; }
2)统计1~100中数字9的个数
#include<stdio.h> #include<stdlib.h> #include<math.h> int count_one(int n) { int total = 0; while(n > 0) { if (n % 10 == 9) { total++; //++total; } n = n / 10; } return total; } int count_9(int start,int end) { int i; int total = 0; for(i = start; i <= end; i++) { total += count_one(i); } return total; } int main() { int a =12345; int total = count_9(1, 100); printf("%d\n",total); return 0; }
3)求100以内的素数
#include<stdio.h> int is_prime(int n) { int i; if(n < 2) { return 0; } for(i = 2; i < n; i++;) { if (n % i == 0) { return 0;; } } return 1; } int main() { int i; for(i = 1; i <= 100; i++) { if(is_prime(i) == 1) { printf("%d",i); } } printf("\n"); return 0; }
3)优化
#include<stdio.h> int is_prime(int n) { int i; if(n < 2) { return 0; } for(i = 2; i < n; i++;) { if (n % i == 0) { return 0; } } return 1; } int main() { int i; for(i = 1; i <= 100; i++) { if(is_prime(i) == 1) { printf("%d",i); } } printf("\n"); teturn 0; }
4)计算π的值
π=4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 + …
#include<stdio.h> double get_pi(int n) { double total = 0.0; int flag = 1; int i; for (i = 0; i <= n; i++) { total += 1.0/(2 * i + 1) * flag; flag = -flag; } return total * 4; } int main () { int i; printf("%.15f\n",get_pi(100)); printf("%.15f\n",get_pi(10000)); printf("%.15f\n",get_pi()); printf("%.15f\n",get_pi()); return 0; }
5)求1000以内的完数
#include<stdio.h> //打印因子 void print_factor(int n) { int i; for(i = 1; i < n; i++) { if(n % i == 0) { printf("%d", i); } } printf("\n"); } int is_perfect_number(int n) { int i; int total = 0; for(i = 1; i < n; i++) { if(n % i == 0) { total += i; } } if(total == n) { return 1; }else { return 0; } } int main() { int i; printf("\n"); for(i = 1; i <= 1000; i++) { if(is_perfect_number(i) == 1) { printf("%d", i); print_factor(i); } } printf("\n"); return 0; }
6)求水仙花数
#include<stdio.h> #include<stdlib.h> int is_narcissistic_flower(int n) { int total = 0; int low; // n的值变了所以加一个 int n_o = n; while(n > 0) { low = n % 10; total += low * low * low; n = n / 10; } if(n_o == total) { return 1; }else { return 0; } } int main() { int i; for(i = 100; i < 1000; i++) { if(is_narcissistic_flower(i) == 1) { printf("%d\n", i); } } retun 0; }
7)神秘的三位数
#include<stdio.h> #include<stdlib.h> int is_mytrious(int n) { int total = 0; int n_o = n; while(n > 0) { total += factorial(n % 10); n /= 10; } if(total == n_o) { return 1; }else { return 0; } } int main() { int i; for(i = 100;i < 1000;i++) { if (is_mytrious(i) == 1) { printf("%d\n",i); } } return 0; }
5.程序调试
- 错误:
- 编译时错误;
- 运行时错误;1.野指针 2.内存越界 3.内存泄漏
- 逻辑错误和语义错误;
- 警告
警告意味着风险!
重视警告!
把每一条警告都理解,并总结出来。
问题 <?>
1.程序为什么编译后才能运行?
2.编译出来的可执行文件里面有什么?除了机器码还有什么?他们是怎么组织的?
3.#include<stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?如何实现的?
4.helloWorld程序是怎么运行起来的?操作系统是怎么装载它的?main函数之间发生了什么?main函数结束后又发生了什么?
5.如果没有操作系统,helloworld可以运行吗?
6.Helloworld程序运行时,它在内存中是什么样子的?
注:C语言的优缺点
优点:
- 程序执行效率高
- 能直接对硬件进行操作
- 语言简练,灵活,使用方便
- 可移植性较好
缺点:
- 不易学习
- 代码不容易维护
- 过于强大灵活,以至于容易产生致命Bug
注:C语言特点
- C语言是一个有结构化程序设计,具有变量作用域以及递归功能的过程式语言
- 传递参数是以值传递(Pass-by-value),也可以通过指针来传递参数(Pass-by-address)。
- 不同的变量类型可以用结构体(struct)组合在一起。
- 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
- 部份的变量类型可以转换,例如整形和字符变量。
- 通过指针(pointer),C语言可以容易的对存储器进行低级控制。
- 编译预处理(preprocessor)让C语言的编译更具有弹性。
6.程序的结构
- C程序总是从main函数开始执行,并且一定有且仅有一个主函数,主函数名必须是main。
- C语言本身不带输入输出语句,必须通过调用库函数来实现输入输出。
- 以/ …… /之间的内容是注释,不影响程序的执行,可增加程序的可读性。
- /* /* */ */
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/136960.html