C语言程序设计实训教程习题和实验解答
C语言程序设计实训教程习题和实验解答
2.1 C语言概述
【习题解答】
1结构化程序有三大基本结构:顺序、分支和循环.
2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。。
有穷性:一个算法应包含有限的操作步骤而不能是无限的。
确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的,有零个或多个输入输出,有一个或多个输出。
有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。
对于程序设计人员,必须会设计算法,并根据算法写出程序。可以用自然语言、流程图、伪代码和计算机语言表示算法。
3.C语言的主要特点有:语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字;控制语句丰富,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分;运算符丰富,共有34种;数据结构类型丰富;具有结构化的控制语句;语法限制不太严格,程序设计自由度大;C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此有人把它称为中级语言;生成目标代码质量高,程序执行效率高;与汇编语言相比,用C语言写的程序可移植性好。
4.用传统流程图表达如下:
2.2 数据类型与表达式
【习题解答】
一、选择题
1.C
2.B
3.A
4.B
5.A
6.B
7.D
8.B
9.D 10.C
二、填空题
1.整型、实型、字符型、枚举类型
2.3.000000
3.逗号运算符
4.三,自右向左
5.1,0
6.32767
三、编程题
1.已知球的半径为1.5cm,计算球的体积。
#include
void main()
{
float r=1.5,volume;
volume=4.0/3*r*r*r;
printf(“%f\n”,volume);
}
2.输入两个数a和b,求a除以b的商和余数?
#include
void main()
{
int a,b,c,d;
scanf(“%d,%d”,&a,&b);
c=a/b;
d=a%b;
printf(“%d,%d”,c,d);
}
3.输入三个学生的成绩,求这三个学生的总成绩和平均成绩。
#include
void main()
{
int a,b,c,sum;
float average;
printf(“please input students? score:”);
scanf(“%d,%d,%d”,&a,&b,&c);
sum=a+b+c;
average=sum/3.0;
printf(“sum=%d,average=%f\n”,sum,average);
}
【实验解答】
1.c=10
2. ①程序功能为输入两个数,求两数的差
②c=10
3. #include
void main()
{
int a,b ,c;
a=b=5 ;
c=a+b ;
printf(“a+b=%d”,c) ;
}
4.运行结果i=8,j=10,m=9,n=10,u=9,v=-10(回车)
5.x=16,y=24,z=24
6. ①100 68
②100 68
d D
③100 68
d D
④120 112
x p
⑤出错
⑥304 321
0 A
7.编写一个C 程序,输入a,b,c三个整数,求这三个数之和。
具体要求:
1) 在Turbo C环境或其他编译环境下编辑该程序,然后进行编译连接。
2) 运行该程序,检查你所编写的程序是否正确。
#include
void main()
{
int a,b,c,sum;
scanf(“%d,%d,%d”,&a,&b,&c);
sum=a+b+c;
printf(“sum is : %d\n”,sum);
}
2.3 顺序结构程序设计
【习题解答】
一、选择题
1. B
2. C
3. A
4.A
5.D
6.B
二、填空题
1. y=2
2.□□6□□6□6.00□6.00 (□表示空格)
3. k=11,k8=13,k16=b。
4. https://www.360docs.net/doc/304395821.html,!
□□□https://www.360docs.net/doc/304395821.html,!
□□□□□□□□□□ahpu
ahpu□□□□□□□□□□□
5. 5,4,c=3
6. i=56,j=789.000000,x=12345.000000,y=a,c=72
三、编程题
1.已知x=3.2,y=7,z=2,计算y/3*x-2的值。
#include
void main()
{
float x=3.2;
int y=7,z=2;
printf(“%f”, y/3*x-2);
}
2.输入一个华氏温度,要求输出摄氏温度(结果保留2位)。公式为c=5/9*(f-32)。
#include
void main()
{
float f,c;
scanf(“%f”,&f);
c=5.0/9*(f-32);
printf(“c=%.2f”,c);
}
3.从键盘输入一个小写字母,用大写形式输出该字母。
#include
void main()
{
char a,b;
printf(“please input a little letter:”);
scanf("%c",&a);
b=a-32;
printf("%c",b);
}
4.把16进制数12a以10进制形式输出。
#include
void main()
{
int a=0x12a;
printf("%d",a);
}
5.输入两个整数,将其值交换。
#include
void main()
{
int a,b,t;
scanf("a=%d,b=%d",&a,&b);
t=a;
a=b;
b=t;
printf("a=%d,b=%d",a,b);
}
【实验解答】
实验顺序结构程序设计
1.②结果为0,因为a,b被定义为实型,而却以整型输入,类型不匹配。
2. 错误之处: s=3 /(a+b)*(a+b); 应改为:s=
3.0/((a+b)*(a+b));
3. 运行结果-1,177777,ffff,65535
b=-2
4.编程并上机调试运行
1) 设圆半径为r=1.5,求圆周长、面积。要求用scanf函数输入数据,输出时取小数点后两位。
#include
void main()
{
float r,l,s,v;
scanf("%f",&r);
l=2*3.14*r;
s=3.14*r*r;
printf("l=%.2f,s=%.2f,v=%.2f",l,s);
}
2) 输入一个3位十进制整数,分别输出百位、十位以及个位上的数。
#include
void main()
{
int a,b,c,d;
scanf("%d",&a);
b=a/100;
c=a/10%10;
d=a%10;
printf("%d %d %d",b,c,d);
}
3) 从键盘输入一个带2位的实数,将其整数部分和小数部分分离后输出。例如:输入321.54,输出321.54=321+0.54。
#include
void main()
{
int a;
float b,c;
scanf("%f",&b);
a=(int)b;
c=b-a;
printf("%.2f=%d+%.2f",b,a,c);
}
4) 用getchar函数读入两个字符,然后分别用putchar和printf函数输出这两字符。
#include
void main()
{
char a,b;
a=getchar();
b=getchar();
putchar(a);
putchar(b);
printf("\n%c%c",a,b);
}
2.4 选择结构程序设计
【习题解答】
一、选择题
1. A。
2. D。
3. A。
4. B。
5. C。
6. A。
二、填空题
1. (x>20&&x<30)||x<-100。
2. 1,0,0。
3. 585858。
4. 20,0。
5. 2。
6.a=3,b=2。
三、编程题
1.要求输入三个数,输出其中最大值。
#include
void main()
{
int a,b,c,max;
scanf("%d%d%d",&a,&b,&c);
max=a;
if(max
if(max printf("max is:%d\n",max); } 2.由键盘输入3个数,若输入的这3个数可以构成三角形,则计算以这3个数为边长的三角形周长;如果不能,则输出提示错误信息。 #include void main() { float a,b,c,l; printf("please input a,b,c\n"); scanf("%f,%f,%f",&a,&b,&c); if((a+b)>c&&(a+c)>b&&(b+c)>a) { l=a+b+c; printf("l=%f\n",l); } else printf("It is not triangle!\n"); } 3.从键盘上输入一个整数判断其奇偶以及正负。 #include "stdio.h" void main() { int a; scanf("%d",&a); if(a>0) { if(a%2==0) printf("It is PLUS even number"); else printf("It is PLUS odd number"); } else if(a<0) { if(a%2==0) printf("It is MINUS even number"); else printf("It is MINUS odd number"); } else printf("It is ZERO"); } 4.判断方程ax2+bx+c=0的根的个数。 #include "stdio.h" void main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(b*b-4*a*c>0) printf("2"); else if(b*b-4*a*c==0) printf("1"); else printf("0"); } 5.从键盘输入表示年份的整数,判断是否为闰年。 #include "stdio.h" void main() { int year; scanf("%d",&year); if((year%400==0)||(year%4==0&&year%100!=0)) printf("It is runnian"); else printf("It is not runnian"); } 【实验解答】 实验名称选择结构程序设计 1. if(…0?<=c&&c<=?9?) if((…A?<=c&&c<=?Z?)||(?a?<=c&&c<=?z?)) else 2.编程并上机调试运行 1) 给出一个不多于4位的正整数,求它是几位数? #include void main() { int n; printf("Input a num(0 scanf("%d",&n); if(n<10) printf("1\n"); else if(n<100) printf("2\n"); else if(n<1000) printf("3\n"); else printf("4\n"); } 2) 给出一个百分制成绩,要求输出成绩等级?A?、?B?、?C?、?D?、?E?。90分及以上为?A?,80~89为?B?,70~79为?C?,60~69为?D?,60以下为?E?。用switch语句来实现。 #include void main() { int score; scanf("%d",&score); if(score<0||score>100) printf("Error!"); else { score=score/10; switch(score) { case 10: case 9:printf("A\n");break; case 8:printf("B\n");break; case 7:printf("C\n");break; case 6:printf("D\n");break; default:printf("E\n"); } } } 3) 输入四个数,要求按从大到小顺序输出。#include void main() { int a,b,c,d,t; scanf("%d%d%d%d",&a,&b,&c,&d); if(a if(a if(a if(b if(b if(c printf("%d,%d,%d,%d\n",a,b,c,d); } 4) 输入3个整数,将最大数与最小数输出。#include void main() { int a,b,c,t; int max,min; scanf("%d%d%d",&a,&b,&c); max=min=a; if(max max=b; else min=b; if(max else min=c; printf("max=%d,min=%d",max,min); } 5) 输入一个字符,如果是数字字符,把它转换成相对应的数字并输出;如果不是,则以带符号的十进制整数形式输出。 #include "stdio.h" void main() { char a; scanf("%c",&a); if(a>='0'&&a<='9') { a=a-'0'; printf("%d",a); } else printf("%d",a); } 2.5 循环结构程序设计 【习题解答】 一、选择题 1.A 2. A 3. C 4. B 5. C 6. C 二、填空题 1. 18或19 2. 0 3. 8921 4. 3,4 5. 35 6. 4 三、编程题 1.设计程序计算并输出1+31+51+……+99 1 #include int i; float s=0; for(i=1;i<=99;i+=2) s=s+1.0/i; printf(“s=%f\n ”,s); } 2.编写程序输出下面图形 1 21 321 4321 54321 #include int i,j; for(j=5;j>=1;j--) { for(i=1;i<=j-1;i++) printf(““); for(;i<=5;i++) printf(“%d”,5-i+1); printf(“\n”); } } 3.一球从100m高度自由落下,每次落地后又反跳原高度的一半,再下落。求在第10次落地时,共经多少米?第10次反弹高度? #include void main() { float s=100,m=100,i; for(i=2;i<=10;i++) { m=m/2; s=s+m*2; } printf(“No.10 drop?s all distance is=%f\n”,s); printf(“No.10 up?s distance is=%f”,m/2); } 4.输入两个整数求其最大公约数。 #include void main() { int m,n,i,t; scanf("%d %d",&m,&n); if (m { t=n; n=m; m=t; } i=n; while((m%i!=0)||(n%i!=0)) i=i-1; printf("%d\n",i); } 5.输入一个正整数,将其逆序输出。 #include "stdio.h" void main() { int m,n; scanf("%d",&n); while(n!=0) { m=n%10; n=n/10; printf("%d",m); } } 【实验解答】 实验一循环结构程序设计 1. 1) %1d s=0 i+=2 2)s=0 ld i<=2*n-1 i+=2 3)s=0,n,i=1 i+=2 while(i<=2*n-1); 2. 编程并上机调试运行 1) 编程求1!+2!+3!+ (10) #include void main() { long s=1,i,t=1; for(i=2;i<=10;i++) { t=t*i; s=s+t; } printf("%ld",s); } 2) 打印以下图案 #include void main() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<4+i;j++) { if(i+j<5) printf(" "); else printf("*"); } printf("\n"); } for(i=1;i<=3;i++) { for(j=1;j<=7-i;j++) { if(i>=j) printf(" "); else printf("*"); } printf("\n"); } } 3) 猴子吃桃。猴子第一天摘若干桃子,当即吃了一半,又加一个。第二天吃了剩下桃子一半又多一个。以后每天早上都吃前一天剩下的一半多一个。第十天,只剩一个。问第一天共摘多少个桃子。 #include void main() { int s=1,i; for(i=2;i<=10;i++) s=(s+1)*2; printf("%d",s); } 4) 打印九九乘法表 #include void main() { int i,j; for(i=1;i<=9;i++) for(j=1;j<=i;j++) { printf("%d*%d=%d ",i,j,i*j); if(i==j) printf("\n"); } } 5) 输出10-100之间的全部素数。 #include void main() { int i,j; for(i=10;i<=100;i++) { for(j=2;j<=i;j++) { if(i%j==0) { if(i==j) printf("%d ",i); break; } } } } 实验二综合运用三种基本结构进行程序设计 1.百马百担。100匹马,驮100担,大马3担,中马2担,2个小马驮1担。问大、中、小 马各多少? #include void main() { int i,j,k; for(i=0;i<=33;i++) for(j=0;j<=50;j++) { k=100-i-j; if(3*i+2*j+k/2.0==100) printf(“Da=%d,Zhong=%d,Xiao=%d\n”,i,j,k); } } 2.输入一行字符,分别统计其中英文字母、空格、数字和其它字符个数。 #include void main() { char c; int letter=0,space=0,digtal=0,other=0; while((c=getchar())!=…\n?) { if((c>=…A?&&c<=…Z?)||(c>=…a?&&c<=…z?)) letter++; else if(c==……) space++; else if(c>=…0?&&c<=…9?) digtal++; else other++; } printf(“letter=%d,space=%d,digtal=%d,other=%d”,letter,space,digtal,other); } 3.打印输出”水仙花数”。”水仙花数”是指一个3位,其各位数字的立方和等于该数本身。例 如:153。 #include void main() { int i,j,k; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) { if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(“%d\n”,i*100+j*10+k); } } 4.将一个正整数分解成质因数的乘积。例如:输入90,打印90=2*3*3*5。 #include void main() { int n,i=2; scanf(“%d”,&n); printf(“%d=“,n); while(n>1) { if(n%i==0) { printf(“%d*”,i); n=n/i; } else i++; } printf(“\b “); } 5.利用循环语句编写程序:对一个正整数,将各位数字反序后的数组成一个整数输出。 例如:输入12345,输出54321。 #include void main() { long m,n,sum=0; scanf(“%ld”,&m); while(m>0) { n=m%10; m=m/10; sum=sum*10+n; } printf(“%ld”,sum); } 6.一个素数加上1000以后是37的倍数,求满足这个条件的最小素数。 #include void main()