资源描述
C语言程序设计教程
习题答案
总主编 杨路明
主审 郭浩志
文件摘自 CSDN
习题1
1、算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述
2、c语言程序的结构如下:
1、c语言程序由函数组成,每个程序必须具有一个main函数作为程序的主控函数。
2、"/*"与"*/"之间的内容构成c语言程序的注释部分。
3、用预处理命令#include可以包含有关文件的信息。
4、大小写字母在c语言中是有区别的。
5、除main函数和标准库函数以外,用户可以自己编写函数,程序一般由多个函数组成,这些函数制定实际所需要做的工作。
例如:
void main()
{
int a,b,c,s;
a=8;b=12;c=6;
s=a+b*c;
printf("s=%d\n",s);
}
3、c语言的特点:
1、c语言具有结构语言的特点,程序之间很容易实现段的共享;
2、c语言的主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译成代码,以实现程序的模块化。
3、c语言运算符丰富,运算包含的范围很广;
4、c语言数据类型丰富。
5、c语言允许直接访问物理地址,即可直接对硬件进行操作,实现汇编语言的大部分功能;
6、c语言语法限制不太严格,程序设计自由度大,这样是c语言能够减少对程序员的束缚;
7、用c语言编程,生成的目标代码质量高,程序执行效率高,可移植性好;
4、合法标识符:AB12、leed_3、EF3_3、_762、PAS、XYZ43K2
不合法标识符:a*b2、8stu、D.K.Jon、if、ave#xy、#_DT5、C.D
5、F2:将当前编辑器中文件存盘
F10:调用主菜单
F4:程序运行到光标所在行
Ctrl+F9:当前编辑环境下,进行编译、连接且运行程序;
Alt+F5:将窗口切换到DOS下,查看程序运行结果
6、
(1):
********************
welcome you
very good
********************
(2):
please input three number;5,7,8
max number is:8
7、main
8、User screen、Alt+F5
9、标识符必须是字母或下划线开头,大小写字母含义不同。由数字、字母和下划线组成;
关键字是一种语言中规定具有特定含义的标识符。关键字不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。
10、选择主菜单File项下拉子菜单中Save项或直接按F2键存盘。
习题2
1、符合C语法规定的常数为:0x1e、"ab\n"、1.e5
2、(1):
错误如下:int x,y=5,z=5,aver;
x=7;
aver = (x+y+x)/3;
结果如下:AVER=5
(2):
错误如下:char c1='a',c2='b',c3='c';
printf("a=%db=\'%c\'\"end\"\n",a,b);
结果如下:a=3b='A'"end"
aabcc abc
3、
4、(1):9,11,9,10
(2):3,1,0,0
(3):11,19,31,1
5、(1):0
(2):0
(3):9.500000
(4):90
(5):10
(6):10
(7):65
(8):4
(9):4.500000
(10):1
(11):0
(12):20
(13):0
6、(5)
7、求x的绝对值
8、c>(max=a>b?a:b)?c:max;
9、B
10、D
习题3
1、输入函数scanf的参数错误,应该为:scanf("%f",&k);
2、|1234 1234 |
3、ff10
4、1,3,1
5、原字符串
左边加空格再加字符串本省,字符个数总和为5个
6、scanf("%d,%d,%c,%c",&a1,&a2,&c1,&c2);
7、printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a/b=%d\n",a/b);
printf("(float)a/b=%f\n",(float)a/b);
printf("a%b=%d\n",a%b);
8、void main()
{
float r;
float s,c;
printf("please input the number:");
scanf("%f",&r);
if(r>=0)
{
s = 3.14*r*r;
c = 2*3.14*r;
printf("s = %f, c = %f\n",s,c);
}
else
printf("you input number is error!");
}
9、void main()
{
int n;
printf("please input the number:");
scanf("%d",&n);
if(n>=100 && n <= 999)
printf("%d%d%d",n%10,(n/10)%10,n/100);
else
printf("you input number is error!");
}
10、void main()
{
int i,j,k;
scanf("%d,%d,%d",&i,&j,&k);
((i%2 != 0?1:0) + (j%2 != 0?1:0)+(k%2 != 0?1:0)) == 2?printf("YES\n"):printf("NO\n");
}
11、void main()
{
char a;
scanf("%c",&a);
printf("%c,%c,%c",a-1,a,a+1);
printf("%d,%d,%d",a-1,a,a+1);
}
12、void main()
{
float a,b,c,s,Area;
scanf("%f,%f,%f",&a,&b,&c);
if(a+b > c || a+c > b || b+c >a)
{
s = (a+b+c)/2;
Area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("%f\n",Area);
}
else
printf("you input the number is error!\n");
}
习题4
1: 0
2: 20
3: (x<30&&x>20)||(x<-100)
4: ***a=25,b=14,c=16***
5: 37
6: if(a<=b) printf("1");
else printf("2");
7、
#include<stdio.h>
void main()
{ char a,b,t1,t2;
scanf("%c,%c",&a,&b);
t1=a>b?a:b;
t2=a<b?a:b;
if((t1-t2)%2==0)printf("%c,%c",a+1,b+1);
else printf("%c,%c",a-1,b-1);
getch();
}
8、
#include<stdio.h>
void main()
{ int temp1=0,temp2=0,x,y,i=1;
printf("Please input (x,y): ");
scanf("%d,%d",&x,&y);
while((i*y)<=x)
{ if(x==(i*y)) {temp1=1;break;}
temp2=i;
i++;
}
if(temp1)
printf("%d / %d = %d",x,y,i);
else
printf("%d / %d---> shang=%d,yushu=%d",x,y,temp2,x-y*temp2);
getch();
}
9、
#include<stdio.h>
void main()
{ float x,y,m=0,n=0;
scanf("%f,%f",&x,&y);
n=(x-2)*(x-2);
m=(y-2)*(y-2);
if((m+n)<=1)
printf("(%.3f,%.3f)In the yuan",x,y);
else
printf("(%.3f,%.3f)out of the yuan",x,y);
getch();
}
10、
#include<stdio.h>
void main()
{ int temp=0,month,year;
printf("Please input (year,month): ");
scanf("%d,%d",&year,&month);
if((year%400==0)||(year%4==0&&year%100!=0))
temp=1;
if(month==2)
{ if(temp)printf("%d year %d month have 29 ",year,month);
else printf("%d year %d month have 28 ",year,month);
}
else if(month%2==0)
printf("%d year %d month have 30 ",year,month);
else printf("%d year %d month have 31 ",year,month);
getch();
}
11、
switch(a/10)
{ case 5:m=4;break;
case 4:m=3;break;
case 3:m=2;break;
case 2:m=1;break;
default:m=5;
}
12、
方法一:
#include<stdio.h>
void main()
{ int x,y;
scanf("%d",&x);
if(x<0&&x>-5)
y=x-1;
else if(x==0)
y=x;
else if(x>0&&x<8)
y=x+1;
printf("%d",y);
getch();
}
方法二:
#include<stdio.h>
void main()
{ int x,y;
scanf("%d",&x);
if(x<8&&x>-5)
{ if(x==0)y=x;
else if(x>0&&x<8) y=y=x+1;
else y=x-1;
printf("%d",y);
}
else printf("Input error!!!");
getch();
}
方法三:
#include<stdio.h>
void main()
{ int x,y,i;
scanf("%d",&x);
if(x<8&&x>-5)
{ if(x==0)i=1;
else if(x>0&&x<8) i=2;
else i=3;
}
else i=4;
switch(i)
{ case 1:y=x;printf("%d",y);break;
case 2:y=x+1;printf("%d",y);break;
case 3:y=x-1;printf("%d",y);break;
case 4:printf("Input error!!");break;
}getch();
}
习题5
1、void main()
{
int n,value;
int i,count=0;
float average = 0;
long int sum = 0;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
scanf("%d",&value);
if(value%2 == 0)
{
sum+=value;
count++;
}
}
average = sum / (float)count;
printf("the average is %f\n",average);
}
2、
#include "stdio.h"
void main()
{
char ch;
int zm = 0, sz = 0;
ch = getchar();
while(ch != '*')
{
if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch < 'z') )
zm++;
if(ch >= '0' && ch <= '9')
sz++;
ch = getchar();
}
printf("zm = %d ; sz = %d\n",zm,sz);
}
3、
void main()
{
long i_value;
int sum = 0;
int temp = 0;
scanf("%ld",&i_value);
if(i_value < 0) {printf("you input the int is error!\n");return;}
for(;;)
{
temp = i_value%10;
i_value = i_value/10;
sum+=temp;
printf("%d+",temp);
if(i_value == 0)break;
}
printf("\b=%d\n",sum);
}
4、
#include "stdio.h"
void main()
{
char ch;
ch = getchar();
while(ch != '.')
{
if((ch >= 'A' && ch <= 'Z'))
{
ch = ch + 32;
putchar(ch);
}
else if((ch >= 'a' && ch < 'z') )
{
ch = ch - 32;
putchar(ch);
}
else
{
putchar(ch);
}
ch = getchar();
}
printf("\n");
}
5、
void main()
{
float sum = 200;
int count = 0;
for(;;)
{
sum = sum+ sum*0.045;
count++;
if(sum > 500)break;
}
printf("the %d years later complete!\n",count);
}
6、
void main()
{
int i,temp=0,bit=0;
for(i = 1 ; i <= 999; i++)
{
if(i%3 == 0)
{
temp = i;
for(;temp != 0;)
{
bit = temp%10;
if(bit == 5){printf("%d,",i);break;}
temp = temp/10;
}
}
}
printf("\b \n");
}
7、
#include <stdio.h>
int main(void)
{
int steps = 29, i = 1;
while ( steps % 7 )
{
steps = (30 * ++i) - 1;
}
printf("Total steps: %d\n", steps);
return 0;
}
8、
main()
{
int i,j,k,n;
printf("the narcissus number is:\n");
for(n=100;n<1000;n++)
{i=n/100;
j=n/10-i*10;
k=n%10;
if(i*i*i+j*j*j+k*k*k==n) printf("%d\n",n);
}
}
9、
main()
{ float i,j,temp,n,sum;
int t;
i=2;j=1;sum=0;
scanf("%d",&t);
for(n=1;n<=t;n++)
{sum=sum+i/j;
temp=i;i=i+j;j=temp;
}
printf("2/1+3/2+5/3+8/5+13/8+...=%f\n",sum);
}
10、
void main()
{
int nWidth,a,b;
scanf("%d",&nWidth);
for(a=(nWidth%2);a<=nWidth;a+=2)
{
for(b=0;b<nWidth;b++)
{
char chOut =' ';
int nleft =(nWidth -a)/2;
int nright = (nWidth+a)/2;
if(b>=nleft&&b<nright)
{
chOut ='*';
}
printf("%c",chOut);
}
printf("\n");
}
}
11、
void main()
{
int i=1,j=1;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf("%d*%d=%d",i,j,i*j);
printf("\n")
}
}
12、
#include "stdio.h"
void main()
{
char c;
//count1是正数的个数
//count2是负数的个数
int count1=0,count2=0;
//sum1是正数之和
//sum2是负数之和
int sum1=0,sum2=0;
int flage = 0;
c=getchar();
while(c != '*')
{
if(c == '-')flage = 1;
if(flage == 0)
{sum1+=(c-48);count1++;}
else
{if(c != '-'){sum2-=(c-48);flage=0;count2++;}}
c = getchar();
}
printf("%d,%d\n",count1,count2);
printf("%f,%f\n",sum1/count1,sum2/count2);
}
13、
void main()
{
int i,j;
int s = 0;
for(i = 100 ; i <= 999; i++)
{
s = 0;
for(j=1; j < i-1 ; j++)
{
if( i%j == 0 ) s = s + j;
}
if(s == i)printf("%5d",i);
}
}
14、
#include <stdio.h>
#include <math.h>
void main()
{
int n;
long k = 1;
float e = 1;
n = 1;
clrscr();
while ( fabs(1.0/k) >= 0.000001)
{
n++;
e = e+ 1.0/k;
k = k * n;
}
printf("%f\n",e);
}
15、
#include "math.h"
main()
{float x0,x1,x2,f0,f1,f2;
x1=-10;
f1=2*x1*x1*x1-4*x1*x1+3*x1;
x2=10;
f2=2*x2*x2*x2-4*x2*x2+3*x2;
do
{ x0=(x1+x2)/2;
f0=2*x0*x0*x0-4*x0*x0+3*x0;
if((f0*f1)<0)
{x2=x0; f2=f0;}
else
{x1=x0; f1=f0;}
}
while(fabs(f0)>1e-6);
printf("______2*x*x*x-4*x*x+3*x=0______\n");
printf("the root is %f\n",x0);
}
习题6
1、
#include<stdio.h>
int divisor(int a,int b)
{ int r;
while((r=a%b)!=0)
{ a=b;
b=r;
}
return b;
}
int multiple(int a,int b)
{ int d;
d=divisor(a,b);
return a*b/d;
}
void main()
{ int a,b,c,d;
printf("intput (a,b): ");
scanf("%d,%d",&a,&b);
c=divisor(a,b);
d=multiple(a,b);
printf("\ndivisor=%d\t\tmultiple=%d",c,d);
}
2、
#include<stdio.h>
void tongji(char a[])
{ int b[3]={0,0,0},i=0;
while(a[i]!='\0')
{ if((a[i]<=90&&a[i]>=65)||(a[i]<=122&&a[i]>=97))
b[0]++;
else if(a[i]<=57&&a[i]>=48)
b[1]++;
else
b[2]++;
i++;
}
printf("zimu have: %d; shuzi have: %d; qita have: %d",b[0],b[1],b[2]);
getch();
}
void main()
{ char a[100];
printf("Please input a string: ");
gets(a);
tongji(a);
}
3、
#include<stdio.h>
int flower(int n)
{ int x=0,i,j,k;
i=(n%10);
j= (n/10%10);
k=(n/100);
x=i*i*i+j*j*j+k*k*k;
if(x==n) return 1;
else return 0;
}
void main()
{ int i,n;
printf("Please intput n: ");
scanf("%d",&n);
if(n>999||n<100)printf("Input error!!!");
else
{ for(i=100;i<n;i++)
if(flower(i))printf("%d ",i);
}getch();
}
4、
#include<stdio.h>
#define SWAP(a,b) t=b;b=a;a=t;
main()
{ float x,y,t;
printf("Enter two number (x,y): ");
scanf("%f,%f",&x,&y);
SWAP(x,y);
printf("\n\nExchanged:x=%f,y=%f",x,y);
getch();
}
5、
#include<stdio.h>
int fib(int n)
{ int p;
if(n==0) p=0;
else if(n==1) p=1;
else p=fib(n-1)+fib(n-2);
return p;
}
void main()
{ int n;
printf("Please input fib: ");
scanf("%d",&n);
printf("\n\nfibonacci=%d",fib(n));
}
6、
#include<stdio.h>
long fac(int n)
{ long f;
if(n==0) f=1;
else f=n*fac(n-1);
return f;
}
void main()
{ int m,n;
long f;
printf("Please input (m,n): ");
scanf("%ld,%ld",&m,&n);
f=fac(n+m)+fac(n);
printf("\n\nfibonacci=%ld",f);
}
7、
#include<stdio.h>
void list()
{ int i,j;
for(i=1;i<=9;i++)
{ for(j=1;j<=i;j++)
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
}
void main()
{ list();
}
8、
#include<stdio.h>
int he(int n)
{ int i,s=0;
for(i=1;i<n;i++)
if(n%i==0)s+=i;
return s;
}
void main()
{ int i,j;
for(i=1;i<30000;i++)
{for(j=1;j<30000;j++)
if((he(i)==j)&&(he(j)==i)&&(i!=j))
printf("%d<--->%d ",i,j);
}
}
9、
#include<stdio.h>
#define max 100
struct work
{ long sid;
char name[15];
}worker[max];
int size=0;
struct work *set_list()
{ do
{ printf("\n\nPlease input (sid,name): ");
scanf("%ld,%s",&worker[size].sid,worker[size].name);
size++;
}while(worker[size-1].sid!=0);
return worker;
}
void paixu(struct work a[])
{ int i,j,k;long t;char v[15];
for(i=0;i<size-1-2;i++)
{ k=i;
for(j=i;j<size-2;j++)
if(a[i].sid>a[j].sid)k=j;
if(k!=i)
{ t=a[i].sid; a[i].sid=a[j].sid; a[j].sid=t;
strcpy(v,a[i].name);strcpy(a[i].name,a[j].name);strcpy(a[j].name,v);
}
}
for(i=0;i<=size-2;i++)
printf("sid: %ld\tname:%s\n\n",a[i].sid,a[i].name);
getch();
}
void select(struct work a[])
{ int i=0,found=1;long num;
printf("Input select sid: ");
scanf("%ld",&num);
for(i=0;i<=size-2;i++)
{ if(a[i].sid==num)
{ found=0;
printf("%ld: %s",num,a[i].name);
break;
}
}
if(found)printf("\n\nNO this sid!!!");
getch();
}
void main()
{ struct work *p;
p=set_list();
paixu(p);
select(p);
}
10、
#include<stdio.h>
float jiecheng(int n)
{ long s=1;int i;
for(i=1;i<=n;i++)
s=s*i;
return s;
}
float chengfang(float x,int n)
{ float s=1;int i;
for(i=1;i<=n;i++)
s=s*x;
return s;
}
float f(float x,int n)
{ float s=1,t=0;int i=1,j=-1;
for(i=1;i<=n;i++)
{ t=j*chengfang(x,2*i)/jiecheng(2*i);
s+=t;
j=j*j;
}
return s;
}
main()
{ float s1=0,s2=0,s3=0,s4=0,x=5.6;int n=7;
s1=f(x,n);
s2=f(x+2.3,n);
s3=f(x-3.2,n+3);
s4=s1/(s2+s3);
printf("%f",s4);
getch();
}
习题7
1: (1) D
(2) A
(3) D
(4) B
(5) D
2: (1) 1 5 4 4
6 7 8
2 3
4
(2) 6333
3: (1)a[8]=data; k>=0 a[k]=temp break k<=8
(2) "%s" str[i]<='Z' c[str[i]+26-'a']++ i+'a'
4、/*题目:求一组成绩的平均分数以及高于平均分的成绩。*/
#include<stdio.h>
#define max 100
void main()
{
float a[max],s=0,average=0;
int i,n;
printf("Please input N: "); /*输入要处理元素的个数*/
scanf("%d",&n);
printf("\nPlease input %d ge shu: ",n); /*输入90,85,92,77,80,62*/
for(i=0;i<n;i++)
{
scanf("%f",&a[i]);
s+=a[i];
}
average = s / n;
printf("\naverage = %.2f\n",average); /*输出81.00*/
for(i=0;i<n;i++)
if(a[i]>average)
printf("%.2f ",a[i]); /*输出90.00 ,85.00 ,92.00*/
}
5、/*题目:编写程序,输入一组整数,将他们排序后由小到大输出。*/
#include<stdio.h>
#define max 100
void main()
{
int a[max],j,i,k=0,t=0,n=0;
printf("Please input N: "); /*输入要处理元素的个数*/
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*比较n-1遍*/
{ k=i;
for(j=i+1;j<n;j++) /*每遍比较n-(i+1)次*/
if(a[k]>a[j])
k=j;
if(k!=i) /*元素排序前下标与排序后下标不符,则交换其值*/
{ t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("\n\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
6、/*题目:从键盘输入一个4x4的整数矩阵,以主对角线(\)为对称轴*/
/*将左下角元素
展开阅读全文