这些都是在学习C语言过程中比较基础也比较重要的练习题= =
希望大家互相交流学习= =
第一讲:C基础
练习1.
将57分别转换为十六进制、二进制、八进制数
将100分别转换为十六进制、二进制、八进制数
将10010转换为十进制数
将063转换为十进制数
将0xFE转换为十进制数
练习2.
交换两个int型变量的值
第一讲:课后作业
1.计算十进制 42 转换为二进制、八进制、十六进制分别对应的值。
2.计算二进制 11010110 对应的十进制值
3.计算八进制 075 对应的十进制值
4.计算十六进制 0xA8 对应的十进制值
5.打印下面图形:
*
* *
* * *
6.编写一个程序,要求用户输入一个美元数量,然后显示出增加%5 税
率后的相应金额。格式如下所示:
Enter an amount:100.00
With tax added:$105.00
7.从键盘输入两个实数 a 和 b,输出 a 占 b 的百分之几。小数点后保留 2位。
例如:输入 1 和 4,输出:25.00%
8.编写一个程序,要求用户输入一个美金数量, 然后显示出如何用最 少的 20 美元、10 美元、5 美元和 1 美元来付款:
Enter a dollar amount:93 $20 bills: 4
$10 bills: 1
$5 bills:0
$1 bills:3
9.输入两个整数,打印这两个数的和,差,积,余数
10.查找 ASCII 码表,分别用%d 输出字符,用%c 输出整数。
第二讲:分支结构
练习1.
(1).控制台输入一个字符,如果输入的是m,则输出男性,否则什么都不输出。
(2).如果从控制台输入一个字符,如果输入的是m,则输出男性,否则输出女性,那怎么实现呢? 【if语句】
练习2. 输入一个年份,判断该年份是否是闰年?如果是闰年,则输出该年是闰年,否则输出该年不是闰年。
提示: 闰年:能被400整除或者能被4整除,但是不能被100整除。 【if语句】
练习3. 从键盘输入一个字符,如果是数字打印this is digital,如果是大写字 母,打印this is capital letter,如果是小写字母,打印this is letter, 如果是其他字符,打印other 。【if语句】
练习4.从控制台输入1~4,对应打出春夏秋冬的英文词。【switch语句】
第二讲:课后作业
1.输入一个整数,判断奇偶,并输出“某某是奇数”或者“某某是偶数” 。
2.输入一个数,判断符号。如果大于 0,输出“正数”;如果小于 0,输 出“负数”;如果等于 0,输出“0”。
3.输入生日,输出年龄(周岁)和星座。
4.编程判断 3 人中谁的年龄最大,并打印最大者的年龄
5.铁路托运行李规定:行李重不超过 50 公斤的,托运费按 0.15 元每 公斤计算,如果超过 50 公斤,超出部分每公斤加收 0.1 元。编程实现上述功能
6.有一个函数:x<1 的时候,y = x;1<=x<10 的时候,y=2x-1; x>=10 的时候,y=3x-11。写一段程序,输入 x,输出 y 值
7.编制一个完成两个数四则运算程序。如:用户输入 34+56 则输出结 果为 90.00,要求运算结果保留 2 位有效小数,用户输入时将 2 个运算数以及运算符都输入,根据运算符求结果
8.输入 3 个数,判断是否能构成三角形
9.输入三个数,用两种方法打印出中间值(即第二大值) 提示:第一种,先求最大最小;第二种,只使用条件运算符
第三讲:循环结构
练习1.
用while打印出1~100之间7的倍数。
用while打印出1~100之间个位为7的数。
用while打印出1~100之间⼗十位为7的数。
用while打印出1~100之间不是7的倍数并且不包含7的数。
练习2.
用户从控制台输入一个n,用while打印n个随机数(范围为10~30)。
用户从控制台输入一个n,用while打印n个随机数(范围为30~70), 找出n个随机数中的最大值
练习3.
用for打印出1~100之间7的倍数。
用for打印出1~100之间个位为7的数。
用for打印出1~100之间十位为7的数。
用for打印出1~100之间不是7的倍数并且不包含7的数
练习4.实现乘法口诀表
练习5. 打印三个数字(0 - 9)的组合可能(组合成三位数)。
第三讲: 课后作业
1.随机产生20个[10 , 100]的正整数,输出这些数以及他们中的最大数
2.编程将所有“水仙花数”打印出来,并打印其总个数。“水仙花数” 是各个位立方之和等于该整数的三位数。
3.已知abc+cba = 1333,其中a,b,c均为一位数,编程求出满足条件的 a,b,c 所有组合
4.输入两个数,求最大公约数和最小公倍数。(用两种方法:辗转 相除法和普通方法)
5.一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高
6.输入 n,分别用*输出边长为 n 的实心菱形和空心菱形。 例如:n = 3 时,输出:
*
***
*****
***
*
*
* *
* *
* *
*
7.反复校验用户输入的生日,包括年、月、日。直到年、月、日 都合法。
第四讲:一维数组、字符数组
练习1.
1、定义一个具有20个元素的整型数组,每个元素的取值范围是30-70之间,求数组元素的和。
2、复制一个数组,即两个数组容量一样,把其中一个数组中的元素复制到另外一个数组中。
3、生成2个数组,每个数组都有10个元素,元素取值范围20-40 之间,数组对应元素相加,放到另外一个数组中。
练习2.
1.随机产生10个[20,40]数,并对10个数从小到大排序。
练习3.
查找字符串中的空格数:
例如:“I love iOS, i want an iPhone5s” 6个空格
练习4.
将字符串倒转:
例如:“afjnpue” 转变成字符串“eupnjfa” (注:是改变字符串本身,不是反向输出)
第四讲:课后作业
1.先调试,调试成功后抄写下列程序:
#include
#define SIZE 10
int main(int argc, char *argv[]) {
int a[SIZE] = {0},i= 0; for(i = 0; i < SIZE; i++){
a[i] = i+10;
printf("a[%d] = %d\n", i, a[i]); }
return 0; }
2.将第一题中的数组 a 反向输出。
3.对第一题中的数组进行求和操作,打印计算结果。
4.计算第一题数组连减,打印计算结果。
5.随机产生20个10~50的正整数存放到数组中,并求数组中的多有 元素最大值、最小值、平均值及各元素之和。
6.编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组。
7.给定某年某月某日,输出其为这一年的第几天。
8.编写整型值数组排序程序(冒泡排序--升序)
int a[] = {3,-9,32,77,63,-24,14,0,21,45};
9.找出下列整型数组中最大和最小值及其所在位置 i。
int a[] = {5,-9,32,77,64,-24,14,0,21,45};
10.把 str1, str2, str3 合并到 result 数组中。
char result[50] = {0};
char str1[] = "Lanou "; char str2[] = "23_class "; char str3[] = " is niu best!";
结果:“Lanou 23_class is niu best!”
11.找出下面程序的错误:
int main(int argc, char *argv[]) {
char string[10], str1[10]; int i;
for(i = 0; i < 10; i++)
{
str1[i] = 'a'; }
strcpy(string, str1); }
12.下面这个程序执行后会有什么错误或者效果:
int main(int argc, char *argv[]) {
unsigned char str[10], i; for(i = 0; i < 256; i++) str[i] = i;
}
13.模拟 n 个人参加选举的过程,并输出选举结果:假设候选人有
四人,分别用 A、B、C、D 表示,当选某候选人时,直接输入其编号(编号由计
算机随机产生),
若输入的不是 A、B、C、D 则视为无效票,选举结束后按得票数从高到低输出 候选人编号和所得票数。
14.思考题:编程在一个已知的字符串中找最长单词,假定字符
串中只含字母和空格,空格用来分隔不同单词。 比如:"ni hao world”,最长单词是 world。
15.思考题: 约瑟夫环的数组实现 约瑟夫(Josephus)问题是由古罗马的史学家约瑟夫提出的,他参加并记录了
公元 66-70 年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达 伯特城达 47 天之久,在城市沦陷之后,他和 40 名将士在附近的一个洞穴中避
难。在哪里,将士们群情激奋并表示:要投降毋宁死。于是,约瑟夫建议每个 人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了 最后一签并且做为洞穴中两个幸存者之一生存下来。
约瑟夫环问题的具体描述是:设有编号为 1,2,......,n 的 n(n>0)个人围成一 个圈,从第一个人开始报数,报到 m 时停止报数,报 m 的人出圈,再从他的 下一个人起重新报数,报到 m 时停止报数,报 m 的出圈,......,如此下去,知 道只剩下一人为止。当任意给定 n 和 m 后,设计算法求 n 个人出圈的次序。
16.拓展题:调查学习冒泡排序以外的排序算法,并用 C 语言 实现
第五讲:二维数组、字符串数组、多维数组
练习1.
1.将一个二维数组的行和列交换,存储到另外一个数组中去。
2.有一个3行4列的二维数组,要求编程找出最大元素,并输出所在的行和列。
练习2.
1.创建一个字符串数组(内容是你周围一圈人的姓名),输出最长字符串的长度。
2.创建一个字符串数组(内容是你周围一圈人的姓名),对字符串(英文)从小到大排序。
第五讲:课后作业
1.有一个3行4列的二维数组,要求编程找出最大的元素,并输出所在的行和列。
2.输入6个字符串,并对它们按从小到大的顺序排序后输出。
3.找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有“鞍点”),打印有关信息。(提示:注意特殊情况:没鞍点或多个鞍点)
4.随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个魔方从上面看)
第六讲:函数
练习1.
1.编写函数int sumValue(int n):计算1到n的和。
2.编写函数dayOfYear(year, mouth,day),使得函数返回由这三个参 数确定的那一天是一年中的第几天。
3.编写函数,返回三个整数的中间数。
4.编写函数,返回正整数n中的数字的个数。
练习2.
创建一对文件:operator.h operator.m 实现4个函数,分别求两个整型数的加、减、乘、除。
练习3.
计算 s = (1*1)!+(2*2)! + (3*3)!
1.整型数的平方
2.一个整型数的阶乘
练习5.计算:s = 5!;
第六讲:课后作业
1.一维浮点型数组的冒泡排序函数
2.编写实现 strlen 同功能的函数 stringLength。
3.编写实现 strcpy 同功能的函数 stringCopy。
4.编写实现 strcat 同功能的函数 stringCatch。
5.编写实现 strcmp 同功能的函数 stringCompare。
6.模拟 ATM 机取款的过程
(1).定义两个能保存5个整形数的数组,一个用于保存5个人的卡号,一个用于保存对应卡号的密码。
(2).判断输入的卡号是否在数组中。
(3).如果在数组中就让输入密码,判断是否和卡号对应的密码匹配。
(4).判断密码,24小时内只允许输入3次错误的密码。输入错误应该提示还剩下的输入次数,3 次都输入错误提示 24 小时内不允许操作该卡。
(5).密码正确就让用户对该账户进行相应的操作。
(6).注意取款的限制。
(7).上述功能对于一个 ATM 机是循环的过程,也就是说每个客户都会按照
上面的操作进行操作,一个用户操作完成,下一个用户来了还可以进行相应的 操作
第七讲:结构体
练习1.
有三个学生,编程找出分数最者以及年龄最小者
练习2.
有5名学生保存在结构体数组中,编程查找成绩最高者,输出该学生全部信息
对上述5名学生数组,按成绩从高到低排序, 并输出
第七讲:课后作业
1.定义一个结构体变量(包括年、月、日),计算该日在本年中为第
几天?(注意考虑闰年问题),要求写一个函数 days,实现上面的计算。 由主函数将年月日传递给 days 函数,计算后将日子传递回主函数输出。
2.某班有 5 个学生,三门课。分别编写 3 个函数实现以下要求:
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在 85-90 分的学生,并输出其学号和姓名
3.模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用 A、B、C、D 表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是 A、B、C、D 则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
4.创建一个 Point 结构体,包含 x,y 两个变量。 并写以下函数:
函数 1,判断两个点是否在一条水平线上。
函数 2,判断两个点是否在一条垂直线上。 函数 3,判断两个点是否相等。
5.创建一个 Size 结构体,包含 width,height 两个变量。 并写以下函数:
函数 1,判断两个 size 是否等宽。
函数 2,判断两个 size 是否在等高。 函数 3,判断两个 size 是否相等。
6.创建一个 Rect 结构体,包含 origin,size 两个变量。其中 origin 是
Point 类型的,size 是 Size 类型的。 并写以下函数:
函数 1,判断两个 Rect 是否相交。
函数 2,判断两个 Rect 是否包含某个 Point。 函数 3,判断一个 Rect 是否在另外一个 Rect 中。
第八讲:指针
练习1.
通过指针可以计算字符串的长度。
编程实现。 提示:遇到’\0’表示字符串结束。
第八讲:课后作业
1.编写一个函数,交换 2 个浮点数。
2.在主函数中输入个字符串(二维数组),对他们按从小到大的顺序,然后输出这 6 个已经排好序的字符串。要求使用指针数组进行处理。
3.面试题: 有一字符串中包含数字与字符,请编程去除数字
第九讲:高级指针
练习1.
定义一个点坐标的结构体CPoint,包含两个float 成员x,y。 定义两个CPoint结构体变量m,n
使用两个结构体指针分别指向m,n 然后通过指针计算两点距离(提⽰示:1、勾股定理,2、开⽅方函数sqrt)
练习2.
student stu = {1,”lan ou”,’m’,95.6};
student * p = &stu;
请通过p将name成员中的第⼀一个字⺟母改成⼤大写,所有’ ‘(空格)改成下 划线’_’
练习3.
使用指针查找学员数组中性别为男的学员,成绩增加10分,超过100分 的记为100分)
第九讲:课后作业
1.写一个函数交换两个结构体变量
2.有一学生数组写一函数打印出指定分数段的学生信息
3.有一学生数组,包含5个学生,写一个函数,对学生排序(按学号 从小到大),使用结构体指针操作数组元素
4.有一学生数组,包含5个学生,写一个函数,对学生排序(按姓名 从小到大),使用结构体指针操作数组元素
5.有一学生数组,包含5个学生,写一个函数,对学生排序(按分数 从小到大),使用结构体指针操作数组元素
6.定义一个求圆面积的宏
7.定义一个求2个数平均数的宏
第十讲:动态内存分配
练习1. 有一字符串,其中包含数字,提取其中的数字.要求动态分配内存保存 提示: 先计算出有几个数字,然后根据数字的个数来开辟空间.
练习2.
输入3个学员的姓名,动态分配内存保存学员姓名,并在最后输出
练习3.
定义两个整型指针,分别用malloc、calloc对其分配空间保存3个元 素,malloc分配的空间⽤用memset清零,随机对数组进行赋值随机范 围1-3,赋值后用memcmp比较两个数组。如果相同打印Good!否则 打印Failed...
第十讲:课后作业
1.输入一个数组长度,动态创建数组,所有元素随机生成,输出元素
中的最大值。
2.已知一个数组 20 个元素(随机 1 到 100 之间包含 1 和 100),求大
于平均数的元素个数,并动态生成一个新数组保存(提示:malloc 出 20 个元素保存)
3.有一段文本,将文本中的所有单词,存放到一个字符串数组中。 (要求占用内存最少)
第十一讲:函数指针
练习1. void printHello();
定义一个可以指向上述函数的函数指针,并通过函数指针实现调用该函数。
练习2.
定义两个函数,一个求最大值,一个求和,输入max或sum分别求3,5的 最大值或和(提示,定义一个函数指针,根据输入内容指向不同函数,最后一次调用完成)。
练习3. 写一函数查找成绩90分以上的学员,使用回调函数在姓名后加”高富帅”。
练习4. 对list增加元素,sum求和,mul求乘积.
第十一讲:课后作业
1.随机生成一个 10 个元素的数组,找到 3 的倍数,并将其值修改成 0.(注意:修改数值使用回掉函数处理)
2.有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)