C语言
常见的 oj 面试题
Wangwq.
这个作者很懒,什么都没留下…
展开
-
C语言文件操作
什么是文件?狭义来讲,磁盘上的文件就是文件。文件包括文件内容和文件属性。程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。文件名一个文件要有一个唯一的文件标识,以便客户识别和引用。...原创 2019-07-05 20:46:17 · 282 阅读 · 0 评论 -
自定义类型:结构体、枚举、联合
一、结构体1.结构体的声明struct tag{ member-list;}variable-list;例如你要描述一个学生:struct stu { char name[20]; int age; char sex[5]; char id[20]; }x,y; //声明类型的同时定义变量x,y2.结构体的自引用(结构体中有一个自身结构体变量)...原创 2019-07-04 20:53:17 · 148 阅读 · 0 评论 -
C语言实现各类string函数
1.实现strcpy(字符串复制)函数原型:char strcpy(char dest, const char src);strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char。代码:#include<stdio.h>#include<windows.h>#include<assert.h>char* my_st...原创 2019-06-21 23:05:54 · 5313 阅读 · 4 评论 -
浅谈指针
首先我们思考几个问题:什么是指针?为什么要有指针?指针是用来干什么的?假如现在有一栋六层的宿舍楼,设计师并没有标注楼层以及宿舍号,那么把俩个人分别放到俩个宿舍里,但不告诉他们这里是哪间宿舍,让他们找到彼此。能感受到俩位同学的绝望吗?但如果我们标注了楼层号,并且标注了宿舍号,那只需要告诉对方我在哪哪个宿舍,对方马上就可以找到你了呀。我们可以把这一个个宿舍看作是内存,宿舍里面的人看作是变量,而宿...原创 2019-06-19 16:45:46 · 180 阅读 · 0 评论 -
深度剖析数据在内存中的存储
1.数据的基本内置类型:char //字符数据类型 (1字节)short //短整型 (2字节)int //整型 (4字节)long //长整型 (4字节)long ...原创 2019-06-02 00:59:22 · 370 阅读 · 0 评论 -
C语言操作符
C语言的操作符可以分俩大点,一是其各类操作符,二是其表达式的求值。我们今天对这些知识点进行一个整理。一、操作符1.算术操作符+(加) -(减) *(乘) /(除) %(取模)2.移位操作符<<(左移) >>(右移)移位规则:左移: 左边抛弃,右边补0右移:(1)逻辑移位:左边补0,右边丢弃(2)算术移位:左边补...原创 2019-05-24 15:55:53 · 120 阅读 · 0 评论 -
传值调用与传址调用
众所周知,函数的调用分为传值调用和传址调用,那他们的区别是什么呢?传值调用:函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参。传址调用:传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方法。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数的内部可以直接操作函数外部的变量。用文字解释未免太过于苍白,接下来我们用实例来证明:我们...原创 2019-04-28 14:48:44 · 2490 阅读 · 1 评论 -
C语言实现简单扫雷
相信大家都玩过扫雷吧,以前机房上机,无聊的时候就开始玩扫雷和蜘蛛纸牌,有时候能玩好久好久。那今天,我们就来写一个简易的扫雷游戏吧!和三子棋游戏一样,我们先把它需要的游戏功能列出来:(1)void Menu();菜单(2)void Game();游戏框架(3)int GetRandIndex(int start, int end);随机生成雷的下标(4)void SetMines(char...原创 2019-05-22 18:04:03 · 1280 阅读 · 0 评论 -
C语言实现简单三子棋游戏
三子棋,风靡高中的课间游戏,大家都和同桌拿草稿本对战过吧。今天呢,我们就来简单的实现这个小游戏!首先,我们要把这个程序的几个小功能列出来。比如说:(1)void ShowMenu();菜单函数,实现进入游戏或者退出游戏功能。(2)void Game();游戏函数,把游戏整体的构架整理出来。(3)void ShowBoard(char Board[][COL], int row, int...原创 2019-05-17 17:58:51 · 289 阅读 · 0 评论 -
不使用(a+b)/2的其他三种求平均值的方法
(a+b)/2这种方式求平均数时,假如两个数过大的话极易发生溢出现象, 我们一般都会通过这种方式来避免溢出:#include<stdio.h>#include<windows.h>#pragma warning(disable:4996int Ave(int a, int b){ int ret = 0; int res = 0; a > b ...原创 2019-05-28 20:36:54 · 211 阅读 · 0 评论 -
杨辉三角形
杨辉三角,是二项式系数在三角形中的一种几何排列。1.每个数等于它左上方和上方两数之和。2.每行数字左右对称,由1开始逐渐变大。3.第n行的数字有n项。4.(a+b)^n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。1.循环#include<stdio.h>#include<windows.h>#pragma warning(disabl...原创 2019-05-26 19:16:04 · 285 阅读 · 0 评论 -
C语言编程找凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。#include<stdio.h>#include<windows.h>int main(){ int murde...原创 2019-05-26 15:54:47 · 824 阅读 · 0 评论 -
C语言编程确定比赛结果
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;(b=2)+(a=3)B选手说:我第二,E第四;(b=2)+(e=4)C选手说:我第一,D第二;(c=1)+(d=2)D选手说:C最后,我第三;(c=5)+(d=3)E选手说:我第四,A第一;(e=4)+(a=1)比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。#include<stdio...原创 2019-05-26 15:24:40 · 405 阅读 · 0 评论 -
递归和非递归分别实现求第n个斐波那契数
斐波那契数斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……它后一个数等于前面两个数的和,这个数列从第三项开始,每一项都等于前两项之和。递归:#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)Fit(int n){ if (n <...原创 2019-05-11 21:03:31 · 244 阅读 · 0 评论 -
递归方式实现打印一个整数的每一位
题目要求:(1)假设用户输入1234,要以1 2 3 4 的形式打印出来。(2)使用递归。什么是递归:一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的俩个必要条件:1.存在限制条件,当满足这个限制条...原创 2019-05-11 20:02:15 · 692 阅读 · 3 评论 -
调整数组使奇数全部都位于偶数前面
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。1.我们先定义俩个指针,一个指向数组首元素,一个指向数组尾元素。头指针判断首元素是否奇数,如果是,指针向后移动。尾元素同理(尾指针判断是否为偶数,是的话向前移动)。当头指针和尾指针同时遇到了不符合条件的元素,且头指针在尾指针的前面,则将他们交换。#includ...原创 2019-05-30 19:14:58 · 243 阅读 · 0 评论 -
杨氏数组
有一个二维数组:(1)数组的每行从左到右是递增的,每列从上到下是递增的.(2)在这样的数组中查找一个数字是否存在,要求 时间复杂度小于O(N)。数组:因为题目对时间复杂度的要求,我们想要遍历数组是不可能了。我们首先要有这样一个想法,先让用户给定要查找的数字key,我们自己再从数组里找一个数字和key比较,比较时,就是出现三种情况,等于,大于和小于。但我们是基于杨氏矩阵这样的特殊矩阵中,...原创 2019-05-30 21:49:24 · 279 阅读 · 0 评论 -
将value的二进制位模式从左到右翻转,输出其十进制数值
编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值是value的二进制位模式从左到右翻转后的值。如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001 (25)翻转后:(2550136832)10011000000000000000000000000000程序结果返...原创 2019-05-28 18:56:04 · 274 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次(俩次),其他所有数字都是成对出现的, 请找出这个数字。(使用位运算)
这组数据中只有一个数字出现了一次,其他的数字都是成对出现。我们先来想一想异或(^).a^b (1)a=b时,a ^ b=0. (2)a!=b时,a ^ b=1.基于以上的知识,我们是不是可以把这组数据依次异或呢?我们来看一下:假设arr[5]={1,2,3,2,1};我们取数组中第一个元素1,让他依次与数组中的元素(二进制)异或。0001(1) ^ 0010(2...原创 2019-05-29 19:31:19 · 713 阅读 · 0 评论 -
逆置字符串
有一个字符数组的内容为:“student a am i”,请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。例:student a am ii ma a tnedutsi am a student这个字符串特别的地方是他最开始的样子单词顺序是正确的,只不过单词放的顺序是错误的,如果改变单词位置是有困难的,...原创 2019-05-29 21:40:49 · 407 阅读 · 0 评论 -
喝汽水问题
喝汽水问题假设现在有二十元,一瓶汽水一元,2个空瓶可以换一瓶汽水,问一共能喝到多少瓶汽水?#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)int Buy_Sodawater(int money, int price){ int empty_bottle = 0; int co...原创 2019-06-03 10:28:07 · 121 阅读 · 0 评论 -
C语言实现qsort
在实现qsort之前,我们先了解一下回调函数。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。我们基于冒泡排序的基础来完成这个排序。...原创 2019-06-21 09:48:46 · 1097 阅读 · 1 评论 -
字符串的旋转问题
1.实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB看到问题后的第一反应是左旋一个字符,那就是说把A放到字符串末尾,BCD依次向前移动一个位置,即得到BCDA。即先定义一个临时变量把A保存起来,BCD再依次移动,最后把A再写入。void revolve_string(char *str, int k){ if (k > 0...原创 2019-06-18 19:47:34 · 383 阅读 · 0 评论 -
求俩个数的公约数
1.用户从键盘输入俩个数字。2.写一个函数gcd(int m,int n);m,n为用户输入的俩个数字,返回值g为他们的最大公约数。3.利用递归,递归出口是m%n=0。如果m%n!=0,则求n与(m%n)的最大公约数。以此类推,直到新的n=0时,其最大公约数就是新的m。#include <stdio.h>#include <windows.h>int gcd(i...原创 2019-04-22 21:59:07 · 1492 阅读 · 0 评论 -
两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子:1999 2299输出例子:7#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)int CompareBits(int m, int n){ int count = 0; while (m ...原创 2019-05-24 15:19:02 · 213 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位,并输出二进制序列。
获取一个数二进制序列中所有的偶数位和奇数位,并输出二进制序列。我们可以将这个二进制序列放进一个长度为32的数组中,然后通过遍历其奇数位和偶数位 ,分别把他们输出。#include<stdio.h>#include<windows.h>#pragma warning (disable:4996)void GetSequence(int value){ int ...原创 2019-05-24 14:53:03 · 199 阅读 · 0 评论 -
编写一个函数实现n^k,使用递归实现
编写一个函数实现n^k,使用递归实现我们需要考虑k的取值:(1)k=0时,结果肯定为1。(2)k=1时,结果为n。(3)k>1时,则需要k个n相乘。#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)Fact(int n, int k){ if (k = 0){ r...原创 2019-05-13 19:44:16 · 305 阅读 · 0 评论 -
一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19#include<stdio.h> #include<windows.h>#pragma warning(disable:4996)i...原创 2019-05-13 18:44:28 · 163 阅读 · 0 评论 -
猜数字(1-100)
猜数字猜字游戏,根据用户输入的数字提示猜大了还是猜小了,用户猜对时,提示恭喜你猜对了。因为程序中要生成随机数srand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed);用法:它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过...原创 2019-05-05 22:14:32 · 2884 阅读 · 1 评论 -
判断1000-2000年之间的闰年
闰年定义:能被4整除且不能整除100或者整出400的年份。#include <stdio.h>#include <stdlib.h>int main(){ int year=0; for(year=1000;year<=2000;year++){ if(year%4==0&&year%100!=0||year%...原创 2019-04-19 22:37:10 · 188 阅读 · 1 评论 -
输出9*9乘法口诀表
思路:利用俩层循环。遇到问题:第一遍无法换行输出,在第一层循环里添加换行语句,得到正确输出格式。#include <stdio.h>#include <stdlib.h> int main() { int i = 0; int j = 0; int s = 0; for (i = 1; i <= 9; i++){ for (j = 1; j ...原创 2019-04-19 21:48:15 · 2268 阅读 · 2 评论 -
将三个数按从大到小输出
1.用户从键盘输入三个数字,a,b,c。2.俩个数字俩个数字进行比较,如果a小于b,则把b的值赋给a,以此类推,保证a是最大值,b随之,c是最小值。#include <stdio.h>#include <windows.h>int main(){ int a=0;int b=0;int c=0;int t=0; printf("Enter thr...原创 2019-04-22 21:38:28 · 1682 阅读 · 0 评论 -
求十个整数中的最大整数
1.用户从键盘输入十个整数,将这十个整数存入一个一维数组中。2.令数组中的第一个元素为max,利用循环,将数组中所有整数遍历,一一比较,找到最大值。#include <stdio.h>#include <windows.h>int main(){ int max=0; int i; int a[10]={0}; printf("E...原创 2019-04-22 20:58:34 · 729 阅读 · 0 评论 -
俩个数值的交换的三种方法
1.给定俩个整形变量m,n的值,创建临时变量,使用中间变量i,将俩个值的内容进行交换。#include <stdio.h>#include <windows.h>int main(){ int m=10;int n=15; int i=0; //创建中间变量 printf("before: m=%d n=%d\n",m,n); ...原创 2019-04-22 20:29:56 · 1570 阅读 · 0 评论 -
1-100所有的整数中共有多少个数字9
1-100中包含数字9的整数,首先我们初始化一个累加器sum=0.用它来计数。我们首先想到的肯定是9,19,29……若i%10的结果若为9,那它一定为9,19,19……中的一个。转念再想,90,91,92也是带有数字9的整数啊,那它怎么表示?i/10若为9的话,说明它肯定为90,91,92中的某一个。#include<stdio.h>#include<windows.h&g...原创 2020-01-23 16:22:03 · 2288 阅读 · 0 评论 -
计算1/1 - 1/2 + 1/3 - 1/4 + …… + 1/99 - 1/100
这个问题是比较简单的,但有一个地方我们还是需要注意。就是它的+ -号是交替出现的,所以我们初始化m=1,在循环体中写一个m=-m的语句,没循环一次,符号就会相应变反。实现我们的+ -符号交替。#include<stdio.h>#include<windows.h>int main(){ int i; double sum = 0; int m = 1; fo...原创 2019-04-25 21:59:17 · 1480 阅读 · 0 评论 -
递归和非递归分别实现求n的阶乘
递归和非递归分别实现求n的阶乘1.使用递归时我们要考虑n的值(1)n=1时,n的阶乘为1。(2)当n>1时,n的阶乘为 n * (n-1) * (n-2) * … * 1.#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)int Fact(int n){ if (n =...原创 2019-05-13 21:03:13 · 1292 阅读 · 0 评论 -
递归和非递归分别实现strlen
递归和非递归分别实现strlen我们首先要清楚,每个字符串都是以\0结尾的,所以当这个字符串只有\0时,他的长度必定为0.同理,当我们在一个字符串中遇到\0,就说明这个字符串结束了。递归:#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)int Strlen(const char ...原创 2019-05-13 22:10:14 · 83 阅读 · 0 评论 -
英文字母大小写转换
要求:(1)可以一直接收键盘字符(2)如果是小写字符就输出对应的大写字符(3)如果是大写字符就输出对应的小写字符(4)如果是数字不输出要求键盘一直接收字符(s = getchar()) != EOF在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本...原创 2019-05-11 00:03:30 · 767 阅读 · 0 评论 -
求100-200之间的素数
素数定义:一个大于1的正整数,除了1和它本身以外,不能被其他正整数整除。解题思路:先找出100-200之内所有的整数。让这个整数对除去1和它本身的数字取余,若余数为0,则不是素数。反之为素数。#include <stdio.h>int main(){ int i=0; int k=0; for(i=100;i<=200;i++) //100...原创 2019-04-19 20:56:51 · 10118 阅读 · 5 评论