c语言复习:常见函数与错误

这篇具有很好参考价值的文章主要介绍了c语言复习:常见函数与错误。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常用函数

1.pow

int pow(m,n)
{
    int j,s=1;
    for(j=1;j<=n;j++){
        s*=m;
    }
    return s;
}

2.快速排序(stdlib)

int main()
{
    int arr[10] = {9,8,7,6,5,4,3,2,1};
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),cmp);
}
int cmp(const void* a,const void* b)
{
    return *(int*) b - *(int*) a;
}

3.快速排序

void quickSort(int* arr, int low, int high) {
	int i = low;
	int j = high;
	int temp = arr[low];
	if (i >= j)
		return;
	while (i != j) {
		while (i < j && arr[j]>=temp)
			j--;
		while (i < j && arr[i] <= temp)
			i++;
		if (i < j)
			swap(arr[i], arr[j]);
	}
	swap(arr[low], arr[i]);
	quickSort(arr, i + 1, high);
	quickSort(arr, low, i - 1);
}

4.选择排序

void select_sort(int* arr, int n)
{
    int max,tmp;
    for (int i = 0; i < n - 1; i++)
    {
        max = i;
        for (j = i + 1; j < n ; j++)
        {
            if (arr[j] > arr[max])
            {
                max = j;
            }
        }
        if (i != max)
        {
            tmp = arr[i];
            arr[i] = arr[max];
            arr[max] = tmp;
        }
    }
}

5.冒泡排序

void bubble_sort(int* arr, int n)
{
    int tmp;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (arr[j] < arr[j+1]) {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
}

6.任意数据类型冒泡排序

void bubble_sort(void* arr, int sz, int width, int(*cmp)(const void* e1, const void* e2))
{
	for (int i = 0; i < sz - 1; i++) {
		for (int j = 0; j < sz - i - 1; j++) {
			if (cmp((char*)arr + j * width, (char*)arr + (j + 1) * width)<0) {
				swap((char*)arr + j * width, (char*)arr + (j + 1) * width,width);
			}
		}
	}
}
int cmp(const void* e1, const void* e2) {
	return *(int*)e1 - *(int*)e2;
}
void swap(char* bf1, char* bf2, int width) {
	for (int i = 0; i < width; i++) {
		char e = *bf1;
		*bf1 = *bf2;
		*bf2 = e;
		bf1++;
		bf2++;
	}
}

7.判断素数

int Isprime(int x) {
	for (int i = 2; i <= sqrt(x); i++)
		if (x % i == 0)
			return 0;
	return 1;
}

8.<math.h>

  • log(a) / log10(a)
  • exp(a)
  • sqrt(a)
  • round(a) // (int)(a+0.5)
  • ceil / floor
  • fabs()

9.<string.h>

  • strcat
  • strcpy / strncpy (str1,str2,n)
  • strcmp ==返回为 0 ;/ strncmp
  • strlen 不包括 ’\0’
  • strlwr / strupr
  • strstr

10.文件操作

  • fopen(“FILE Path”,“w”) / w, r, a, rb, wb, ab, (+)
  • fclose
  • fwrite(ptr,size,count,stream)
  • fread(ptr,size,count,stream)

11.最大公约数

int gcd(int a, int b)
{
    if(b == 0)
        return a;
    return gcd(b, a%b);
}

常见错误

1.switch()

执行条件为真后不执行break会继续执行后面的case知道break;

2.printf()

打印的优先级问题。

3.const与指针

  • 常量指针 //指向地址可以改变,值不可以改变
const int *p;
int a = 4;
int b = 5;
p = &a;
*p = 5;  /*错误,不能通过指针p来改变值*/
a = 5;  /*正确,*p这时候也等于5*/
p = &b;  /*常量指针可以指向其他的地址*/
  • 指针常量 //指向地址不能改变,值可以改变
int *const p;
int a = 4;
int *const p = &a;/*要马上初始化,之后无法赋值*/
p = &b;/*错误,无法赋值*/
*p = 5;/*正确*/

4.ascll码

‘A’ = 65 / ‘a’ = 97 / ’0‘ = 48

5.if()

if() 括号内为赋值语句 :表达式右侧为0 不执行语句 1;表达式右侧不为0 执行语句 1;

6.转义字符

  • \ddd 1-3位8进制数 / \xhh 1-2位16进制数
  • ’ ,“ ,? 是转义字符

7.gets/fgets

  • gets / gets_s / scanf 丢弃换行符
  • fgets 若读入<=size-2 则保留换行符

8.scanf

  • scanf结束输入后不会舍弃回车符(残留在缓冲区
  • getchar()在缓冲区读入数据 / 输入设备->内存缓冲区->getchar()
  • 如果不同getchar取走scanf留下的‘\n’,接下来的scanf会直接读入
#include <stdio.h>
int main(void){
    char m[40];
    char n;
    printf("please input first str:\n");
    scanf("%s",m);
    printf("you input str is :%s\n",m); 
    printf("input second char :\n"); 
    scanf("%c",&n);   //程序将未输入而直接输出
    printf("now you input second char is :%c\n",n);
    return 0; 
}
  • scanf读入字符串时遇到空格不会将其之后存入str,但都残留在缓冲区

9.字符串比较

不能用 == ; strcmp

10.fclose与feof

  • fclose / 文件关闭,成功关闭返回值为0
  • feof 在文件读取已经结束的时候,判断文件为何结束(与ferror搭配)

到达文件末尾结束读取时返回非0值;文章来源地址https://www.toymoban.com/news/detail-811803.html

if (ferror(fp))
{
    puts("I/O error when reading");
}
else if (feof(fp))
{
    puts("End of the file reached successfully");
}

到了这里,关于c语言复习:常见函数与错误的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】第七章-图【期末复习】

    图:有向图、网,无向图、网。 顶点 边:有向图图称作弧,分弧头弧尾。 依附:边依附点,边和点关联 邻接:点邻接点 度:点关联的边的数目 完全图: 无向: C n 2 C_n^2 C n 2 ​ 条边; 有向: 2 C n 2 2C_n^2 2 C n 2 ​ 条边 连通:若干结点互相可以通信,用手提起一个结点可以顺

    2024年02月01日
    浏览(48)
  • 期末复习(3)C语言数据结构_图论基础

    目录 导言:  定义: 一、边和度的概念: 1.1 无向图中的边和度: 1.2 有向图中的边和度: 1.3 度序列和握手定理: 二、弧和度的关系: 2.1 有向图中的弧和度: 2.2 度序列和握手定理在有向图中的应用: 2.3 邻接矩阵和邻接表在有向图中的表示: 2.4 强连通图: 三、完全图:

    2024年02月03日
    浏览(31)
  • 《数据结构与算法》之队列与链表复习

    我们在上一次学习了堆栈的数据结构以后,可以了解到它是受限制的操作,比如我们操作只能在栈顶,现在我们要学习的东西叫做队列,它也是受限制的一种数据结构,它的特点是队头只出数据,而队尾只入数据, 它的结构就和它的名字,像我们平时排队一样先来的人肯定要

    2024年02月08日
    浏览(31)
  • 【Python数据结构与算法】—— 搜索算法 | 期末复习不挂科系列

    ​ 🌈个人主页:  Aileen_0v0 🔥系列专栏:  数据结构与算法 💫个人格言: \\\"没有罗马,那就自己创造罗马~\\\" 这篇博客主要探索的是计算机科学常见问题---搜索算法 “时间紧,任务重!” 话不多说,开始今天的学习之旅吧⛵~ 目录 搜索 定义 -in 顺序搜索  无序表的顺序搜索

    2024年02月05日
    浏览(30)
  • 数据结构与算法----复习Part 8 (链表双指针)

    本系列是算法通关手册LeeCode的学习笔记 算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn) 本系列为自用笔记,如有版权问题,请私聊我删除。 目录 一,双指针简介(Two Pointers) 二,起点不一致的快慢指针 三,步长不一致的快慢指针 判断链表中是否含有环: 四

    2024年02月19日
    浏览(38)
  • 数据结构期末复习(1)学科定义、组成、算法的定义、时间复杂度比较

    目录 数据结构的几个方面 逻辑结构的描述 逻辑结构 存储结构 数据运算 数据结构和数据类型 数据类型 抽象数据类型(ADT) 算法及其描述 什么是算法 算法分析 算法的设计目标 算法时间性能分析 计算算法频度 算法时间复杂度 简化的算法时间复杂度分析 数据结构学科定义:

    2024年02月03日
    浏览(34)
  • 数据结构-常见的排序算法

    目录 排序的概念及其运用 排序的概念 常见的排序算法 常见排序算法的实现 插入排序 插入排序 希尔排序(缩小增量排序) 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 非比较排序 排序算法复杂度及稳定性分析 排序 :所谓排序,就是按照某个或者某

    2024年03月12日
    浏览(37)
  • 【数据结构】常见的排序算法

    常见的七大排序算法: 最好的情况是O(n),数组为升序 最坏的情况是O(n 2 ),数组为降序 元素集合越接近有序,直接插入排序算法的时间效率越高 时间复杂度:O(N^2) 空间复杂度:O(1),它是一种稳定的排序算法 稳定性:稳定 针对直接插入排序中,当数组属于降序时,时间复杂

    2024年02月14日
    浏览(29)
  • 数据结构之常见排序算法

    排序:就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性:假设一组序列中,有两个相同的元素,在排序之后,两个相同元素的前后顺序颠倒了,说明这个排序算法是不稳定的,反之。 思路:把待排序的记录按其关键码值的大小

    2024年02月11日
    浏览(27)
  • 数据结构与算法常见题

    1. 字符串变形 描述 : 对于一个长度为 n 字符串,我们需要对它做一些变形。 首先这个字符串中包含着一些空格,就像\\\"Hello World\\\"一样,然后我们要做的是把这个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。 示例1 输入: “This is a sample”,16 返回值: “SAM

    2024年02月14日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包