C语言程序运行过程
第一题答案:
60.5
70.5
运行过程:首先 struct xscj xs[]={{1,60,61},{2,70,71}};这条语句是对结构体数组xs赋初值,{1,60,61}分别赋值给xs[0].n=1, xs[0].cj1=60, xs[0].cj2=61;xs[0].cj3未赋值。同理,{2,70,71}分别赋值:xs[1].n=2, xs[1].cj1=70, xs[1].cj2=71;xs[1].cj3未赋值.
其次,
for(i=0;i<2;i++){
xs[i].cj3=(xs[i].cj1+xs[i].cj2)/2;
printf("%5.1f\n",xs[i].cj3);
}
这条语句是分别对xs[1],xs[2]的cj3字段赋值,赋值为(cj1+cj2)/2的值。输出语句 printf("%5.1f\n",xs[i].cj3);限定了输出宽度和小数点位数,故输出60.5 和 70.5.
2.第二题填空:st.name @st.age
首先明白scanf的格式:
scanf("格式化字符串",变量地址表);
“变量地址表”是接受输入数据的变量的地址。第一个输入格式是%s,接收字符串,字符串名字即为首地址,所以直接st.name就可以了;第二个格式是%d,接收整型数据,所以必须取地址,使用取地址符号&,所以第二空答案就是&st.age.
数据类型表示数字的类型如int,double 等类型在内存中是以换算的二进制存的,而字符类型等在内存中是以ASCII存的,这个通过查ASCII得到相应的二进制,然后存放于内存。
比如:32767 当作int型 为整数,利用除2取余法得到相应的二进制数存于内存(本来应该存补码,但是正数的补码和原码相同)所占的内存空间跟其对应的数据类型有关,可能还与机器有关,
而32767 当作字符 即“32767”,这时应该分解‘3’,‘2’,‘7’,‘6’,‘7’,然后查对应的ASCII码 对应的值为:0011001 00110010 00110111 00110110 00110111 所以在存放的即为该二进制的组合,且占5个字节的内存
将指定的字符“翻译”成对应二进制文件需要“统一”的“密码本”,使得在任何一台计算上c源文件都以相同的二进制形式存储。而翻译这个c源文件的“密码本”就是ASCII码。
ASCII使用8位二进制数表示256个字符,这些字符包括32个大小写字符,10个数字,以及其他的字符,例如,一个输出“hello,world”的ASCII为
2019-03-20
第一题
#include <stdio.h>
struct xscj {
int no;
float cj1;
float cj2;
float cj3;
};
void main() {
int i;
struct xscj xs[] = {{1, 60, 61}, {2, 70, 71}};
for (i = 0; i < 2; i ++) {
xs[i].cj3 = (xs[i].cj1 + xs[i].cj2) / 2;
printf("%5.1f\n", xs[i].cj3);
}
}
// 打印两行,分别是:
60 + 61 / 2 = 60.5
70 + 71 / 2 = 71.7
第二题
#include <stdio.h>
typedef struct node {
char name[6];
int age;
}jlx;
void main() {
jlx st;
scanf("%s", st.name);
scanf("%d", &st.age);
printf("\n*******************");
printf("\n%s -- %d", st.name, st.age);
printf("\n*******************");
}
st.name
&st.age
程序的输出是:
60.5
70.5
-------------
二个填空:
st.name
&st.age
1.编辑:输入源程序并存盘(.C)
2.编译:将源程序翻译为目标文件(.OBJ)
3.链接:将目标文件生成可执行文件( .EXE)
4.运行:执行.EXE文件,得到运行结