11 计算机中为什么采用二进制表示形式
1.1 计算机中为什么采用二进制表示形式。
答:
容易表示,电路简单可靠。
运算简单。
逻辑性强。
1.2 将下列不同进制的数从大到小排列:
(110110010)2 、(208)10 、(322)8 、(A8)16
答:
(110110010)2、(322)8、(208)10、(A8)16
1.3 什么是数的定点表示方法,什么是数的浮点表示方法,试比较两者可表示的数的范围。 答:
定点数是将小数点固定在数中某个约定的位置
如果机器数采用浮点表示,则小数点的位置是不固定的,可以浮动
1.4 简述冯?诺依曼计算机的基本特点。
答:
采用存储程序方式,即程序和数据放在同一个存储器中,两者没有区别。指令同数据一 样可以送到运算器进行运算,即由指令组成的程序是可以修改的。
存储器是按地址访问的线性编址的唯一结构,每个单元的位数是固定的。
指令由操作码和地址码组成。
通过执行指令,直接发出控制信号来控制计算机的操作。
机器以运算器为中心,输入/输出设备与存储器间的数据传送都经过运算器。
数据以二进制表示。
1.5 简述程序设计的一般过程。
答:
(1)
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
问题。提出解决问题的可行
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。
(2) 确定算法。针对提出的可行方案确定解决问题、完成任务的每一个细节步骤。 (3) 编程。使用程序设计语言把上述算法严格地描述出来(即写成程序),输入到计算机里并 存盘。
(4) 在计算机上运行并调试这个程序。如果在运行过程中发现了错误,就仔细分析出错的原 因,然后更正错误。再次运行该程序,直到程序准确无误并得到正确的输出结果为止。 (5) 总结。写出书面报告。
1.6 解释下列概念:数据、指令、程序、数据结构。
答:
数据(data):是对信息的一种符号表示,在计算机科学中是指所有能输入到计算机中并 被计算机程序处理的符号的总称。
程序,是为了完成一个完整的任务而编写的计算机能够接受并运行的一条条指令。简 言之,程序就是指令的序列。
数据结构是研究计算机中大量数据存储的组织形式,并定义相应的运算以提高计算机的数据处理能力的一门科学。
1.7 什么是操作系统,简述操作系统的功能。
答:
操作系统是用来管理计算机系统的软硬件资源,提高计算机系统资源
的使用效率,方便用户使用的程序集合。
(1) 处理器管理
(2) 存储器管理
(3) 输入/输出设备管理
(4) 文件管理
(5) 人机交互功能
1.8 简述编译程序结构的五道“工序”。
答:
(1) 词法分析程序
(2) 语法分析程序
(3) 中间代码生成程序
(4) 优化程序
(5) 目标代码生成程序
1.9 简述软件开发的生命周期。
答:
一个软件的生存周期包括以下几个阶段:
(1) 问题定义与需求分析。
(2) 总体设计(或称概要设计)。
(3) 详细设计。
(4) 编写程序和单元测试。
(5) 综合测试和确定运行。
(6) 系统维护。
2.1 简述编程语言的发展历史。
答:
计算机语言不断得到发展,由低级语言发展到高级语言。
低级语言又称面向机器的语言,是指这类语言依赖于机器。由于不同的计算机一般有着不同 的指令系统,因此由这类语言编写的程序移植性很差。这类语言主要有机器语言和汇编语言。 汇编语言再向自然语言方向靠近,便发展到了高级语言阶段。高级语言编写的程序易学、易 读、易修改,通用性好,不依赖于机器。但机器不能对用其编制的程序直接运行,必须经过语言 处理程序的翻译后才可以被机器接受。
2.2 简述解释型语言和编译型语言的区别。
答:
(1) 解释型
这种方式效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其 解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,如BASIC 语言和Perl 语言。 (2) 编译型
这种方式的目标程序可以脱离其语言环境独立执行,而且效率较高。现在大多 数的编程语言都是编译型的,C 语言就属于编译型语言。
2.3 简述C 语言的特点。
答:
语言本身简洁、灵活,便于学习和使用。
C 语言又归为中级语言,是因为它把高级语言的成分同汇编语言的功能结合了起来。 运算符类型丰富。
C 语言数据类型丰富,并有多种数据结构,但与Pascal 或Ada 相比,它却不是强类型语 言。
C 语言是一种结构化程序设计语言。
C 语言又称函数式语言。
程序设计较自由,语法限制不严格。
2.4 阅读本书附录,了解C 语言的各种版本、Visual C++ 6.0 开发系统的操作和库函数的使用。
2.5 什么是结构化程序设计,
答:
程序只用三种基本的控制结构实现,只有一个入口和一个出口。
2.6 算法的特性是什么,
答:
解题算法是一个有穷的动作序列。
该动作序列只有一个开始动作。
序列中每一个动作仅有一个后继动作。
序列终止表示问题得到解答或问题无解。
2.7 比较传统
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图、N-S 图和PAD 图的优缺点。
答:
流程图允许用流线使流程任意转移,而结构化程序设计主张限制这种无规律的任意转向
N-S 图把程序结构限制在顺序、选择与重复等几种基本结构内,使用者只能遵守结构化程序设计的规定。但是,如果程序内嵌套的层数过多,内层的方块越画越小,一方面增加了画图的难度,另一方面使图的清晰性受到影响。
PAD(Problem Analysis Diagram)图即问题分析图。PAD 图是近年来在软件开发中被广泛用 来描述算法的一种图表示法。相比而言,流程图和N-S 图都是采用自上而下的方法,而PAD 除 了自上而下以外,还可以自左向右地展开,所以,如果说流程图和N-S 图是一维的算法描述,那 么PAD 图就是二维的。它能展现算法的层次结构,更直观易懂。
2.8 用传统流程图与N-S 图描述下列算法:
a. 已知长方形的长和宽,求其面积。
b. 求0~100 中的全部偶数之和。
c. 求50 个整数中的最小植。
2.9 什么是集成开发环境,
答:
将编辑、编译、调试等功能集成在一个桌面环境中,这就是集成开发环境。
3.1 开发一个C 程序包括哪几个步骤,每个步骤的作用是什么,
答:
(1) 编辑。程序员使用任意编辑软件(编辑器)将编写好的C 程序输入计算机,构成源程序文件,存盘时文件名应以.c 为扩展名。
(2) 编译。编译时,编译器首先会检查源程序中每一条语句的语法。
(3) 连接。编译后产生的目标文件是可重定位的程序模块,不能直接运行。
(4) 测试与调试。一个程序经过编译、连接产生了可执行程序后,就可以开始测试和调试了。 (5) 运行。生成可执行文件后,程序就可以在操作系统控制下运行。
3.2 C 语言对自定义标识符有哪些要求,
答:
(1) 必须由一个字母(a~z,A~Z)或下划线(_)开头;
(2) 其他部分可以用字母、下划线或数字(0~9)组成;
(3) 大小写字母表示不同意义,即代表不同的标识符; (4) 自定义标识符不能使用 C 语言的关键字。
3.3 编程实现下列运算。
a. 已知半径,求圆面积和球体积。
#define PI 3.14159
#include "stdio.h"
int main()
{
float r, s, v;
printf("please insert a number:");
scanf("%f", &r);
s = PI*r*r;
v = (float)4*PI*r*r*r/3;
printf("s = %f, v = %f\n", s, v);
return 0;
}
b. 将两个数的值交换。
#include "stdio.h"
int main()
{
int a, b, t;
printf("please insert two number:");
scanf("%d%d",&a, &b);
printf("a = %d, b = %d\n", a, b);
t = a;
a = b;
b = t;
printf("a = %d, b = %d\n", a, b);
return 0;
}
c. 求一个实数的绝对值。
#include "stdio.h"
int main()
{
float a;
printf("please insert a number:");
scanf("%f", &a);
if(a < 0)
a = -a;
printf("a = %f\n", a);
return 0;
}
d. 求sin(23.8)的值。
#include "math.h" #include "stdio.h"
int main()
{
float a, i = 23.8;
a = sin(i);
printf("sin(23.8) = %f\n", a);
return 0;
}
4.1 在C 语言中为什么要定义数据类型,
4.2 假设inta=2,b=3,c=4,计算下列表达式: a. 1/a*b*c
b. 1/(a*b*c)
c. 1/a/b/c
d. 1.0/(a*b*c)
e. (float)1/(a*b*c) 答:
A,0.000000
B,0.000000
C,0.000000
D,0.041667
E,0.041667
4.3 假如int x=1, y=1, z=1, u=0,求u = x ++ && y ++ || z++ 的值。
答:
1
4.4 写出下列表达式:
a. 求一元二次方程ax2+bx+c=0 实根。 b. 计算浮点数a 的整数部分位数。
c. 已知三角形三边长a, b, c,求三角形面积。 d. 数学式子5x+6sinx+x3-4cos(x2+ 1)+x+ 1。 e. a、b 两变量中有且只有一个是0。
4.5 定义int a=20, n=10;,分别写出执行下列语句后a 的值。
a. a/=a+a
b. a%=n%=7
c. a += a -= a *= a 答:
0
2
0
4.6 定义int x=10,y=7,z=5;,计算下列表达式的值。
a. x
y-3
b. z = x-y, x*2, y-z, z+2
c. (++z >= y--)?++z:y—
答:
0
2
0
4.7 写出下面程序的输出结果。 #include int main(void) { int a=3,b=4,c=5,k; k=c>a>b && c||c/b; printf("%d\n",k); return 0; }
答:
1
4.8 写出下面程序的输出结果。 #include int main(void) { int k=5,b=2; k*=b+++3; printf("%d\n",k); return 0; }
答:
25
4.9 写出下面程序的输出结果。 #include int main(void) { int b=3,k; k=(b+=b-=b*=b); b+=b-=b*b; printf("%d\n",k,b); return 0; }
答:
0
4.10 写出下面程序的输出结果。 #include int main(void) { int i,j,k,a=3,b=2; i=(--a==b++)?--a:++b; j=a++;k=b; printf("i=%d,j=%d,k=%d\n",i,j,k); return 0; }
答:
i=1,j=1,k=3
4.11 写出下面程序的输出结果。 #include int main(void) { int a,b,k;
k=(a=2,b=5,a>b?a++:b++,a+b); printf("%d\n",k); return 0; }
答:
8
4.12 写出下面程序的输出结果。 #include int main(void) { int a=2,b=3; float x=3.5,y=2.5,k; k=(float)(a+b)/2+(int)x%(int)y; printf("%.2f\n",k); return 0; }
答:
3.50
4.13 写出下面程序的输出结果。 #include int main(void) { printf("%s,%5s,%-10s","Internet","Internet","Internet"); printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet"); return 0; }
答:
Internet,Internet,Internet Inter,Inter ,Inter
4.14 按照运算符优先级从高到低的顺序,写出本章所学过的各个运算符(算术运算符、关 系运算符、逻辑运算符、条件运算符、赋值运算符、强制类型转换运算符等)。 答: ( ) [ ] -> .
! ~ ++ -- + - * &(类型) sizeof * / % + - << >> < <= > >= == != & ^ | & & | | ? : = += -= *= /= %= &= ^= |= <<= >>= ,
4.15 编程实现下列功能:输入3 个字符后,按各字符的ASCII 码大小顺序小从小到大输出 这些字符。
#include "stdio.h"
int main()
{
int i;
char min, mid, max, s[3];
printf("please input 3 chars:");
scanf("%c%c%c", s, s + 1, s + 2);
min = (s[0] < s[1])? s[0]:s[1];
min = (min < s[2])? min:s[2];
max = (s[0] > s[1])? s[0]:s[1];
max = (max > s[2])? max:s[2];
for(i = 0; i < 2; i++)
{
if(s[i] != min && s[i] != max)
{
mid = s[i];
break;
}
}
printf("%c%c%c\n", min, mid, max); }
4.16 编程实现下列功能:输入3 个数后,求它们的平均值,然后输出其中与平均值之差的
绝对值最小的那个数。
#include "stdio.h"
float f(float a, float ave) {
float d;
if((a - ave) >= 0)
{
d = a - ave;
}
else
d = ave - a;
return d;
}
int main()
{
float ave, m, min, s[3];
int i = 0;
printf("please insert 3 numbers:");
scanf("%f%f%f", s, s + 1, s + 2);
ave = (float)(s[0] + s[1] + s[2])/3;
while(i < 3)
{
m = f(s[i], ave);
if(i == 1 || m < min)
min = m;
m = min + ave;
i++;
}
printf("the average is%f, the most adjacent number is%f\n", ave, m);
return 0; }
5.1 写出下面程序的输出结果。 #include int main(void) { int a,b,c,d,x; a=c=0; b=x=1; d=10; if(a) d=d-5; else if(!b) if(!c) x=5; else x=25; printf("d=%d,x=%d\n",d,x); return 0; }
答:
d=10,x=1
5.2 写出下面程序的输出结果。 #include int main(void) { int a=0; if(a=1) a+=10; printf("a=%d",a); return 0; }
答:
a=11
5.3 写出下面程序的输出结果。 #include int main(void) { int x=100,a=10,b=20; int v1=5,v2=0; if(a int main(void) { int i,j,x=0; for(i=0;i<2;i++) { x++;for(j=0;j<=3;j++)
{ if ( j%2) continue;x++; } x++; } printf("x=%d\n",x); return 0; }
答:
x=8
5.5 写出下面程序的输出结果。 #include int main(void) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; case 3: a++;b++; } printf("\na=%d,b=%d",a,b); return 0; }
答:
a=2,b=1
5.6 编程实现运输公司对用户计算运费的方法。路程(s)越远,每公里运费越低。
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
如下:
s,250 没有折扣
250?s,500 2,折扣
500?s,1000 5,折扣
1000?s,2000 8,折扣
2000?s,3000 10,折扣
3000?s 15,折扣
#include "stdio.h"
int main()
{
int s;
float m;
printf("please insert lenth:");
scanf("%d", &s);
if(s < 250)
m = 0;
else if(s >= 250 && s < 500)
m = .02;
else if(s >= 500 && s < 1000)
m = .05;
else if(s >= 1000 && s < 2000)
m = .08;
else if(s >= 2000 && s < 3000)
m = .1;
else if(s >= 3000)
m = .15;
printf("m = %f\n", m);
}
5.7 编程解决货物征税问题。价格在,万元以上的征5 %,5000 元以上1 万元以下的征3 %,
1000 元以上5000 以下的征2 %,1000 元以下的免税,读入货物价格,计算并输出税金。
#include "stdio.h"
int main()
{
int m;
float s,t;
scanf("%d",&m);
if(m <= 1000)
t = 0;
else if(m >1000 && m <= 5000)
t = (m - 1000) * .02;
else if(m > 5000 && m <= 10000)
t = 80 + (m - 5000) * .03;
else if (m > 10000)
t = 80 + 150 + (m - 10000) * .05;
printf("t = %f\n", t);
}
5.8 编程实现下面的功能:输入一个正整数,要求以相反的顺序输出该数。例如,输入12345,
则输出为54321。(提示:可以从个位开始,按位输出整数的每一位。) #include "stdio.h"
int main()
{
int m;
int s = 0, i = 0;
scanf("%d", &m);
while(m != 0)
{
s = m % 10;
printf("%d", s);
m = m / 10;
}
printf("\n");
return 0;
}
5.9 编程实现下面的功能:输入x,求下列级数和,直至末项小于10-7 为止。 2 3 4
1
2! 3! 4! !
n x x x x x
n
, , , , , , , ? ?
5.10 编程实现下面的功能:输出1~500 中能被7 除余5、被5 除余3、被3 除余2 的数(每
行输出5 个数)。
#include "stdio.h"
int main()
{
int i = 1;
int j = 0;
while (i <= 500)
{
if(i % 7 == 5 && i % 5 == 3 && i % 3 ==2)
{
printf("%d ", i);
j++;
}
if(j % 5 == 0 && j != 0)
{
printf("\n");
j = 0;
}
i++;
}
return 0;
}
5.11 编程实现下面的功能:按下面求平方根的迭代公式求x,要求精确到小数点后10 位。
2 / ) ( 1 n
n n x
a x x , , ,
5.12 编程求解百钱百鸡问题。中国古代数学家张丘建在他的《算经》中提出了著名的“百
钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏
各几何?
#include "stdio.h"
int main()
{
int x, y, z;
for (x = 0; x < 100; x++)
for (y = 0; y < 100; y++)
{
z = 100 - x -y;
if (z % 3 == 0 && (5*x)+(3*y)+(z/3) == 100)
{
printf("x = %d, y = %d, z = %d \n", x, y, z);
}
}
return 0;
}
5.13 为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回 原文。例如,可以按以下规律将电文变成密码:将字母A 变成字母E,a 变成e,即变成其后的 第4 个字母,W 变成A,X 变成B,Y 变成C,Z 变成D。按上述规律转换字母,非字母字符不 变,如“Wonderful!”转换为“Asrhivjyp!”。编程实现下面的功能:输入一行字符,输出其相应 的密码。
#include "stdio.h"
int main()
{
char ch;
while ((ch=getchar()) != '\n')
{
if(ch >= 'W' && ch <= 'Z')
ch = 'A' + (ch - 'W');
else if(ch >= 'A' && ch < 'W')
ch += 4;
else if(ch >= 'w' && ch <= 'z')
ch = 'a' + (ch - 'w');
else if(ch >= 'a' && ch < 'w')
ch += 4;
printf("%c", ch);
}
return 0;
}
6.1 写出下面程序的输出结果。 #include int main (void) { int i,j,x,y,m; int a[3][3]={{1,3,12},{14,9,1},{9,0,4}}; m=a[0][0]; x=0; y=0; for(i=0;i<3;i++) for(j=0;j<3;j++) if(m *(s + i))? max:*(s + i);
A += *(s + i);
}
ave = (float)A/10;
printf("the average is %f\nthe minimal number is %d\nthe maximal number is %d\n", ave,
min, max);
return 0;
}
6.3 编程实现下面的功能:从键盘输入一个字符串,要求不通过调用strlen()来实现统计 字符串中的字符个数。
#include "stdio.h"
int main()
{
char ch;
int i = 0;
while ((ch = getchar()) != '\n')
{
i++;
}
printf("the quantity of chars is %d\n", i);
return 0;
}
6.4 编程实现下面的功能:输入一个字符串,输出其中大写英文字母出现的次数。
#include "stdio.h"
int main()
{
char ch;
int i = 0;
while((ch = getchar()) != '\n')
{
if(ch >= 'A' && ch <= 'Z')
i++;
}
printf("the quantity of capital letter is %d\n", i);
return 0;
}
6.5 编程实现下面的功能:把从键盘输入的字符串逆序存放并输出。 #include "stdio.h"
int main()
{
int i, j;
char ch;
char* pResult = NULL;
char* pTemp = NULL;
char* pcr = NULL;
pResult = (char*)malloc(sizeof(char));
pResult[0] = '\0';
while((ch = getchar()) != '\n')
{
pTemp = (char*)malloc(2 * sizeof(char));
pTemp[0] = ch;
pTemp[1] = '\0';
pResult = strcat(pResult, pTemp);
free(pTemp);
}
pcr = (char*)malloc((strlen(pResult) + 1) * sizeof(char));
for(i = strlen(pResult) - 1, j = 0; i >= 0; i--)
{
pcr[j] = pResult[i];
j++;
}
pcr[j] = '\0';
printf("%s\n", pcr);
return 0;
}
6.6 编程实现下面的功能:将一行字符中的每个单词的第一个字母改成大写。
#include "stdio.h" #include "string.h" int main()
{
int n,i;
char a[1000];
int s='A'-'a';
printf("Input a string : ");
gets(a);
n=strlen(a);
a[0]+=s;
for(i=1;i #include int main()
{
int a[12]={1,2,3,5,7,9,12,32,45,56,67};
int n,i,j;
printf("input a number :");
scanf("%d",&n);
for(i=0;i<11;i++)
{
if(n<=a[i])
{
for(j=11;j>i;j--)
{
a[j]=a[j-1];
}
a[i]=n;
break;
}
}
for(i=0;i<12;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
6.8 编程实现下面的功能:输入10个数,将其中的最小数与第一个数交换,将最大数与最
后一个数交换。
#include "stdio.h" int main()
{
int a[10];
int i,max,min,maxnum,minnum;
printf("Input 10 numbers:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
minnum=maxnum=0;
max=min=a[0];
for(i=0;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
maxnum=i;
}
if(a[i] #include int main()
{
int i,n;
char a[100],s;
printf("Inpute a string:");
gets(a);
printf("Inpute a number:");
scanf("%d",&s);
n=strlen(a);
for(i=s;i int main(void) { int a[]={1,4,7,10,13}; int y=1,i,*p; p=&a[1]; for(i=0;i<3;i++) y+=*(p+i); printf("y=%d\n",y); return 0; }
答:
y=22
7.2 写出下面程序的输出结果。 #include "stdio.h" int main(void) { int a=2,*p1,**p2; p2=&p1; p1=&a; a++; printf("%d,%d,%d\n",a,*p1,**p2); return 0; }
答:
3,3,3
7.3 写出下面程序的输出结果。 #include "stdio.h" int main(void) { int a=2,*p,**pp; pp=&p; p=&a; a++; printf("%d,%d,%d\n",a,*p,**pp); }
答:
3,3,3
7.4 利用指针实现将字符串a 的内容复制到字符串b 中。 #include #include int main()
{
char *a;
char *b;
a=malloc(100,sizeof(char));
b=malloc(100,sizeof(char));
a="babsdsdf";
b="sfdsf";
alen=strlen(a);
blen=strlen(b);
for(i=blen;i struct node
{
char data;
struct node *link; }*head;
int main()
{
char ch;
struct node *p;
head = NULL;
printf("\nplease input:");
while((ch=getchar())!='\n' )
{
p=(struct node *)malloc(sizeof(struct node));
p->data=ch;
p->link=head;
head=p;
}
p=head;
printf("output:");
while( p!=NULL )
{
printf("%c ", p->data);
p = p->link;
}
return 0;
}
7.7 利用指针编写程序:删除一个字符串中的某一个字符。 #include
void delchr(char *s,char c) {
char *p,*q;
p=s; q=p;
while(*s!='\0')
if(*s==c)
s++;
else
*p++=*s++;
*p='\0';
while(*q!='\0')
{
printf("%c",*q);
q++;
}
}
int main()
{
char a[20];
char b;
printf("\nplease input:");
gets(a);
printf("input the word to del:");
scanf("%c",&b);
delchr(a,b);
return 0;
}
7.8 已知两个升序序列,利用指针将它们合并成一个升序序列并输出。
#include
int main()
{
int i, j, k;
char a[3] = {1, 3, 5};
char b[3] = {4, 6, 7};
char c[6] ;
i = j = k = 0;
while (k < 6 && i < 3 && j < 3)
{
if(a[i] > b[j])
{
c[k++] = b[j++];
}
else if (a[i] < b[j])
{
c[k++] = a[i++];
}
else
{
c[k++] = a[i];
i++;
j++;
}
}
while (i < 3 && k < 6)
{
c[k++] = a[i];
i ++;
}
while (j < 3 && k < 6)
{
c[k++] = b[j];
j ++;
}
for (i = 0; i < 6; i++)
printf("%d ", c[i]);
return 0;
}
8.1 写出下面程序的运行结果。 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } #include int main(void) { printf("%ld\n",fib(3));
return 0; }
答:
4
8.2 写出下面程序的运行结果。 #include #include int main(void) { void sort(char *name[],int n); void print(char *name[],int n); char *name[]={"BASIC","FORTRAN","C++","Pascal","COBOL"}; int n=5; sort(name,n); print(name,n); return 0; } void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) { temp=name[i]; name[i]=name[k]; name[k]=temp; } } } void print(char *name[],int n) { int i; for(i=0;i int f(int a) { int b=0; static c=3; a=c++,b++; return a; } int main(void) { int a=2,i,k; for(i=0;i<2;i++) k=f(a++); printf("%d\n",k); return 0; }
答:
4
8.4 写出下面程序的运行结果。 int a=100; void fun(void) { int a=10; printf("%d\n",a); } #include int main(void) { printf("%d\n",a++); { int a=30; printf("%d\n",a); } fun(); printf("%d\n",a); return 0; }
答:
100
30
10
101
8.5 程序填空题,要求使用指向函数的指针变量调用函数max()并求最大值。 #include int main(void) { int max(int,int); int (*p)(); int a,b,c; p= ; scanf("%d%d",&a,&b); c= ; printf("a=%d b=%d max=%d",a,b,c); return 0; } int max(int x,int y) { int z; if(x>y) z=x; else z=y; return(z); }
答:
8.6 编写程序实现下面的功能:通过函数调用方式计算字符串的长度。
#include "stdio.h"
int StrLen(char* str)
{
int Lenth;
for(Lenth = 0; str[Lenth] != '\0'; Lenth++)
{}
return Lenth;
}
int main()
{
int lenth;
char* Test = NULL;
Test = "hello world";
lenth = StrLen(Test);
printf("the lenth of string hello world is %d\n", lenth);
return 0;
}
8.7 编写程序实现下面的功能:通过函数调用方式实现n×n 矩阵的转置。
#define n 3
#include "stdio.h"
void f(char matrix[n][n]) {
int i, j;
char temp;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
int main()
{
char matrix[n][n];
f(matrix);
return 0;
}
8.8 编写程序实现下面的功能:通过函数调用方式实现一个整数的逆置,如123 逆置后为
321。
#include "stdio.h"
int f(int num)
{
int result = 0;
for(; num != 0; num /= 10)
{
result = result * 10 + num % 10;
}
return result;
}
int main()
{
int integer;
int N;
printf("please insert a integer:");
scanf("%d", &integer);
N = f(integer);
printf("this is the result:%d\n", N);
return 0;
}
8.9 编写程序实现下面的功能:通过函数调用方式将一个十制数转换成相应的八进制数。 #include "stdio.h"
void display(int T)
{
printf("the octal of that integer is %o\n", T);
}
int main()
{
int test;
printf("please insert a integer:");
scanf("%d", &test);
display(test);
return 0;
}
8.10 编写程序实现下面的功能:主函数接受键盘输入的年、月、日,通过子函数计算该日 是该年的第几日。
#include "stdio.h"
int counter(int year, int month, int date) {
int i;
int aYear[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int LeapYear[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int result = 0;
if(((year % 100) != 0 && (year % 4) ==0) || (year % 400) == 0)
{
for(i = 0; i < (month - 1); i++)
{
result += LeapYear[i];
}
result += date;
}
else
{
for(i = 0; i < (month - 1); i++)
{
result += aYear[i];
}
result += date;
}
return result;
}
int main()
{
int year, month, date;
int result;
printf("please insert the date(yyyy mm dd):");
scanf("%d%d%d", &year, &month, &date);
result = counter(year, month, date);
printf("this is the %d(th) day in this year.\n",result);
return 0;
}
8.11 编写程序实现下面的功能:输入10 个整数,将其中最小的数与第一个数对换,将其 中最大的数与最后一个数对换。写3 个函数分别完成下列操作:
a. 输入10 个数。
b. 对输入的数进行处理。
c. 输出10 个数。
#include "stdio.h"
void input(int N[], int n)
{
int i;
printf("please insert 10 integers:");
for(i = 0; i < n; i++)
{
scanf("%d", N + i);
}
}
void output(int N[], int n) {
int i;
printf("sequence is ");
for(i = 0; i < n; i++)
{
printf("%d ", *(N + i));
}
printf(" ");
}
void adjust(int N[], int n) {
int i, j;
int min, max;
min = max = N[0];
for(i = 0; i < n; i++)
{
min = (min < N[i])? min:N[i];
max = (max > N[i])? max:N[i];
}
for(j = 0; j < n; j++)
{
if(N[j] == min)
N[j] = N[0];
if(N[j] == max)
N[j] = N[n - 1];
}
N[0] = min;
N[n - 1] = max;
}
int main()
{
int N[10];
input(N, 10);
adjust(N, 10);
output(N, 10);
return 0;
}
8.12 编写程序实现下面的功能:用递归法并通过函数调用方式将一个整数转换成字符串,
如整数123 对应的字符串为“123”。 #include "stdio.h" #include "string.h"
char* translate(int temp)
{
char* pResult = NULL;
char* pTemp = NULL;
if(temp >= 0 && temp < 10)
{
pTemp = (char*)malloc(2 * sizeof(char));
pTemp[1] = '\0';
switch(temp)
{
case 0:
pTemp[0] = '0';
break;
case 1:
pTemp[0] = '1';
break;
case 2:
pTemp[0] = '2';
break;
case 3:
pTemp[0] = '3';
break;
case 4:
pTemp[0] = '4';
break;
case 5:
pTemp[0] = '5';
break;
case 6:
pTemp[0] = '6';
break;
case 7:
pTemp[0] = '7';
break;
case 8:
pTemp[0] = '8';
break;
case 9:
pTemp[0] = '9';
break;
}
return pTemp;
}
pResult = strcat(translate(temp/10), translate(temp%10));
return pResult;
}
int main()
{
int A;
char* pCh = NULL;
printf("please insert a integer:");
scanf("%d", &A);
pCh = translate(A);
printf("the result is %s\n", pCh);
return 0;
}
8.13 编写程序实现下面的功能:在主函数输入5 个字符串,利用子函数对它们进行排序,
然后在主函数输出排序后的字符串。
#include #include void Rank(char **a ,int n)
{
int i,p,j;
char *temp;
temp=malloc(100,sizeof(char));
for(i=0;iname,p->k1+p->k2);
printf("\nname:%s total=%f\n",a[1].name,a[1].k1+a[1].k2); return 0; }
答:
name:zhang total=170.000000
wang total=150.000000 name:
9.2 写出下面程序的输出结果。 #include "stdio.h" int main(void) { union { char s[2]; int i; }g; g.i=0x4142; printf("g.i=%x\n",g.i); printf("g.s[0]=%x\t g.s[1]=%x\n",g.s[0],g.s[1]); g.s[0]=1; g.s[1]=0; printf("g.s=%x\n",g.i); return 0; }
答:
g.i=4142
g.s[0]=42 g.s[1]=41 g.s=1
9.3 求下面程序的运行结果。 # define SQURARE(n) ((n)*(n)) #include int main(void) { int i=1; while(i<=10) printf("%d\n", SQURARE (i++)); return 0; }
答:
1
9
25
49
81
9.4 求下面程序的运行结果。 #define PT 5.5 #define S(x) PT*x*x #include int main(void) { int a=1,b=2; printf(“%4.1f\n”, S(a+b)); return 0; }
答:
9.5
9.5 编写程序实现下面的功能:用结构体存放下表中的数据,然后输出每人的姓名和实发 工资数(基本工资+浮动工资 支出)。
姓名 基本工资 效益工资 税
赵一 2000.00 800.00 80.00
王二 1500.00 500.00 50.00
张三 1600.00 600.00 60.00
9.6 编写程序实现下面的功能:输入10 个学生的学号、姓名和3 门课程的成绩,输出平均 分最高的学生的信息。
#include "stdio.h"
struct student
{
char* num;
float lessons[3];
float ave;
char* name;
}* stu;
void infoInput(struct student* stu) {
char ch[2] = {' ', '\0'};
stu->name = (char*)malloc(sizeof(char));
stu->name[0] = '\0';
printf("please input the name of a student:");
while((ch[0] = getchar()) != '\n')
{
stu->name = strcat(stu->name, &ch);
}
ch[0] = ' ';
printf("and he(she)'s number:");
while((ch[0] = getchar()) != '\n')
{
stu->num = strcat(stu->num, &ch);
}
printf("the scores of he(she)'s three lessons:");
scanf("%f%f%f", stu->lessons, stu->lessons + 1, stu->lessons + 2);
getchar();
stu->ave = (stu->lessons[0] + stu->lessons[1] + stu->lessons[2])/3;
}
void infoOutput(struct student* stu) {
printf("name:%s\n", stu->name);
printf("number:%d", stu->num);
printf("the scores of three lessons is: %2f %2f %2f\n", stu->lessons[0],
stu->lessons[1], stu->lessons[2]);
printf("and the average of three lessons is:%2f\n", stu->ave);
}
int main()
{
int i;
struct student* temp;
struct student stus[10];
for(i = 0; i < 10; i++)
{
infoInput(stus + i);
}
temp = stus;
for(i = 0; i < 10; i++)
{
temp = (temp->ave > (stus + i)->ave)? temp:(stus + i);
}
printf("the student who get highest average is this one:\n");
infoOutput(temp);
return 0;
}
10.1 什么是缓冲文件系统,
答:
C 语言在输入/输出中使用了缓冲技术,即在内存中为输入的磁盘文件开辟了一个缓冲区(缺省为512 字节),该缓冲区装满后,再启动磁盘一次,将缓冲区的内容装到磁盘文件中去。这就是缓冲文件系统。
10.2 FILE *类型的作用是什么,
答:
FILE 结构体指针指出了打开文件所对应的FILE结构体在内存中的地址。
10.3 fopen 函数的第二个参数通常为"r"、"w"和"a",这个参数的意义是什么,每一个值 的含义是什么,
答:
第二个以只读字符串形式出现的参数mode 界定了文件访问操作的模式
"r" 以只读方式打开一个文本文件,如果输入文件不存在或未找到,则fopen 失败
"w" 以只写方式打开一个文本文件,如果输出文件已存在,内容将全覆盖
"a" 以追加方式在文本文件末尾增加数据,如果它不存在,则先建立该文件
10.4 fopen 函数如何向其调用函数报告错误,
答:
如果在打开文件时发生错误,则fopen 都返回NULL,即0。
10.5 getc 函数返回值的类型为什么是int,
答:
如果返回的是一个字符型,而字符编码一共只有256 个,因此就没有一个值可以用作文件结束标志。通过扩展定义,使得getc 返回一个整数值,这样的实现可以返回一个合法字符数据以外的值作为文件结束标志。通常,在stdio.h 中这个值被称为EOF,其值为 1。
10.6 fgets 函数的三个参数分别是什么,
答: char *fgets(char *buffer,int bufSize,FILE *source); 其功能是:从source 所关联的磁盘文件中读入bufSize 1 个字符,最后加一个'\0'结束符。
10.7 使用函数fgets 时,要注意什么,
答:
使用copyFile 函数时,与source 关联的磁盘文件不能是由面向记录的函数fwrite创建的文本文件,因为这种文件所记录的
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
是数据块。对于数据块的处理,是按照数据块的长度进行的,因此用fgets 无法提取数据。而用面向字符的I/O 所创建的文件及格式化的I/O 所创建的文件都可以用fgets 提取数据。
10.8 printf 和fprintf 之间有什么不同,
答:
printf 函数是针对标准设备的格式化输出,fprintf 是对于用户定义的文件进行格式化输出。
10.9 编写一个程序,要求将一个文本文件中的小写字母转换为大写字母,然后复制到另一 个文件中。
#include
int main()
{
FILE *fp;
FILE *fp2;
char ch;
if((fp=fopen("10.9.txt","rt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getchar();
exit(1);
}
if((fp2=fopen("10.92.txt","wt"))==NULL)
{
printf("Cannot open file strike any key exit!");
getchar();
exit(1);
}
ch=fgetc(fp);
if(ch<='z' &&ch>='a')
ch+='A'-'a';
while (ch!=EOF)
{
fputc(ch,fp2);
ch=fgetc(fp);
if(ch<='z' &&ch>='a')
ch+='A'-'a';
}
fclose(fp);
fclose(fp2);
return 0;
}
10.10 编写一个程序,要求读入一个文件,统计文件的行数、字数和字符数,
11.1 什么是静态分配、自动分配(栈式分配)和动态分配,并举例说明。 答:
静态分配是指在编译时就确定了运行时变量在内存中的位置。
自动分配是指在编译时并不确定变量在内存中的位置,而是在调用函数时给变量分配空间,函数返
回时释放空间。
动态分配是指在程序运行过程中动态申请内存的方法。
11.2 比较malloc 函数、calloc 函数及realloc 函数的异同。 答:
malloc 函数可以动态申请一个地址连续的固定大小的内存空间,其分配的单位为字节。malloc 函数返回的是申请空间的首地址,申请的单元个数是由nByte 给定。
calloc(10,sizeof(int))与malloc(10*sizeof(int))实现的功能是一样的。
11.3 什么是线性表、队列和栈,简述它们之间异同。
答:
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。 队列是一种先进先出的特殊线性表。
栈是一种先进后出的特殊线性表。
11.4 根据链栈的定义,设计链栈的接口及接口的实现。
11.5 重新设计循环队列,使新的循环队列不受空间限制。
11.6 用一个链表存放若干个学生信息(如学号、姓名等)。要求按照学号递增顺序排列, 可以插入、删除、修改和查找某个学生的信息。
11.7 将习题12.6 中的学生信息按照逆序输出。