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 */

浙公网安备 33010602011771号