void main()
{
int gy(int m, int n)
int x,y,max, min
printf("请输入两个大于0的正整数,以空格或者回车间隔:\n")
scanf("%d%d",&x,&y)
while(x<1 || y<1)
{
printf("输入数据不正确,请重新输入。\n")
printf("请输入两个大于0的正整数,以空格或者回车间隔:\n")
scanf("%d%d",&x,&y)
}
max=gy(x,y)
min=x*y/max
printf("%d与%d的最大公约数是:%d,最小公倍数是:%d\n",x,y,max,min)
}
int gy(int m, int n)
{
int max, t
while(m%n != 0) // while(m%n)
{
t=nn=m%nm=t
}
max=n
return max
}
第二题#include <stdio.h>
#include <math.h>
void main()
{
void root(double a, double b, double c)
double a, b, c
printf("请输入一元二次方程的系数,用空格或者回车间隔:\n")
scanf("%lf%lf%lf",&a,&b,&c)
root(a,b,c)
}
void root(double a, double b, double c)
{
double disc, x1, x2, real , imag
disc = b*b-4*a*c
if(disc>0)
{
x1 = (-b+sqrt(disc))/(2*a)
x2 = (-b-sqrt(disc))/(2*a)
printf("方程有两个实根,分别是:%f 与 %f\n", x1, x2)
}
else if(disc==0)
{
x1 = (-b)/(2*a)
printf("方程有一个实根,它是:%f\n ", x1)
}
else
{
real=(-b)/(2*a)
imag=sqrt(-disc)/(2*a)
printf("方程有两个虚根,分别是:%f+%fi, %f-%fi\n", real,imag,real,imag)
}
}
测试1:请输入一元二次方程的系数,用空格或者回车间隔:1 2 1
方程有一个实根,它是:-1.000000
测试2:请输入一元二次方程的系数,用空格或者回车间隔:1 6 5
方程有两个实根,分别是:-1.000000 与 -5.000000
测试3:请输入一元二次方程的系数,用空格或者回车间隔:1 1 1
方程有两个虚根,分别是:-0.500000+0.866025i, -0.500000-0.866025i
第三题#include <stdio.h>
#include <math.h>
void main()
{
int isprime(int n)
int n
scanf("%d",&n)
while(n<2)
{
printf("Please reinput(n>=2):")
scanf("%d",&n)
}
if(isprime(n))
printf("%d是素数。\n",n)
else
printf("%d不是素数。\n",n)
}
int isprime(int n)
{
int i,k=sqrt(n)
for(i=2i<=ki++)
{
if(n%i==0)
return 0
}
return 1
}
第四题#include <stdio.h>
#include <math.h>
void main()
{
void printA(int a[3][3])
void reverse(int a[3][3])//转置函数的声明
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}
printf("原二维数组:\n")
printA(a)
reverse(a)//函数转置
printf("转置后的数组:\n")
printA(a)
}
void printA(int a[3][3])
{
int i,j
for(i=0i<3i++)
{
for(j=0j<3j++)
{
printf("%6d",a[i][j])
}
printf("\n")
}
}
void reverse(int a[3][3]) //函数转置的定义
{
int i,j,t
for(i=0i<3i++)
{
for(j=0j<ij++)
{
t=a[i][j]
a[i][j]=a[j][i]
a[j][i]=t
}
}
}
第五题#include <stdio.h>
#include <string.h>
void main()
{
char str[30]
void fanxu(char *p)
printf("请输入一个字符串:")
gets(str)
printf("进行反序......\n")
fanxu(str)
printf("反序后的字符串:")
puts(str)
}
void fanxu(char *p)
{
int len=strlen(p)
char *q,c
q=p+len-1//字符串最后一个字符位置
for(p<qp++,q--)
{
c=*p*p=*q*q=c
}
}
第六题#include <stdio.h>
#include <string.h>
void main()
{
char str1[60],str2[30]
void str_copy(char *p, char *q)
printf("请输入第一个字符串:")
gets(str1)
printf("请输入第二个字符串:")
gets(str2)
str_copy(str1, str2)
printf("连接后的字符串:")
puts(str1)
}
void str_copy(char *p, char *q)
{
for(*p!='\0'p++)
for(*q!='\0'p++,q++)
{
*p=*q
}
*p='\0'
}
(0808)#include <stdio.h>
#include <string.h>
void main()
{
char str[80]
void insert(char str[])//插入空格的函数
printf("请输入一个字符串:")
gets(str)
insert(str) //插入空格
puts(str) //输出字符串
}
void insert(char str[])
{
int len, i
len=strlen(str)
for(i=leni>0i--) // 设置空格
{
str[2*i]=str[i]
str[2*i-1]=' '
}
}
(0809)#include <stdio.h>
int letter//字母个数
int digit//数字个数
int space//空格个数
int others//其它字母个数
void main()
{
void count(char str[])//统计个数的函数的声明
char s[81]
printf("请输入一个字符串:")
gets(s)
letter=0digit=0
space=0others=0
count(s)
printf("字符串中共有 %d 个字母,%d 个数字,%d 个空格,%d个其它字母。\n",letter,digit,space,others)
}
void count(char str[]) //统计个数的函数的定义
{
int i
char c
for(i=0str[i]!='\0'i++)
{
c=str[i]
if(c>='a' &&c<='z' || c>='A' &&c<='Z')
{ letter++}
else if(c>='0' &&c<='9')
{ digit++}
else if(c==' ')
{ space++}
else
{ others++}
}
}
(0810)#include <stdio.h>
#include <string.h>
void main()
{
int i
char line[81]
int alphabetic(char c)//判断一个字符是空格还是其它字母
int longest(char str[])//寻找最长单词的起始位置
printf("请输入一行字符串:\n")
gets(line)
printf("最长的字符串是:")
for(i=longest(line)alphabetic(line[i])i++)
{ printf("%c",line[i])}
printf("\n")
}
int alphabetic(char c) //如果为空格返回0,其它字母返回1
{
if(c!=' ')
return 1
else
return 0
}
int longest(char str[])
{
int len=0 // 记录每一个单词的长度
int length=0 // 记录最长单词的长度
int flag=1 // 其值为0时表示当前位置处于字符串中,为1时表示当前位置为空格
int place=0 // 记录最长字符串(单词)的起始位置
int point // 每个字符串的起始位置
for(int i=0i<=strlen(str)i++)
{
if(alphabetic(str[i])) //如果当前位置为非空格
{
if(flag) //如果前一字符为空格
{
point = i // 设置当前单词的起始位置
flag = 0 // flag设为0,表示处于单词中
}
else //如果前一字符为非空格
{ len++} // 单词的长度加1
}
else //当前位置为空格
{
flag = 1 //flag设为1,表示当前位置为空格
if(len >= length) //如果最近单词的长度大于最长长度
{
length = len
place = point //设置最长单词的起始位置
len = 0 //len归0,重新开始计算单词的长度
}
}
}
return place
}
(0811)#include <stdio.h>
#include <string.h>
void main()
{
void inputNum(int a[], int n)
void outputNum(int a[], int n)
void bubble(int a[], int n)
int a[11], n
printf("请输入你要排序的数的个数:")
scanf("%d",&n)
inputNum(a,n)
outputNum(a,n)
bubble(a,n)
printf("从小到大排序为:\n")
outputNum(a,n)
}
void inputNum(int a[], int n)
{
int i
for(i=1i<=ni++)
{
printf("a[%d]=",i)
scanf("%d",&a[i])
}
}
void outputNum(int a[], int n)
{
int i
for(i=1i<=ni++)
{
printf("%6d",a[i])
}
printf("\n")
}
void bubble(int a[], int n)
{
int i,j,t
for(i=1i<=n-1i++)
{
for(j=1j<=n-ij++)
{
if(a[j]>a[j+1])
{ t=a[j]a[j]=a[j+1]a[j+1]=t}
}
}
}
(0813)#include <stdio.h>
void main()
{
double lrd(int, double)
double x
int n
printf("请输入n阶勒让德多项式的阶数:\n")
scanf("%d",&n)
printf("请输入x的值:\n")
scanf("%lf",&x)
printf("参数为%f 的 %d 阶勒让德多项式的值为 %f.\n",x,n,lrd(n,x))
}
double lrd(int n, double x)
{
if(n==0)
return 1
else if(n==1)
return x
else
return ((2*n-1)*x - lrd(n-1,x) -(n-1)*lrd(n-2,x))/n
}
/*
测试1:请输入n阶勒让德多项式的阶数:0请输入x的值:99.99参数为99.990000 的 0 阶勒让德多项式的值为 1.000000.
测试2:请输入n阶勒让德多项式的阶数:1请输入x的值:99.99
参数为99.990000 的 1 阶勒让德多项式的值为 99.990000.
测试3:请输入n阶勒让德多项式的阶数:2
请输入x的值:99.99 参数为99.990000 的 2 阶勒让德多项式的值为 99.490000.
测试4:请输入n阶勒让德多项式的阶数:10
请输入x的值:1.1
参数为1.100000 的 10 阶勒让德多项式的值为 0.888677.
(0817)#include <stdio.h>
void main()
{
int num
void convert(int num)// 转换为字符串的函数的声明
printf("请输入一个整数:\n")
scanf("%d",&num)
printf("转换成字符串:")
if(num<0)
{
putchar('-')
num = -num
}
convert(num)
printf("\n")
}
void convert(int n)
{
int i
if((i = (n/10)) != 0)
{
convert(i)
}
putchar(n%10 + '0')
}
(0818)#include <stdio.h>
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
void main()
{
int year,month,day
int days
int count(int year,int month, int day)
int leap(int y)
printf("请输入年份:")
scanf("%d",&year)
while(year<=0)
{
printf("年份不能为负,请重新输入:")
scanf("%d",&year)
}
if(leap(year)) //如果为闰年,2月份的天数为29
{ d[2]=29}
printf("输入月份:")
scanf("%d",&month)
while(month<1 || month>12)
{
printf("月份在1月和12月之间,你的输入有误,请重新输入:")
scanf("%d",&month)
}
printf("输入日数:")
scanf("%d",&day)
while(day<1 || day >d[month])
{
printf("日数应在1和%d之间,请重新输入:",d[month])
scanf("%d",&day)
}
days=count(year,month,day)
printf("%d年%d月%d日是该年的第%d天\n",year,month,day,days)
}
int leap(int y)
{
if(y%4==0 &&y%100!=0 || y%400==0)
return 1
else
return 0
}
int count(int year,int month, int day)
{
int i,days=0
for(i=1i<monthi++)
{ days += d[i]}
days+=day
return days
}
(08050)#include <stdio.h>
#include <string.h>
void main()
{
char str[30]
void fanxu(char str[])
printf("请输入一个字符串:")
gets(str)
printf("进行反序......\n")
fanxu(str)
printf("反序后的字符串:")
puts(str)
}
void fanxu(char str[])
{
int len=strlen(str)
int i,j
char c
i=0j=len-1//i,j分别存储第一个字符和最后一个字符的下标
for(i<ji++,j--)
{
c=str[i]str[i]=str[j]str[j]=c
}
}
(08051)#include <stdio.h>
#include <string.h>
void main()
{
char str[30]
void fanxu(char s[])
printf("请输入一个字符串:")
gets(str)
printf("进行反序......\n")
fanxu(str)
printf("反序后的字符串:")
puts(str)
}
void fanxu(char s[])
{
int len=strlen(s)
int i
char c
for(i=0i<=len/2i++)
{
c=s[i]
s[i]=s[len-i-1]
s[len-i-1]=c
}
}
(08061)#include <stdio.h>
#include <string.h>
void main()
{
char str1[60],str2[30]
void str_copy(char s1[], char s2[])
printf("请输入第一个字符串:")
gets(str1)
printf("请输入第二个字符串:")
gets(str2)
str_copy(str1, str2)
printf("连接后的字符串:")
puts(str1)
}
void str_copy(char s1[], char s2[])
{
int i,j
for(i=0s1[i]i++)// s1[i]!='\0'
for(j=0s1[i]=s2[j]i++,j++)
// (s1[i]=s2[j])!='\0'
}
(08110)#include <stdio.h>
#include <string.h>
void main()
{
void inputNum(char a[], char n)
void outputNum(char a[], char n)
void bubble(char a[], char n)
char a[11], n
printf("请输入你要排序的数的个数:")
scanf("%d",&n)
inputNum(a,n)
outputNum(a,n)
bubble(a,n)
printf("从小到大排序为:\n")
outputNum(a,n)
}
void inputNum(char a[], char n)
{
char i
printf("请连续输入%d个字符:",n)
fflush(stdin)//一般在输入字符或者字符串之前要清空输入缓冲区
for(i=1i<=ni++)
{
scanf("%c",&a[i])
}
}
void outputNum(char a[], char n)
{
char i
for(i=1i<=ni++)
{
printf("%2c",a[i])
}
printf("\n")
}
void bubble(char a[], char n)
{
char i,j,t
for(i=1i<=n-1i++)
{
for(j=1j<=n-ij++)
{
if(a[j]>a[j+1])
{ t=a[j]a[j]=a[j+1]a[j+1]=t}
}
}
}
(08112)#include <iostream.h>
#include <iomanip.h>
void main()
{
void inputNum(int a[], int n)
void outputNum(int a[], int n)
void bubble(int a[], int n)
int a[11], n
cout<<"请输入你要排序的数的个数:"
cin>>n
while(n<1 || n>10)
{
cout<<"请重新输入,(1<=n<=10):"
cin>>n
}
inputNum(a,n)
outputNum(a,n)
bubble(a,n)
cout<<"从小到大排序为:\n"
outputNum(a,n)
}
void inputNum(int a[], int n)
{
int i
for(i=1i<=ni++)
{
cout<<"a["<<i<<"]="
cin>>a[i]
}
}
void outputNum(int a[], int n)
{
int i
for(i=1i<=ni++)
{
cout<<setw(6)<<a[i]
}
cout<<endl
}
void bubble(int a[], int n)
{
int i,j,t
for(i=1i<=n-1i++)
{
for(j=1j<=n-ij++)
{
if(a[j]>a[j+1])
{ t=a[j]a[j]=a[j+1]a[j+1]=t}
}
}
}
(08181)#include <iostream.h>
#include <iomanip.h>
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
void main()
{
int year,month,day
int days
int count(int year,int month, int day)
int leap(int y)
cout<<"请输入年份:"
cin>>year
while(year<=0)
{
cout<<"年份不能为负,请重新输入:"
cin>>year
}
if(leap(year)) //如果为闰年,2月份的天数为29
{ d[2]=29}
cout<<"输入月份:"
cin>>month
while(month<1 || month>12)
{
cout<<"月份在1月和12月之间,你的输入有误,请重新输入:"
cin>>month
}
cout<<"输入日数:"
cin>>day
while(day<1 || day >d[month])
{
cout<<"日数应在1和"<<d[month]<<"之间,请重新输入:"<<endl
cin>>day
}
days=count(year,month,day)
cout<<year<<"年"<<month<<"月"<<day<<"日是该年的第"<<days<<"天\n"
}
int leap(int y)
{
if(y%4==0 &&y%100!=0 || y%400==0)
return 1
else
return 0
}
int count(int year,int month, int day)
{
int i,days=0
for(i=1i<monthi++)
{ days += d[i]}
days+=day
return days
}
一、判断题(每小题1分,共15分)
1.标准C中,只有数值型数据才能进行4则混合运算。
2.标准C中,_a是合法的自定义标识符。
3.有定义:float f表达式f+=(int)3.6%2”不符合C语言语法。
4.标准C中,逻辑运算的结果只有是1表示满足条件,而结果是0表示不满足条件。
6.以下运算符排列顺序满足按照优先级从高到低的排列:‘&&’、‘!’、‘==’、‘-’。
7.语句for()是非法的。
8.在C语言程序中可以由多个源文件构成,每个源文件都可以有自己的main()函数。
9.while和do-while的主要区别是后者至少无条件执行一次。
10.数组名代表数组的首地址是常量,所以将实参数组名表示地址传给形参数组名是错误的。
11.当函数没有返回值类型时,表示函数类型为void。
12.C语言中,指针变量作函数参数时,它们不是采取单向值传递的方式。
13.一个函数中只允许有一条return语句。
14.在C语言中,如果没有说明变量的存储类型是auto类型的。
15.由于指针中所存放的地址都是整数,所以整型指针和浮点型指针可以相互赋值。
二、填空题(每空1分,共15分)
1. 若a=4b=5,c=6则表达式c==(b=-a)中c的值是 (1) 。
2. 计算表达式的值:
4&&-4的值: (2) ;
设int a=3,b=4,c=5,则表达式a||b+c&&b==c的值: (3) ;
设x=2.5, a=7, y=4.7,则表达式x+a%3*(int)(x+y)%2/4的值: (4) ;
设a=12,则表达式a*=a/5的值: (5) ;
3. 若int x = 4,y = 6,z = 0;有循环while(x = y) {z ++;y--;}
则循环语句执行完后,z值为 (6) 。
4. 变量的指针就是指该变量的 (7) 。
5. 若有定义int (*p)[4],则标识符p是 (8) ;若有定义int *p[4],则标识符p是 (9) ;
6. 已有定义:char *p[ ]={“France”,“Chinese”,“Russia”,“America”};则语句printf(“%s”,p[2]);printf(“%c”,*(p[1]+2));printf(“%c”,*(*(p+1)+1));
的输出结果分别为: (10) 、 (11) 、 (12) 。
7. 已有定义: int x=65若格式化输出结果为“A, 65”,则对应的格式化输出语句为printf(“ (13) , (14) ”, x, x)。
8. 已定义:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};则a[3][0]= (15) 。
三、简答题(每题4分,共12分)
1、简述选择语句if和else语句对与switch语句的区别。
2、简述在循环语句中,break和continue的区别。
3、若int a[5],*p=a;简述*p++和(*p)++的区别。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4分,共16分)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
七、编程题(8分)
编译程序,其功能是比较字符串的大小( 不允许 用系统提供的字符串比较函数strcmp)。要求是:
(1) 通过主函数调用一个函数strcompare来实现。
(2) 要求函数strcompare实现两个字符的比较:如第一个字符小于第二个字符则返回一个负值;如两个字符相等则返回0值;如第一个字符大于第二个字符则返回一个正值。
(3) 并输出两个字符串中相同部分的子串。
《C语言程序设计基础》试卷参考答案
一、判断题(每小题1分,共15分)
1~5 ; 6~10 ; 11~15
二、填空题(每空1分,共15分)
(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6
(7)地址 (8) 行指针,指向有四个元素的一维数组
(9)指针数组名,该数组有四个元素,每个元素都是指针
(10)Russia (11)i (12)h (13) %c (14) %d (15)7
三、简答题(每题4分,共12分)
1、if总是判断其后面的表达式的值是否为非零值,如是非零值则执行其后面的语句或由{}括起来的复合语句,否则执行else后面的语句。而switch语句则根据其后面表达式的可数值来判断,执行switch语句体内与其中的一个case:常量值相等语句后面的语句。执行break语句后,跳出switch语句体。
2、break是终止整个循环过程;continue是终止本次循环。
3、*p++首先取a[0]的值,然后p指向a[1];(*p)++使得a[0]的值自增1,但p保持不变。
四、下列各程序中每个程序各有2个错误,指出错误语句,写出对应正确语句(每小题4 分,共16分)
1、 (1)缺#include ; (2)scanf(“%f”,a)改为 scanf(“%f”,&a)
2、 (1)缺sum=0(2)for(i=1i<=3i++) 改为for(i=0i<3i++)
3、 (1)p1=p2 改为 *p1=*p2 (2)swap(&a, *p) 改为swap(&a, p)
4、 (1)在if(m<0)语句后添加else if(m==0) a=1(2) 添加 return(a)
五、程序填空题:下列程序中缺少若干条语句,在对应的下划线上填上合适的语句,每一个下划线只填一条语句(每小题6分,共24分)
1、 (1)x=0(2)if(n==x) (3)s++或s=s+1
2、 (4)&num[i] (5)max<num[i]? (6)num[i]!=0
3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp
4、 (10)count=0(11)n%10 (12)n>0或n!=0或n
六、阅读下列程序,写出运行结果(第一小题4分,第二小题6分,共10分)
1、 #*#*#*
2、 main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
七、编程题(8分)
#include
main()
{
int i,j, flag=0
char str1[90],str2[90]
gets(str1)
gets(str2)
i=0
do{
flag=strcompare(str1[i],str2[i])
i++
}while(str1[i]!=’’ &&str2[i]!=’’ &&flag=0)
if(flag<0)printf(“%s小于%s ”,str1,str2)
else if(flag==0) printf(“%s 等于%s ”,str1,str2)
else printf(“%s大于%s ”,str1,str2)
printf(“两个字符串中相同的字串为:”)
j=0
i--后3句可用str1[i]=’’printf(“%s”,str1)代替//用str2也可以。
while(j<i){printf(“%c”,str1[i])j++} span=""></i){printf(“%c”,str1[i])j++}>
}
int strcompare(char c1,char c2)
{
int v
v=c1-c2
return v
}
c语言程序设计第三版指导答案
附录F 课后题参考答案
习 题 1
1.1 填空题
1.函数
2.主函数main();主函数main() 3.主函数main() 4.函数首部;函数体 5.{;}
6.顺序结构;选择结构;循环结构 7..c;.obj;.exe
1.2 思考题
1.答:结构化程序设计是指,为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。顺序结构,选择结构,循环结构
2.答:算法是对具体问题求解步骤的一种描述。计算机算法的表达工具通常采用以下几种方法:①用自然语言表示算法;②用流程图表示算法;③用伪代码表示算法;④用程序设计语言表示算法。
3.略 4.略 5.略 1.3 编程题 1.答:
#include "stdio.h" main()
{ float a=10, b=20, h=5, s s=(a+b)*h/2
printf("s=%f " , s ) }
2.答:
#include "stdio.h"
main()
{ printf("******************************") printf("* hello world *") printf("******************************") }
习 题 2
2.1 单选题
DBDCA DCABB CA
2.2 填空题
1.2.000000
2.1;0.500000
3.9;2 4.6 5.100;d 6.(1)20
(2)0
(3)60 7.(1)10;6;4
(2)6;9;15
(3)3;60;83
8.55或 '7'
9.x=4;y=6;z=3;m=463
2.3 改错题(略)
习 题 3
3.1 单选题
BDABC ADCAC BBA
3.2 填空题
1.3 2.261 3.10
4.2, 1;互换a,b的值 5.6.6 6.003 7.7
8.5.0,4,c=3<Enter>
9.i=10,j=20<Enter>
10. (1)65 (2)65,A (3)3.14,123.46
(4)3.141600e+000,1.234560e+002 (5)8765.432100 (6)8.765432e+003
11.a=2b=5x=8.8y=76.34c1=65c2=97 12.%d/%d;%d/%d=%.2f\n
3.3 改错题(略) 3.4 编程题
1.答:
#include "stdio.h" main() {
int x,y
scanf("%d%d",&x,&y) printf("\t\tx\ty\n")
printf("十进制数\t%d\t%d\n",x,y) printf("八进制数\t%o\t%o\n",x,y) printf("十六进制数\t%X\t%x\n",x,y) }
2.答:
#include "stdio.h" main() {
char ch
printf("请输入一个大写英文字母") scanf("%c",&ch)
printf("大写英文字母是%c\n",ch) printf("它的前导字符是%c\n",ch-1) printf("它的后续字符是%c\n",ch+1) }
3.答:
#include "stdio.h" main() {
int x,a,b,c,y
printf("请输入一个三位整数\n") scanf("%d",&x) a=x/100
b=(x-a*100)/10 c=x%10
y=c*100+b*10+a
printf("反向输出该整数:%d\n",y) } }
4.答:
#include "stdio.h" main()
{ int hour
double salary, salaryday
scanf("%d,%lf", &hour, &salaryday )
salary=hour*salaryday- hour*salaryday*0.1
printf("%8.2lf\n", salary) }
5.答:
#include "stdio.h" main() {
int a,b,c,t
printf("请输入三个整数\n") scanf("%d%d%d",&a,&b,&c)
printf("交换前a=%d,b=%d,c=%d\n",a,b,c) t=aa=cc=bb=t
printf("交换后a=%d,b=%d,c=%d\n",a,b,c) }
习 题 4
4.1 单选题
BADDD ACBBB BA
4.2 填空题
1.1
2.(1)a>0 || b>0
(2)x>0 && x<=10 (3)a==1.5 && b==1.5 && c==1.5
(4)p<a || p<b || p<c
3.(1)0 (2)1 (3)1 (4)0 (5)1
4.c=1 5.-4 6.1 7.5, 0, 3 8.5 9.123
10.( cvb= ='y'||cvb= ='Y')&&(work>=3||college=='y'|| college=='Y')&&age<=35
4.3 改错题(略) 4.4 编程题
1.答
#include "stdio.h"
#include "math.h" main() {
double a,b,c,p,area
scanf("%lf%lf%lf",&a,&b,&c)
printf("三角形的三边为:%.llf,%.1lf,%.1lf\n",a,b,c) if (a+b>c&&a+c>b&&b+c>a) {p=(a+b+c)/2
area=sqrt(p*(p-a)*(p-b)*(p-c))
printf("三角形的面积为%.2lf\n",area) } else
printf("不能构成三角形\n") }
2.答:
#include "stdio.h" main()
{ int x,y
scanf("%d,%d",&x,&y) if(x*x+y*y>1000)
printf("%d\n",(x*x+y*y)/100) else
printf("%d\n",x+y) }
3.答:
#include "stdio.h" #include "math.h" main()
{ double x,y
scanf("%lf",&x) if(x<-2) y=x*x-sin(x) else if (x<=2) y=pow(2,x)+x else y=sqrt(x*x+x+1)
printf("x=%.2lf y=%.2lf\n",x,y) }
4.答:
#include "stdio.h" main( )
{ long ge,shi,qian,wan,x scanf("%ld",&x) wan=x/10000
qian=x%10000/1000 shi=x%100/10
ge=x%10
if (ge==wan&&shi==qian) /*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n") else
printf("this number is not a huiwen\n")
}
5.答:
#include "stdio.h" main()
{ float p,w,s,d,f
scanf("%f,%,%f",p,s,w) if (s>3000) d=0.15 else if( s>=2000) d=0.1 else if(s>=1000) d=0.08 else if(s>=500) d=0.05 else if(s>=250) d=0.02 else d=0 f=p*w*s*(1-d) printf("%f",f) }
6.答:
#include "stdio.h" main()
{ int year,money char x
printf("是否是本公司产品(y/n):") scanf("%c",&x)
if(x=='y'||x=='Y')
{printf("产品使用的年限:") scanf("%d",&year)
if(year<=1) money=0
else if(year<8) money=50 else money=100
printf("产品保修额是:%d\n",money)
}
else
{ money=200
printf("不是本公司产品,产品保修额是:%d\n",money) } }
7.答:
#include "stdio.h" main()
{ int money,num1,num2
printf("请输入取款额(≤2000):") scanf("%d",&money)
if(money>2000) printf("请输入取款额数≤2000!\n") else if(money%50==0) { num1=money/100 num2=(money-num1*100)/50 printf("需支付100元:%d张\n",num1) printf("需支付50元:%d张\n",num2) } else printf("输入钱数必须是50的倍数!\n") }
习 题 5
5.1 单选题
CDABA ABDDB DBCB
5.2 填空题
1.2 0 2.333
3.(1)i<10 或 i<=9 (2)j%3!=0
4.(1)flag*(float)k/(k+1) 或1.0*flag*k/(k+1) (2)flag=-flag 5.(1)max=x
(2)x!=-1 (3)scanf("%d", &x)
6.(1)x<=9或x<10
(2)y=9-x
5.3 改错题(略) 5.4 编程题
1.答:
(1)for循环,其他略
#include "stdio.h"
main()
{ int i,s=0
for(i=1i<=100i++) s+=i*i
printf("%d\n",s) }
(2)for循环,其他略
#include "stdio.h" main()
{ int i=1,p=1 double s=1 do {
s+=1.0/p p*=++i
}while(1.0/p>1e-6) printf("%lf",s) }
2.答:
#include "stdio.h" main()
{ int m,n,t,a,b
scanf("%d,%d" ,&m,&n) if (m<n)
{ t=m m=n n=t } a=m b=n t=m%n while(t)
{ m=n n=t t=m%n} printf("%d",n) }
3.答:
#include "stdio.h" main()
{ int x,y,s=1
scanf("%d,%d",&x,&y) for( y>0 y--)s*=x
printf("%d,%d,%d\n ",s%10,s/10%10,s/100%10) }
4.答:
#include "stdio.h" main()
{ int x,y,z
for( x=1 x<20 x++) for( y=1 y<33 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) } }
5.答: (a)
#include "stdio.h" main()
{ int j,k
for( j=1 j<=4 j++)
{ for(k=1k<=4-jk++)printf(" ") printf("****") printf("\n") } }
(b)
#include "stdio.h" main()
{ int j,k
for( j=1 j<=4 j++)
{for(k=1k<=4-jk++)printf(" ") for(k=1 k<=2*j-1 k++) printf("*") printf("\n") } }
6.答:
程序分析:利用for循环控制在100~999之间,对每个数分解出个位、十位、百位。
#include <stdio.h> main() { int i,j,k,n printf("water flower'number is:") for(n=100n<1000n++) { i=n/100/*分解出百位*/ j=n/10%10/*分解出十位*/ k=n%10/*分解出个位*/ if(n==i*i*i+j*j*j+k*k*k) { printf("%-5d",n) } } printf("\n") }
7.答:
#include <stdio.h> main() { int x for(x=1000x>=3x--) if(x%3==1&&x%5==2&&x%7==3) {
printf("该校的学生人数是:%d人\n",x) break } }
8.答:
#include <stdio.h> main() { int x=12,i=1 while(1)
{ if((x+20+i)==2*(x+i)) break i++ } printf("小明母亲在%d年后比小明的年龄大一倍\n",i) printf("那时小明年龄是:%d岁,小明母亲年龄是:%d岁\n",x+i,x+20+i) }
习 题 6
6.1 单选题
DBCCB BDC
C语言程序设计教程(第3版)
278
6.2 填空题
1.c 2.60 3.1000 10 4.16
6.3 编程题
1.答:
#include "stdio.h" #include "math.h"
#define F(a) a*a+ sqrt(3*a*a+2*a+1) main()
{ float x, f
scanf("%f", &x )
f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x) printf("%f\n", f) }
习 题 7
7.1 单选题
BCADA CCCDA BCBDB
7.2 填空题
1.(1)2 3 4 5 (2)10010 (3)QuickC
(4)10000 01000 00100 00010 00001 (5)Language
(6)Language Programming 2.(1)j+=2 (2)a[i]>a[j] 3.(1)i=1 (2)x[i-1]
7.3 改错题(略) 7.4 编程题
1.答:
#define N 10
#include "stdio.h" main()
{ int a[N]={1,2,3,4,5,6,7,8,9,10,osum=0, qsum=0,j for(j=0j<10j++)
if( j%2) qsum+=a[j]
else osum+=a[j]
printf("osum=%d,qsum=%d\n", osum,qsum) }
2.答:
#define N 10
#include "stdio.h" main()
{ int a[N]={10,20,30,40,50,60,70,80,90}, j, k, x scanf("%d",&x) for(j=0j<Nj++)
if (x<a[j]) break if(j==N) a[N-1]=x else
{for(k=N-1 k>j k--) a[k]=a[k-1] a[j]=x}
for(j=0j<Nj++)
printf("%d ",a[j]) }
3.答:
#define M 3
#include "stdio.h" main()
{ int a[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1 for( j=0j<Mj++)
for(k=0k<Mk++) if (a[j][k]!=a[k][j]) { flag=0 break} if (flag) printf("ok") else printf("NO") }
4.答:
#include "stdio.h" #include "string.h" main()
{ char c1[10],c2[10],j gets(c1) gets(c2)
for(j=0 (c1[j]==c2[j]) && c1[j] && c2[j] j++) if (c1[j]>c2[j]) printf("%d\n",1) if (c1[j]<c2[j]) printf("%d\n",-1) if (c1[j]==c2[j]) printf("%d\n",0) }
5.答:
#include "stdio.h" #include "string.h" #define M 3 #define N 80 main()
{ char a[M][N],j,k,n[5]={0} for(j=0j<Mj++) gets(a[j])
for(j=0j<Mj++)
for(k=0a[j][k]k++)
if( a[j][k]>='A' && a[j][k]<='Z') n[0]++
else if (a[j][k]>='a' && a[j][k]<='z') n[1]++ else if (a[j][k]>='0' && a[j][k]<='9') n[2]++ else if (a[j][k]==' ' ) n[3]++ else n[4]++
for(j=0j<5j++) printf("%4d", n[j]) }
习 题 8
8.1 单选题
DBDAC BACCC
8.2 填空题
1.(1)2, 1 (2)10#30# (3)FOUR, P (4)60
2.(1)49
(2)2
(3)2
(4)
(5)
8.3 改错题(略) 8.4 编程题
1.答:
#include "stdio.h"
main()
{ int n1,n2,n3,t int *p1,*p2,*p3
printf("please input 3 number:n1,n2,n3:") scanf("%d,%d,%d",&n1,&n2,&n3) p1=&n1
p2=&n2 p3=&n3
if(*p1>* p2) { t=*p1*p1=*p2*p2=t}
if(*p1>*p3) { t=*p1*p1=*p3*p3=t} if(*p2>*p3) { t=*p2*p2=*p3*p3=t}
printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3) }
2.答:
#include "stdio.h" #define N 3 main()
{ int a[N],*p=a for(p-a<N p++) scanf("%d",p) p=a+N-1
for(p-a>=0 p--) printf("%d ",*p) }
3.答:
#include "stdio.h" main()
{ int a[10]
int j,minl=0,maxl=0 for(j=0j<10j++)
scanf("%d", a+j) for(j=0j<10j++)
{ if(a[maxl]<*(a+j)) maxl=j if(a[minl]>*(a+j)) minl=j }
j=a[0] a[0]=a[minl]a[minl]=j j=a[9]a[9]=a[maxl]a[maxl]=j for(j=0j<10j++) printf("%d ", *(a+j)) }
4.答:
输入阵列如下: 1 2 3 4 5 6 7 8 9 10 11 12 输出阵列如下:
12 11 10 9 8 7 6 5 4 3 2 1
#define M 3
#define N 4
#include "stdio.h" main()
{ int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=&a[0][0],t for(k=0,j=M*N-1k<jk++,j--)
{ t=*(p+k) *(p+k)=*(p+j) *(p+j)=t} for (k=0 k<M k++) { for(j=0 j<N j++)
printf("%4d ",a[k][j]) printf("\n")
} }
5.答:
#include "stdio.h" main() {
int len
char str[20],*p=str
printf("please input a string:\n") scanf("%s",str) len=0
while(*p!='\0') {
len++ p++ }
printf("the string has %d characters.\n",len) }
6.答:
#include "string.h" #include "stdio.h" main() {
char *str1[5],ch[5][20],k,t,j,*c void sort(char **) for(k=0k<5k++) {str1[k]=ch[k] gets(str1[k])} for(k=0k<7k++)
{ t=k
for(j=k+1j<5j++) if(strcmp(*(str1+t),*(str1+j))>0) t=j c=*(str1+t)
*(str1+t)=*(str1+k) *(str1+k)=c }
for(k=0k<5k++) puts(str1[k]) }
习 题 9
9.1 单选题
CBBAD DBCCD DCABC BCCBA DCDAB
9.2 填空题
1.120 2.x 3.3,2,2,3 4.fac /i 5.8,17 6.9 7.1.0/(i*i) 8.
fun-in:30,20,10 fun-end:1015,35,1050 10,20,30 9.012345 10.93636 11.(1)r+b[k] (2)*x
12.7 5 3 1 9 13.15
14.(1)*x (2)t 15.(1)'\0' (2)n++ 16.024
9.3 改错题(略) 9.4 编程题
1.答:
void zhuan( )
{ char ch
while((ch=getchar())!='\n')
{ if(ch>='a' && ch<='z') ch=ch-32 putchar(ch) } }
2.答:
double expp(int n) { int k, fac=1 double sum=1
for(k=1 k<=n k++) { fac*=k
sum+=1.0/fac }
return(sum) }
3.答:
int xy3( int x, int y)
{ int k, num=1
for(k=1k<=y k++) num*=x
num=num%1000 return num }
4.答:
int age( int n) { int c
if(n==1) c=10
else c=age(n-1)+2 return c }
5.答:
#include "stdio.h"
main()
{ int a,b,c,d
void fun(int a,int b,int *c, int *d) scanf("%d%d",&a,&b) fun(a,b,&c,&d)
printf("%d %d",c,d)
}
void fun(int a,int b,int *c, int *d) { if (b)
{ *c=a/b *d=a%b} }
6.答:
#include "stdio.h"
main(int argc,char *argv[]) { int k
printf("argc=%d\n",argc) for (k=1k<argc k++) printf("%s\n",argv[k]) }
习 题 10
10.1 单选题
CDBBB BBBAD CCBDC
10.2 填空题
1.所有结构体成员所占存储空间的总和 2.与占用存储空间最大的那个成员相等
附录F 课后题参考答案
285
3.(1)struct satype (2)3 (3)sa.a (4)9 (5)psa=&sa 4.80 5.struct node 6.0
10.3 编程题
1.答:
#include "stdio.h"
struct student {
long num;
char name[20]; char sex; float score; }; main()
{ struct student s[20], temp; int j,k, man=0, woman=0
float summan=0,sumwoman=0, aveman, avewoman; for(k=0 k<20 k++)
{ scanf("%ld %s %c%f",&s[k].num,s[k].name,&s[k].sex,&s[k].score); if(s[k].sex=='m')
{ summan+=s[k].score man++} else
{ sumwoman+=s[k].score;woman++ } }
aveman=summan/man;
avewoman=sumwoman/woman
printf("%d\t%f\t%d\t%f\n",man,aveman,woman,avewoman); for(k=0 k<19 k++)
for(j=0;j<20-k;j++)
if(s[j].score<s[j+1].score)
{ temp=s[j];s[j]=s[j+1];s[j+1]=temp;} printf("the sorted numbers:\n") for(k=0;k<20;k++)
printf("%ld\t%s\t%c\t%5.1f\n",s[k].num,s[k].name,s[k].sex,s[k].score); }
习 题 11
11.1 单选题
BADD
11.2 填空题
1.3d3d330 2.(1)28
(2)20 (3)0 (4)--9
3.(1)251
(2)42
(3)209
(4)–295 (5)848
习 题 12
12.1 单选题
BCDCA ADA
12.2 填空题
1.rewind(文件指针) 2."d1.dat","rb" 3.stdin
4.文本文件;二进制文件 5.(1)"w"
(2)str[i]--32
(3)"r"
6.fopen 7.Hello 8.(1)"r"
(2)fgetc(fp)
(3)time++
C语言程序设计实验与习题指导课后程序设计答案
P18
(1)
#include<stdio.h> int main(void) { intcelsius,fahr fahr=150 celsius=5*fahr/9-5*32/9 printf("fahr=%d,celsius=%d\n",fahr,celsius) return 0 }
(2)
#include<stdio.h> int main(void) { intcelsius,fahr celsius=26 fahr=9*celsius/5+32 printf("celsius=%d,fahr=%d\n",celsius,fahr) return 0 }
(3)
#include<stdio.h> int main(void) { intaverage,math,eng,comp math=87 eng=72 comp=93 average=(math+eng+comp)/3 printf("math=%d,eng=%d,comp=%d,average=%d\n",math,eng,comp,average) return 0 }
(4)
#include<stdio.h> int main(void) { intn,a,b,c n=152
c=n%10
b=(n/10)%10 a=n/100
printf("整数%d的个位数字是%d,十位数字是%d,百位数字是%d\n",n,c,b,a) return 0
}
P27
(1)
#include<stdio.h> #include<math.h> int main(void) { intcelsius,fahr printf("Enter celsius:") scanf("%d",&celsius) fahr=9*celsius/5+32 printf("fahr%d\n",fahr) return 0 }
(2)
#include<stdio.h> #include<math.h> int main(void) { intmoney,year doublerate,interest printf("Enter money,year,rate:") scanf("%d%d%lf",&money,&year,&rate) interest=money*pow(1+rate,year)-money printf("interest=%.2f\n",interest) return 0 }
(3)
#include<stdio.h> #include<math.h> int main(void) { doublex,y printf("Enter x:") scanf("%lf",&x)
if(x<0){ y=pow(x+1,2)+2*x+1/x } else{ y=sqrt(x) }
printf("y=f(%f)=%.2f\n",x,y) return 0
}
(4)
#include<stdio.h> int main(void) { intx,y printf("Enter num1:") scanf("%d",&x) printf("Enter num2:") scanf("%d",&y) printf("%d+%d=%d\n",x,y,x+y) printf("%d-%d=%d\n",x,y,x-y) printf("%d*%d=%d\n",x,y,x*y) printf("%d/%d=%d\n",x,y,x/y) printf("%d%%%d=%d\n",x,y,x%y) return 0 }
10的阶乘
#include<stdio.h> int main(void) { inti,n,product printf("Enter n:") scanf("%d",&n) product=1 for(i=1i<=ni++){ product=product*i } printf("product=%d\n",product) return 0 }