零碎知识点补充

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>中。

函数声明

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

参数

  • 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功能是把字符串转换成浮点数
atof(),是C 语言标准库中的一个字符串处理函数,功能是把字符串转换成浮点数,所使用的头文件为<stdlib.h>。该函数名是 “ascii to floating point numbers” 的缩写。语法格式为:double atof(const char *nptr)。

 15.mommove/momcpy

memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

原型:void *memmove( void* dest, const void* src, size_t count );
头文件:<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
相关函数:memset、memcpy
 
memcpy指的是C和C ++使用的内存拷贝函数,函数原型为void * memcpy(void * destin,void * source,unsigned n);函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源源中拷贝n个字节到目标destin中。
 16.strcncpy
 strncpy函数用于将指定长度的字符串复制到字符数组中,是 C语言的库函数之一,来自 C语言标准库,定义于 string.h。语法形式为:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。
 
 17.求最大公约数

int gcd(int a,int b)
{
while(b!=0)
{
int temp=a%b;
a=b;
b=temp;
}
return a;
}

 18.强制类型转换
 
for (int i = sqrt((double)N); i >= 1; i--) 
 19.malloc动态分配空间
#include <malloc.h>
当不知道有多少数量时动态分配空间,最后释放
以int为例
a=(int *)malloc(n*sizeof(int );
free(a);
20.素数
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.

 

posted @ 2019-07-18 18:01  bananaman1  阅读(338)  评论(0编辑  收藏  举报