零碎知识点补充
1. pow(math下面的函数)
描述
C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
声明
下面是 pow() 函数的声明。
double pow(double x, double y)
参数
- x -- 代表基数的浮点值。
- y -- 代表指数的浮点值。
返回值
该函数返回 x 的 y 次幂的结果。
实例
下面的实例演示了 pow() 函数的用法。
#include <stdio.h>
#include <math.h>
int main ()
{
printf("值 8.0 ^ 3 = %lf\n", pow(8.0, 3));
printf("值 3.05 ^ 1.98 = %lf", pow(3.05, 1.98));
return(0);
}
让我们编译并运行上面的程序,这将产生以下结果:
值 8.0 ^ 3 = 512.000000
值 3.05 ^ 1.98 = 9.097324
2.一对一对应的问题
或许我们可以采用两个数组/字符串和数组,用另一个数组来对应要进行计算的字符串或者数组
3.十进制转化小于十的进制
举一个例子,现在将十进制 11 转换为二进制数:
11 除以 2,得商为 5,余数为 1;
5 除以 2,得商为 2,余数为 1;
2 除以 2,得商为 1,余数为 0;
1 除以 2,得商为 0,余数为 1,算法终止。
将余数从后往前输出,得 1011 即为 11 的二进制数。
除基取余逆序输出。。。
逆序可以添加一个计数的和一个数组,用计数器让数组从后面开始往前输出余数。
温习了一下while // do while//
4.边输入边计算 PAT1010
while(cin>>a>>b)
cin是输入操作符,cin>>a的过程是先取得从键盘的输入值a,并将a赋给cin,因此while(cin>>a)的意思就是只要输入的值有效,那么就执行while体内的语句。
实例设计如下:
1、统计输入连续数字的个数,while循环结束 (跳出流对象)的时候,打印最后一个数 。通过检测其流的状态来判断结束;
(1)若流是有效的,即流未遇到错误,那么检测成功。
(2)若遇到文件结束符,或遇到一个无效的输入时(例如本题输入的值不是一个整数),istream对象的状态会变为无效,条件就为假。
////////////////while(scanf("%d%d", &x, &y)!=EOF)
scanf("%d%d", &x, &y):
如果x和y能够被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
EOF:EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
5.switch的知识点
switch(表达式)
{
case 常量表达式 1:语句 1
case 常量表达式 2:语句 2
.
.
.
case 常量表达式 n:语句 n
default:语句 n+1
}
说明:
(1) switch后面括弧内的"表达式",ANSI标准允许它为任何类型.
(2) 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的匹配的,就执行default后面的语句.
(3) 每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案).
(4) 各个case各default的出现次序不影响执行结果。例如,可以先出现"default: ...",再出现"case 'D': ...",然后是"case 'A': ...".
(5) 执行完一个case后面的语句后,流程控制转移到下一个case继续执行."case常量表达式"只是起语句标号作用,并不是在该处进行条件判断.在执行swith语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断.将连续输出;所以我们要在每一个case里面加入break推出switch语句
最后一个分支(default)可以不加break语句.
在case后面中虽然包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句.当然加上花括弧也可以.
(6) 多个case可以共用一组执行语句,例如:
.
.
.
case 'A':
case 'B':
case 'C': printf(">60\n");break;
6.int型数组初始化
int aa[3]={0},bb[3]={0}; //初始化等于零
这样aa[0]=aa[1]=aa[2]=0;
7.整型
整型分为int,long,长整型-2147483648~2147483647,int型-32768~32767
8.求最大公约数和最小公倍数的相关信息
https://blog.csdn.net/chen_zan_yu_/article/details/82943306
9.字符串的相关知识
isalpha:一种函数:判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
isdigit:若参数c为阿拉伯数字0~9,则返回非0值,否则返回0。
tolower:C 库函数 int tolower(int c) 把给定的字母转换为小写字母。(返回的是int但是她其实是ASCII的值,所以可以复制给字符当作字符输出)
toupper:C 库函数 int tolower(int c) 把给定的字母转换为大写字母。(返回的是int但是她其实是ASCII的值,所以可以复制给字符当作字符输出)
isupper:判断字符c是否为大写字母。
10.c语言编译器自带的快速排序函数
qsort函数C语言编译器函数库自带的快速排序函数。qsort 的函数原型是void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 是base所指数组进行排序。qsort函数包含在C 标准库 - <stdlib.h>中。
函数声明
参数
-
base-- 指向要排序的数组的第一个元素的指针。
-
nitems-- 由 base 指向的数组中元素的个数。
-
size-- 数组中每个元素的大小,以字节为单位。
-
compar-- 用来比较两个元素的函数,即函数指针(回调函数)
compar:
int cmp(const void*a,const void *b)
{
return *(int *)a<*(int *)b;
}
返回值为1时a排在b后面,返回值为0时a排在b前面
11.%.2f格式化输出
C语言的格式化输出保留小数,默认四舍五入,在接近0的负数四舍五入之后不输出0.00,而是-0.00。
12.printf中有些符号你要打两遍
printf("%.1f%% %.1f%%",ke*100.0/n,kong*100.0/n);
两个百分号这样,输出才会有40.0%这样的结果
13.用getchar吸收一些东西
while((c=getchar())!='\n')
while((c=getchar())!=')')
{
if(isalpha(c))
{
choose[j]=c;
j++;
}
}
这样吸收一个字符方便同类型继续输入,同时可以吸收换行符,空格
14.atof/i功能是把字符串转换成浮点数
15.mommove/momcpy
memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
int gcd(int a,int b)
{
while(b!=0)
{
int temp=a%b;
a=b;
b=temp;
}
return a;
}
int isprime(int a) { for(int i=2;i<=sqrt(a);i++) { if(a%i==0) { return 0; } } return 1; }
21.字符串倒序
void reversal(char a[],int low,int high) //////////////////字符串的倒序写法
{
char temp;
while(low<high)
{
temp=a[low];
a[low]=a[high];
a[high]=temp;
high--;
low++;
}
}
22.gets()函数
//////////////////////第一次我用的gets(str)输入函数,结果PAT并不支持gets()
gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符
不属于这个字符串。其调用格式为:
1
|
gets (s); |
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s", s)相似, 但不完全相同, 使用scanf("%s", s)
函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,
空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符
串直到回车为止。
示例:
1
2
3
4
5
6
7
8
9
|
#include <stdio.h> int main() { char s[20]; printf ( "What's your name?\n" ); gets (s); printf ( "%s\n" , s); return 0; } |
当输入a bde回车的时候,会输出a bde。
结果是编译错误: error: ‘gets’ was not declared in this scope gets(s)。这个错误是始料未及的,毕竟在codeblock中是可以顺利编译的,最多是结果有错,而且get(str)的操作在算法笔记是有详细说明可使用的,搜索后发现get()方法确实已经不被PAT编译器支持,并且网上也有一些方法改进对一行字符串输入的读取。我这里采用的是cin.getline的操作。
改变之处在于:
①增加#include<iostream>
using namespace std;
②gets --> cin.getline
////////////cin.getline(str,80);
23.结构体的知识点
typedef struct{
int num;
int de;
int cai;
}stu;
stu ss={a,b,c}////////结构体可以这样直接赋值
24.
对 π ,取值时可以直接引用数学公式atan(1.0)*4
②float型数据,最多保留小数点后6位小数,精确到小数点后几位,输出时按(例:%.7f)格式(基本语句!!)
③如果输出用%.7lf 则CPU会占用15ms,用%.7f 输出,CPU占用0ms
25.
26.