(15)a&b|c^++d>>1
(16)b?
!
a:
~d
(17)035+0x10/a%b/b
(18)10/3+9%3
(1)/5
(19)10&6|5&&a
(20)10&&6|!
b||c
2.11若有定义doublex=2.5,y=4.7;inta=7;
表达式x+a%3(int)(x+y)%2/4的值是。
2.12若有定义inta=2,b=3;doublex=3.5,y=2.5;
表达式(float)(a+b)/2+(int)x%(int)y的值是。
2.13若有定义inta=3,b=2,c=0;执行下列表达式,写出变量值和表达式值。
(1)c=ab;则a=,b=,c=,表达式=
(2)c=++ab;则a=,b=,c=,表达式=
(3)b=c(b);则a=,b=,c=,表达式=
2.14若a=10,b=7,写出下列表达式的值和变量a的值。
(1)a/=aa;
(2)a=a;(3)a/=2+3;(4)a%=n%=4;
(1)a<<=n++/4(6)a=a,a=b,a++;
2.15写出下列数学表达式对应的C表达式。
(1)
(2)
(3)
(4)
(5)
(6)
2.16写出以下程序的输出(请上机验证)。
#include
voidmain()
{inta=157;unsignedlongb=0xa8d5b;charc='a';doublex=30.57;
printf("%6d,%08X,%o,%+10d\n",a,a,a,a);
printf("%lu,b=%10lx,%+5lu,%08lX\n",b,b,b,b);
printf("c=%3c\nc=%d\nc=%04x\n",c,c,c);
printf("%f,%g,%e,%E,%10.3f,%.3e\n",x,x,x,x,x,x);
printf("%.f,%+0d\n",8,4,x,6,a);
}
2.17如果希望a=15,b=38.7,c='A',x=1e6,写出下面程序的正确输入格式(请上机验证)。
#include"stdio.h"
voidmain()
{inta;floatb;charc;doublex;
scanf("%d,%f%c,x=%lf",&a,&b,&c,&x);
printf("a=%d,b=%.1f,c=%c,x=%.0E\n",a,b,c,x);
}
2.18下列程序的输入输出语句虽然不存在任何语法问题,但无法正确输入/输出某些变量,请指出程序中的问题并改正。
#include"stdio.h"
voidmain()
{longa;intb;doublex;floaty;
scanf("%d%d%f%f",a,b,x,y);
printf("a=%o,b=%.0f,x=%0G,y=%Lg\n",a,b,x,y);
}
2.19输入圆的半径r,编程计算并输出圆的周长和面积。
2.20输入三角形的三边长a,b,c,编程计算并输出三角形的面积。
(注意:
输入a,b,c时,应保证三角形两边之和大于第三边)三角形面积计算公式如下:
2.21购房按揭贷款:
设贷款本金为a,贷款期数为n(以月为单位),贷款月利率为p,采用等额本息法还款,问每月还款额是多少?
编程输入a,n,p,输出每月还款额。
比如,输入a=100000,n=120,p=0.004,表示本金10万元,贷款期限为10年(120个月,月利率为0.4%。
(程序假设月利率在贷款期限内恒定不变)。
提示:
首先从数学上分析每月固定还款额x与a,n,p的关系式,然后求解,分析方法提示如下:
设第i个月开始时,还有本金ai,则第i个月结束时,剩余本金即第i+1月开始时的本金ai+1=ai(1+p)x。
i=1,2,3,…,n
显然,有a1=a,an+1=0。
第三章习题
3.1C语言的三种循环语句是什么?
它们各自有什么特点?
3.2break、continue语句与goto语句有何区别?
3.3若a=3,b=2,c=1,则执行下列if语句后,依次写出a、b、c的值。
if(a>b)a=b;
if(b>c)b=c;
elsec=b;c=a;
3.4执行下列程序后,x和y的值分别是多少。
intx,y;
for(y=1,x=1;y<=50;y++)
{if(x>=10)break;
if(x%2==1)
{x+=5;continue;}
x=3;
}
3.5写出以下程序的输出结果。
#include
main()
{intc='A',a=0,k=1;
while((k+=2)<8)
{putchar(++c);a+=k;
}
printf("%d\n",a);
return1;
}
3.6下面程序的循环体共执行了多少次,输出的结果是什么?
#include"stdio.h"
voidmain()
{intm,n;
m=10;n=1;
do{m;n+=5;
if(!
(n%3))printf("%4d%4d\n",m,n);
}while(m>n);
}
3.7若输入为ABCD,下面程序的输出是什么?
#include
voidmain()
{charch,n;
for(n=0;(ch=getchar())!
=10;n++)putchar(ch+32);
printf("%d\n",n);
}
3.8若a,n,i,j,k都是int型变量,且n值大于0。
执行下面的程序后,变量a的值是多少?
(用n表达变量a的值)
a=0;
for(i=1;ifor(j=1;j<=i;j++)
fo(k=1;k<=j;k++)
a++;
3.9假设变量已有正确定义,以下程序能够正确计算p=n!
的有。
(A)for(p=1,k=0;k<=n;p=k);
(B)p=1;k=n;while(p=k,k);
(C)p=0;do{k=1;p=k++;}while(k<=n);
(D)p=k=1;dop=k;while(++k>=n);
(E)p=0;for(k=1;k<=n;k++)p=k;
(F)for(p=1,k=0;k3.10以下程序的功能是输入10个字符,如果输入的是数字字符0,则输出字符;如果是数字字符1-9,则原样输出;如果输入的是其它字符则不输出,但要求用变量s累加计算它们的ASCII码平方和。
全部字符输入结束后,输出s的值。
有同学写了一个程序,编译完全正确,但无法得到所要求的结果,请帮助这位同学改正程序中的问题。
#include
main()
{charc,i,s;
for(i=1;i<10;i++);
{c=getchar();
if('1'<=c<='9')putchar(c);
if(c='0')putchar('');
elses=cc;
printf("\ns=%d\n",s);
}
}
3.11编写一个程序,使它能够将用户输入的四个整数按大小次序排列。
3.12企业放发的奖金根据利润提成。
设企业的利润为I,提成标准如下:
I<10万元时,提成10%;
10万元<I≤20万元时,低于10万元部分仍按10%提成,高于10万元部分按7.5%提成;
20万元<I≤40万元时,低于20万元部分按前面方法提成,高于20万元部分按5%提成;
40万元<I≤60万元时,低于40万元部分按前面方法提成,高于40万元部分按3%提成;
60万元<I≤100万元时,低于60万部分按前面方法提成,高于60万部分按1.5%提成;
100万元<I时,低于100万元部分按前面方法提成,高于100万元部分按1%提成。
编程输入利润I,计算输出提成金额。
3.13用switch语句和if语句两种方法描述以下计算要求:
t²0≤t<1
y=t²11≤t<2
t²2t+12≤t<3
3.14编程输出一个周期的余弦函数cosx的值,要求每隔/20输出一个函数值。
3.15编程输出以下计算结果。
0.020.220.420.620.821.021.221.421.621.821.922.02
3.16输入一个实数a和一个整数m,不使用系统库函数,计算并输出am。
比如:
输入a值为3,m值为3,则输出27.0000;
输入a值为2,m值为3,则输出0.1250。
3.17编程求出一个长整数的十进制位数。
比如,输入35076,输出为5;
输入为24,输出为2。
3.18输入一个正长整数,按相反次序输出该整数的各位数字。
比如,输入为35076,输出是67053。
3.19编写一个决定学生成绩的程序。
这个程序将读入一个学生的三次考试成绩(0-100),然后计算其平均值,并根据这个平均值决定学生的总成绩(用字母A,B,C,D,F来表示)。
字母成绩按如下规定来确定:
A平均成绩在90或90分以上
B平均成绩在80到89分
C平均成绩在70到79分
D平均成绩在60到69分
F平均成绩在60分以下
程序在显示了一个学生的字母成绩后,将继续对下一个学生的成绩进行处理,直到用户输入的学生成绩为负数时停止。
3.20编程输入两个日期y1,m1,d1和y2,m2,d2,计算并输出这两个日期相距的天数。
4.1输入若干整数,直到输入0时停止,统计并输出奇数的数目和偶数的数目。
4.2输入10个实数,输出这10个数的平均值。
4.3计算s=
。
要求n值由用户输入。
4.4根据本章打印杨辉三角形例题中组合数的递推计算方法计算组合数
,要求输入n、m值,输出组合数。
程序中应对输入的n,m有效性进行检查。
4.5输入x值,计算
,要求最后一项绝对值小于106时停止计算。
4.6用公式
计算的近似值,计算时取1000个因子。
4.7计算
的前n1项和。
要求x和n值由键盘输入。
4.8输入x值(|x|<1),计算
。
要求计算到最一项绝对值小于106时停止。
4.9一个小球从高度为h米处自由落下,每次落地后反弹回原高度的一半再落下。
求小球第k次落地时,总共走过了多少米?
第k次落地反弹后,可以反弹到多高?
4.10输入自然数n,输出其和等于n的所有不增的正整数和式。
如n=4,程序将输出:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
要求程序完成一次输出后,继续提示用户输入n值,直到用户输入0或负数时才停止运行。
4.11编写程序,输入一个自然数n,将n分解成质因子连乘形式。
要求程序完成一次输出后,继续提示用户输入自然数,只有当输入的自然数是0或负数时,程序才停止运行。
4.12“有物不知何数,三三数剩二,五五数剩三,七七数剩二”问物有多少?
(引自《孙子算经》)编程输出1000以内所有的解。
4.13韩信点兵:
有兵一队,五伍剩一,六伍剩五,七伍剩四,十一伍剩十,问兵几何?
4.14有30个男女小孩同在一家饭馆进餐,共花了50元,其中每男宾3元,女宾2元,小孩1元。
问男、女、小孩各多少?
4.15将一张面值100元的人民币兑换为5元、2元、1元和5角的零钞,要求零钞总数不超过40张且每种至少1张,求所有兑换方案。
4.16有一个算式缺少了四个数字(如下所示),请编程找出这四个数字。
10566(475349)16=416354
4.17打印如下图形。
要求把图形放到屏幕中央并且打印行数n(n=1,2,…,9)由用户输入。
1
121
12321
1234321
123454321
4.18打印如下图形。
打印行数n由有户输入。
要求把图形放在屏幕中央。
a
aba
abcba
abcdcba
abcdedcba
4.19打印如下图形。
要求总行数n由键盘输入。
注意:
n必须是奇数。
4.20打印如下图形。
要求输入最大的字母来控制打印行数。
比如,下图应该输入字母D。
A
B-B
C―――C
D―――――D
C―――C
B-B
A
4.21打印如下图形。
要求打印行数n由用户输入。
124711
235812
4571014
78101317
1112141721
4.22自拟格式,打印九九乘法表。
4.23p和q都是素数,若q=p2,那么p,q对被称为双素数。
例如,3,5就是双素数。
编程求1000以内所有的双素数。
4.24如果一个自然数的所有因子之和等于该数本身,称这个数为“完数”。
编程输出1000以内的全部完数。
要求输出格式如下:
28=1+2+4+7+14
4.25输入若干个自然数,直到输入0时停止,求所有自然数的最大公约数与最小公倍数。
4.26求2-10000中的守形数。
所谓守形数,是指某数平方的低位就是该数本身。
比如,52=25, 5是25的低位,因此5就是守形数;
762=5776,76是5776的低位,因此76也是守形数。
要求输出格式形如:
76:
7676=5776
4.27两个自然数a,b(ab),若a的因子和等于b,b的因子和等于a,称a,b为亲密数对,求1000以内
第五章习题
5.1建立一个N元实型数组,输出最大值与最小值元素的下标。
5.2编写程序,输入N个学生的成绩并用一维数组保存。
计算并输出平均成绩、最高分以及最低分。
5.3编程建立并输出一个N阶单位矩阵。
5.4建立一个整型一维数组,然后重排数组元素,使得所有奇数排在偶数前面。
5.5用一维数组存储素数,求1000以内的素数。
为了提高算法效率,在判断整数m是否是素数时,只需要用已经找到并存入数组中的素数去试除m。
5.6输入最多不超过15个正整数,求这些整数的最大公约数与最小公倍数。
要求用数组求解。
5.7写一个程序,输入一个N阶实数方阵,实现矩阵转置并输出。
5.8在屏幕上打印出以下杨辉三角形,要求打印出的行数n由用户输入。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
(用二维数组求解)
5.9删除数组中小于0的所有元素,要求不另辟数组空间实现算法。
比如:
数组原来为:
529311071263
则删除小于0的元素后,数组变为93126
5.10输出一个二维数组中的鞍点(i0,j0)。
鞍点满足两个条件,一是在i0行它是最大元,二是在j0列它是最小元。
如果没有鞍点,输出提示信息。
5.11编程判断一个N阶方阵是否为对称矩阵。
5.12以下程序的功能是重新排列数组a[N]的元素,使相等元素放在一起,并且保持它们在数组中第一次出现的相对次序。
例如:
重排前:
4,3,4,2,4,5,2,4,3,1,5,4
重排后:
4,4,4,4,4,3,3,2,2,5,5,1
程序采用的算法是先删去重复元素,并统计各不同元素出现的次数,再按照各元素重复次数写回到数组a中。
#include
#defineN20
voidmain()
{inta[N],b[N],c[N],i,j,k,t;
for(j=0;j{b[j]=c[j]=1;
scanf("%d",&a[j]);
}
for(i=0;iif()
{a[++k]=;
for(j=i+1;j}
t=N1;
for(i=k;i>=0;i)
for(j=1;j;j++)=a[i];
for(j=0;j}
第六章习题
6.1指针的三个属性是什么?
6.2指出下面程序中的指针常量标识符,并说明含义。
#include
#include
voidmain()
{doublex,y;inta[]={0,1,2,3};intp=NULL;
scanf("%lf",&y);
x=fabs(y);p=&a[1];
printf("x=%.2f\n",x);
}
6.3若有定义floata[7],p=a+3;写出以下表达式代表的数组元素。
(1)a;
(2)p; (3)(a+2); (4)(p2);
(5)(p2); (6)p[1];(7)p[1];(8)p[3];
6.4若有定义longa[10],i,p;以下程序能够正确输入数组元素的是。
(A)i=0;while(i<10)scanf("%d",a[i++]);
(B)for(i=0,p=a;i<10;scanf("%ld",&p[i]);
(C)for(p=a;p<=a+9;p++)scanf("%ld",p);
(D)p=a;doscanf("%ld",p++);while(pa>=10);
6.5以下程序能够安全正确地建立字符串的是。
(A)main(){chars[41];scanf("%s",&s[0]);}
(B)main(){chars[41];scanf("%c",s);}
(C)main(){chars;scanf("%s",s);}
(D)main(){chars[41],p=s;scanf("%s",&p);
6.6定义三个变量用于存储读入的三个整数,另定义三个指向整型量的指针变量,并利用它们实现将读入的三个整数按值从小到大顺序输出。
6.7利用指针编写一个程序,使它能够从键盘读入4个数,并找出它们的平均值、最大值和最小值,然后将结果显示到屏幕上。
要求不能使用数组。
6.8编写一个程序,要求当用户输入两个字符串后,程序将这两个字符串连接起来输出。
6.9由用户输入一串字符,将其中大写字母变成小写字母,小写字母变成大写字母,并按倒序输出。
要求用下标和指针两种方法求解。
6.10编写一个程序,使它能够统计用户输入的字符串中的数字字符数目。
6.11编写程序,实现N元数组元素循环左移m次。
比如:
N=8,输入8个元素为12345678
则循环左移三次的输出结果是45678123
(要求用下标和指针两种方法求解)
6.12编写一个程序,使它能够模拟摩斯译码,即
将字母ABCDEFGHIJKLMNOPQRSTUVWXYZ
翻译成ZYXWVUTSRQPONMLKJIHGFEDCBA
例如,输入如下密码:
NZWZN,RZNZWZN
将译码为:
MADAM,IAMADAM
该程序要求用户从键盘输入一个按照以上密码规定编写的字符串,然后对其进行译码并输出结果。
6.13编写一个程序,输入一个字符串,删除字符