S1E2 - S1E10

S1E2:第一个程序

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,"/*.cpp"),&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;
}

0、CPU只认识0和1

1、CPU唯一认识的语言是机器语言(机器码)

2、将C语言编写的源代码转换为汇编语言的过程叫编译

3、是否有机器码生成

4、windows 和 Linux的C语言可执行文件格式不同,不能直接使用

5、解释型语言可以实现跨平台,并由解释器作为中转

6、莫斯密码可查表找到值

第一节课已完成。

 

 

S1E3 打印换行的基本操作

0、编程语言是一套规则和约定,正确输入,正确执行

2、\b是转义字符,表示退格(相当于删除键

4、在printf函数“”内使用“”需要换成\"\"

#include <stdio.h>

int main()
{
    printf("FishC.com no \"fish\"\n");
}

动手

 0、在printf函数“”内使用 \ 要换成\\,在“”内换行要用\来连接或用加一个“”表示连接,

方法一:

#include<stdio.h>

int main()
{
    printf("\n\
         @\n\
        / \\\n\
        * *\n\
        * *\n\
        * *\n\
    * * * * * * *\n\
  * * * * * * * * *\n\
* * * * * * * * * * *\n\
        * *\n\
        * *\n\
      * * * *\n\
    * * * * * *\n");

    return 0;
}

 方法二:

#include <stdio.h>

int main()
{
    printf("\n"
           "         @\n"
           "        / \\\n"
           "        * *\n"
           "        * *\n"
           "        * *\n"
           "      * * * *\n"
           "    * * * * * *\n"
           "  * * * * * * * *\n"
           "* * * * * * * * * *\n"
           "        * *\n"
           "        * *\n"
           "      * * * *\n"
           "    * * * * * *\n"
          );
    return 0;
}

S1E4  打印小数及左右对齐

0、程序处理的两种基本数据对象变量常量

1、变量由变量名存储单元组成。变量名用于确定目标,存储单元用于存放变量的值

2、变量名由数字下划线英文字母构成,且不能以数字开头

3、ANSI C,C99,C11定义了C语言的标准规则(语法)

动手

0、

#include <stdio.h>

int main()
{
    int a,b;
    a = 3;
    a = b;
    b = b * 2;
    printf("a = %d\n",a);
    printf("b = %d\n",b);
    
    return 0;
}

1、对于小数点后2位,用%.2来表示,后3位则用%.3f,等等。

#include <stdio.h>

int main()
{
    float r,c,s;
    
    r = 5;
    c = 2 * 3.14 * r;
    s = 3.14 * r * r;
    
    printf("圆的周长为%.2f,圆的面积为%.2f\n",c,s);
}

2、

字符可以用数字表示

%010d表示总共有10位数、用0补足10位和默认右对齐,如0000002015,%10d表示用空格补足,如      2015, %-10d和-010都表示默认左对齐,用空格补齐。

指数形式用%.2e%.2E来表示表示小数点后几位,如5.20+004E%10d表示共几位(包括指数),如5.200000+004E

#include <stdio.h>

int main()
{
    printf("打印五个字符:%c %c %c %c %c\n",70,105,115,104);
    printf("前边用 填充:%10d\n",2015);
    printf("前边用0填充:%010d\n",2015);
    printf("后边边用 填充,左对齐:%-010d\n",2015);
    printf("右对齐,保留2位:%10.2f\n",3.14);
    printf("左对齐,保留3位:%-10.3f\n",3.14);
    printf("右对齐,指数形式:%.2e\n",520000.0);
    printf("左对齐,指数形式:%.2E\n",0.00052);
  
    return 0;
}

 

 

S1E5 宏定义

0、标识符是标识变量、类型、函数和标签的名字。

1、main是一个合法的函数标识符

2、字符串是常量

3、在C语言中,转义字符'\n'一个字节

4、字符串“FishC”由'F','i','s','h','C',还有一个表示结束标志的'\0'.

5、常量等数据都有类型。

6、宏定义不会对数据进行运算,他是直接替换。

动手

0、使用宏定义替换转义字符时,要使用%c来替换。

#include <stdio.h>

#define NL '\n'

int main()
{
    printf("Line1%c",NL);
    printf("Line2%c",NL);
    
    return 0;
}

1、

#include <stdio.h>

#define PI 3.14159
#define S(r) 2 * PI * r
#define C(r) PI * r * r

int main()
{
    int r = 5;
    printf("半径为%d的圆,面积是:%.2f,周长是:%.2f\n",r,S(r),C(r));
    
    return 0;
}

/*               20230411                     */

 

 

2、

#include <stdio.h>

#define FQ 3.7
#define JL 7
#define XQ 1.3
#define KXC 8
#define YANGC 2.4
#define YOUC 9
#define HG 6.3
#define BLB 0.5

int main()
{
    printf("小明需要支付%.2f\n",2 * FQ + KXC + YOUC);
    printf("小红需要支付%.2f\n",3 * XQ + 0.5 * YANGC + 5 * HG);
    printf("小甲鱼需要支付%.2f\n",10 * HG + 20 * BLB);
    
    return 0;
}

 

 

S1E6 sizeof运算符的使用

0、short <= int <= long  <= longlong

1、C标准规范存储空间最小的是_Bool,只存储0和1.

2、sizeof是一个运算符

3、约定1字节=8比特位,1Byte = 8bit,实际由实现环境决定

4、char字符型规定占一个字节的空间,其他类型只规定相对范围

5、sizeof运算符后边如果跟一个类型,需要用括号,如sizeof(int),其他可以不加,如sizeof(222),sizeof 222,sizeof i.

6、unsigned int(无符号整数) 只存放整数,所以可以存放比int(有符号整数)更大的整数。

7、计算机只识别明确的指令

动手

0、

#include <stdio.h>
#include <math.h>

int main()
{
    int result;
    
    result = pow(1,2) + pow(2,3) + pow(3,4) + pow(4,5) + pow(5,6);
    
    printf("计算的结果是:%d\n",result);
    
    return 0;
}

 1、

#include <stdio.h>
#include <math.h>

int main()
{
    unsigned long long sum = 0,temp = 0,weight = 0;
    int i;
    
    for (i = 0;i < 64;i++)
    {
        temp = pow(2,i);
        sum = sum + temp;
    }
    
    weight = sum / 25000;
    
    printf("舍罕王应该给与达依尔%.llu粒麦子!\n",sum);
    printf("如果每25000粒麦子为1kg,那么应该给%.llu公斤麦子!\n",weight);
    
    return 0;
}

/*               20230412                     */

S1E7  二进制(原码、反码和补码)与十六进制

0、CPU能读懂的最小单位是比特位

1、

2、整数的原码、反码、补码均相同,负数的补码是负数的5、反码末位加一。

负数的原码:正数的原码的符号位由0变为1(0正1负)

负数的反码:对负数的原码除符号位每位取反;

负数的补码:对负数的反码末位加1;

数值为相同,绝对值相同

0、%hhd是按整数操作输出char或unsigned char,输出为整数值。

#include<stdio.h>

int main()
{
    signed char i;
    unsigned char j;
    
    i = 255;
    j = 255;
    
    printf("signed char %hhd\n",i);
    printf("unsigned char %hhu\n",j);
    
    return 0;
}

1、

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double result;
    
    printf("请输入一个整数:");
    scanf("%d",&i);
    
    result = pow(i,5);
    printf("%d的5次方是:%.2f\n",i,result);
    
    return 0;
}

 

 

 S1E8  ASCII字符表

二进制
十进制
十六进制
缩写
含义
0000 0000 0 00 NUL 空字符
0000 0001 1 01 SOH 标题开始
0000 0010 2 02 STX 文本开始
0000 0011 3 03 ETX 文本结束
0000 0100 4 04 EOT 传输结束
0000 0101 5 05 ENQ 请求
0000 0110 6 06 ACK 确认响应
0000 0111 7 07 BEL 响铃
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平制表符
0000 1010 10 0A LF 换行符
0000 1011 11 0B VT 垂直制表符
0000 1100 12 0C FF 换页符
0000 1101 13 0D CR 回车键
0000 1110 14 0E SO 取消变换(Shift out)
0000 1111 15 0F SI 启动变换(Shift in)
0001 0000 16 10 DLE 数据链路转义
0001 0001 17 11 DC1 设备控制一(XON 激活软件速度控制)
0001 0010 18 12 DC2 设备控制二
0001 0011 19 13 DC3 设备控制三(XOFF 停用软件速度控制)
0001 0100 20 14 DC4 设备控制四
0001 0101 21 15 NAK 拒绝接收
0001 0110 22 16 SYN 同步空闲
0001 0111 23 17 ETB 区块传输结束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 连接介质中断
0001 1010 26 1A SUB 替换
0001 1011 27 1B ESC 退出键
0001 1100 28 1C FS 文件分区符
0001 1101 29 1D GS 组群分隔符
0001 1110 30 1E RS 记录分隔符
0001 1111 31 1F US 单元分隔符
         
0111 1111 127 7F DEL 删除
二进制
十进制
十六进制
字符
 
二进制
十进制
十六进制
字符
0010 0000 32 20
空格
  0101 0000 80 50
P
0010 0001 33 21
!
  0101 0001 81 51
Q
0010 0010 34 22
"
  0101 0010 82 52
R
0010 0011 35 23
#
  0101 0011 83 53
S
0010 0100 36 24
$
  0101 0100 84 54
T
0010 0101 37 25
%
  0101 0101 85 55
U
0010 0110 38 26
&
  0101 0110 86 56
V
0010 0111 39 27
'
  0101 0111 87 57
W
0010 1000 40 28
(
  0101 1000 88 58
X
0010 1001 41 29
)
  0101 1001 89 59
Y
0010 1010 42 2A
*
  0101 1010 90 5A
Z
0010 1011 43 2B
+
  0101 1011 91 5B
[
0010 1100 44 2C
,
  0101 1100 92 5C
\
0010 1101 45 2D
-
  0101 1101 93 5D
0010 1110 46 2E
.
  0101 1110 94 5E
^
0010 1111 47 2F
/
  0101 1111 95 5F
_
0011 0000 48 30
0
  0110 0000 96 60
`
0011 0001 49 31
1
  0110 0001 97 61
a
0011 0010 50 32
2
  0110 0010 98 62
b
0011 0011 51 33
3
  0110 0011 99 63
c
0011 0100 52 34
4
  0110 0100 100 64
d
0011 0101 53 35
5
  0110 0101 101 65
e
0011 0110 54 36
6
  0110 0110 102 66
f
0011 0111 55 37
7
  0110 0111 103 67
g
0011 1000 56 38
8
  0110 1000 104 68
h
0011 1001 57 39
9
  0110 1001 105 69
i
0011 1010 58 3A
:
  0110 1010 106 6A
j
0011 1011 59 3B
;
  0110 1011 107 6B
k
0011 1100 60 3C
<
  0110 1100 108 6C
l
0011 1101 61 3D
=
  0110 1101 109 6D
m
0011 1110 62 3E
>
  0110 1110 110 6E
n
0011 1111 63 3F
?
  0110 1111 111 6F
o
0100 0000 64 40
@
  0111 0000 112 70
p
0100 0001 65 41
A
  0111 0001 113 71
q
0100 0010 66 42
B
  0111 0010 114 72
r
0100 0011 67 43
C
  0111 0011 115 73
s
0100 0100 68 44
D
  0111 0100 116 74
t
0100 0101 69 45
E
  0111 0101 117 75
u
0100 0110 70 46
F
  0111 0110 118 76
v
0100 0111 71 47
G
  0111 0111 119 77
w
0100 1000 72 48
H
  0111 1000 120 78
x
0100 1001 73 49
I
  0111 1001 121 79
y
0100 1010 74 4A
J
  0111 1010 122 7A
z
0100 1011 75 4B
K
  0111 1011 123 7B
{
0100 1100 76 4C
L
  0111 1100 124 7C
|
0100 1101 77 4D
M
  0111 1101 125 7D
}
0100 1110 78 4E
N
  0111 1110 126 7E
~
0100 1111 79 4F
O
         

 

0、C语言中,最小的整数类型是字符类型(存整数)。

1、标准ASCII字符表使用7位二进制数来表示所有的大写和小写字母,数字0至1,标点符号 ,以及美式英语中的特殊控制字符。

2、数字0~9对应的十六进制的ASCII字符表值分别是30~39

3、大写字母对应的ASCII值第6位置由0变1,则变成小写字母,反之亦然。例如0100 0001(A),0110 0001(a),适用于所有大小写字母

4、字符串最后需要加一个‘\0'字符表示结束。

 /*               20230415                     */

5、“FishC”在内存中的存储形式是'F','i','s','h','C','\0','\0','\0','\0','\0'。

6、char name[5] = {'F','i','s','h','C'};

用name[4]来表示'C'

0、

#include <stdio.h>

int main()
{
    float HSD,SSD;
    
    prinf("请输入现在的华氏度:");
    scanf("%d",&HSD);
    
    SSD = (HSD - 32) * 5 / 9;
    printf("现在的摄氏度是:%d\n",SSD);
    
    return 0;
}

1、

#include <stdio.h>

int main()
{
    char name[100];
    float hight,hIn;
    float weight,wIb;
    
    printf("请输入您的姓名:");
    scanf("%s",name);
    printf("请输入您的身高:");
    scanf("%f",&hight);
    printf("请输入您的体重:");
    scanf("%f",&weight);
    hIn = hight  / 2.54;
    wIb = 2.2046 * weight;
    
    printf("========== 正在为你转换 ==========\n");
    printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n",name,hIn,wIb);
    
    return 0;
}

 /*               20230417                     */

 

S1E9 

4、求余运算符两边要求均为整型。

5、除数会舍弃小数

动手

0、

#include <stdio.h>
#include <math.h>

int main()
{
    float price,area,yir,mir;
    float interest,loan;
    float ave_repay,down_payment;
    float total_price,total_repay;
    int ratio,time;
    
    printf("请输入单价(元/平方:)");
    scanf("%f",&price);
    printf("请输入面积:");
    scanf("%f",&area);
    printf("请输入按揭层数:");
    scanf("%d",&ratio);
    printf("请输入按揭年数:");
    scanf("%d",&time);
    printf("请输入当前基准年利率:");
    scanf("%f",&yir);
    
    total_price = price * area;
    down_payment = total_price * (1 - 0.1 * ratio);
    loan = total_price * ratio / 10;
    mir = yir / 100 / 12;
    ave_repay = loan * mir * pow((1 + mir),(time * 12)) / (pow((1 + mir),(time * 12)) - 1);
    total_repay = 12 * time * ave_repay;
    interest = total_repay - loan;
    
    printf("========== 报告结果 ===========\n");
    printf("房款总额:%.2f元\n", total_price);
    printf("首期付款:%.2f元\n", down_payment);
    printf("贷款总额:%.2f元\n", loan);
    printf("还款总额:%.2f元\n", total_repay);
    printf("支付利息:%.2f元\n", interest);
    printf("月均还款:%.2f元\n", ave_repay);
    
    return 0;
}

1、

#include <stdio.h>
#include <math.h>

int main()
{
    float p1,p2_0,p2_1,p3;
    p1 = 10000 * (1 + 0.0275 * 5);
    p2_0 = 10000 * (1 + 0.0275 * 3);
    p2_1 =  p2_0 * (1 + 0.0225 * 2);
    p3 = 10000 * pow((1 + 0.0175) , 5);
    
    printf("一次性定期存5年的本息和为:%f",p1);
    printf("现存3年定期,到期后在存两年定期的本息和为:%f",p2_1);
    printf("存一年定期,到期后本息再存一年定期,连续存5次的本息和为:%f",p3);
    
    return 0;
}

  /*               20230421                    */

S1E10 

0、

char *name = "FishC"char name[] = {'F','i','s','h','C'}不等价,只与char name[] = {'F','i','s','h','C','\0'}等价

1、char字符类型只占1个字节,8位二进制,所以当数值超出时,会舍去多余的进位。如400(10) == 110010000(2)舍去9进位 == 10010000 == 128 + 16 == 144(10)

2、赋值运算符结合性自右向左的,如a = b = c = 3;拆分成三条独立语句为,c = 3;b = c;a = b;(有顺序排列)

3、一个表达式一定产生一个值,它可以放在任何一个需要值的地方,如if括号内;而语句是一段可执行的代码,可以理解为一个行为,语句不一定有值

4、我们无法给一个常数赋值,即1 = b;这种写法是错误的。

5、短路求值a > b && c < d,当a < b 时,不执行后续操作

注:疑问?如果后续是个语句,是不是可以不执行该语句。

6、运算符优先级:*、/ > +、- > ==、>=、<= > &&、|| > =

  /*               20230425                    */

7、count != 0 && sum / count 这是使用逻辑与(&&)sum / count 的除数不为0。可以写成count != 0 && result = sum / count,这样就不会出现count = 0 的result。

8、闰年:(num % 4 == 0 && num % 100 != 0)|| (num % 400 == 0)

  /*               20230426                    */

posted @ 2023-04-11 16:58  海晨  阅读(21)  评论(0)    收藏  举报