C入门训练营习题集
导学阶段 新概念C语言的题目
- Lesson 2 Let's say hello to world:打印输出 hello
- Lesson 3 Count how many fingers do you have?:循环打印
- Lesson 5 Summarize all numbers from 1 to 100:从1加到100求和
- Lesson 6 Print 9*9 multiplication table:乘法表
- Lesson 7 Find the max prime number within 100:求100以内的最大素数
- Lesson 8 Find 9 in number 1 to 100:1到100有多少个9
- Lesson 9 Convert a number to a string:整型转字符串
- Lesson 10 Josephus ring:约瑟夫环
第1天 程序基本概念、数的表示、类型详解练习
- 编写一个程序,以月/日/年(即mm/dd/yy)的格式接受用户录入的日期信息,并以年月日(及yyyymmdd)的格式将其显示出来:
- 示例:
- Enter a date(mm/dd/yyyy):60/01/2013
- You entered the date 20136001
- 示例:
- 定义变量:
char c; int n;循环读取三次数据,存入c及n变量并显示:scanf(“%c %d”, &c, &n); printf函数基本使用:分别使用格式控制字%d、%x、%f、\t、\n、\b,将整型值7、100以多种格式打印到屏幕;用%f打印17.2365;打印字符串%d、单引号、双引号。- 编写程序,对用户录入的产品信息进行格式化。程序会话示例:
- Enter item number: 583
- Enter unit price: 13.5
- Enter purchase date(mm/dd/yyyy):5/24/2013
- Continue(y/n)?输入y,继续输入下次数据,输入n,结束
- 输出格式:
Item Unit Price Purchase Date 583 $13.50 5/24/2013
- 编写程序,提示用户以
(xxx)xxx-xxxx的格式输入电话号码,并以xxx.xxx.xxxx的格式显示该号码:- 示例:
- Enter phone number [(xxx) xxx-xxxx] : (404) 817-6900
- You entered 404.817.6900
- 示例:
- 十进制数按照二进制输出
- 十进制数按照十六进制输出
- 统计一个自然数的二进制表示形式中有多少个 1
第2天 分支结构、循环结构练习
- 编写程序,输入4个整数找出最大值和最小值:
- 示例:
- Enter four integers: 10 8 49 35
- Largest: 49
- Smallest: 8
- 示例:
- 利用
switch语句编写程序,把数字表示的成绩转化为字母表示的等级:- 规则:A为90-100,B为80-89,C为70-79,D为60-69,F为0-59;成绩高于100或低于0显示出错信息。
- 提示:取成绩的十位值进行判断。
- 示例:
- Enter numerical grade: 84
- Letter grade: B
- 编程实现整数的加法、减法、乘法、除法、取模运算(建议采用
switch语句) - 编写程序,确定一个数的位数:
- 示例:
- Enter a number:374
- The number 347 has 3 digits
- 示例:
- 判断1-100的数中,共有多少个9
- 编写程序,找出用户输入的一串数中的最大值:程序提示用户逐个输入数值,当用户输入0或负数时,显示已输入的最大非负数。
- 示例:
- Enter a number:60
- Enter a number:38
- Enter a number:100
- Enter a number:75
- Enter a number:0
- The largest number entered was 100.
- 示例:
- 将1-200间不能被3整除的数输出(要求每行输出10个数字)
- 打印半菱形图案:根据输入的行数打印不同的半菱形,示例图案:
bash ************************* - 求1-100的素数
第3天 数组练习
一维数组题目
- 从键盘输入数字(范围1-4),输入若干次,输入0表示结束,统计1-4各数字出现的次数:
- 示例:
- 输入: 3 4 2 1 4 2 3 0
- 输出:1:1 2:2 3:2 4:2
- 示例:
- 寻找一维数组
int num[5]中最大、最小值及其坐标位置并打印输出(数组值从键盘读取) - 通过随机数生成办法向数组
int [10]中存数,计算10个数的累加和及相减差 - 编写程序,初始化一个
double数组,然后把数组内容复制到另一个数组中:double source[5](数据从键盘获取),dest[10] - 给定某年某月某日,将其转换成这一年的第几天并输出
- 编写程序检查某一个整数中是否有重复的数字(如检查2822中存在重复数字2)
- 改写上题,使其显示出哪些数字有重复:
- 示例:
- Enter a number: 939577
- Repeated digit(s) : 7 9
- 示例:
- 改写上题,使其打印列表显示每个数字在数中出现的次数:
- 示例:
- Enter a number: 41271092
- 输出格式:
Digit 0 1 2 3 4 5 6 7 8 9 Occurrences 1 2 2 0 4 0 0 1 0 1
- 示例:
二维数组题目
- 通过随机数生成办法,向
int num[10][10]数组中存入数据,找出数组的最大、最小值及其下标 - 编写程序,在3×4的矩阵中找出鞍值(行上最大、列上最小的元素),若没有符合条件的元素则输出相应信息
- 将二维数组转置(行变列、列变行),给定数组:
c num[5][5] = {{1,6,2,3,7},{2,7,3,2,2},{3,2,5,2,6},{3,2,6,4,2},{4,3,7,4,8}};
综合练习
- 编写程序,将用分钟表示的时间转换成以小时和分钟表示的时间:使用
#define创建代表60的符号常量,用while循环允许用户重复键入值,键入小于等于0的时间时终止循环 - 编写程序,要求用户输入天数,转换为周期和天数:示例将18天转换为2周4天,格式为“18 days are 2 weeks,4 days”
- 读整数直到输入0:终止输入后,报告输入的偶数(不包括0)总个数及平均值、奇数的个数及平均值
- 编写程序,创建8个元素的
int数组,将元素分别设置为2的前8次幂,然后打印它们的值 - 把包含10个数组内的某5个连续元素复制到长度为5的数组中:示例“ You want to copy items of range: 0 – 4”,则复制0-4下标位置的元素
- 在二维数组中形成并输出如下矩阵:
bash | 1 1 1 1 1 | | 2 1 1 1 1 | A = | 3 2 1 1 1 | | 4 3 2 1 1 | | 5 4 3 2 1 | - 对
int num[5][5]完成以下操作:- 求出对角线上各元素和
- 求出对角线上行、列下标均为偶数的元素
- 找出对角线上最大元素和它在数组中的位置
- 实现发牌程序:负责发一副标准纸牌(花色:梅花club、方块diamond、红桃heart、黑桃Spade;等级:2-9、J、Q、K、A),用户指明手里的牌数,随机抽取且不重复。
- 提示:设定4×12的二维数组,元素初值为0,抽取一张纸牌后将对应元素置为1
- 示例:
- Enter number of cards in hand: 5
- Your hand:7c 2s 5d As 2h
数组的操作:移动、交换、排序
- 实现数组元素的循环移动(左移、右移)
- 编写程序,在字符串
str中找出最大的字符并放在第一个位置,将该字符前的原字符往后顺序移动:示例str为“helloworld”,执行后为“whelloorld” - 根据指定数据完成数组移动:如
int num[10],用户输入3则数组元素右移3个单位,输入-4则左移4个单位 - 实现数组元素反向
第4天 结构、联合和枚举及简单函数练习
简单函数练习
- 编写函数
int is_leap_year(int year):判断year是不是闰年,是则返回1,否则返回0。规则:能被4整除但不能被100整除,或能被400整除的年份是闰年。 - 编写函数
double myround(double x):输入小数并四舍五入,示例myround(-3.51)返回-4.0,myround(4.49)返回4.0;可调用math.h中的ceil和floor函数。 - 求解1+2+…+n的和
- 求Fibonacci数列的第n项:
fib(0) = 1,fib(1) = 1,fib(n) = fib(n - 1) + fib(n – 2) - 编程求取两个整数的最大公约数:
- 示例:
- Enter two integers: 12 28
- Greatest common divisor: 4
- 提示:用
m、n存储两个整数,若n为0,m即为最大公约数;否则计算m除以n的余数,将n保存到m,余数保存到n,重复上述过程。
- 示例:
第5天 结构体练习
- 创建结构体
struct person,编写程序从终端输入5个人的年龄、性别和姓名,然后输出。结构体定义:c struct man{ char name[20]; int age; char gender;//’F’:female ‘M’:male}; - 改写上题:创建
struct person,输入若干人的年龄、性别和姓名,显示年龄最大的人的信息;程序与用户交互判断是否继续接收输入,结构体定义同上。 - 计算“三天打鱼两天晒网”:某人从2005年1月1日开始该规律,计算2005年到今年某一天他是打鱼还是晒网。
- 提示:结构体定义
c struct date{ unsigned int year, month,day;}date_t; - 逻辑:输入年月日,累加天数(注意闰年),根据对5的余数判断。
- 提示:结构体定义
- 输入5本书的名称和单价,按单价降序排列并输出。结构体定义:
c struct book{ char name[20]; float price;}; - 定义两个结构体
struct name和struct student,完成以下操作:- 结构体定义:
c struct name{ char fname[20]; char lname[20];} - 操作:
- 定义含5个元素的
struct student数组,从键盘输入学生姓名及三门功课的成绩 - 计算每个学生的平均成绩
- 分别输出5个学生各门成绩的平均分
- 定义含5个元素的
- 结构体定义:
联合体练习
- 使用位域及共用体显示位域数据在内存中的存储形式,结构体定义:
c struct data{ unsigned int second : 6; unsigned int minute:6; unsigned int hour:5;} - 编写函数
void partition(unsigned int n):将unsigned int型整数的前两个字节和后两个字节作为两个unsigned short型整数输出。 - 用共用体知识判断计算机是大端还是小端系统
- 根据输入的职业标识区分老师或学生,输入对应信息并输出:s表示学生(输出学号),t表示老师(输出级别)。
枚举练习
- 定义枚举
enum weekday,从键盘输入数字,输出对应的星期几。枚举定义:c enum weekday{Sunday,Monday,Tuesday, Wednesday,Thursday,Friday,Saturday} - 定义一个数组,元素可以是整数或
double,向数组中存入5个元素。 - 实现航空公司座位预定程序:飞机座位容量为12,每天一个航班,功能如下:
- a. 用含12个结构的数组,每个结构包括座位编号、是否已分配标记、预订人姓和名。
- b. 显示菜单:
bash To choose a function,enter its letter lable:a)、show number of empty seats //显示空座位数量b)、show list of empty seats //显示空座位编号c)、Assign a customer to a seat assignment//预订d)、Delete a seat assignment//删除预订e)、Quit - c. 执行菜单功能,选择d)和e)需额外输入。
- d. 执行完一个功能后再次显示菜单,除非选择e)。
第6天 位操作练习
- 将某无符号整型数据的第0-3位清零
- 将某无符号整型数据的第4-7位置1
- 将某无符号整型数据的第0-3位取反
- 判断某个数是奇数还是偶数
- 编写函数
unsigned cleanbits(unsigned int n, int start, int end):通过位运算将整型数据的某些位清零 - 编写函数
unsigned setbits(unsigned int n, int start, int end):通过位运算将整型数据的某些位置1 - 编写函数
unsigned getbits(unsigned int n, int start, int end):通过位运算获取某个整形数据的某些位 - 已知
unsigned short a = 0x1234,b = 0x5678,获取a的高字节和b的低字节,组合成新值(结果为0x1278) - 实现
unsigned short数据的字节交换 - 求
unsigned int型数据中有多少个1 - 实现
unsigned int型数据的二进制打印 - 通过位操作实现字母的大小写转化
- 使用位操作实现整数乘法
- 位操作实现循环左移、右移
第7天 指针基础练习
- 猜数游戏:生成1-100之间的整数,用户从键盘不断输入数值直到猜对,打印猜数次数。要求:主函数定义
int secret存放待猜数据,设计函数void create_secret(int *secretp)生成待猜数据。 - 编写函数
void split_time(long total_sec, int *hr, int *min, int *sec):total_sec是从午夜开始的秒数,hr、min、sec是指向变量的指针,函数中
