C语言 100道经典编程题适用于专升本,专接本【详细分析版】
2023-04-18 16:09:27 时间
文章目录
- 🎉前言
- ⭐️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<stdio.h>
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<stdio.h>
int main(){
int i, j, k,t=0;
for (i = 1; i <= 9; i++){
t = 0;
//第一次是8个空格
while (8 - i >= t){//打印空格
t++;
printf(" ");
}
for (j = 1; j <= i; j++)//打印左半边三角形
printf("% d", j);
for (k = i - 1; k > 0; k--)//打印右半边三角形
printf("% d", k);
printf("
");
}
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 < 365 + t){//<=0跳出
days -= a[month];//总天数减去每个月份的天数
month++;
}
if (days < 0){//若是days<0了 月份-1 在天数上加回来 days 加这个月的天数
//2022 50天 50天-1月=19天 19-28天 =-9 month=2 month-1=1
//1是a[1] days=-9 -9+28 =19 也就是2月19日
month--;
days += a[month];
//最后一次的时候天数不够减 days为负数了要加回来,变为每月的多少号
}
//month也是代表数组下标 0开始
printf("%d-%d-%d
", year, month + 1, days);
return 0;
}
⭐️求周岁
⭐️4.功能: 输入一个学生的生日(年: y0、 月: m0、 日: d0), 并输入当前日期(年: y1、 月: m1、 日: d1)。 求出该学生的年龄(实足年龄)
int main() { int age, y0, y1, m0, m1, d0, d1; printf("输入生日日期(年,月,日) "); /***********SPACE***********/ scanf("%d%d%d", &y0, &m0, &d0); printf("输入当前日期(年,月,日)"); scanf("%d%d%d", &y1, &m1, &d1); age = y1 - y0; /***********SPACE***********/ if (m0>m1)age--;//生日月份大于当前月份 2000 12 31 2022 6 2 /***********SPACE***********/ if ((m0 == m1) && (d0>d1))age--; //两个月份相等的情况下 生日日期大于当前日期 age-- printf("age=%3d", age); return 0; } ```
⭐️5.编程求出使该算式成立时的这两个数,
⭐️5.功能: 算式: (空)2 * 7(空) = 3848 中缺少一个十位数和一个个位数编程求出使该算式成立时的这两个数, 并输出正确的算式。
//功能: 算式: (空)2 * 7(空) = 3848 中缺少一个十位数和一个个位数。
//编程求出使该算式成立时的这两个数, 并输出正确的算式。
int main(){
int m, n;
for (m = 1; m <= 9; m++){
for (n = 0; n <= 9; n++){
if ((10 * m + 2)*(7 * 10 + n) == 3848){
printf("%d*%d", 10 * m + 2, 70 + n);
}
}
}
return 0;
}
⭐️6.功能:(较难不用看) 编程求任意给两个日期(年 月 日)相差的天数。
//功能: 编程求任意给两个日期(年 月 日)相差的天数。
void date(int startyear, int startmonth, int startday, int endyear,
int endmonth, int endday){
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 <= endyear; 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 <= flagmonth_end; 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 <= end_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;
}
⭐️7.把一个数的二进制奇数位和偶数位交换
//写一个函数把一个数的二进制奇数位和偶数位交换
void Print(int num){
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("
");
}
int Swap(int num){
return ((num & 0xaaaaaaaa) >> 1) + ((num & 0x55555555) << 1);
}
int main(){
int num = 0;
printf("请输入一个数:");
scanf("%d", &num);
printf("初始二进制位:
");
Print(num);
int result=Swap(num);
printf("Swap后十进制 = %d
Swap后二进制位:
",result);
Print(result);
return 0;
}
⭐️8.题目要求找出数组中的两个单身狗
⭐️即数组中只有x个元素是单独不一样的,别的都是有相同的兄弟
//题目要求找出数组中的两个单身狗,即数组中只有x个元素是单独不一样的,
//别的都是有相同的兄弟
int main(){
int arr[10] = { 1, 2, 5, 4, 9, 0, 1, 2, 3, 4 };
int flag;
//10个数循环比较10次
for (int i = 0; i < 10; i++){
flag = 0;
//每个擂主要和全部的人比较,包括自己
for (int j = 0; j < 10; j++){
if (arr[i] == arr[j]){
flag++;//会和自己本身比较一下,所以找到单身狗flag=1 不是的大于1
}
}
if (flag <= 1)printf("单身狗= %d
", arr[i]);
}
return 0;
}
⭐️9. 数字字符串转换为整数
//数字字符串转换为整数
int isNumber(char a[]){
//-123
int i = 0, flag = 0;
if (a[0] == '-'){
//判断是不是数字字符
for ( i = 1; a[i] != '