写一下作业:一开始写的是C,写完后跑起来没问题,把这几个还是化成带test的“四不像”了,自己看着舒服
#define _CRT_SECURE_NO_WARNINGS
#include <bits\stdc++.h>
using namespace std;
void test01()
{
// 1.给一个不多于15位的正整数,要求:
// ①求出它是几位数;
// ②分别输出每一位数字;(分别获取个位 十位 百位 千位 打印输出)
// ③按逆序输出各位数字,例如原数123,应输出321。
long long num;
printf("请输入一个不多于15位的正整数:");
scanf("%lld", &num);
// 求出它是几位数
int digit = 0;
long long temp = num;
while (temp != 0) {
temp /= 10;
digit++;
}
printf("该数为%d位数。\n", digit);
// 分别输出每一位数字
printf("每一位数字分别为:\n");
for (int i = digit - 1; i >= 0; i--) {
int ith_digit = (int)(num / pow(10, i)) % 10;
printf("%d ", ith_digit);
}
printf("\n");
// 按逆序输出各位数字
printf("按逆序输出各位数字为:\n");
while (num != 0) {
printf("%lld", num % 10);
num /= 10;
}
}
void test02()
{
//2.求1!+2!+3!+4!+...+20!
long long factorials_SUM = 0;
for (int i = 1; i <= 20; i++)
{
long long temp = 1;
for (int j = 1; j <= i; j++) {
temp *= j;
}
factorials_SUM += temp;
}
printf("1!+2!+3!+4!+...+20!的值为:%lld", factorials_SUM);
}
void test03()
{
//3.输入两个正整数m和n,求其最大公约数和最小公倍数
printf("输入两个正整数m和n,请注意m需大于n:\n");
int m, n, z;
scanf("%d %d", &m, &n);
printf("\n");
z = m % n;
int M = m, N = n;
while (z != 0) //辗转相除法求最大公约数
{
m = n; //将上一个除数赋值为被除数
n = z; //将上一个余数赋值为除数
z = m % n; //开始取余
}
printf("m和n的最大公约数为:%d\n", n);
//m*n/最小公约数得最小公倍数
printf("m和n的最小公倍数为:%d\n", M * N / n);
}
void test04()
{
//求Sn=a+aa+aaa+aaaa+...+aaaaaa(n位数 每位皆为a), a和n均由键盘输入
long long fun(int n, int a);
int a, n;
printf("请输入a和n的值:");
scanf("%d %d", &a, &n);
long long result = fun(n, a);
printf("Sn=a+aa+aaa+aaaa+...+aaaaaa(n位数 每位皆为a)的值为:%lld", result);
}
int main()
{
test01();
system("pause");
system("cls");
test02();
system("pause");
system("cls");
test03();
system("pause");
system("cls");
test04();
system("pause");
system("cls");
return 0;
}
long long fun(int n, int a)
{
long long temp = 0;
int num = 0;
for (int i = 0; i < n; i++)
{
num = num * 10 + a;
temp += num;
}
return temp;
}
C语言的编译链接过程
在C/C++中:
*.c/*.cpp 源文件(文本)
*.h 头文件(文本)
*.i 预编译文件(文本)
*.s 汇编文件
*.o/*.obj 二进制目标文件
*.exe 可执行文件
C语言的编译链接过程:
预编译阶段
1)删除所有的#define 并展开所有的宏定义;
2)处理所有的条件预编译指令,#if #ifdef #endif 等;
3)处理#include预编译指令,将被包括的文件插入到该预编译指令的位置;
4)删除所有的注释;
5)添加行号和文件名标识,以便于编译器产生调试用的符号信息及编译时产生编译错误和警告时显示行号;
6)保留所有的#pragma编译器指令,因为编译器需要使用它们。
(关于预处理命令使用的文章:
预处理命令使用详解----#if、#endif、#undef、#ifdef、#else、#elif-CSDN博客)
(关于#pragma指令的文章:
编译阶段
词法分析、语法分析、语义分析、代码优化,汇总符号。
汇编阶段
将汇编指令翻译成二进制格式,生成各个section,生成符号表。
链接阶段
1)合并各个section,调整section的起始位移和段大小,合并符号表,进行符号解析,给符号分配虚拟地址。
2)符号重定位。
总线
总线的定义
连接计算机各部件之间或各计算机直接的一束公共信息线,它是计算机中传送信息代码的公共途径。
特点
同一组总线在同一时刻只能接受一个发送源,否则会发生冲突。信息的发送则可以同时发送给多个或多个目的地。
总线类型分类
数据总线(Data Bus):在CPU与RAM之间来回传送需要处理或是需要储存的数据。
地址总线(Address Bus):用来指定在RAM(Random Access Memory)之中储存的数据的地址。
控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备。
其中的数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus),也称为系统总线,即通常意义上所说的总线。
sizeof关键字
#include<stdio.h
//sizeof 关键字 计算变量或数据类型所占的字节个数
int main()
{
printf("char size: %d\n", sizeof(char));
printf("short size: %d\n", sizeof(short));
printf("int size: %d\n", sizeof(int));
printf("long int size: %d\n", sizeof(long int));
printf("long long size: %d\n", sizeof(long long));
printf("float size: %d\n", sizeof(float));
printf("double size: %d\n", sizeof(double));
printf("long double size: %d\n", sizeof(long double));
printf("bool size: %d\n", sizeof(bool));
return 0;
}
字节(byte) 1个字节8位二进制构成
变量的作用域(可见性)
双开网页走开了一会,刚写的3k8百多字忽然没了,历史版本里面也找不到,这第二次的bug了,懒得再写一份了,笔记结束吧(气),明天写点关于调试的笔记单独发。
笔记时间24/1/30