C语言基础习题50例(一)1-5

虎为百兽尊,罔敢触其怒。
惟有父子情,一步一回顾。

大明风华 朱棣因虎诗感动流泪

习题1

有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

实现思路:
显然,这个题目需要用到循环,并且是循环嵌套,先列出所有可能的组合,再去掉重复的组合即可。
代码如下:

#include <stdio.h>

int main(){
	int i, j, k, n = 0;
	for(i = 1; i < 5; i++){
		for(j = 1; j < 5; j++){
			for(k = 1; k < 5; k++){
				if(i != j && i != k && j != k){
					n++;
					printf("%d%d%d", i, j, k);
					if(n % 5){
						printf(" ");
					}
					else{
						printf("\n");
					}
				}
			}
		}
	}
	printf("\n\nThere are %d numbers.\n", n);
	
	return 0;
} 

打印:

123 124 132 134 142
143 213 214 231 234
241 243 312 314 321
324 341 342 412 413
421 423 431 432

There are 24 numbers.

习题2

企业发放的奖金根据利润提成。利润 (I) 低于或等于 10 万元时,奖金可提 10% ;利润高于 10 万元,低于 20 万元时,低于 10 万元的部分按 10% 提成,高于 10 万元的部分,可可提成 7.5% ; 20 万到 40 万之间时,高于 20 万元的部分,可提成 5% ; 40 万到 60 万之间时高于 40 万元的部分,可提成 3% ; 60 万到 100 万之间时,高于 60 万元的部分,可提成 1.5% ,高于 100 万元时,超过 100 万元的部分按 1% 提成,从键盘输入当月利润 I ,求应发放奖金总数?

实现思路:
该题需要用到if条件判断或switch语句。

方式一——if语句:

#include <stdio.h>

int main(){
	long profit, bonus;
	float ratio;
	printf("Please input the profit:");
	scanf("%ld", &profit);
	if(profit > 0 && profit <= 100000){
		bonus = profit * 0.1;
	}
	else if(profit > 100000 && profit < 200000){
		bonus = 100000 * 0.1 + (profit - 100000) * 0.075;
	}
	else if(profit >= 200000 && profit < 400000){
		bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;
	}
	else if(profit >= 400000 && profit < 600000){
		bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
	}
	else if(profit >= 600000 && profit < 1000000){
		bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;
	}
	else{
		bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;
	};
	printf("The bonus is %ld", bonus);
	
	return 0;
} 

打印:

Please input the profit:1234567
The bonus is 41845

方式二——switch语句:

#include <stdio.h>

int main(){
	long profit, bonus = 0;
	printf("Please input the profit:");
	scanf("%ld", &profit);
	int pr = profit / 100000;
	if(pr > 10){
		pr = 10;
	}
	switch(pr){
		case 0:
			bonus = profit * 0.1;break;
		case 1:
			bonus = 100000 * 0.1 + (profit - 100000) * 0.075;break;
		case 2:
		case 3:
			bonus = 100000 * 0.1 + 100000 * 0.075 + (profit - 200000) * 0.05;break;
		case 4:
		case 5:
			bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (profit - 400000) * 0.03;
		case 6:
		case 7:
		case 8:
		case 9:
			bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + (profit - 600000) * 0.015;break;
		case 10:
			bonus = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 200000 * 0.03 + 400000 * 0.015 + (profit - 1000000) * 0.01;break;
		default:
			printf("Input Error!!\n");break;
		
	}
	printf("The bonus is %ld", bonus);
	
	return 0;
} 

效果与方式一相同。

习题3

一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

实现思路:
方式一——使用简单循环:

#include <stdio.h>
#include <math.h>

int main(){
	int i;
	for(i = 0; i <= 100000; i++){
		int root1 = sqrt(i + 100), root2 = sqrt(i + 268);
		if(pow(root1, 2) == (i + 100) && pow(root2, 2) == (i + 268)){
			printf("%8d", i);
		}
	}
	printf("\n");
	
	return 0;
} 

打印:

      21     261    1581

方式二:
假设该数为 x。

  1. 则:x + 100 = n2, x + 100 + 168 = m2
  2. 计算等式:m2 - n2 = (m + n)(m - n) = 168;
  3. 设m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数;
  4. 可得m = (i + j) / 2, n = (i - j) / 2,因为m、n为整数,所以i 和 j 要么都是偶数、要么都是奇数;
  5. 从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数;
  6. 由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1;
  7. 接下来将 i 的所有数字循环计算即可。
#include <stdio.h>
 
int main (void)
{
    int  i, j, n, x;
    for (i = 1; i < 168 / 2 + 1; i++){
        if (168 % i == 0){
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0){
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%8d", x);
            }
        }
    }
    printf("\n");
    
    return 0;
}

打印:

     -99      21     261    1581

显然,此时比方式一多了一个数-99,只要在方式一中i的初始值减小为-100即可。

习题4

输入某年某月某日,判断这一天是这一年的第几天?

实现思路:
假设月份为n,则天数为前n-1个月的天数加第n月的天数,如果n大于3时,要考虑是否为闰年,如果为闰年,则2月还要多加1天。

#include <stdio.h>
 
int main (void)
{
    int year, month, day, days, leap = 0;
    printf("Please input the date(YYYY_MM-DD):");
    scanf("%d-%d-%d", &year, &month, &day);
    switch(month){
    	case 1:
    		days = 0;break;
    	case 2:
    		days = 31;break;
    	case 3:
    		days = 59;break;
    	case 4:
    		days = 90;break;
    	case 5:
    		days = 120;break;
    	case 6:
    		days = 151;break;
    	case 7:
    		days = 181;break;
    	case 8:
    		days = 212;break;
    	case 9:
    		days = 243;break;
    	case 10:
    		days = 273;break;
    	case 11:
    		days = 304;break;
    	case 12:
    		days = 334;break;
		default:
			printf("Input Error");break;   	
	}
	days += day;
	if(year % 4 ==0 && year % 100 != 0 || year % 400 == 0){
		leap = 1;
	}
	if(leap && month > 2){
		days += 1;
	}
	printf("Days = %d\n", days);
    
    return 0;
}

打印:

Please input the date(YYYY_MM-DD):2020-05-26
Days = 147

习题5

输入三个整数 x、y、z ,请把这三个数由小到大输出。

实现思路:
通过两两比较找出三者中最大和最小的数。

#include <stdio.h>
 
int main (void)
{
    int x, y, z, temp;
	printf("Please input 3 numbers:\n");
	scanf("%d %d %d", &x, &y, &z);
	if(x > y){
		temp = x;
		x = y;
		y = temp;
	}
	if(x > z){
		temp = x;
		x = z;
		z = temp;
	}
	if(y > z){
		temp = y;
		y = z;
		z = temp;
	}
	printf("Small to big: %d %d %d", x, y, z);
    
    return 0;
}

打印:

Please input 3 numbers:
12 34 23
Small to big: 12 23 34
本文件中讲述了c语言经典的282个案,由浅入深。有利于提高广大爱好c语言编程的人员。 其中包括: 第1章 初识C语言 1 实001 第一个C语言程序 2 实002 一个完整的C语言程序 2 实003 输出名言 3 实004 用TC 2.0打开文件 4 实005 计算正方形的周长 5 第2章 简单的C程序 6 实006 输出一个正方形 7 实007 输出一个三角形 8 实008 一个简单的求和程序 9 实009 求10! 10 实010 3个数由小到大排序 11 实011 猴子吃桃 13 实012 阳阳买苹果 14 第3章 算法入门 15 实013 任意次方后的最后三位 16 实014 计算某日是该年的第几天 16 实015 婚礼上的谎言 18 实016 百元买百鸡 19 实017 打渔晒网问 20 实018 判断三角形的类型 22 实019 直接插入排序 23 实020 希尔排序 25 实021 冒泡排序 26 实022 快速排序 27 实023 选择排序 28 实024 归并排序 29 实025 二分查找 31 实026 分块查找 32 实027 哈希查找 34 实028 斐波那契数列 37 实029 哥德巴赫猜想 38 实030 尼科彻斯定理 39 第4章 常用数据类型 41 实031 数值型常量的使用 42 实032 字符型变量的使用 42 实033 求100~200之间的素数 43 实034 利用#输出三角形 44 实035 十进制转换为二进制 45 实036 n进制转换为十进制 46 实037 小球下落问 48 实038 巧分苹果 49 实039 老师分糖果 50040 IP地址形式输出 51 实041 特殊的完全平方数 52 实042 一数三平方 54 实043 求等差数列 55 实044 亲密数 56 实045 自守数 57 第5章 运算符与表达式 60 实046 求二元一次不定方程 61 实047 可逆素数 63 实048 判断闰年 64 实049 黑纸与白纸 65 实050 阿姆斯特朗数 67 实051 最大公约数和最小公倍数 67 实052 求一元二次方程的根 69 实053 自然对数的底e的计算 70 实054 满足abcd=(ab+cd)2的数 70 实055 整数加减法练习 71 实056 判断整倍数 73 实057 阶梯问 73 实058 乘积大于和的数 74 实059 求各位数之和为5的数 75 第6章 数据输入与输出函数 77 实060 使用字符函数输入/输出字符 78 实061 输出相对的最小整数 79 实062 将小写字母转换为大写字母 80 实063 水池注水问 80 实064 用*号输出图案 81 实065 输出一个字符的前驱字符 82 实066 求学生总成绩和平均成绩 83 实067 回文素数 84 第7章 选择和分支结构程序设计 86 实068 判断偶数 87 实069 判断字母是否为大写 88 实070 检查字符类型 89 实071 求最低分和最高分 90 实072 模拟自动售货机 91 实073 计算工资 93 实074 平方和值判断 94 实075 加油站加油 95 实076 简单计算器 97 第8章 循环结构 98 实077 使用while语句求n! 99 实078 使用while为用户提供 菜单显示 100 实079 一元钱的兑换方案 102 实080 特殊等式 103 实081 打印乘法口诀表 104 实082 平方和运算的问 105 实083 求从键盘中输入字符的个数 106 实084 打印杨辉三角 108 实085 求总数问 109 实086 彩球问 110 实087 新同学年龄 112 实088 灯塔数量 113 实089 计算12+22+…+102 114 实090 循环显示随机数 115 实091 卖西瓜 116 实092 银行存款问 117 实093 统计不及格的人数 118 实094 猜数字游戏 119 第9章 数组 123 实095 求各元素之和 124 实096 使用二维数组保存数据 125 实097 计算字符串中有多少个单词 126 实098 不使用strcpy()函数实现 字符串复制功能 127 实099 逆序存放数据 129 实100 相邻元素之和 130 实101 选票统计 131 实102 使用数组统计学生成绩 132 实103 查找数组中的最值 134 实104 判断一个数是否存在数组中 135 实105 求二维数组对角线之和 136 实106 模拟比赛打分 137 实107 矩阵的转置 139 实108 设计魔方阵 141 实109 字符升序排列 142 实110 在指定位置插入字符 144 实111 删除字符串中的连续字符 146 实112 统计各种字符个数 147 实113 字符串替换 148 实114 回文字符串 150115 字符串加密和解密 151 实116 对调最大数与最小数位置 153 第10章 函数编程基础 155 实117 输出两个数中的最大值 156 实118 判断素数 157 实119 递归解决年龄问 158 实120 递归解决分鱼问 159 实121 小数分离 160 实122 求任意数的n次幂 161 实123 固定格式输出当前时间 163 实124 设计函数计算学生平均身高 164 实125 求数组元素中的最小值 165 实126 打印1~5的阶乘 166 实127 求最大公约数和最小公倍数 167 实128 求直角三角形的斜边 168 实129 相对的最小整数 169 实130 当前时间转换 170 实131 显示程序运行时间 171 实132 显示当前日期及时间 172 实133 设置DOS系统日期 173 实134 设置DOS系统时间 174 实135 读取并设置BIOS的时钟 175 实136 任意大写字母转小写 176 实137 字符串复制到指定空间 176 实138 查找位置信息 177 实139 复制当前目录 179 实140 产生唯一文件 180 实141 不同亮度显示 181 实142 字母检测 182 实143 建立目录 183 实144 删除目录 184 实145 对数组进行升序和降序排序 185 实146 设置组合键 187 实147 获取当前日期与时间 188 实148 获取当地日期与时间 189 实149 获取格林尼治平时 190 实150 设置系统日期 191 实151 获取BIOS常规内存容量 193 实152 读/写BIOS计时器 194 实153 获取CMOS密码 195 实154 获取Ctrl+Break消息 197 实155 鼠标中断 198 实156 设置文本显示模式 200 实157 显卡类型测试 204 实158 获取系统配置信息 206 实159 访问系统temp中的文件 209 实160 控制扬声器声音 210 实161 获取Caps Lock键状态 211 实162 获取环境变量 212 实163 贪吃蛇游戏 213 实164 五子棋游戏 219 实165 弹力球游戏 227 第11章 指针 235 实166 使用指针实现整数排序 236 实167 指向结构体变量的指针 237 实168 使用指针输出数组元素 238 实169 使用指针查找数列中的 最大值和最小值 240 实170 使用指针的指针输出字符串 241 实171 使用指向指针的指针对 字符串排序 242 实172 使用返回指针的函数查找 最大值 244 实173 使用指针连接两个字符串 245 实174 用指针实现逆序存放数 组元素值 247 实175 用指针数组构造字符串数组 248 实176 用指针函数输出学生成绩 249 实177 寻找相同元素的指针 251 实178 查找成绩不及格的学生 252 实179 使用指针实现冒泡排序 254 实180 输入月份号并输出英文月份名 255 实181 使用指针插入元素 256 实182 使用指针交换两个数组 中的最大值 257 实183 输出二维数组有关值 259 实184 输出二维数组任一行 任一列值 260 实185 将若干字符串按照字母 顺序输出 262 实186 用指向函数的指针比较大小 263 实187 寻找指定元素的指针 265 实188 字符串的匹配 266 第12章 常用数据结构 269 实189 比较计数 270 实190 找出最高分 271 实191 信息查询 272 实192 候选人选票程序 274 实193 计算开机时间 276 实194 取出整型数据的高字节数据 277 实195 使用共用体存放学生和 老师信息 278 实196 使用共用体处理任意类型数据 279 实197 输出今天星期几 281 实198 创建单向链表 282 实199 创建双向链表 284 实200 创建循环链表 287 实201 使用头插入法建立单链表 289 实202 双链表逆序输出 291 实203 约瑟夫环 293 实204 创建顺序表并插入元素 294 实205 合并两个链表 296 实206 单链表节点逆置 298 实207 应用栈实现进制转换 300 实208 用栈实现行编辑程序 303 实209 用栈设置密码 306 实210 括号匹配检测 310 实211 用栈及递归计算多项式 313 实212 链队列 315 实213 循环缓冲区问 318 实214 简单的文本编辑器 321 第13章 位运算操作符 326 实215 使二进制数特定位翻转 327 实216 将输入的数左移两位并输出 327 实217 编写循环移位函数 328 实218 取出给定16位二进制数 的奇数位 330 实219 取一个整数的后四位 331 实220 求一个数的补码 332 实221 普通的位运算 333 实222 整数与0异或 334 第14章 存储管理 335 实223 使用malloc()函数分配内存 336 实224 调用calloc()函数动态分 配内存 337 实225 为具有3个数组元素的 数组分配内存 338 实226 为二维数组动态分配内存 338 实227 商品信息的动态存放 340 第15章 预处理和函数类型 341 实228 用不带参数的宏定义求 平行四边形面积 342 实229 使用宏定义实现数组值 的互换 343 实230 编写头文件包含圆面积的 计算公式 344 实231 利用宏定义求偶数和 345 实232 利用文件包含设计输出模式 346 实233 使用条件编译隐藏密码 347 第16章 文件读写 349 实234 关闭所有打开的文件 350235 同时显示两个文件的内容 352 实236 创建文件 353 实237 格式化读写文件 355 实238 创建临时文件 357 实239 成块读写操作 358 实240 随机读写文件 360 实241 以行为单位读写文件 362 实242 查找文件 364 实243 重命名文件 364 实244 删除文件 366 实245 删除文件中的记录 367 实246 文件内容复制 369 实247 错误处理 370 实248 合并两个文件信息 373 实249 统计文件内容 375 实250 读取磁盘文件 376 实251 将数据写入磁盘文件 378 实252 显示目录内同类型文件 379 实253 文件分割 382 实254 文件加密 384 实255 自毁程序 386 实256 明码序列号保护 388 实257 非明码序列号保护 389 实258 恺撒加密 391 实259 RSA加密 394 实260 获取当前磁盘空间信息 396 实261 DES加密 398 实262 获取系统配置信息 403 实263 获取寄存器信息 405 第17章 图形图像处理 407 实264 绘制直线 408 实265 绘制矩形 409 实266 绘制表格 411 实267 绘制立体窗口 412 实268 绘制椭圆 414 实269 绘制圆弧线 415 实270 绘制扇区 417 实271 绘制空心圆 418 实272 绘制箭头 419 实273 绘制正弦曲线 420 实274 绘制彩带 421 实275 绘制黄色网格填充的椭圆 423 实276 绘制红色间隔点填充的 多边形 424 实277 绘制五角星 425 实278 颜色变换 427 实279 彩色扇形 428 实280 输出不同字体 429 实281 相同图案的输出 431 实282 设置文本及背景颜色 433
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥说AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值