1.sscanf的特殊用法
sscanf与scanf
一般形式为sscanf(源字符串,格式控制,地址表列)
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。sscanf可用来进行数据类型或进制转换以及按特定规则读取源字符串的特定规则。也即使用正则表达式,但是功能并没有正则表达式强大,并且使用时有较多限制。同理,在scanf以及printf中的格式控制都能使用正则表达式。C语言并不直接支持正则表达式,而需要通过函数库regex.h来完成
几种常见的表达方法:
- %[abc]读取a、b、或c的任意一员,[a-z]表示匹配小写字母,[a-z0-9]表示匹配小写字母及数字
- %[^a-z]读取不在a-z之间的字符串,如果碰到 a-z 之间的字符则停止
- %[^=]读取字符串直到碰到=号
- %*[^=]%s前面带*号表示不保存变量。跳过字符串中以=结尾的子串而读后包括=在内的后面部分子串
另外,可用*匹配变量到格式字符串中,如printf("%*d\n", a, A);即输出a长度宽的整数A,而printf("%.*lf\n", a, A);则输出a位小数的浮点数A
2.补码
- 正数的补码是该数的二进制形式。
- 负数的补码需要通过以下几步获得:
(1)先取得该数的绝对值的二进制形式
(2)再将第1步的值按位取反(除符号位)
(3)最后将第2步的值加1
3.运算符的优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | -- |
() | 圆括号 | (表达式)/函数名(形参表) | -- | ||
. | 成员选择(对象) | 对象.成员名 | -- | ||
-> | 成员选择(指针) | 对象指针->成员名 | -- | ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | |||
-- | 自减运算符 | --变量名/变量名-- | |||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
(类型) | 强制类型转换 | (数据类型)表达式 | -- | ||
sizeof | 长度运算符 | sizeof(表达式) | -- | ||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | |||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | |||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | -- |
/= | 除后赋值 | 变量/=表达式 | -- | ||
*= | 乘后赋值 | 变量*=表达式 | -- | ||
%= | 取模后赋值 | 变量%=表达式 | -- | ||
+= | 加后赋值 | 变量+=表达式 | -- | ||
-= | 减后赋值 | 变量-=表达式 | -- | ||
<<= | 左移后赋值 | 变量<<=表达式 | -- | ||
>>= | 右移后赋值 | 变量>>=表达式 | -- | ||
&= | 按位与后赋值 | 变量&=表达式 | -- | ||
^= | 按位异或后赋值 | 变量^=表达式 | -- | ||
|= | 按位或后赋值 | 变量|=表达式 | -- | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | -- |
4.九九乘法表
#include<stdio.h>
int main();
{
int n;
scanf("%d",&n);
n=9;
int i,j;
i=1;
while(i<=n){
j=1;
while(j<=i){
printf("%d*%d=%d",j,i,j*i);
if(i*j<=10){
printf(" ");
}else{
printf(" ");
}
j++;
}printf("\n");
i++;
}
return 0;
}
5.函数
函数库
math.h头文件中有:sin(x),cos(x),exp(x)(求e^x),fabs(x)(求x的绝对值)等库函数。
stdio.h头文件中有:scanf(),printf(),gets(),puts(),getchar(),putchar()等库函数。
string.h头文件中有:strcmp(),strcpy(),strcat(),strlen等库函数。
函数的调用
函数间通过参数来传递数据,即通过主调函数中的实际参数(实参)向被调用函数中的形式参数(形参)进行传递。
实参向形参传递数据的方式:实参将值单向传递给形参,形参的变化不影响实参值。
#include<stdio.h>
void sum(int begin,int end)
{
int i;
int sum=0;
for(i=begain;i<=end;i++){
sum+=i;
}
printf("%d到%d的和是%d\n",begin,end,sum);
return 0;
}
int main()
{
sum(1,10);
sum(20,30);
sum(35,45);
return 0;
输出:
1到10的和是55;
20到30的和是250;
35到45的和是400;
函数的嵌套循环
egg : 求100以内的素数
#inciude<stdio.h>
int main()
{
int x,i;
for(x=1;x<=100;x++)
{
int isprime==1;
for(i=2;i<x;i++)
{
if(x%i==0)
{
isprime=0;
break;
}
}
if(isprime==1)
{
printf("%d",x);
}
}
return 0;
}