C练习题
Tianzez
稳健
展开
-
八皇后问题 —— 递归回溯算法
1. 题目: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 2. 解题思路:创建两个全局变量:一个8*8的int类型数组 int board[8][8]模拟棋盘, 和一个计数器 int su...原创 2018-05-08 17:27:17 · 2351 阅读 · 2 评论 -
练习题004:一元二次方程求解
C语言练习题目录索引题目:二元一次方程的形式一般是 ax2+bx+c=0" role="presentation" style="position: relative;">ax2+bx+c=0ax2+bx+c=0 ax^2+bx+c=0(a不能为0),输入a、b、c,求这个二元一次方程的解。解题思路:首先我们得清楚二元一次方程求解公式:x=−b±b2原创 2017-09-24 09:57:41 · 2997 阅读 · 0 评论 -
C语言项目:贪吃蛇
实现功能: 增速——蛇每吃一次食物自身速度就是增加一次; 加速——每次按F1可增加一次速度,但不能超过最快速度; 减速——每次按F2可减缓一次速度,但不能小于自身原本的速度; 分数——每吃一次食物,分数会实时更新出来; 暂停——游戏中按空格键可以暂停,再按一次又开始游戏,如果按esc直接退出游戏。RetroSnaker.h#ifndef __RETROSNAKER_原创 2017-12-18 16:08:44 · 1221 阅读 · 0 评论 -
C语言项目:注释转换(C风格注释转换成C++风格注释)
1.convert_comment.h#ifndef __CONVERT_COMMENT_H__#define __CONVERT_COMMENT_H__#include <stdio.h>#include <windows.h>#define INPUTFILE "input.c" //输入输出文件#define OUTPUTFILE "output.c"enum { CSTATU原创 2017-12-06 21:55:02 · 559 阅读 · 0 评论 -
练习题013:二分查找(递归和非递归两种方法)
C语言练习题目录索引题目:用递归和非递归两种方法实现二分查找非递归法:int binary_search(int *arr, int lenth, int key){ assert(arr != NULL); int left = 0; int right = lenth - 1; int mid = 0; while (left <=...原创 2017-10-01 09:41:08 · 802 阅读 · 0 评论 -
C语言输入一个日期判断是当年的第几天
注意: ①判断输入的年份、月份、天数要合法; ②其中天数不能超过该月的最大天数; ③区分平年和闰年。代码如下:int isLeapYear(int year){ if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { return 0;//是闰年 } e原创 2017-12-05 12:24:55 · 7199 阅读 · 1 评论 -
自己模拟实现strcpy函数功能
这段代码的五个亮点: ①返回值为char*,链式访问。 ②给srce前加const,防止*srce在子函数中被意外修改,加强了代码的健壮性(鲁棒性)。 ③使用断言,传过来的两个指针不能为NULL,避免因为这种情况程序崩溃。 ④运算过程和判断条件 都放在while判断条件中,代码更加简洁 ⑤先定义一个指针变量储存dest最开始的值,方便把首地址传回去。 注意: st原创 2017-10-17 21:41:38 · 1316 阅读 · 1 评论 -
C语言编写三子棋完整代码(分三个文件)
1.game.h 头文件#ifndef __GAME_H__#define __GAME_H__#include <stdio.h>#include <string.h>#include <windows.h>#include <time.h>#define ROW 3#define COL 3void InitBoard(char arr[ROW][COL], int row原创 2017-10-21 21:28:53 · 1211 阅读 · 0 评论 -
用C语言编写通讯录(动态版+文件版)
实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人代码1:function.h原创 2017-11-25 12:51:49 · 1107 阅读 · 2 评论 -
找出一个字符串中所有的元音字母
int main(){ char sentence[] = "Wangye is a handsome boy!"; char Vowels[] = "aeiou"; char* pch = NULL; printf("Vowels in '%s': ", sentence); pch = strpbrk(sentence, Vowels);//这里用了str原创 2017-11-22 21:55:02 · 5240 阅读 · 0 评论 -
简单的递归习题
1.递归和非递归分别实现求第n个斐波那契数。 代码如下:<递归法:>int fib(int num) { if (num <= 2) { return 1; } while (num > 2) { return fib(num - 1) + fib(num - 2); }}<非递归:>int fib(i原创 2017-11-12 17:18:57 · 1041 阅读 · 0 评论 -
练习题005:冒泡排序
C语言练习题目录索引题目:给定一组数字,使用冒泡排序将其按升序序列排序。解题思路:冒泡排序利用两个嵌套while循环完成,内层循环每循环一次就将找的的最大数已到最后一个位置,此时这个位置就不用管了,再排序前面的数。 void swap(int *x, int *y) //交换两数的位置{ *x ^= *y; *y ^= *x; *x ^= *y;}vo原创 2017-09-24 17:48:59 · 1561 阅读 · 0 评论 -
练习题007:求两个数的最大公因数和最小公倍数
C语言练习题目录索引 最大公约数:辗转相除法; 最小公倍数=两数之积 / 两者的最大公约数。#include #include int main(){ unsigned long number1 = 0; //两个整数 unsigned long number2 = 0; unsigned long tem = 0; unsigned原创 2017-09-27 15:22:49 · 1738 阅读 · 0 评论 -
百马百担问题,有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,编程计算共有多少种驮法。
解题思路: /* * 设大马x匹, 中马y匹, 小马z匹 * 3x + 2y + z/2 = 100 ① * x + y + z = 100; ② * x >= 0; ③ * y >= 0; ④ * z >= 0; && z&1 == 0; ⑤ * 由①②可得: ...原创 2018-05-03 21:39:17 · 26156 阅读 · 4 评论 -
练习题012:编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
C语言练习题目录索引题目:编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。例如,输入“{()wqwq6}{{{}}}”判断里面的花括号匹配,返回1;输入“{{{}}}{”判断里面的花括号不匹配,返回0。解题思路:设置一个计数器count,当读取到’{‘时count++,当读取到’}’时,count–。用一个while循环遍历整个字符串,最后count为0时,则花原创 2017-09-29 09:24:41 · 862 阅读 · 0 评论 -
C语言练习题目录索引
练习题001:判断闰年练习题002:判断素数练习题003:打印九九乘法表练习题004:一元二次方程求解练习题005:冒泡排序练习题006:求1-100中数字‘9’出现的次数练习题007:求两个数的最大公因数和最小公倍数练习题008:交换两个数组中的元素练习题009:C语言输出打印一个菱形练...原创 2018-02-04 09:30:05 · 1814 阅读 · 0 评论 -
练习题011:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和
C语言练习题目录索引题目:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个非负整数且小于10。解题思路:使用累乘法,把这次运算的结果传递作为下次运算的基础。int Sum(int number){ if ((number0) || (number>9)) return -1; int i = 0; int su原创 2017-09-28 21:33:21 · 679 阅读 · 1 评论 -
练习题010:判断一个数是否为水仙花数
C语言练习题目录索引题目:判断一个数是否为水仙花数。 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5原创 2017-09-28 20:51:01 · 5637 阅读 · 1 评论 -
练习题009:C语言输出打印一个菱形
C语言练习题目录索引题目:在屏幕上打印出一个如下图所示的菱形 解题思路:先把图形分成两部分来看,上面七行看做一部分;下面六行看做一部分。利用双重for循环,第一层for循环控制行,第二层for循环控制列。void PrintDiamond_1(int line){ if (line 1) return; int i = 0; int原创 2017-09-28 20:05:30 · 1294 阅读 · 0 评论 -
练习题008:交换两个数组中的元素
C语言练习题目录索引题目: 给定两个长度相同的int类型的数组,交换两个数组中的元素。解题思路:创建一个中间变量,利用循环逐个交换两数组中的元素。#include #include #include #define MAXSIZE 5 //两数组长度为5void ExchangeTwoArray(int* arr1, int* arr2) //交换元素{ as原创 2017-09-27 16:05:07 · 863 阅读 · 0 评论 -
输出1000-2000年之间的闰年。
C语言练习题目录索引题目:输出1000-2000年之间的闰年。解题思路:如果某年是闰年,拿它一定满足下面两个条件中的一个: ①该年份数能被4整除且不能被100整除; ②该年份数能被400整除。int isLeapYear(int i) { if (((i % 4 == 0) && (i % 100 != 0))|| (i % 400 == 0))//判...原创 2017-09-21 15:06:45 · 5478 阅读 · 0 评论 -
练习题002:判断素数
C语言练习题目录索引题目:设计一个函数判断一个数是不是素数。素数的概念:素数又称质数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。这道题一共有三种思路,且运算效率依次提高。这三种算法唯一的变化是循环条件,我们可以看到从算法1到算法3判断一个数是不是素数的循环次数越来越少,这也代表算法效率越来越高。int isPrime_1(unsigned int num...原创 2017-09-21 19:55:35 · 1482 阅读 · 0 评论 -
用C语言在屏幕上打印九九乘法表
C语言练习题目录索引题目:在屏幕上打印九九乘法表(注意格式对齐)。解题思路:打印九九乘法表这里用两个for嵌套,抓住以下三点,这题就变得很简单了。1.本题需要使用双重循环,外层循环输出行,内层循环输出列.2.行需要循环9次.3.列循环的次数等于行循环的次数这里要额外说的是打印出来的格式。这里介绍一下printf设置打印格式:printf("%3d", n) //打印n,输出宽度是3位,如果n的宽度...原创 2017-09-22 16:30:14 · 8705 阅读 · 1 评论 -
模拟实现strstr函数功能
strstr函数的功能:有两个字符串str1,str2。如果s2是s1的子集,返回s2在s1中首次出现的地址,否则返回NULL。如str1 = “we are student!”,str2 = “are”。那么返回的就是“are”的第一个字符‘a’在s1中的地址。#include <stdio.h>#include <windows.h>#include <string.h>#include原创 2017-10-06 11:42:33 · 595 阅读 · 0 评论 -
在屏幕上打印杨辉三角
#include <stdio.h>#include <windows.h>int main(){ int i = 0; int j = 0; int arr[10][10] = { 0 }; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) {原创 2017-10-16 21:25:48 · 530 阅读 · 0 评论 -
函数指针数组和回调函数的使用实例(qsort)
1.函数指针数组:转移表 实现一个简易计算器,能进行加、减、乘、除和取余运算。int add(int x, int y){ return x + y;}int sub(int x, int y){ return x - y;}int mul(int x, int y){ return x * y;}int dav(int x, int y){ r原创 2017-11-19 11:50:17 · 574 阅读 · 0 评论 -
输出一个整数的每一位
int EveryBit(void){ printf("请输入一个正整数:"); int num = 0; scanf_s("%d", &num); int tem = 0; int count = 1; while (num) { tem = num % 10; printf("该数的第%d位数是%d\n",原创 2017-10-13 19:51:39 · 878 阅读 · 0 评论 -
输入一个字符串然后把它反序输出
char *Uberground(char *arr) { int i = 0; int size = strlen(arr); char temp[100] = ""; for (i = 0; i < size; ++i) { temp[i] = arr[size - i - 1]; } for (i = 0; i <原创 2017-10-19 19:54:04 · 11995 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
int Numberof_oddbits_evenbits(unsigned int num)//无符号整型的形参{ int arrOdd[16] = { 0 }; int arrEven[16] = { 0 }; int i = 0; int flag = 1; int m = 0; for (i = 0; i < 16; i++)//找奇数位原创 2017-10-13 11:38:46 · 561 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
这里程序实现分两步,第一步是先将整个字符串反转过来,第二步是把里面的每个单词再次反转。 student a am i 经第一步操作后 变成:i ma a tneduts经第二步操作后 变成:i am a studentint my_lenth(const char *s) //求出字符串的总长度{ assert(s); //断言,不能传空指针 int lenth = 0原创 2017-10-29 14:25:10 · 738 阅读 · 0 评论 -
把一个无符号整型数字的二进制序列反序后输出
函数原型:unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value二进制位模式从左到右翻转后的值。 思路:这里我们采用效率较高的一种方法——位操作 我们先定义一个变量sum = 0,把sum作为value反序后的数。 利用 value按位与1得到的就是value二进制序列的最低位,例如value=010原创 2017-11-06 20:46:35 · 1122 阅读 · 0 评论 -
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
这题要找出只出现过一次的那个数,如果是一遍遍的遍历对比的话那时间复杂度是非常大的,这里推荐使用异或运算。 我们知道异或运算有个特点,一个数连续两次异或同一个数,这个数的值不变。例如5^4(0101^0100) = 1,1^4(0001^0100) = 5(0101)。这里我们可以利用这个特性,用0和数组中的各个数依次进行异或运算,那么最后得到的值就是单次出现的那个数的值。int research_原创 2017-10-28 22:11:08 · 551 阅读 · 0 评论 -
练习题014:模拟实现strcat函数
C语言练习题目录索引#include <stdio.h>#include <string.h> #include <assert.h> //返回值为char*,实现链式访问char *my_strcat(char *dest, const char *srce) //const修饰字符串,加强代码的壮健性{ char *ret...原创 2017-10-06 09:14:34 · 638 阅读 · 0 评论 -
输入一个字符串,找到其中最长的单词并输出
int main() //第十题,统计单词个数{ char s[100] = "hello the word! ggsyrasa kiujh"; strcat(s, " "); int i = 0; int point = 0; int place = 0; int L = 0; int l = 0; int flag = 1;原创 2017-10-19 19:47:42 · 7423 阅读 · 1 评论 -
比较三个字符串的大小,最后按从小到大的顺序输出
void swa(char arr1[], char arr2[]) //第二题{ char tem[10] = ""; strcpy(tem, arr2); strcpy(arr2, arr1); strcpy(arr1, tem);}int main() //{ char s3[10] = "abc"; char s2[10] = "d原创 2017-10-19 19:43:48 · 4339 阅读 · 0 评论 -
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串
char *Uberground(char *arr) //反序输出字符串{ int i = 0; int size = strlen(arr); char temp[100] = ""; //创建一个空数组,用来做中间变量 for (i = 0; i < size; ++i) { temp[i] = arr[size - i - 1原创 2017-10-18 11:11:21 · 5773 阅读 · 0 评论 -
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
int Compare(void){ printf("请输入两个整数:"); int num1 = 0; int num2 = 0; int ret = 0; int count = 0; scanf_s("%d%d", &num1, &num2); ret = num1 ^ num2; while (ret) {原创 2017-10-13 19:53:56 · 394 阅读 · 0 评论 -
用C语言编写排雷游戏(多文件)
游戏功能: ①打印雷盘 ②随机布雷 ③第一踩雷不死(重新布雷) ④扩展式扫雷 ⑤计算周围雷的个数代码关键点: ①玩游戏的雷盘比实际定义的数组小。 ②memset初始化数组(以字节为单位初始化)。 ③rand函数给雷盘随机位置布雷(用sand设置随机数种子)。原创 2017-10-23 17:25:09 · 941 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三。 B选手说:我第二,E第四。 C选手说:我第一,D第二。 D选手说:C最后,我第三。 E选手说:我第四,A第一。
int main(){ int a = 1; int b = 1; int c = 1; int d = 1; int e = 1; for (a = 1; a <= 5; a++) { for (b = 1; b <= 5; b++) { if (a != b)//剔除并列情况,a和b原创 2017-10-16 21:07:17 · 794 阅读 · 0 评论 -
数组中的只有1 (或2)个数字是单独出现的,其他的都是成对出现的,请找出单独出现的这1(或2)个数字
这道题其实是一道进阶题,它的初级是: 一个数组中只有一个数是单独出现的,其他的都是成对出现的,请找出这个数。 大家首先想到把这个数组遍历一遍,然后进行各种操作,但是这里推荐使用一种效率更高的方法——把数组中所有元素都异或一遍,最后得到的结果就是那个单独出现的数字。 例如数组元素:1 2 4 2 1。 1^2 = 3 (0001 ^ 0010 = 0011) 3^4原创 2017-11-13 21:08:22 · 1766 阅读 · 0 评论