C入门训练营习题集

C入门训练营习题集

系统发布系统发布
1 次阅读
C语言习题集
文章目录

C入门训练营习题集

导学阶段 新概念C语言的题目

  1. Lesson 2 Let's say hello to world:打印输出 hello
  2. Lesson 3 Count how many fingers do you have?:循环打印
  3. Lesson 5 Summarize all numbers from 1 to 100:从1加到100求和
  4. Lesson 6 Print 9*9 multiplication table:乘法表
  5. Lesson 7 Find the max prime number within 100:求100以内的最大素数
  6. Lesson 8 Find 9 in number 1 to 100:1到100有多少个9
  7. Lesson 9 Convert a number to a string:整型转字符串
  8. Lesson 10 Josephus ring:约瑟夫环

第1天 程序基本概念、数的表示、类型详解练习

  1. 编写一个程序,以月/日/年(即mm/dd/yy)的格式接受用户录入的日期信息,并以年月日(及yyyymmdd)的格式将其显示出来:
    • 示例:
      • Enter a date(mm/dd/yyyy):60/01/2013
      • You entered the date 20136001
  2. 定义变量:char c; int n;循环读取三次数据,存入c及n变量并显示:scanf(“%c %d”, &c, &n);
  3. printf函数基本使用:分别使用格式控制字 %d%x%f\t\n\b,将整型值7、100以多种格式打印到屏幕;用%f打印17.2365;打印字符串 %d、单引号、双引号。
  4. 编写程序,对用户录入的产品信息进行格式化。程序会话示例:
    • Enter item number: 583
    • Enter unit price: 13.5
    • Enter purchase date(mm/dd/yyyy):5/24/2013
    • Continue(y/n)?输入y,继续输入下次数据,输入n,结束
    • 输出格式:
      ItemUnit PricePurchase Date
      583$13.505/24/2013
  5. 编写程序,提示用户以(xxx)xxx-xxxx的格式输入电话号码,并以xxx.xxx.xxxx的格式显示该号码:
    • 示例:
      • Enter phone number [(xxx) xxx-xxxx] : (404) 817-6900
      • You entered 404.817.6900
  6. 十进制数按照二进制输出
  7. 十进制数按照十六进制输出
  8. 统计一个自然数的二进制表示形式中有多少个 1

第2天 分支结构、循环结构练习

  1. 编写程序,输入4个整数找出最大值和最小值:
    • 示例:
      • Enter four integers: 10 8 49 35
      • Largest: 49
      • Smallest: 8
  2. 利用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
  3. 编程实现整数的加法、减法、乘法、除法、取模运算(建议采用switch语句)
  4. 编写程序,确定一个数的位数:
    • 示例:
      • Enter a number:374
      • The number 347 has 3 digits
  5. 判断1-100的数中,共有多少个9
  6. 编写程序,找出用户输入的一串数中的最大值:程序提示用户逐个输入数值,当用户输入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.
  7. 将1-200间不能被3整除的数输出(要求每行输出10个数字)
  8. 打印半菱形图案:根据输入的行数打印不同的半菱形,示例图案:
    bash
    *************************
  9. 求1-100的素数

第3天 数组练习

一维数组题目

  1. 从键盘输入数字(范围1-4),输入若干次,输入0表示结束,统计1-4各数字出现的次数:
    • 示例:
      • 输入: 3 4 2 1 4 2 3 0
      • 输出:1:1 2:2 3:2 4:2
  2. 寻找一维数组int num[5]中最大、最小值及其坐标位置并打印输出(数组值从键盘读取)
  3. 通过随机数生成办法向数组int [10]中存数,计算10个数的累加和及相减差
  4. 编写程序,初始化一个double数组,然后把数组内容复制到另一个数组中:double source[5](数据从键盘获取),dest[10]
  5. 给定某年某月某日,将其转换成这一年的第几天并输出
  6. 编写程序检查某一个整数中是否有重复的数字(如检查2822中存在重复数字2)
  7. 改写上题,使其显示出哪些数字有重复:
    • 示例:
      • Enter a number: 939577
      • Repeated digit(s) : 7 9
  8. 改写上题,使其打印列表显示每个数字在数中出现的次数:
    • 示例:
      • Enter a number: 41271092
      • 输出格式:
        Digit0123456789
        Occurrences1220400101

二维数组题目

  1. 通过随机数生成办法,向int num[10][10]数组中存入数据,找出数组的最大、最小值及其下标
  2. 编写程序,在3×4的矩阵中找出鞍值(行上最大、列上最小的元素),若没有符合条件的元素则输出相应信息
  3. 将二维数组转置(行变列、列变行),给定数组:
    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}};

综合练习

  1. 编写程序,将用分钟表示的时间转换成以小时和分钟表示的时间:使用#define创建代表60的符号常量,用while循环允许用户重复键入值,键入小于等于0的时间时终止循环
  2. 编写程序,要求用户输入天数,转换为周期和天数:示例将18天转换为2周4天,格式为“18 days are 2 weeks,4 days”
  3. 读整数直到输入0:终止输入后,报告输入的偶数(不包括0)总个数及平均值、奇数的个数及平均值
  4. 编写程序,创建8个元素的int数组,将元素分别设置为2的前8次幂,然后打印它们的值
  5. 把包含10个数组内的某5个连续元素复制到长度为5的数组中:示例“ You want to copy items of range: 0 – 4”,则复制0-4下标位置的元素
  6. 在二维数组中形成并输出如下矩阵:
    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 |
  7. int num[5][5]完成以下操作:
    1. 求出对角线上各元素和
    2. 求出对角线上行、列下标均为偶数的元素
    3. 找出对角线上最大元素和它在数组中的位置
  8. 实现发牌程序:负责发一副标准纸牌(花色:梅花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

数组的操作:移动、交换、排序

  1. 实现数组元素的循环移动(左移、右移)
  2. 编写程序,在字符串str中找出最大的字符并放在第一个位置,将该字符前的原字符往后顺序移动:示例str为“helloworld”,执行后为“whelloorld”
  3. 根据指定数据完成数组移动:如int num[10],用户输入3则数组元素右移3个单位,输入-4则左移4个单位
  4. 实现数组元素反向

第4天 结构、联合和枚举及简单函数练习

简单函数练习

  1. 编写函数int is_leap_year(int year):判断year是不是闰年,是则返回1,否则返回0。规则:能被4整除但不能被100整除,或能被400整除的年份是闰年。
  2. 编写函数double myround(double x):输入小数并四舍五入,示例myround(-3.51)返回-4.0,myround(4.49)返回4.0;可调用math.h中的ceilfloor函数。
  3. 求解1+2+…+n的和
  4. 求Fibonacci数列的第n项:fib(0) = 1fib(1) = 1fib(n) = fib(n - 1) + fib(n – 2)
  5. 编程求取两个整数的最大公约数:
    • 示例:
      • Enter two integers: 12 28
      • Greatest common divisor: 4
    • 提示:用mn存储两个整数,若n为0,m即为最大公约数;否则计算m除以n的余数,将n保存到m,余数保存到n,重复上述过程。

第5天 结构体练习

  1. 创建结构体struct person,编写程序从终端输入5个人的年龄、性别和姓名,然后输出。结构体定义:
    c
    struct man{    char name[20];    int age;    char gender;//’F’:female ‘M’:male};
  2. 改写上题:创建struct person,输入若干人的年龄、性别和姓名,显示年龄最大的人的信息;程序与用户交互判断是否继续接收输入,结构体定义同上。
  3. 计算“三天打鱼两天晒网”:某人从2005年1月1日开始该规律,计算2005年到今年某一天他是打鱼还是晒网。
    • 提示:结构体定义
      c
      struct date{    unsigned int year, month,day;}date_t;
    • 逻辑:输入年月日,累加天数(注意闰年),根据对5的余数判断。
  4. 输入5本书的名称和单价,按单价降序排列并输出。结构体定义:
    c
    struct book{    char name[20];    float price;};
  5. 定义两个结构体struct namestruct student,完成以下操作:
    • 结构体定义:
      c
      struct name{    char fname[20];    char lname[20];}
    • 操作:
      1. 定义含5个元素的struct student数组,从键盘输入学生姓名及三门功课的成绩
      2. 计算每个学生的平均成绩
      3. 分别输出5个学生各门成绩的平均分

联合体练习

  1. 使用位域及共用体显示位域数据在内存中的存储形式,结构体定义:
    c
    struct data{    unsigned int second : 6;    unsigned int minute:6;    unsigned int hour:5;}
  2. 编写函数void partition(unsigned int n):将unsigned int型整数的前两个字节和后两个字节作为两个unsigned short型整数输出。
  3. 用共用体知识判断计算机是大端还是小端系统
  4. 根据输入的职业标识区分老师或学生,输入对应信息并输出:s表示学生(输出学号),t表示老师(输出级别)。

枚举练习

  1. 定义枚举enum weekday,从键盘输入数字,输出对应的星期几。枚举定义:
    c
    enum weekday{Sunday,Monday,Tuesday,         Wednesday,Thursday,Friday,Saturday}
  2. 定义一个数组,元素可以是整数或double,向数组中存入5个元素。
  3. 实现航空公司座位预定程序:飞机座位容量为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天 位操作练习

  1. 将某无符号整型数据的第0-3位清零
  2. 将某无符号整型数据的第4-7位置1
  3. 将某无符号整型数据的第0-3位取反
  4. 判断某个数是奇数还是偶数
  5. 编写函数unsigned cleanbits(unsigned int n, int start, int end):通过位运算将整型数据的某些位清零
  6. 编写函数unsigned setbits(unsigned int n, int start, int end):通过位运算将整型数据的某些位置1
  7. 编写函数unsigned getbits(unsigned int n, int start, int end):通过位运算获取某个整形数据的某些位
  8. 已知unsigned short a = 0x1234b = 0x5678,获取a的高字节和b的低字节,组合成新值(结果为0x1278)
  9. 实现unsigned short数据的字节交换
  10. unsigned int型数据中有多少个1
  11. 实现unsigned int型数据的二进制打印
  12. 通过位操作实现字母的大小写转化
  13. 使用位操作实现整数乘法
  14. 位操作实现循环左移、右移

第7天 指针基础练习

  1. 猜数游戏:生成1-100之间的整数,用户从键盘不断输入数值直到猜对,打印猜数次数。要求:主函数定义int secret存放待猜数据,设计函数void create_secret(int *secretp)生成待猜数据。
  2. 编写函数void split_time(long total_sec, int *hr, int *min, int *sec)total_sec是从午夜开始的秒数,hrminsec是指向变量的指针,函数中

评论区0

还没有评论,快来抢沙发吧~

登录 后可发表评论