2022级6.7.天师班C语言寒假作业

题目基于DevC++或VC运行

2025.1.22打卡任务

第1章 C语言概述

  • 1.编写代码打印(以下三行行首的空心圆圈用于分级,打印时请忽略):
    • ===========
    • hello world
    • ===========
  • 2.main()函数前方加int或void有何区别?
  • 3.解释以下代码段的含义
    • "#include"
    • <stdio.h>
    • return 0
    • printf("zhangsan")
    • main()及其后方的"{}"
  • 4.C程序的完整运行步骤有哪些?假设源文件名为“a.c”,运行期间还生成了哪些文件?
  • 5.由0和1组成的二进制指令又称为什么语言?
  • 6.宏定义分为哪两种,简述其一般形式。
  • 7.补充:编译型语言和解释型语言。
    • 编译型(C C++ Java C# Go):代码写完后,编译器将其变成另外一个文件(如C程序链接后生成的“exe”可执行程序),然后交给计算机执行
    • 解释型(python php ruby javascript perl):写完代码交给解释器,解释器会从上到下一行行代码执行:边解释边执行
    • 编译型语言和解释型语言的区别类似于全文翻译VS实时翻译
    • Windows计算机有时运行软件会提示“xxx.dll文件缺失”,该文件就是编译后生成的。
    • 出现错误时
      • python代码要运行到某一句才知道错误(边解释边执行),所以错误之前的print可以正常输出,如以下代码:
      • C语言代码必须通过编译才能知道错误,如果有错误,错误前方的语句中即使前方有printf也无法输出。错误会导致C源程序无法生成exe程序,进而无法执行

第2章 基本数据类型与简单程序设计

2025.1.23打卡任务

  • 1.列举C语言中常用标准数据类型的英文名称和长度(以B为单位)
  • 2.unsigned char/unsigned short类型的取值范围分别是多少,为什么?
  • 3.C语言中八进制数、十六进制数分别以什么开头,包含哪些基数?
  • 4.十进制如何转化为二进制数?
  • 5.二进制、八进制和十六进制数如何转化为十进制数?

2025.1.24打卡任务:进制相关

  • 1.进制基本概念
    • 基数:进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。
      • 如十进制的基数为10,含0~9十个数字
    • 位权:进位制中每一固定位置对应的单位值。
      • 如十进制的个位位权为10^0(1) 、十位位权为10^1(10)、 百位位权为10^2(100),以此类推
  • 2.进制分类
    • 十进制:生活中最常用的进制,满十进一,包含数字0~9(任意十进制数拆分开都是由这十个基数构成)
    • 八进制:以0开头,满八进一,包含数字0~7(任意八进制数拆分开都是由这八个基数构成)
    • 十六进制:以0x或0X开头,包含数字0~9、 字母 A~ F或a~f; A/a代表数字10,F/f代表数字15(任意十六进制数拆分开都是由这十六个基数构成)
      • 用字母代替10~15可避免歧义,如果不引入字母的话,如0X931087中的10是看作十还是一和零,容易产生歧义
  • 3.二/八/十六进制转十进制
    • 拆分十进制数
      • 从十进制数的拆分出发,对比得到其他进制转为十进制的方法。
      • 2354=2x10^3 + 3x10^2 + 5x10^1 + 4x10^0=2354 ---> 每一位的数与该位位权相乘后相加求和
    • 拆分二进制
      • 二进制数只有0和1两种数字组成
      • 二进制数每一位的位权为2^n
      • (1100)2 = 1x2^3 + 1x2^2 + 0x2^1 + 0x2^0 = 12
    • 转换方法
      • 对于形式化的进制表示可以从0开始,对数字的各个数位进行编号,即个位起往左依次为编号0,1,2,……;对称的,从小数点后的数位则是-1,-2,……
      • 十进制数110,其中百位上的1表示1个10^2, 即100,十位的1表示1个10^1, 即10,个位的0表示0个10^0,即0
      • 二进制数110,其中高位的1表示1个2^2, 即4,低位的1表示1个2^1, 即2,最低位的0表示0个2^0,即0
      • 十六进制数110,其中高位的1表示1个16^2, 即256,低位的1表示1个16^1, 即16,最低位的0表示0个16^0,即0
    • 总结
      • 在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,这种关系称为数的位权
      • 十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。无论是二进制、八进制还是十六进制,各位上的位权与该位上的数相乘,最后再相加得到的和就是它转为十进制的结果。
  • 4.十进制转为二/八/十六进制
    • 方法1(基础方法):短除法,除到商为0截止;余数要倒序相连
      • 注意:十进制转为多少进制,除数就是多少(除二取余 除八取余 除十六取余)
      • 案例

    • 方法2(进阶方法)
      • 原理:二进制转十进制是由若干个2的整数次幂相加得到的,那反过来,十进制转为二进制可以拆分为若干个2的整数次幂的和。
      • 必备:2的0到10的幂次方
      • 案例
      // 计算十进制数345的二进制数
      // 离345最近的是256 345-256=89
      // 离89最近的64 89-64=25 
      // 离25最近的16 25-16=9
      // 离9最近的8 9-8=1
      // 所以345 = 256+64+16+8+1 
      // 1、2、4、8、16、32、64、128、256、512 、1024中用到的写1,未用到的写0
      // 即1(1)、 2(0)、4(0)、8(1)、16(1)、32(0)、64(1)、128(0)、 256(1)、 512(0) 、1024(0)
      // 然后从后往前把括号里的数据读出来:0010 1011 001 省去无用的0,即101011001
      // ====================或者=========================
      // 345 = 256+64+16+8+1 = 2^8 + 2^6 + 2^4 + 2^3 + 2^0
      // = 1x2^8 + 0x2^7 + 1x2^6 + 0x2^5 + 1x2^4 + 1x2^3 + 0x2^2 + 0x2^1 + 1*2^0
      // 上式中与2的整数次幂相乘的1或0就是代表整数次幂的位权上的1或0,将2^8到2^0左边的0或1从左往右
      // 排列依然是 101011001
      

2025.1.25打卡任务:进制计算

  • 1.将十进制数8 20转为八进制
  • 2.将十六进制数0X3a转为十进制
  • 3.将二进制数1100转为十六进制

2025.1.27打卡任务:字符

  • 1.求以下字符的ASCII码:'a' 'z' 'A' 'Z' '0' 空格符 空字符
  • 2.列举5个常用的转义字符并说明其作用
    • 补充【生产环境应用】
      • 利用转义字符'\r'动态打印进度条
      #include <stdio.h>
      #include <windows.h>
      int main(){
      	int i;
      	for(i = 1; i <= 100; i++) {
      		printf("%d%%\r", i);
      		Sleep(200);  // 程序睡眠200毫秒
      	} 
      	return 0;
      } 
      
      • 在读取大文件时,可结合'\r'打印文件的读取进度(百分比)
      import os
      import time
      # 1.读取文件的大小(字节)
      file_size = os.stat('./file/zhangsan.jpg').st_size
      
      # 2.逐渐地读取文件
      read_size = 0
      with open('./file/zhangsan.jpg', mode='rb') as f1:
          while read_size < file_size:
              chunk = f1.read(1000) # 读取固定大小的内容,每次最多读取1000B
              read_size += len(chunk)
              val =  int(read_size / file_size * 100)
              print("%s%%\r" %val, end="")
              time.sleep(0.01) # 睡眠0.01秒
      
  • 3.简述圆括号、乘法、除法、模除、加法和减法的书写方式、优先级,并说明除法和模除运算的特性

2025.2.4打卡任务:输入输出 格式符 运算符 数学函数

  • 1.简述函数printf()和scanf()的一般形式和常用的输入或输出格式符
  • 2.使用自增、自减运算符时要注意什么(开放式回答)
  • 3.列举5个常用的数学函数

2025.2.9打卡任务:运算符 弧度 结构化程序

  • 1.列举6个常用的位运算符、优先级、运算特征
  • 2.什么是弧度?如何将角度转换为弧度?
  • 3.结构化程序有哪几种基本结构?

第3章 分支结构程序设计

2025.2.11打卡任务

  • 1.简述常用的关系运算符的含义及其优先级
  • 2.简述常用的逻辑运算符的含义、优先级和运算特征
  • 3.以下3段代码的执行逻辑有何区别(flag已赋初值)
// 代码段1
if(flag) {
  printf("hello world");
}

// 代码段2
if(flag = 0) {
  printf("hello world");
}

// 代码段3
if(flag == 1) {
  printf("hello world");
}

2025.2.12打卡任务

  • 1.执行以下代码,变量a的值为多少?
    • 参考答案:7
int a=3, b=4;
a=a+b-2;
y=(a++, b++&&a++);
  • 2.以下代码段是否有错误?说明理由
    • 参考答案:y=0后方没有“;”;if分支后的两条语句应该加“{}”括起来
if(x > y)
  printf("%d的值更大", x);
  y = 0
else
  printf("%d的值更大", y);
  • 3.假设整型数据a、b、c均已赋值,请用一条语句实现将a、b、c中的最大值赋值给max
    • 参考答案:max = (max = (a>b?a:b))>c?max:c;

2025.2.13打卡任务

  • 1.列举3种C语言中常用的构造类型
    • 数组类型 结构体类型 共用体类型
  • 2.读代码写结果
int i, j, a=0;
for(i=1;i<=2;i++){
  for(j=1;j<=4;j++){
    if(j%2) break;
    else continue;a++;
  }
}
printf("%d\n", a);
//  答案为0
  • 3.选出合法的C语言标识符(答案:Else Scanf)
    for 1_a a# Else Scanf

2025.2.14打卡任务

  • 1.已知学生测试总分数为100分,现输入学生的成绩(整数),若成绩不低于90则打印A,若不低于80且低于90则打印B,若不低于70且低于80则打印C,低于70分打印D。用switch结构实现。
  • 2.列举2种交换变量a和变量b值的方法(假设a b均有初值)
  • 3.循环结构的程序通常包含哪3部分

课外拓展 写代码

2025.2.5打卡任务:编程练习

  • 1.现有一大于1的正整数num,a1、a2、a3...an是num所有的因数(不含num本身)。现做如下定义:若a1 + a2 + a3 + ... +an = a1 * a2 * a3 * ... * an = num,则称num为“具有完美性质的数”。
    • 填空:闭区间[2, 1000]中所有的“具有完美性质的数”有___________
    • 编程:验证上一题,打印输出2~1000所有的“具有完美性质的数”

2025.2.6打卡任务:编程练习

  • 1.(2024.3.9 软件与应用技术技能考试 第一场)输入一个三行四列的整型二维数组,将数组每行的平均值放在一个一维数组中并输出,平均值保留3位小数。参考如下:
  • 2.(2024.3.9 网络技术技能考试 第一场)输入两行英文单词,输出下标为奇数位的字符
posted @   pycoder_666  阅读(1071)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示