新编C语言程序设计教程[机械工业出版社钱雪忠吕莹楠]

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

新编C语言程序设计教程
习题及实验题部分答案
第1章 C 语言概述
1 习题
一、选择题
ADCDB CCBBA
二、简答题
1、什么是语言?语言分几类?各有什么特点?
语言:
语言是思维的载体。

人和计算机打交道,必须要解决一个“语言”沟通的问题。

如今人与计算机之间有许多种类的“语言”的。

语言分类:
机器二进制语言、汇编语言(低级)和高级语言(第三代、第四代、……)
各自特点:
1)机器二进制语言:用0、1两个数字编写的计算机能直接运行的程序的语言,机器语言执行效率高,但难编写、难懂、难移植。

2)汇编语言(低级):汇编语言的特点是使用一些“助记符号”来替代那些难懂难记的二进制代码,所以汇编语言相对于机器指令便于理解和记忆,但它和机器语言的指令基本上是一一对应,两者都是针对特定的计算机硬件系统的,可移植性差,因此称它们都是“面向机器的低级语言”。

3)高级语言:高级语言类似自然语言(主要是英语),由专门的符号根据词汇规则构成单词,由单词根据句法规则构成语句,每种语句有确切的语义并能由计算机解释。

高级语言包含许多英语单词,有“自然化”的特点;高级语言书写计算式子接近于熟知的数学公式的规则。

高级语言与机器指令完全分离,具有通用性,一条高级语言语句常常相当于几条或几十条机器指令。

2、汇编语言与高级语言有何区别?
高级语言程序要比汇编语言要易懂、明了、简短得多;高级语言与机器指令完全分离,具有通用性,一条高级语言语句常常相当于几条或几十条机汇编语言指令;高级语言要经过解释或编译来执行的,而汇编语言程序通过汇编程序来生成机器程序来执行的。

3、什么是程序?
完成某一特定任务的一组指令序列,或者说,为实现某一算法的指令序列称为“程序”。

不同计算机语言有不同的计算机程序。

4、C语言中为何要加注释语句?
注释部分,起到说明语句或程序的作用。

程序中应添加必要的注释,来增强程序的阅读与理解。

注释用来向用户提示或解释程序的意义。

在调试程序中对暂不使用的语句也可用注释符标注起来,使翻译跳过这些不作处理,待调试结束后再按需去掉注释符。

为此,注释也有调试的辅助作用。

5、说说C语言程序的组成?C语言程序包括由哪些部分?一个C语言函数一般又由哪几部分组成的?
C语言程序的组成:
一个C语言源程序可以由一个或多个源程序文件组成。

C语言程序的组成部分:
1.一个C语言源程序可以由一个或多个源文件组成;
2.每个源文件可由一个或多个函数组成;
3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数;
4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面;
5.每一个说明,每一个语句都必须以分号结尾。

但预处理命令,函数头和花括号“}”之后不能加分号;
6.标识符,关键字之间必须至少加一个空格以示间隔。

C语言函数:
一个C语言函数通常由函数首部(如int max(int a,int b))、函数体组成。

函数体一般又由局部变量定义与函数声明等组成的定义与声明部分、程序执行语句等组成的执行部分这两部分组成的(如min函数所示)。

第2章结构化程序设计与算法
2 习题
一、选择题
BCDCD CBCAD
二、简答题
1、什么是算法?算法的特点是什么?
什么是算法:
算法就是解决某个问题或处理某件事的方法和步骤,在这里所讲的算法是专指用计算机解决某一问题的方法和步骤。

算法的特点:
1)有穷性
人们编制算法的目的就是要解决问题,若该算法无法在一个有限合理的时间内完成问题的求解,那么算法也就失去了其原有的目的,人们就会摒弃它。

而且人们研究算法,其目的还在于它的高效率,即解决同一个问题的两个算法,人们往往选择其中那个运行效率高的。

2)确定性
所谓算法的确定性是指算法的每一个步骤都应该确切无误,没有歧义性。

3)有零个或多个输入
执行算法时,有时需要外界提供某些数据,帮助算法的执行。

一个算法可以没有输入,也可以有多个输入。

例如,求解N!,该算法就需要输入一个数据N;而求解两数之和,该算法就需要输入两个数据
4)有一个或多个输出
算法的目的是求解,解就是结果,就是输出,否则就毫无意义。

5)有效性
算法中的每一步都应该能有效地执行、可以实现,执行算法最后应该能得到确定的结果。

2、结构化程序设计的三种基本结构是什么?其共同特点是什么?
结构化程序设计的三种基本结构:顺序、选择、循环三种基本控制结构
其共同特点:1)只有单一的入口和单一的出口;2)结构中的每个部分都有执行到的可能;3)结构内不存在永不终止的死循环。

3、尝试用自然语言、流程图、N-S流程图或伪代码写出下面问题的求解算法。

1)根据三边,求三角形的周长和面积
2)判断用户输入的一个整数是奇数还是偶数
3)求解一元二次方程ax2+bx+c=0根
4)找出10个数据的最大数
5)将20个考生成绩中不及格者的分数打印出来
6)求S=1+2+3+4+……+100
解:略
实验2 熟悉VC++ 6.0环境及算法
二、实验内容
1、改错题
#include <stdio.h>
main()
{
i nt x=2,y=3,a;
a=x-y;
printf("a=%d",a);
printf("\n"); /* 换行 */
}
2、程序填空题
#include <stdio.h>
main()
{
int a,b,m;
printf("Input a,b please!\n");
scanf("%d%d",&a,&b);
m=a*b; /*赋值语句,将a和b之积值赋给m*/
printf("a*b=%d\n",m); /*输出a和b积的结果值并换行 */
}
3、设计与表示算法
判断一个数n能否同时被3和5整除。

1)用伪代码表示
begin (算法开始)
input n
if (n/3*3)=n
{
if (n/5*5)=n
{
print “数n能同时被3和5整除” }
}
end (算法结束)
2)用N-S图表示
3)用流程图表示4、编程题
1)输入n
n除以3的余数为0
n除以5的余数为0
是否
是否n能同时
被3和5
整除n不能同时被3和5
整除
n不能同时被3和5
整除
#include <stdio.h>
void main()
{
printf("How are you!\n");
}
2)
#include <stdio.h>
main()
{
int a,b,c,sum;
printf("Input a,b,c please!\n");
scanf("%d%d%d",&a,&b,&c);
sum=a*a*a+b*b*b+c*c*c; /*赋值语句,将a和b之积值赋给m*/
printf("a*a*a+b*b*b+c*c*c=%d\n",sum); /*输出a和b积的结果值并换行 */
}
第3章数据类型及其运算
3 习题
一、选择题
BADCD DCBCA
二、阅读程序,给出运行结果
1、7,8,10
2、1,3
3、
4、 4
61
57
9
112
三、编程题
1. (sin(sqrt(x*x)))/(a*b)
2. 5.5
3. 3 3
4. 3
5. #include <stdio.h>
void main()
{
char c;
c = getchar();
printf("%c\n",c);
printf("%d\n",c);
}
6. #include <stdio.h>
int main()
{
float C,F;
printf("请输入一个华氏温度:");
scanf("%f",&F);
C = (5.0/9)*(F-32);
printf("摄氏温度C=%5.2f\n",C);
return 0;
}
7. #include <stdio.h>
#include <math.h>
int main()
{
float a;
a = exp(3.1415926);
printf("%f\n",a);
return 0;
}
实验3 数据类型及其运算
二、实验内容
1.改错题
#include <stdio.h>
main()
{
int x,y;
printf("请输入两个整数\n");
scanf("%d%d",&x,&y);
printf("互换前的x:%d y:%d\n",x,y);
x=x+y;
y=x-y;
x=x-y;
printf("互换前的x:%d y:%d\n",x,y);
}
2. 程序填空题
#include <stdio.h>
main()
{
int i1,i2,i3,i;
printf("Please input i1,i2,i3: ");
scanf("%d%d%d",&i1,&i2,&i3);
i=i3; //i=i1; //i=i2;
i3=i2; //i1=i3; //i2=i1;
i2=i1; //i3=i2; //i1=i3;
i1=i; //i2=i; //i3=i2;
printf("i1=%d\ni2=%d\ni3=%d\n",i1,i2,i3);
}
3.编程题
(1)从键盘输入3个大写英文字母,把它们转换成小写字母后输出。

#include <stdio.h>
{
char c1,c2,c3;
scanf("%c%c%c",&c1,&c2,&c3);
c1=c1+32;
c2=c2+32;
c3=c3+32;
printf("%c%c%c\n",c1,c2,c3);
}
(2)从键盘输入3个整数,输出它们的平均值与积。

#include <stdio.h> Array main()
{
int a,b,c,ji;
float ave;
printf("请输入3个整数\n");
scanf("%d%d%d",&a,&b,&c);
ave=(a+b+c)/3.0;
ji=a*b*c;
}
第4章顺序结构程序设计
4 习题
一、选择题
BBCBC DCBDD
二、阅读程序,给出运行结果
1、x=345
2、a=1,b=3
y=3.460000a=3,b=1
3、a=123,f=457
三、编程题
1.
2. 法一:
#include<stdio.h>
Int main()
{ float x,xf;
Int xi;
Printf (“请输入一个实数:”);
Scanf(“%f”,&x);
Xi=(int)x;
Xi=x-xi;
Printf(“该数的整数部分为:%d\n”,xi);
Printf(“该数的小数部分为:5f\n”,xf);
Return 0;
}
法二:
#include<stdio.h>
double a,b;
scanf("%lf",&a);
b = a;
long int p;
p = (long int)a;
printf("整数部分:%d\n",p);
printf("小数部分:%lf",(b - p));
3.
4.
5. #include <stdio.h>
void main( )
{ float a, b ,h; float area;
scanf("%f,%f,%f",&a,&b,&h); area=(a+b)*h/2;
printf("梯形的面积为:%5.2f\n",area); }
实验4 顺序结构程序设计
二、实验内容 1.改错题
下列程序的功能为:按下列公式计算并输出x 的值。

其中a 和b 的值由键盘输入。

纠正程序中存在的错误,以实现其功能。

2)(2b a ab x +=
#include <stdio.h> main()
{ int a,b; float x;
scanf("%d,%d",a,b); scanf("%d,%d",&a,&b);
x=2ab/(a +b)(a +b); x=2.0*a*b/((a +b)*(a +b)); printf("x=%d\n",x); printf("x=%f\n",x); }
2.程序填空题
下列程序的功能为:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf 输入数据r 、h ,输出计算结果,输出时要求有文字说明,取小数点后2位数字。

(周长l=2r π,圆面积s=2
r π,圆球表
面积sq=24r π,圆球体积vq=334r π;圆柱体积vz=2
hr π),请补充完善程序,以
实现其功能。

#include <stdio.h> main() {
float pi ,h ,r ,ly ,sy ,sq ,vq ,vz ; pi=3.1415926;
printf("请输入圆半径r ,圆柱高h :\n"); scanf("%f%f",&r,&h);
ly= 2*pi*r ;
sy= pi*r*r ;
sq= 4*pi*r*r;
vq= 4.0/3*pi*r*r*r;
vz= pi*h*r*r;
printf("圆周长为:%.2f\n",ly);
printf("圆面积为:%.2f\n", sy);
printf("圆球表面积为:%.2f\n", sq);
printf("圆球体积为:%.2f\n", vq);
printf("圆柱体积为:%.2f\n", vz);
}
3.编程题
(1)编写一个程序实现如下功能:从键盘输入3个字符,然后在屏幕上分3行输出该3个字符。

#include <stdio.h> Array main()
{
char c1,c2,c3;
c1=getchar();
c2=getchar();
c3=getchar();
putchar(c1);
putchar('\n');
putchar(c2);
putchar('\n');
putchar(c3);
putchar('\n');
}
(2)编写一个程序实现如下功能:输入一元二次方程ax2+bx+c=0的系数a、b、c,求方程的根。

要求:运行该程序时,输入a、b、c的值,分别使b2-4ac 的值大于、等于和小于零,观察并分析运行结果。

求根公式如下:
法一:Array #include <stdio.h>
#include <math.h>
void main()
{float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);
}
法二:
#include <stdio.h>
#include <math.h>
void main()
{ float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
if (a==0)
printf("不是二次方程\n");
else
disc=b*b-4*a*c;
if (disc<0)
printf("无实根\n");
else
if (disc==0)
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("有两个相同的实根\n");
printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);
}
else
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf("有两个不同的实根\n");
printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);
}
}
第5章选择结构程序设计
5 习题
一、选择题
BBCBB CBACB
二、阅读程序写出运行结果
1、-2
2、Yes
3、(1)2
(2)3
CC
A=2,b=2,c=4
4、*&
5、5
3
2
三、编程题
1. #include<stdio.h>
int main()
{
int a,b;
//先判断a是否大于等于0,如果是的话a=b
if (a>=0)
{
b=a;
}
//如果不是的话,先对a按位取反,然后再加一
else
{
b=~a;
b=b+1;
}
cout<<b<<endl;
getchar();
}
2.略
3.#include <stdio.h>
int main(void)
{
int n;
int status=1;
while(status)
{
printf("输入:");
scanf("%d",&n);
switch (n)
{
case 0:
printf("舞蹈\n");
break;
case 1:
case 3:
printf("乒乓球\n");
break;
case 2
case 4:
printf("篮球\n");
break;
case 5:
printf("保龄球\n");
break;
case 6:
printf("吉他\n");
break;
default:
status=0;
}
}
return 0;
}
实验5 选择结构程序设计
二、实验内容
1.改错题
下列程序的功能为:输入3个整数后,输出其中最大值。

请纠正程序中存在错误,使程序实现其功能。

#include "stdio.h"
main()
{
int a,b,c,max;
printf ("请输入3个整数:\n");
scanf ("%d%d%d",&a,&b,&c);
max=a;
if (c>b)
{ if (b>a) max=c;} /* c>b>a */
else /* b>c */
{if (c>a) max=b;} /* b>c>a */
printf("3个数中最大者为:%d\n",max);
}
改正后的程序:
#include "stdio.h"
main()
{
int a,b,c,max;
printf ("请输入3个整数:
\n");
scanf ("%d%d%d",&a,&b,&c);
max=a;
if (c>b)
{ if (c>a) max=c;}
else
{if (b>a) max=b;}
printf("3个数中最大者为:%d\n",max);
2. 程序填空题
#include <stdio.h>
main()
{
int a,b,d;
char ch;
printf("Please input a expression:");
scanf("%d%c%d",&a,&ch,&b); /*输入数学表达式*/
switch(ch)
{
case '+': d=a+b;
printf("%d+%d=%d\n",a,b,d); break;
case '-': d=a-b;
printf("%d-%d=%d\n",a,b,d); break;
case '*': d=a*b;printf("%d*%d=%d\n",a,b,d); break;
case '/':
if (b==0) printf("Divisor is zero\n");
else printf("%d/%d=%f\n",a,b,(float)a/b); /* 强制类型转换*/
break;
default : printf("Input Operator error!\n");
}
}
3.编程题
(1)#include<stdio.h>
main()
{
int a,b,c,max,min;
float sum,d,e;
printf("请输入三个数:");
scanf("%d%d%d",&a,&b,&c);
sum=a+b+c;
d=sum/3;
e=a*b*c;
if(a>b)
{max=a;min=b;}
else
{max=b;min=b;}
if(max<c)
max=c;
else
if(min>c)
min=c;
printf("三个数的和%.1f\n",sum);
printf("三个数的平均值%.2f\n",d);
printf("三个数的积%.1f\n",e);
printf("三个数中最大值是%d\n",max);
printf("三个数中最小值是%d\n",min);
}
(2)
#include<stdio.h>
void main()
{
float x,y;
scanf("%f",&x);
if(x<5) y=1-x*x*x;
else if(x<=15&&x>=5) y=x-1;
else y=2*x*x-1;
printf("x=%0f,y=%0f\n",x,y);
}
(3)
#include<stdio.h>
void main()
{ int a; printf("input integer number:"); scanf("%d",&a);
switch(a)
{ case 0:printf("Sunday\n");break;
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
default:printf("error\n");
}
}
第6章循环结构程序设计
6 习题
一、选择题
BCDDA BDBAB BC
二、阅读程序写出运行结果
1、______3,4________
2、_____6_____
3、___##___
4、___02____
5、___18_____
6、_____1______
7、___80____
8、___输出一行中含大写或小写字母个数中的大者数________
9、
1)5次
21 2
2) 2次
13 6 4 4
3)外循环2次,内2层循环累计3次,内3层循环累计5次
28
4)外循环3次,内循环累计4次
-1 -10 5
三、编程题

实验6 循环结构程序设计
二、实验内容
1.改错题
下列程序的功能为:倒序打印26个英文字母。

纠正程序中存在的错误,以实现其功能。

#include <stdio.h>
main()
{
char x;
x='z';
while(x!='a') while(x!='a'-1)或while(x>='a') {
printf("%3d",x); printf("%3c",x);
x++; x- -;
}
}
2. 程序填空题
1)
#include <stdio.h>
main()
{
int day,x1,x2;
day=0;
x1=1020;
while (x1)
{
X2=x1/2-2;
X1=x2;
day++;
}
printf(“day=%d\n”,day);
}
2)
#include <stdio.h>
#include <string.h>
main()
{
int i,left,right;char cc[80];
printf("输入一个算术表达式\n");
gets(cc);
left = 0;right = 0;//left和right分别代表统计的左右括号数 for(i=0;i<(int)strlen(cc);i++){
if( cc[i]=='(' ) left++;
if( cc[i]==')' ) right++;
if( right>left ) break;
}
if (left==right) printf("圆括号配对正确\n");
else printf("圆括号配对不正确\n");
}
三、编程题
(1)计算1~100之间所有含8的数之和。

参考程序:
#include <stdio.h>
main()
{
int i, sum=0;
for(i=1; i<=100; i++)
if(i%10==8 || i/10==8)
sum+=i;
printf("sum=%d\n",sum);
}
(2)编写程序,利用下列近似公式计算e 值,误差应小于10-5。

++++=!
31!21!111e …!1n + 参考程序:
#include <stdio.h>
main()
{
int i=0 ;
long n=1;
float e=0, t=1;
while(t>1e-5)
{
e+=t;
i++;
n*=i;
t=1.0/n;
}
printf("e=%f\n",e);
}
(3)某学校有近千名学生,在操场上排队,若5人一行余2人,7人一行余3人,3人一行余1人。

编写程序,求该校的学生总人数。

参考程序:
#include <stdio.h>
main()
{int i;
for(i=900;i<=1000;i++)
if(i%5==2&&i%7==3&&i%3==1)
break;
printf("学生总人数=%d\n",i);
}
(4)从键盘输入N 个学生的学号和每人M 门课程的成绩,计算每个学生的总分及平均分。

输出内容包括每个学生的学号、总分和平均分。

#include<stdio.h>
void main()
{
int i,j,n,m,no,score,sum;
float ave;
printf("输入学生数和每人课程数:");
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{ sum=0;
printf("输入第%d个学生的学号: ",i);
scanf("%d",&no);
printf("输入第%d个学生的%d门课程成绩: ",i,m);
for(j=1;j<=m;j++)
{
scanf("%d",&score);
sum+=score;
}
ave=(float)sum/m;
printf("\n**第%d个学生的学号为:%d 总分为:%d 平均分为:%.2f\n\n",i,no,sum,ave);
}
}
第7章数组及其应用
7 习题
一、选择题
DACBC ABDBD
二、阅读程序写出运行结果
1、______4______
2、____ Tony _____
3、____ max=85,min=5,sum=180,aver=30.0_____________
4、____ a=2 b=2 c=2 d=2 e=1 f=2 g=2____
5、____j=45_____
三、编程题
1.略
2.
#include <stdio.h>
int main()
{
int a[10];//用来存数据
int i,j,temp;
for(i = 0; i < 10; i ++)//输入10个数。

scanf("%d",&a[i]);
for (j = 0; j < 9; j++)//标准冒泡法排序
for (i = 0; i < 9- j; i++)
{
if(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
for(i = 0; i < 10; i ++)//输出。

printf("%d,",&a[i]);
printf("\n");
return 0;
}
实验7 数组及其应用
二、实验内容
1.改错题
#include <stdio.h>
void main()
{
char a[8]="wel",b[]="come";
int i,n=0;
while (a[n]) n++;
for(i=0;b[i]!='\0';i++)
a[n+i]=b[i];
a[n+i]='\0';
//n=0;
//while (a[n]) {putchar(a[n]);n++;}
printf("%s\n",a);
}
2. 程序填空题
#include <stdio.h>
#include <string.h>
void main()
{
char string[20],str[3][20];
int i;
for (i=0;i<3;i++) gets(str[i]);
if (strcmp(str[0],str[1])>0) strcpy(string,str[0]);
else strcpy(string,str[1]);
if (strcmp(str[2],string)>0) strcpy(string,str[2]);
puts(string);
}
三、编程题
(1)从键盘输入10个数,用选择排序法将其按由大到小的顺序排序;然后
在排好序的数列中插入一个数,使数列保持从大到小的顺序。

#define N 11
#include<stdio.h>
void main()
{ int a[N],i,j,k,t,p;
printf("请输入%d 个整数 :\n",N);
for(i=0;i<N-1;i++)
scanf("%d",&a[i]);
for(i=0;i<N-2;i++) //选择排序
{ k=i;
for(j=i+1;j<N-1;j++)
if(a[k]>a[j])
k=j;
if(k!=i)
{ t=a[k]; a[k]=a[i]; a[i]=t;}
}
printf("\n 排序后:\n");
for(i=0;i<N-1;i++)
printf("%5d",a[i]);
printf("\n 请输入插入整数: ");
scanf("%d",&p);
j=9;
while(j>=0 && a[j]>p) //找插入位置
{a[j+1]=a[j];j--;}
a[j+1]=p; //插入
printf("\n 插入后:\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
}
(2)从键盘输入两个矩阵A 、B 的值,求C=A+B 。

#include <stdio.h>
void main()
{
int a[2][3],b[2][3],c[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3; j++)
scanf("%d",&a[i][j]);
for(i=0;i<2;i++)
for(j =0;j<3; j++)
scanf("%d",&b[i][j]);
⎪⎪⎭⎫ ⎝⎛=61312753A ⎪⎪⎭
⎫ ⎝⎛=161361084B
for(i=0; i<2; i++)
for(j =0;j<3; j++)
c[i][j]=a[i][j]+b[i][j];
for( i=0;i<2;i++)
{ for(j=0;j<3;j++)
printf("%3d",c[i][j]);
printf("\n");
}
}
(3)从键盘输入一个字符串,删除其中某个字符。

如输入字符串“abcdefededff”,删除其中的字符e,则输出的字符串为“abcdfddff”。

//方法一:
#include<stdio.h>
#include<string.h>
void main()
{
int i,j;
char s[80],c;
printf("输入一行字符: ");
gets(s);
printf("输入要删除字符: ");
scanf("%c",&c);
for(i=0,j=0;s[i]!='\0';i++)
if (s[i]!=c)
s[j++]=s[i];
s[j]='\0';
puts(s);
}
//方法二:
#include<stdio.h>
#include<string.h>
void main()
{char line[80] ;
char ch;
int i,j;
int len;
printf("输入一行字符: ");
gets(line) ;
printf("输入要删除字符: ");
ch=getchar();
i=0;
while(line[i]!='\0' )
{while( line[i]!='\0' && line[i]!=ch) i++;
len=strlen(line);
for(j=i;j<len-1;j++)
line[j]=line[j+1];
line[j]='\0';
}
puts(line);
}
第8章函数及其应用
8 习题
一、选择题
BDDBA DCDBA
二、阅读程序写出运行结果
1、8,17
2、a=48
3、_____ 2 7 2 1____
4、BASIC
C
COBOL
FORTRAN
PASCAL
Smalltalk
三、编程题
实验8 函数及其应用
二、实验内容
1.改错题
#include <stdio.h>
#include <string.h>
#define ARR_SIZE 80
void Inverse(char str[]);
main()
{
char a[ARR_SIZE];
printf("Please enter a string:");
gets(a);
Inverse(a);
printf("The inversed string is :");
puts(a);
}
void Inverse(char str[])
{
int len,i=0,j;
char temp;
len=strlen(str);
for(j=len-1;i<j;i++,j--)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
2. 程序填空题
#include <stdio.h>
#include <string.h>
#define MAX 100 //MAX 200
void Insert(char s[]);
main()
{
char string[MAX];
scanf("%s",string);
Insert(string);
printf("%s",string);
}
void Insert(char srcStr[])
{
char strTemp[MAX];
int i=0,j=0;
strcpy(strTemp,srcStr);
while(strTemp[j])
{
srcStr[i]=strTemp[j];
i++;
j++;
srcStr[i]=' ';
i++;
}
srcStr[i]='\0';
}
三、编程题
(1)从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的
位置对换后,再输出调整后的数组。

#include<stdio.h>
#define N 10
void EXmaxmin(int a[],int n) //求最大数和最小数
{
int i,j=0,k=0,t;
int max,min;
max=a[0]; min=a[0];
for(i=1;i<n;i++)
if(max<a[i]) {max=a[i];j=i;}
else if(min>a[i]) { min=a[i]; k=i;}
t=a[j];
a[j]=a[k];
a[k]=t;
}
void main()
{
int i;
int a[N];
printf("请输入%d个整数:",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("调整前的数组元素为:");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
EXmaxmin(a,N);
printf("调整后的数组元素为:");
for(i=0;i<N;i++)
printf("%5d",a[i]);
}
(2)编写一函数,判断一字符串是否为回文。

所谓“回文”是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。

在主函数中对输入的5个字符串统计其中回文的个数。

#include <stdio.h>
#include <stdlib.h>
int function(char x[])
{
int i;
int y=strlen(x);
for(i=0;i<y/2;i++)
if(x[i]!=x[l-i-1])
return 0;
return 1;
}
void main()
{
char s[100];
int count=0,i;
for(i=1;i<=5;i++)
{ printf("输入第%d个字符串:",i);
scanf("%s",s);
if(function(s))
{printf("%s是回文\n",s);count++;}
else printf("%s不是回文\n",s);
}
printf("共有回文%d个\n",count);
}
(3)编写函数,实现将一个十进制数转换成二进制数。

#include <stdio.h>
int n=0;
void tentotwo(int number,int b[ ])
{
while(number)
{
b[n]=number%2;
number=number/2;
n++;
}
}
void main(void)
{
int inumber;
int a[20],i;
printf("please input nunber: ");
scanf("%d",&inumber);
printf("\n");
tentotwo(inumber,a );
for(i=n-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
第9章指针及其应用
9 习题
一、选择题
BACDB CACAC DCDAC
二、阅读程序写出运行结果
1、 2
2、第一行是:__1 5 3_;第二行是:__3 9 7__。

3、
2 4
4、
abcDDfefDbD
5、53
6、
三、编程题
实验9 指针及其应用
二、实验内容
1.改错题
#include <stdio.h>
int len(char s[])
{
char *p=s;
while (*p!='\0') p++;
return p-s;
}
main()
{
char s[80]; int i;//={'\0'};
//scanf("%s",s); //gets(s);
gets(s);
//for(i=0;i<80;i++) printf("(%d)",s[i]);
printf("\"%s\" includ e %d characters.\n",s,len(s));
}
2. 程序填空题
#include <stdio.h>
#include<string.h>
chnum(char *p);
void main()
{
char s[6];
int n;
gets(s);
if (*s=='-') n=-chnum(s+1);
else n=chnum(s);
printf("%d\n",n);
}
chnum(char *p)
{
int num=0,k,len,j;
len=strlen(p);
for(;*p!='\0';p++)
{
k=*p-'0';
j=(--len);
while (j-->0) {k=k*10;}
num=num+k;
}
return(num);
}
(1) A. *p!= '\0' B. *(++p)!= '\0' C. *(p++)!='\0' D. len!=0
(2) A. *p B. *p+'0' C. *p-'0' D. *p-32
(3) A. --j B. j-->0 C. -len D. len-->0
三、编程题
第10章自定义类型及其应用
10 习题
一、选择题
BDDBB DCCDA CDBCD
二、阅读并写出结果
1、_ p->sex __
2、___2___。

3、__M____。

4、__32____
5、21
6、
5,3
7、
1999.4zhang
1999.4zhang
y hang
8、
1,21
9、
13
实验10 自定义类型及其应用
二、实验内容
1.改错题
#include <stdio.h>
#include <string.h>
#define NUM 4
struct student
{
int rank; /* 学生排名 */
char name[8]; /* 学生姓名 */
double score; /* 学生成绩 */
}stu[]={3,"Tom",89.3,4,"Mary",78.2,1,"Jack",95.1,2,"Jim",90.6 };
main()
{
char str[10];
int i;
do
{
printf("Enter a name:");
scanf("%s",&str);
for(i=0;i<NUM;i++)
if ((strcmp(str,stu[i].name)==0))
{
printf("name:%5s\n",stu[i].name);
printf("rank:%d\n",stu[i].rank);
printf("average:%5.1f\n",stu[i].score);
break;
}
if(i>=NUM&&strcmp(str,"0")!=0) printf("Not found\n");
} while(strcmp(str,"0")!=0);
}
2. 程序填空题
#include <stdio.h>
static struct person
{
char name[20];
int age;
} person[]={"Li-ming",18, "wang-hua",19, "zhang-ping",20};
main()
{
int i,max,min;
max=min=person[0].age;
for(i=1;i<3;i++)
if (person[i].age>max) max=person[i].age;
else if (person[i].age<min) min=person[i].age;
for(i=1;i<3;i++)
if (person[i].age!=max && person[i].age!=min)
{
printf("%s %d\n",person[i].name,person[i].age);
break;
}
}
第11章文件及其应用
11 习题
一、选择题
BCABA DACDA
二、阅读并写出结果
1、_____从文件file1.txt中逐个字符地读出全部内容,并显示在屏幕上___________
2、把a.c复制到 b.c中
3、
24
4、
1.099999
实验11 文件及其应用
二、实验内容
1.改错题
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int x[1000],i,k;
FILE *fp2;
srand((unsigned) time(NULL));
for(i=0;i<1000;i++)
{
x[i]=rand();
printf("%d \n",x[i]);
}
fp2=fopen("data2.dat","wb");
if (fp2==NULL)
{
printf("Open error \n");exit(0);
}
for(k=0;k<1000;k++)
fwrite(&x[k],sizeof(int),1,fp2);
fclose(fp2);
}
2. 程序填空题
#include <stdio.h>
main()
{
FILE *fp;
char c,str[256];
int i=0,no=0,line=0;
if ((fp=fopen("text.txt","w"))==NULL)
{ printf("can't open this file.\n");
exit(0);
}
printf("please input a string.\n");
while((c=getchar())!=EOF)
{
if(c>='a' && c<='z') c=c-32;
fputc(c,fp);
}
fclose(fp);
if ((fp=fopen("text.txt","r"))==NULL)
{ printf("can't open this file.\n");
exit(0);
}
while (!feof(fp))
{
c=fgetc(fp);
no++;
if (c=='\n') line++;
}
printf("line=%d character_no=%d\n",line,no);
fclose(fp);
}
第12章预处理命令
12 习题
一、选择题
DBDCD AADBC
二、阅读并写出程序结果
1、97,c
2、c=11
3、d=80
4、
500
5、area=-19
第13章位运算
13 习题
一、选择题
BCBBAA
二、阅读并写出程序结果
1、
a=125 b=15
2、
a=97, b=98,c=97,d=98。

相关文档
最新文档