作业

118 阅读8分钟

C语言集训--朱鹏圣--第二次作业

C语言编译预备知识

第二节课的十个问题

一. CPU 内存条 硬盘 显卡 主板 显示器 之间的关系

答:1.cpu、内存、显卡、硬盘都是计算机的主要组成部分。

2.操作系统提供操作,把硬盘上的数据调到内存条上。cpu不能直接处理硬盘里的数据,而是处理内存条上的 数据。如果是图像通过显卡最终在显示器中输出,如果是声音则用声卡进行处理。主板提供了插槽可以将CPU 内存条 硬盘 显卡 插入(中间传输,组织链接)。

3.如果将他们比作一部电影的话。首先要双击这部电影,这个“双击”是操作系统提供的一个操作。电影本身是放在硬盘上的,当我们通过鼠标对它进行双击之后,操作系统就会将硬盘上的这部电影拷贝到内存中。

为什么要将它拷贝到内存中呢?因为CPU不能直接处理硬盘上的数据。所以要先将硬盘上的数据拷贝到内存中,然后再通过CPU处理内存里面的这部电影。处理的结果就是将一些数据变成图像、另一些数据变成声音。图像数据发送给显卡,通过显示器显示出来;声音数据发送给声卡,声卡将它变成声音放出来。这基本上就是一部电影的运行过程。

二.HelloWorld程序是如何运行起来的

软件请求操作系统执行,操作系统调用CPU,CPU将结果返回软件,在显示器上显示

答:1.信息在计算机中表示

当我们输入以下程序,编译运行,计算机从屏幕输出hello, world。

#include <stdio.h>
int main()
{
printf("hello, world\n");
}

我们知道,信息在计算机中都是用0或1表示的。计算机通过这些位信息以及上下文来解读这些0/1。也即:计算机中的信息=位+上下文。 我们输入的hello程序就是由0、1组成的序列,将这些位8位组织成一个字节,每个字节用来表示一个文本字符。ASCII码给出了一种字符与数字的一一对应关系。 hello, world程序以字节方式存放于文件中,其每个字符对应一个数字。

2.将程序翻译成机器可读的形式(即上述程序代码)
3.处理器读取并解释存储在存储器中的指令

三.什么是数据类型

答:1.基本数据类型

数据类型英文字节数
整形int4字节
短整形short int2字节
长字节long int8字节
单精度浮点数float4字节
双精度浮点数double8字节
字符char1字节

2.复合数据类型

共用体 枚举 结构体

四.什么是变量

答:变量本质就是内存中一段存储空间

五.cpu 内存条 vc 操作系统 之间的关系

答:软件在运行前需要向操作系统申请存储空间,在内存空闲空间足够时,操作系统将分配一段内存空间并将外存中软件拷贝一份存入该内存空间站中,并启动该软件的运行! 在软件运行期间,该软件所占内存空间不再分配给其他软件。 当软件运行完毕后,操作系统将回收该内存空间(注意:操作系统并不清空该内存空间中遗留下来的数据),以便再次分配给其他软件使用。

六.变量为什么必须初始化

答:所谓初始化就是赋值的意思

七.如何定义变量

答:数据类型 变量名 = 要赋的值

等价于

数据类型 变量名;

变量名=要赋的值;

举例子:

  • int i=3; 等价于 int i = 3; i = 3
  • int i, j ;等价于 int i ;int j;
  • int i , j=3; 等价于 int i ; int j;j =3;
  • int i =3,j=5 ;等价于 int i ;int j ; i=3 ; j = 5;
  • int i, j; i = j = 5;等价于int i, j; i=5; j = 5

八.什么是进制

答:十进制就是逢十进一

二进制就是逢二进一

以此类推

网课中出现的进制转换程序如下

#include<stdio.h>int main(void)
{
     int i = 0X32C;
 
     printf("i = %d \n", i );
     /*
        printf的用法
        %d表示以十进制输出
        %x或%X表示以十六进制输出
        %o表示以八进制输出
     */
​
     return 0;
}

程序运行如下

微信图片_20211121205251.png

九.常量在C语言中是如何表示的

答: 整数

十进制: 传统的写法

十六进制: 前面加0x或0X

八进制: 前面0 注意是数字零不是字母o

浮点数

传统的写法

  float x = 3.2//传统

科学计数法

float x = 3.2e3//x的值是 3200
​
•                          float x = 123.45e-2//x的值是1.2345

字符

单个字符用单引号括起来

’A‘ 表示字符A

'AB' 错误

‘’AB'' 正确

字符串用双引号括起来

‘’A‘’ 正确 ,因为''A'' 代表了’A' '\0'的组合

十.常量以什么样的二进制代码存储在计算机中

答:整数是以补码的形式转化为二进制代码存储在计算机中的

实数是以IEEE754标准转化为二进制存储在计算机中的

字符的本质实际也是与整数的存储方式相同

十一.代码规范化

答:1.成对写代码(比如括号要成对敲)

2.记得打空格(等号左右敲空格 运算级别最低敲空格 )

3.定义 操作 输出

十二.什么是字节

答:1.字节就是存储数据的单位,并且是硬件所能访问的最小单位

2.一字节 = 8位

1k = 1024字节

1M = 1024K

1G = 1024M

十三.不同类型数据之间相互赋值的问题

十四.什么是ASCII

答: ASCII不是一个值,而是一种规定,ASCII规定了不同的字符是使用哪个字符去表示

它规定了

‘A' -- 65 ' B ' = 66 'a' = 97 'b' = 98 '0' = 48

十五.字符的存储【字符本质上与整数的存储方式相同】

基本的输入和输出函数的用法

printf() --将变量的内容输出到显示器上

四种用法

1.printf(’‘字符串(可以是中文或英文)’‘)

2.printf(’‘输出控制符“, 输出参数);

3.printf (''输出控制符 非控制输出符’‘,输出参数);

输出控制符包含如下

%d %ld %c %f %lf %x(或者%X或者%#X)

为什么需要输出控制符

1.01组成的代码可以表示数据也可以表示指令

2.如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的输出格式输出就会有不同的输出结果

**​**

两种用法: 用法 一:scanf(“输入控制符“,输入参数); 功能: 将从键盘输入的宇符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中 用法二: scanf (“非输入控制符 输入控制符〞,输入参数); 功能: 將从键盘输入的字符转化为输入控制符所规定格式的数据然后存入以输入参数的值为地址的变量中 非输入控制符必领原样输入 如何使用scanf编写出高质量代码

  1. 使用scanf之前最好先使用printf提示用户以什么样的方式来输入

  2. scanf中尽量不要使用非输入控制符,尤其是不要用\n

  3. 应该编写代码对用户的非法输入做适当的处理 char ch: while ( (ch=getchar ()) 1= ’\n')

    continue;

Ubuntu Pastebin代码分享

名词翻译

微信图片_20211121212950.jpg

课后习题

3.10

第四题:

类型含义
achar
bint
cdouble
dunsigned int十六进制格式
edouble

第六题

常量类型转换说明
12int%d
0x3
’c‘char%c
2.34E07double%e
'\040'char%c
7.0double%f

第八题 `printf ("The odds against the %d were %ld to

  1. n", imate, shot) ; printf ("A score of %f is not an %c grade.\n", log,grade);

3.11

第一题 整数的上溢:

微信图片_20211121221737.png 第二题 浮点数的上溢

微信图片_20211121221826.png 第三题 浮点数的下溢

微信图片_20211121222341.png 第二题 `#include<stdio.h> int main() { int ch; scanf("%d",&ch); printf("%c\n",ch); return 0; }

image.png

4.8 第一题`:#include<stdio.h> int main(void) { char first_name[100]; char last_name[100];

printf ("请输入你的姓:");
scanf  ("%s",first_name);
printf ("请输入你的名:");
scanf  ("%s",last_name);
printf ("%s,%s", first_name, last_name );

return 0;

}`

`#include<stdio.h> int main(void) { char first_name[100]; char last_name[100];

printf ("请输入你的姓:");
scanf  ("%s",first_name);
printf ("请输入你的名:");
scanf  ("%s",last_name);
printf ("%s,%s", first_name, last_name );

return 0;

}`

0b606010680186b96fc3fd48d2cdfbb.png 第二题 #include<stdio.h> int main(void) { float height; float Height; char name[100];

printf("请输入你的身高(inch):");
scanf ("%f",&height);
Height = height / 12;
printf("请输入你的姓名:");
scanf ("%s",name);
printf("%s,you are %.3f feet tall\n",name,Height);

return 0;

}

image.png

第三题实在不会了 多多见谅