《C语言程序设计浙大》读书笔记

  • 求阶乘的时候 可以专门设置一个函数fact(n)
  • 固定用const, 比如 const int maxn = 35;
  • 考虑测试点时考虑全面,处理sample外,还有最大最小值,0,奇数偶数,有效范围两端的数据之类的。
  • 字符型常量 char a = ‘a’, '9’之类的
  • ch = getchar() 可以从键盘输入一个字符
  • putchar(ch) 输出存放在变量ch中的字符,只能输出一个字符
  • goto语句: goto out;…out:(跳到out所在位置)
  • 绝对值: fabs(double n) abs(int n)
  • numerator 分子 denumerator 分母
  • 小套路:临时变量temp
  • prime 素数(只能被1和自身整除的正整数,1不是prime 2是素数)
  • 猜数游戏需要随机产生1个数
 #include<stdlib.h>
 #include<time.h>
 srand(time(0));
 int mynumber = rand()%100+1  //计算机随机产生1个1——100之间的被猜数
 
  • void f(void) 表示函数不接受任何参数

  • void f() 表示函数参数未知,不表示无参数

  • 每个函数都有自己的变量空间,参数也位于这个独立空间中,和其他函数无关

  • 写程序要先写主函数,剩下的函数在主函数后面写,不过主函数前面要先申明

  • 有两段及以上差不多的代码是程序员代码质量不良的表现

  • void sum(int a, int b) void的意思就是没有,即这个函数不能用return返回任何东西,只能直接printf

  • 写代码用模块化设计,遵循模块独立原则,一个模块只能完成一个功能,模块之间只能通过参数进行调用,一个模块只有一个入口和一个出口,模块内慎用全局变量
    -判断两个浮点数相等的办法fabs(f1 - f2) < le-12

  • 无特殊需要只用double ; 0!=1;

  • sizeof(yi==一种静态运算符,给出某个类型 / 变量在内存中所占的内存数) sizeof(int) 和 sizeof(i);sizeof的结果在编译时就已经决定了,所以在sizeof内做运算无意义;

  • scanf两个数据之间有没有空格是不一样的,scanf("%d %d"),空格ASCII码为32,%d后若没有空格表示只读到整数结束为止,若有空格,读完整数还要把空格都读掉.

  • unsigned int 表示不带符号的整数,即0和正数,

  • 科学计数法:6.026*10的-27次方可以表示为 6.026E-27或者60.26e-28,602.6e-29

  • %d %o %x 分别表示int 的十进制,八进制,十六进制

printf (double)%e 以科学计数法输出
scanf (double)以小数或者指数的形式输入

字符转换 若 char c 的值是‘a’——‘z’ ; 则ch - ‘a’ + 'A’把小写字母转化为大写字母;若char c的值是‘0’ 到‘9’, 运算ch - '0’把数字字符转化为数字, 若int val 属于0到9 ,则val + ‘0’把数字转化为数字字符

  • 运算符优先级 !> 算术运算符 > 关系运算符 >&& || > ?: >赋值运算符 >逗号

  • 数组不能互相赋值,只能使用遍历

  • int search(int key, int a[], int length) 数组作为函数参数时, 往往需要用另一个参数表示数组长度传入函数参数;且不能再[]中给出数组大小

  • segmatation fault 数组越界

  • 对数组要主动初始化为0;

  • int a[][5]= {{1,2,3},{4,5,6},}//二维数组列数必须写,最后个逗号是为了补0

  • int a[] = {1,2,3,4} a的长度表示为 length = sizeof(a)

  • sizeof(a[0]) 给出的是数组单个元素大小,即a[0], 占4个字节

  • int main() 实际上是 int main(int argc, char const *argv[])

    字符串

  • char str[80] 一维字符数组用于存放字符型数据

  • 使用gets(str) 前面必须有getchar();

  • 字符串常量就是一对双引号括起来的字符序列“Happy” 由六个字符组成,前五个是有效字符,‘\0’是字符串结束符

  • char s[6] = “Happy” 等价于 char s[6] = {“Happy”} 等价于 char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};

  • 字符串必须以数组或是指针的形式访问

  • char *str = “Hello” 等价于char word[] = “Hello”;

  • 常见套路 输入一个以回车符作为结束标志的字符串

while( (str[i] = getchar()) != '\n') i ++;
 str[i] = '\0'; //将结束符存入
  • %7s 表示最多读七个
  • 字符串输入输出
 char string[8];
 scanf("%s", string);
 printf("%s", string);  
  • 在这里插入图片描述

  • 在这里插入图片描述

常用的字符串处理函数<string.h>

  • strcpy(s1, s2) 把字符串s2复制到s1,s1中内容被覆盖,要求数组s1长度足够长
  • strcat(s1, s2) 将字符串s2接到s1后面;要求数组s1长度足够长
  • strcmp(s1, s2) 若 s1 == s2 返回0 若s1 > s2 返回正数,若s1 < s2 返回负数
  • strlen(s1) 返回字符串s1的有效字符个数;

指针

  • 指针就是保存地址的变量
  • int *p,q;(p是指针,q是普通类型变量)
  • 当把一个指针作为参数时,void f(int *p) , 当调用f函数时必须交给它一个地址int i= 0; f(&i); 在函数内部可以通过这个指针访问外面的 i;
  • p指向地址,*是钥匙,*p就是地址内部的值
  • int *p = &i;
  • 最常见的错误就是定义了指针变量,却没有指向任何地址;
  • 数组名本身是一个地址即指针,数组名是一个特殊的固定地址,可以把它看做是指针常量
int *p;
int a[100];
p = a;与p = &a[0]等价//数组单元的表达变量需用&

p  = a + 1 与 p = &a[1];等价


//函数参数传递中的数组实际上也为指针

void(int a[], int len, int key)  
等价于
void(int *a, int len, int key)


//以下四种等价
int sum(int *arr, int n)
int sum(int arr[], int n)
int sum(int *, int n);
int sum(int [], int n);

//数组变量是const指针,不能赋值
int b[] 相当于 int *const b;
int *q = a;可以  而 int b[] = a;不可以

结构

  • 结构类型允许程序员把一些数据分量聚合成一个整体的数据类型(就和 int 一样),一个结构中包含的每个数据分量都有名字,这些数据分量称为结构成员或者结构分量.
struct student{

	int num;
	char name[10];
	double average;

};

int main(){

	struct student s1,max;
	s1.num;s1.name;

}

相当于
struct student{

int num;
double average
char name[10]

}s1,s2;


结构数组

在这里插入图片描述

程序结构

  • 返回指针的函数最好的做法是返回传入的指针。尽量避免使用全局变量
  • #include:预处理命令,作用是把那个文件的全部文本内容原封不动地插入到它所在之地
  • <stdio.h>和“max.h”是两种不同表示方法
  • <>要求编译器只在 指定目录 。""要求编译器首先在当前目录寻找这个文件
  • 宏定义 #define
  • #define flag 1
  • 程序文件模块——主函数代码太长分为几个函数,同理一个源代码文件太长适合分为几个文件——由于两个独立的源代码文件不能编译成一个单元(一个.c文件是一个编译单元)——建立一个project把所有文件放进去 ,然后编译链接
  • 同一个单元里,同名的结构不能被重复申明
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值