1.合法标识符只包括字母或数字(下划线"_"被看做字母),字母开头(一般小写),不涉及保留字
2.%10d为右对齐,包括数据和数据左侧空格共占10列;%-10d为左对齐
3.scanf("%5d",&a); 若输入12345678,则a=12345;
4.scanf("%d %*d %d",&a,&b); 若输入1 2 3,则a=1,b=3; //可用于输入身份证号时读取生日
如:scanf("%*6d%4d%2d%2d%*d",&year,&month,&day);
5.scanf("%lf",&a); lf读入双精度浮点数 f读入单精度 scanf("%lld",&a); 读入long long类型
6.printf("%.2f",a); 数字用于控制精度。printf("%lld",a"); 输出long long类型
7.#define PI 3.1415
8.两操作数类型不同时,低精度会向高精度转换 char<int<float<double;
9.一直不太熟的switch用法:
switch(op)
{
case '+': printf("=%.2f",x+y); break;
case '-': printf("=%.2f",x-y); break;
default: printf("运算符错误"); break;
}
10.浮点常量12.34表示:12.34/12.34e0/1.234E1/0.1234E2/123.4e-1等
11.#include<limits.h>包括INT_MAX/INT_MIN等
12.逗号运算符优先级低于赋值运算符
a=(3+5,4*9);则a=36
a=3+5,4*9; 则a=8
b=(a=3+5,4*9);则a=8,b=36
13.(int)(pow(10,i))会截断取整,建议改成(int)(pow(10,i)+0.000001);
14.while(scanf("%lf",&score),score>=0) 连续输入直到输入负数
while(scanf("%d",&n)!=EOF) 连续输入直到ctrl+z
15.判断素(质)数:i从2到(int)sqrt(m)中有一个能整除m就不是素数 //0,1既不是素数也不是合数
16. return a>b?a:b; 返回a,b中最大值
17.求阶乘函数
double fact(int n)
{
int i;
double res=1;
for(i=2;i<=n;i++)
res*=i;
return res;
}
可用于求组合数,如m个元素中任取k个元素
p=fact(m)/(fact(k)*fact(m-k));
18.递归求阶乘函数
int fact(int n)
{
if(n<=1)
return 1;
else
return n*fact(n-1);
}
19.递归求最大公约数
int gcd(int a,int b)
{
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
20.冒泡排序
for(int i=0;i<n;i++)
for(int j=0;j<n-i-1;j++)
if(a[j+1]<a[j])
{
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
21.有序数组去重只需比较当前元素与前一项是否相同
22.大小写字母转换 大写转小写:+32;小转大:-32
23.有序集合a[m]和有序集合b[n]合并为有序集合c[o],o不一定等于m+n,因为要去重。
int i=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<b[j])
c[k++]=a[i++];
else if(a[i]>b[j])
c[k++]=b[j++];
else
{
c[k++]=a[i];
i++;
j++;
}
}
while(i<m) c[k++]=a[i++];
while(j<n) c[k++]=b[j++];
24.二分搜索(递归版)
int BS(int a[],int x,int low,int high)
{
if(low>high)
return -1;
else
{
int mid=(low+high)/2;
if(x==a[mid])
return mid;
else if(x<a[mid])
return BS(a,x,low,mid-1);
else
return BS(a,x,mid+1,high);
}
}
25.二分搜索(非递归版)
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
return mid;
else if(a[mid]<x)
low=mid+1;
else
high=mid-1;
}
26.二维数组按先行后列存储 int a[3][2] 三行二列 共6个元素
初始化可 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};//与int a[3][3]={1,2,3,4,5,6,7,8,9};等价
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
也可 int b[4][3]={{1,2,3},{4},{5,6}}; //与int b[4][3]={1,2,3,4,0,0,5,6};等价
1 | 2 | 3 |
4 | 0 | 0 |
5 | 6 | 0 |
0 | 0 | 0 |
27.字符串函数及字符函数及数学函数
ctype.h | |
isalnum | 判是否数字或字母,是返回1,否返回0 |
isalpha | 判是否字母,是1否0 |
iscntrl | 判是否控制字符(ASCII码0-31),是1否0 |
isdigit | 判是否数字,是1否0 |
isgraph | 判是否可打印字符(ASCII码33-126),是1否0 |
islower | 判是否小写字母,是1否0 |
isprint | 判是否可打印字符(ASCII码32-126),是1否0 |
ispunct | 判是否标点字符,是1否0 |
isspace | 判是否空格、跳格符或换行符,是1否0 |
isupper | 判是否大写字母,是1否0 |
isxdigit | 判是否十六进制数字字符,是1否0 |
tolower | 转换为小写字母 |
toupper | 转换为大写字母 |
string.h | ||
char *strcat(char *str1,char *str2) | 把str2接到str1后面,str1最后的'\0'被取消 | 返回str1 |
char *strchr(char *str,int ch) | 找出str指向的字符串中第一次出现字符ch的位置 | 返回指向该位置的指针,若找不到则返回空指针 |
int strcmp(char *str1,char *str2) | 比较str1,str2 | str1<str2,返回负数 str1==str2,返回0 str1>str2,返回正数 |
int strcpy(char *str1,char *str2) | 把str2指向的字符串复制到str1中去 | 返回str1 |
int strlen(char *str) | 统计字符串中字符个数,不包括'\0'; | 返回字符个数 |
int strstr(char *str1,char *str2) | 找出str2字符串在str1字符串中第一次出现的位置,不包括str2的串结束符 | 返回该位置的指针,若找不到则返回空指针 |
math.h | |
log(x) | 求lnx |
log10(x) | 求lg(x) |
注:想求以2为底的对数不要忘记换底公式 | |
abs(x) | 求整数x绝对值 |
fabs(x) | 求浮点数x绝对值 |
cos(x) | 求cos(x) |
acos(x) | 求arccos(x) |
注:其他三角函数同上 | |
exp(x) | 求e的x次方 |
floor(x) | 求不超过x的最大整数 |
fmod(x,y) | x%y |
double modf(double val,int *iptr) | 把双精度数val分解成整数部分和小数部分,把整数部分存在iptr指向的单元,返回小数部分 |
pow(x,y) | 求x的y次方 |
sqrt(x) | 根号x,需x>=0 |
28.K进制转换为10进制
int KtoD(char s[],int k)
{
int d=0;
for(int i=0;s[i]!='\0';i++)
d=d*k+(s[i]-'0');
return d;
}
29.整数十进制转二进制 “除2取余,逆向排序”,小数十进制转二进制“乘2取整,正向排序”
void DtoB(char s[],int n)
{
int len=0;
while(n>0)
{
s[len++]=n%2+'0';
n=n/2;
}
s[len]='\0';
strrev(s);
}
十进制转r进制 p208
30.对n个字符串排序
void Sort(char str[][LEN],int n)
{
int i,j;
char temp[LEN];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(strcmp(str[i],str[j])>0)
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
31.指针 int count=5,*cntptr=&count;
32.内存分配 int *p=(int *)malloc(sizeof(int)*n); //p[n]
33.结构体
struct date{
int year;
int month;
int day;
}
struct student{
char ID[16];
char name[16];
char sex;
struct date birthday;
float score;
}stu;
struct student stu={"2024","JLU",'M',(2002,01,01),98);
或
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
LNode *p;
34.文件相关处理 p284-p307 ☆重点
FILE *fp;
fp=fopen("f1.txt","w");
fprintf(fp,"Hello World!");
fclose(fp);
35.模拟 p310-p340 ☆重点