C语言 100道经典编程题适用于专升本,专接本【详细分析版】
温馨提示:这篇文章已超过383天没有更新,请注意相关的内容是否还可用!
文章目录
- 🎉前言
- ⭐️1.十进制数转任意进制数
- ⭐️2.数字三角形
- ⭐️3. 编程求某年第 n 天的日期。
- ⭐️求周岁
- ⭐️5.编程求出使该算式成立时的这两个数,
- ⭐️6.功能:(较难不用看) 编程求任意给两个日期(年 月 日)相差的天数。
- ⭐️7.把一个数的二进制奇数位和偶数位交换
- ⭐️8.题目要求找出数组中的两个单身狗
- ⭐️9. 数字字符串转换为整数
- ⭐️10.升序的数组插入一个数,还保持升序
- ⭐️11.输入年 月 判断该月多少天
- ⭐️12 遍历法求名次
- ⭐️13. 谁是凶手
- ⭐️14.输入一个整数数组,实现一个函数,来调整数组中的奇数和偶数的位置,奇数在前偶数在后
- ⭐️15.1元一瓶汽水,两个空瓶可以换一瓶,问20元可以喝多少瓶
- ⭐️16.打印一个菱形,输如n的打印2*n - 1行的菱形
- ⭐️17.输入一个整数找出紧跟在他后面的素数
- ⭐️18.计数求和,Sn=2+22+222+2222+22222
- ⭐️19.输入两个数求最小公倍数和最大公因数,代码中有详解
- ⭐️20.一个数 +100之后是完全平方数,+168还是一个完全平方数
- ⭐️21 .数字金字塔
- ⭐️22.字符串左旋
- ⭐️23.【稍难不用看】要求:写一个函数判断一个字符串是否是另一个字符串旋转后得到的
- ⭐️24.给数组删除重复的元素
- ⭐️25.C语言编程题求1! + 2! + 3! + 4!..... + N!
- ⭐️26.C语言编程题求斐波那契数(循环法与递归法)
- ⭐️27.C语言编程输入n,k求n的k次幂(递归与非递归)
- ⭐️28.(递归)输入一个数,把他的每一位相加在输出出来;
- ⭐️29.实现函数把字符数组的元素逆序 如“abc“, 逆序成“cba“.
- ⭐️30. 递归拆分整数
- ⭐️31.设计以函数打印乘法口诀表,
- ⭐️32.构造一函数判断是否为素数100-200之间(只能被自己和1整除的数)
- ⭐️33.打印二进制数的奇数位和偶数位;分别打印二进制序列
- ⭐️34.计算M和N二进制中不同的位数,例如 1和7 有两位不同;
- ⭐️35.输出1900到2000之间的所有闰年
- ⭐️36. 猴子吃桃问题
- ⭐️37.选择排序法 升序排列
- ⭐️38.冒泡排序法
- ⭐️39.求3*3矩阵对角元素的和
- ⭐️40.把整数数组中的元素值逆序存放
- ⭐️41.杨辉三角形
- ⭐️42.折半查找---必须建立在有序的数组中
- ⭐️43. 计算3行 80个字符 的类型个数
- ⭐️44. 原文与密码
- ⭐️45.模拟strcat字符串连接函数
- ⭐️46.模拟strlen(3种方法)
- ⭐️47.模拟strcmp
- ⭐️48.模拟字符串拷贝函数strcpy
- ⭐️49.strncpy的模拟
- ⭐️50.strncat模拟实现
- ⭐️51.模拟strncmp
- ⭐️52.(较难些可以不看)模拟寻找子串的函数strstr
- ⭐️53.内存拷贝函数
- ⭐️54.判断一个数是不是素数:
- ⭐️55.3*3矩阵的转置
- ⭐️56.任何比 2 大的偶数, 总能表示两个素数,
- ⭐️57.输入四位数字输出四个字符
- ⭐️58.把a数组的内容拷贝到b数组每拷贝三个放1个*
- ⭐️59.输入一串字符串把其中最长的字母拷贝放到另一个数组
- ⭐️60.16进制转换位10进制
- ⭐️61.输入10个整数,最大的和最后一个位置上的交换,最小的和最前面的那个交换
- ⭐️62.报数问题 n个人 从1报数到3,每次报数到3的那个元素被清空
- ⭐️63.输入多个字符串,排序后输出
- ⭐️64.(难可不看)输入一个字符串,将连续的数字字符串放到另一个二维数组中
- ⭐️65.结构体指针问题
- ⭐️66.三天打鱼两天晒网, 第 N 天是打鱼还是晒网?
- ⭐️67.输入多个字符串, 然后输出最短的字符串
- ⭐️68. 3 个数, 有两个数一样, 找另一个数
- ⭐️69.有 1000 人捐款, 捐到 10 万就停止捐款。 统计捐款人数和总额
- ⭐️70.指定位置字符串逆序
- ⭐️71.水仙花数
- ⭐️72.求素数因子
- ⭐️73.判断一个数是不是完全平方数?
- ⭐️74.蠕虫问题
- ⭐️75.结构体排序学生情况
- ⭐️76.求一元二次方程的根, ax 方+bx + c = 0, a, b, c 自己输入
- ⭐️77.累加100--999之间个位数为7的素数
- ⭐️78.斐波那契兔子
- ⭐️78.迭代求平方根
- ⭐️79.累加二维数组边缘元素的和
- ⭐️80.逗号表达式方面小题
- ⭐️81.白马百担问题
- ⭐️82.八进制转10进制
- ⭐️83.func(func(x++, y++), func(--x, --y));函数调用问题
- ⭐️84.水手分桃子
- ⭐️85.挖素数
- ⭐️86.两个有序递增 的数组存到另一个数组还是有序的
- ⭐️87.把字符串中的空格去掉
- ⭐️88.将b字符串的内容插入到a字符串,a字符串保持升序
- ⭐️89.用递归的方法把字符串逆序
- ⭐️90.分解质因数
- ⭐️91.10进制转16进制
- ⭐️92.10进制转8进制
- ⭐️93.计算并输出n以内10个最大素数的和
- ⭐️94.完数
- ⭐️95.打印X型图案
- ⭐️96.打印空心正方形
- ⭐️97.判断一个数组是否有序
- ⭐️98.整形数组删除指定的数字
- ⭐️99.给字符数组每个元素中间添加一个空格
- ⭐️100.旋转字符
- ⭐️101.求sinx近似值
🎉前言
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🎉推荐up主专题文章【C语言编程一百题】
🍭作者水平很有限,如果发现错误,请及时告知作者哦!感谢感谢!
本篇涵盖C语言100道常见的编程题,适用于“专接本,专升本,考研,期中期末考试”,每道题都是亲自手动打出来的,也在编译器上测试过,每道题都有相关的详细注释,如有发现错误,欢迎评论区指正。对于零基础伙伴或者没咋做过编程题的小伙伴真心希望将这篇文章的每道题至少【做三遍】,没有人做一遍就能全部都学会,我自己在做编程题时也是做了好几遍,做完之后过一段时间可能也会忘,这就说明还是不熟,就像打王者荣耀时,你不可能上去就会玩的很好,如果你有英雄联盟基础肯定是稍微熟悉一下王者就可以很快上手,其实做这些题也是,锻炼的是一种意识,意识就熟能生巧,很喜欢韩顺平老师课上提到的一句话:“我亦无他,唯手熟尔”,其实也没什么,就是手熟罢了!记住哦!多做几遍,这些题应付接本,升本,绰绰有余。加油,铁铁!
⭐️1.十进制数转任意进制数
#define _CRT_SECURE_NO_WARNINGS 1 #include int main(){ int i = 0, j = 0, num[20], base, n = 0; char ch[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; printf("请输入一个数:"); scanf("%d", &n); printf("请输入要转换的进制数:"); scanf("%d", &base); do{ //255 转16 // (1) 255%16=15 15放入num[0] 255/15=15 //(2) 15%16=15 15放入num[1] 15/16=0 n==0 退出 15正是char数组元素 F 的下标 num[i] = n%base; //n%base得出来的余数最大不会大于base n = n / base; i++; } while (n != 0); //最先的余数是在最后面打印 //--i 因为在里面多加了一次 for (j = --i; j >= 0; j--){ printf("%c", ch[num[j]]); } return 0; }⭐️2.数字三角形
⭐️本题需要看图代数去试:
#define _CRT_SECURE_NO_WARNINGS 1 #include int main(){ int i, j, k,t=0; for (i = 1; i t = 0; //第一次是8个空格 while (8 - i = t){//打印空格 t++; printf(" "); } for (j = 1; j 0; k--)//打印右半边三角形 printf("% d", k); printf("\n"); } return 0; } ⭐️3. 编程求某年第 n 天的日期。
⭐️用数组表示月天数。
int main(){ int year, days, month = 0; int a[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; printf("请输入年,天数:"); scanf("%d%d", &year, &days); int t = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0); //判断闰年 while (days > 0 && days⭐️5.编程求出使该算式成立时的这两个数,
⭐️5.功能: 算式: (空)2 * 7(空) = 3848 中缺少一个十位数和一个个位数编程求出使该算式成立时的这两个数, 并输出正确的算式。
//功能: 算式: (空)2 * 7(空) = 3848 中缺少一个十位数和一个个位数。 //编程求出使该算式成立时的这两个数, 并输出正确的算式。 int main(){ int m, n; for (m = 1; m for (n = 0; n if ((10 * m + 2)*(7 * 10 + n) == 3848){ printf("%d*%d", 10 * m + 2, 70 + n); } } } return 0; } int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int flagmonth_sta, flagmonth_end, i, j,total=0; for (i = startyear; i if (i == startyear) //开始年的月,按从开始的月计算 flagmonth_sta = startmonth; else flagmonth_sta = 1;//否则在1月开始 if (i == endyear) //若是末尾年月份在末尾月结束 flagmonth_end = endmonth; else flagmonth_end = 12;//否则就在12结束 //累加这一年月份的日子 for (j = flagmonth_sta; j //判断是不是闰年 if (flagmonth_end 2 && (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)){ arr[2] = 29; } else arr[2] = 28; int start_day, end_day; if (startmonth == j&&i==startyear) //是起始年的起始月 start_day = startday; else start_day = 0;//否则天数是0 if (endmonth == j&&i == endyear) //终止年的终止月 设为传过来得天数 end_day = endday; else end_day = arr[j];//否则是数组的天数 //;累加当前月份的日子 for (int n = start_day; n total++; } } } printf("%d", total-1); } int main(){ int startyear, startmonth, startday; int endyear, endmonth, endday; printf("请输入开始的年月日:"); scanf("%d%d%d", &startyear, &startmonth, &startday); printf("请输入终止的年月日:"); scanf("%d%d%d", &endyear, &endmonth, &endday); date(startyear, startmonth, startday, endyear, endmonth, endday); return 0; } int arr[32],count=0; while (num){ arr[count++]=num % 2; num /= 2; } for (int i = count-1; i = 0; i--) printf("%d ", arr[i]); printf("\n"); } int Swap(int num){ return ((num & 0xaaaaaaaa) 1) + ((num & 0x55555555) int num = 0; printf("请输入一个数:"); scanf("%d", &num); printf("初始二进制位:\n"); Print(num); int result=Swap(num); printf("Swap后十进制 = %d \n Swap后二进制位:\n",result); Print(result); return 0; } int arr[10] = { 1, 2, 5, 4, 9, 0, 1, 2, 3, 4 }; int flag; //10个数循环比较10次 for (int i = 0; i⭐️37.选择排序法 升序排列
Print_(int *a,int sz){ printf("打印数组情况===============\n"); for (int i = 0; i a[j])index = j; } if (index != i){//把最小的数放到i下标的位置 int t = a[index]; a[index] = a[i]; a[i] = t; } } Print_(a,sz); return 0; }⭐️38.冒泡排序法
⭐️比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定性算法。
冒泡排序基础的排序算法,也是我们必须要牢牢掌握的一种算法。
//冒泡排序法 int main(){ int a[10] = { 1, 4, 7, 2, 5, 8, 3, 6, 9, 0 }; int i, j; int sz = sizeof(a) / sizeof(a[0]); //10个数循环比较9次就行 for (i = 0; i a[j + 1]){ int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } Print_(a, sz); return 0; }⭐️39.求3*3矩阵对角元素的和
//求3*3矩阵对角元素的和 int main(){ int total = 0, a[3][3] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; int i,j; //主对角 for (i = 0; i⭐️40.把整数数组中的元素值逆序存放
//把整数数组中的元素值逆序存放 int main(){ int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int left=0, right = sizeof(a) / sizeof(a[0])-1; while (left⭐️41.杨辉三角形
//杨辉三角形 //int main(){ // //利用二维数组 // int a[10][10]; // for (int i = 0; i⭐️43. 计算3行 80个字符 的类型个数
// 计算3行 80个字符 的类型个数 int main(){ char ch[3][80]; int i = 0; //输入3行字符 //for (i = 0; i ='a'&&ch[i][j]='A'&&ch[i][j] ='0'&&ch[i][j] char a[30]; printf("请输入一串字母:\n"); gets(a); int i = 0; while (a[i]){ if (a[i] = 'a'&&a[i] a[i] = 'a' + 25-(a[i] - 'a'); //基值'a' +25-(差值) a[i] 若是'a' a[i]-'a'=0 'a'+25+0=z } if (a[i] = 'A'&&a[i] a[i] = 'A' + 25-(a[i] - 'A'); //基值'a' +25-(差值) a[i] 若是'a' a[i]-'a'=0 'a'+25+0=z } i++; } printf("转换之后:%s\n", a); return 0; } while (*str1)str1++;//先让str1指向'\0' while (*str1 = *str2){//把当前str2指向的字符赋值给str1指向的空间 //结束条件是*str1指向的空间被赋值了'\0' str1++, str2++;//两个指针变量分别向后指 } } int main(){ char str1[20]; char str2[20]; printf("请输入两个字符串:"); gets(str1); gets(str2); My_strcat(str1, str2); printf("连接之后:%s\n", str1); return 0; } //abc int count = 0; while (*a != '\0'){//不是'\0' count就加1 count++; a++; } return count; } int main(){ char a[30]; printf("请输入一个字符串:"); gets(a); printf("字符串的长度是:%d\n", My_strlen(a)); return 0; } //abc int *start = a;//字符串的首地址先暂存到一个指针变量里面去 while (*a != '\0')a++;//在让a指向'\0' return a - start;//指针减指针代表指针之间经历的元素个数 } int main(){ char a[30]; printf("请输入一个字符串:"); gets(a); printf("字符串的长度是:%d\n", My_strlen2(a)); return 0; } //abc if (*a == '\0')return 0; return 1 + My_strlen3(a + 1); } int main(){ char a[30]; printf("请输入一个字符串:"); gets(a); printf("字符串的长度是:%d\n", My_strlen3(a)); return 0; } while (*a == *b){//对应下标数的字符相等就循环 if (*a == '\0')return 0;//若是有一个等于'\0'说明这两串相等 a++, b++;//++比较下一位 } return *a - *b;//不满足循环就返回差值 } int main(){ char a[30], b[30]; printf("请输入2个字符串:"); gets(a); gets(b); int flag = My_strcmp(a, b); if (!flag)printf("两个字符串是相等的--返回%d\n",flag); else printf("两个字符串是不相等的--返回%d\n",flag); return 0; } while (*a++ = *b++);//先用后加 先用*a的空 和*b的内容 换句话说就是 //把*b的内容放到*a的空间中 然后a在++ b在++ } int main(){ char a[20], b[20]; printf("请输入一个字符串:"); gets(b);//b字符串拷贝到a数组 My_strcpy(a, b); printf("拷贝到a数组之后:%s", a); return 0; } while (k&&(*a=*b)){//进来先判断k值 若是0退出 或者*b赋值*a之后*a是'\0'了也退出 a++, b++;//两个指针变量指向下一个字符 k--;//拷贝的个数减1 } if (*a != '\0')*a = '\0';//若拷贝了k个b数组还没有拷贝完 也就是从k=0这个条件退出的 //*a不是'\0'要把'\0'拷贝过去 } int main(){ char a[20], b[20]; printf("请输入一个字符串:\n"); gets(b);//b字符串拷贝到a数组 int k = 0; printf("请输入拷贝的个数:\n"); scanf("%d", &k); My_strncpy(a, b, k); printf("拷贝到a数组之后:%s\n", a); return 0; } while (*str1)str1++;//指向'\0' while (k && (*str1 = *str2)){//进来先判断k值 若是0退出 或者*str2赋值*str1之后*str1是'\0'了也退出 //两个指针变量指向下一个字符 str1++, str2++;//向后指 k--;//个数-1 } if (*str1 != '\0')*str1 = '\0';//若拷贝了k个str2数组还没有拷贝完 也就是从k=0这个条件退出的 // //*str1不是'\0'要把'\0'拷贝过去 } int main(){ char str1[20]; char str2[20]; int k = 0; printf("请输入两个字符串:"); gets(str1); gets(str2); printf("请输入一个数:\n"); scanf("%d", &k); My_strncat(str1, str2,k); printf("连接之后:%s\n", str1); return 0; } int t = k; while (k&&*a == *b){ if (*a == '\0'){ printf("两个字符串都遇到的'\0' 相同 \n\n"); return 0; } a++, b++;//指向下一个字符 k--;//个数-- } if (k == 0){//若是在k=0时退出 说明前k个字符相等 printf("前%d个字符是相同的退出\n\n", t); return 0; } else return *a - *b;//否则while循环是因为两个字符串不相等退出的返回差值 } int main(){ char a[30], b[30]; int k; printf("请输入两个字符串:\n"); gets(a); gets(b); printf("请输入一个数K:\n"); scanf("%d", &k); int flag = My_strncmp(a, b,k); if (!flag)printf("两个字符串是相等的--返回: %d\n", flag); else printf("两个字符串是不相等的--返回: %d\n", flag); return 0; } if (*b =='\0')return a;//如果b数组是空数组直接返回a数组名 char *na = NULL;//内层指针 char *nb = NULL;//内层指针 while (*a){ na = a;//na每次指向下一个 nb = b;//每次nb指向b串的第一个元素 while (*nb == *na&&*na != '\0'&&*nb != '\0'){ nb++, na++;//元素相等++ } //如果*nb=='\0'说明上面循环nb指向'\0'前面几个元素是相等的 if (*nb == '\0')return a; a++; } //a指向'\0'说明a不存在子串 if (*a == '\0')return NULL; } int main(){ char a[20];//abcdef char b[20];//abcdefj 查找a数组里面有没有bcd printf("请输入2个字符串:"); gets(a); gets(b); char *c=My_strstr(a, b); if (c != NULL)printf("找的了:%s\n", c); else printf("没有找的子串\n"); return 0; } char *src = (char*)a;//转化为char*可以对一个字节处理 char *dest = (char*)b; while (sz){ *src = *dest; src++, dest++;//向后指一的字节 sz--;//拷贝的字节数-1 } } int main(){ int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int b[10] = { 0 }; My_memcpy(b,a,20);//20字节 int 占4字节 也就是5个元素 for (int i = 0; i⭐️57.输入四位数字输出四个字符
//输入四位数字输出四个字符 //void Switch_(int num){ // if (num >= 10)Switch_(num / 10); // printf("%c ", num % 10 + '0'); //} //int main(){ // int num = 0; // printf("请输入一个数字:\n"); // scanf("%d", &num); // Switch_(num); // return 0; //}⭐️58.把a数组的内容拷贝到b数组每拷贝三个放1个*
⭐️法1:
//把a数组的内容拷贝到b数组每拷贝三个放1个* int main(){ char a[30]; char b[30] = { 0 }; int i = 0, j = 0;//j控制b数组下标 printf("请输入一个字符串:"); gets(a); for (i = 0; a[i] != '\0'; i++){ b[j++] = a[i];//直接拷贝元素 if ((i + 1) % 3 == 0){ b[j++] = '*';//拷贝三个就加一个* } } printf("%s", b); return 0; }⭐️法2:
//把a数组的内容拷贝到b数组每拷贝三个放1个* int main(){ char a[30]; char b[30] = { 0 }; int i = 0, j = 0;//j控制b数组下标 printf("请输入一个字符串:"); gets(a); char *p = a; while (*p){ //拷贝3个或者*p=='\0'是结束 for (i = 1; i //"1abc22hello"; char *na = a; while (*a){ na = a;//让na指针变量去改变 while (*na = 'a'&&*na = 'A'&&*na na++;//向后指一个 }//退出条件:是非字母字符就退出 int flag = na - a;//指针-指针代表指针之间经历的元素个数 int len = strlen(b);//获得字符串b的长度 if (flag len){ strncpy(b, a, flag); } if (*na == '\0')break;//最大单词在最后 na指向了'\0' 下面的else a = na + 1; //就跳过去了,所以在这判断一下 if (na == a)a++;//没有进while就外层指针+1 else a = na + 1;//否则就进了,+1是因为while退出时指向了非字母字符要跳过去 } } int main(){ char a[256] = "1abc22hello"; char b[256] = { 0 };//存最大单词; printf("请输入一个字符串:"); gets(a); FindWord(a, b);//找的最长的单词放到b数组 printf("最长的单词是: %s\n", b); return 0; }⭐️60.16进制转换位10进制
//16进制转换位10进制 void deal(char *a){ int num = 0, i; for (i = 0; a[i]; i++){ if (a[i] > '0'&&a[i] num = num * 16 + a[i] - '0';//公式记住就可 } else if (a[i] = 'a'&&a[i] num = num * 16 + a[i] - 'a' + 10; } } printf("转换为十进制为:%d\n", num); } int main(){ char a[9]; printf("请输入一个16进制数:\n"); gets(a); deal(a); return 0; } int i,max = 0, min = 0;//默认最大数和最小数在a[0] //思路:1.首先找到最大数下标和最小数下标 //2.把最小数和a[0]交换 最大数和a[9]交换 //3.注意 先换交换 可能出现a[0]存的是最大数 你和最小数交换完之后 //最大数的下标max要指向先前的最小数下标min for (i = 0; i⭐️思路:
1.首先找到最大数下标和最小数下标
2.把最小数和a[0]交换 最大数和a[9]交换
3.注意 先换交换 可能出现a[0]存的是最大数 你和最小数交换完之后最大数的下标max要指向先前的最小数下标min
⭐️62.报数问题 n个人 从1报数到3,每次报数到3的那个元素被清空
//报数问题 n个人 从1报数到3,每次报数到3的那个元素被清空 int main(){ int a[300], n, i=0, j=0, k=0; /*思路: 1.为数组赋值n个数 2.结束条件是tt==n-1也就是 淘汰掉了n-1个还剩一个人 3.a数组元素不为0 报数+1 4.k==3报到3踢人 淘汰的人数+1 k=0 重新开始 5.报完一轮 存活的还大于1 从新开始 */ printf("请输入一个数:\n"); scanf("%d",&n); for (i = 0; i tt){//结束条件是tt==n-1也就是 淘汰掉了n-1个还剩一个人 if (a[i] != 0){ k++;//数组元素不为0 报数+1 if (k == 3){ a[i] = 0;//设置为0 表示踢出 k = 0;//从新开始报 tt++;//淘汰的数+1 } } i++; if (i == n)i = 0;//报完一轮 从新开始 } for (i = 0; i⭐️思路:
1.为数组赋值n个数
2.结束条件是 tt == n-1也就是 淘汰掉了n-1个还剩一个人
3.a数组元素不为0 报数+1
4.k==3报到3踢人 淘汰的人数+1 k=0 重新开始
5.报完一轮 存活的还大于1 从新开始
⭐️63.输入多个字符串,排序后输出
void sort(char str[5][10]){ int i = 0, j = 0; char temp[10]; for (i = 0; i 0){ strcpy(temp, str[j]); strcpy(str[j], str[j+1]); strcpy(str[j+1], temp); } } } } //输入多个字符串,排序后输出 int main(){ char str[5][10] = { "bbbbb", "aaaaa", "ccccc", "fffff", "eeeee" }; printf("=========排序之前========\n"); for (int i = 0; i⭐️64.(难可不看)输入一个字符串,将连续的数字字符串放到另一个二维数组中
//输入一个字符串,将连续的数字字符串放到另一个二维数组中 int Find_number(char a[], char ch[][20]){ //a1265bb1234 /*思路: 1.外层用*a指针变量来控制循环 2.定义char *na 在内层变化找一段数字字符 3.判断是不是连续的 4.找到了就拷贝到ch数组 用一个变量控制ch数组下标 */ char *na = a, row=0; while (*a){ na = a;//让na去改变 while (*na >= '0'&&*na na++;//指向非数字字符的结束 } if (na == a)a++; else {//否则就指向了数字字符 判断na-a之间经历的这几个数字字符是不是连续的 char *temp = a,flag=0;//flag=1 拷贝 //判断是不是升序连续的 //na-1避免temp+1等于na for (temp; temp =1000退出 } if (person_num >= 1000 && total_money⭐️70.指定位置字符串逆序
void reverse(char *s, int index){ //index下标之前的字符逆序输出 int i = 0; while (i⭐️在给定的字符串 s寻找一个特定的字符 x,如果找到,返回 x 在 s 的第一次出现的下标,在主函数中把 s 字符串x字符之前的字符逆序输出*
⭐️71.水仙花数
⭐️一个三位数 各位的立方相加等于该数就是水仙花数
int main(){ int i = 0; for (i = 100; i⭐️72.求素数因子
⭐️给一个数,求它的素数因子。一个数(素数除外),均可由若干素数相乘组成。
//给一个数,求它的素数因子。一个数(素数除外),均可由若干素数相乘组成。 int fun_1(int n){ int i = 0; for (i = 2; i⭐️76.求一元二次方程的根, ax 方+bx + c = 0, a, b, c 自己输入
//思路, 首先判断根与系数的关系 //0 两个不同的解 //=0 两个相同的解 如果大于等于 0 x1=-b/2a+判别式/2a x2=-b/2a-判别式/2a int main(){ double a, b, c, disc, x1, x2, p, q; scanf("%lf%lf%lf", &a, &b, &c); disc = b*b - 4 * a*c; if (disc p = -b / (2.0*a); q = sqrt(disc) / (2.0*a); x1 = p + q; x2 = p - q; printf("根为:\nx1=%7.2f\nx2=%7.2f\n", x1, x2); } return 0; } for (int i = 2; i 0){ for (i = 0; i⭐️80.逗号表达式方面小题
⭐️81.白马百担问题
⭐️百马百担问题: 有 100 匹马, 驮 100 担货, 大马驮 3 担, 中马驮 2 担, 两匹小马驮 1 担, 问大、 中、 小马各多少匹 ?
int main(){ int dm, zm, xm; for (dm = 0; dm //大妈xx头和中马最多100-dm头 小马最多100-dm-zm头 循环试 for (zm = 0; zm xm = 100 - dm - zm; //等式两边乘以2 dm一个驮3袋 if (dm * 6 + zm * 4 + xm == 200){ printf("大妈:%d 中妈:%d 小马: %d\n", dm, zm, xm); } } } return 0; } char a[9]; int num = 0; printf("请输入一个八进制数:\n"); scanf("%s", a); char *p = a;//a是数组名,数组名是常数不能++要放到指针变量去 while (*p){ num = num * 8 + *p - '0'; //公式可以推导一下和之前一道题16进制转10进制差不多 p++; } printf("转换为的十进制数是: %d\n", num); return 0; } int index = 0, i = 0, num = 0, a[6] = { 0 }; while (1){ i++; num = i;//让num去试看看是不是要寻找的那个数 while (num % 5 == 1){ num=(num-1)/ 5;//减去给猴子的一个 a[index++]=num; num *= 4;//把剩余的4份组合成一份 } if (index == 6) break;//正常退出数组满了分好了 if (index != 6)index = 0;//数组下标置为0继续找 } for (index = 0; index⭐️97.判断一个数组是否有序
⭐️利用冒泡排序,看记号flag的变化
//判断一个数组是否有序 int main(){ int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, flag1 = 1, flag2 = 2, i, j; for (i = 0; i a[j + 1]){//内层循环if一次没进去说明前一个总比后一个大--降序 flag1 = 0; } if (a[j]⭐️98.整形数组删除指定的数字
//整形数组删除指定的数字 int main(){ int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sz = sizeof(a) / sizeof(a[0]), n, i, j; printf("请输入一个数字:\n"); scanf("%d", &n); for (i = 0,j=0; i⭐️99.给字符数组每个元素中间添加一个空格
//给字符数组每个元素中间添加一个空格 int main(){ char a[30] = "abc"; int i = 0; // i不能=0 a b c // 01234 for (i = strlen(a) - 1; i > 0; i--){ a[2 * i] = a[i]; a[2 * i - 1] = ' '; } printf("%s", a); return 0; }⭐️100.旋转字符
//旋转字符 #include int main(){ char *arr = "\/-|"; int i = 0; while (1){ i %= 4;//\r只回车不换行 printf("[%c]\r", *(arr + i)); i++; Sleep(60); } return 0; }⭐️101.求sinx近似值
int main(){ double x = 0, x0 = 0, x1 = 0, total = 0, n = 1, m = 1; printf("请输入一个数:\n"); scanf("%lf", &x); total += x;//第一次+X x1 = x;//先给前面一项赋个值 int i = 2,f=1; //f是符号 m = x;//m存x的初值 while (fabs(x1 - x0) > 1e-6){ x0 = x1; //阶乘 //每次乘两次 for (int t = 2; t > 0; i++){ n *= i; t--; } //幂次 for (int t = 2; t > 0; t--){ x *= m;//m暂存的x初始值每次进来乘2次 } f = -f;//改变符号 x1 = f*(x / n); total += x1; } printf("%lf", total); return 0; }

























