【习题4】
以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。
(流程图请读者自己参考课本自己画,略)
4.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。
提示:x代表输入的整数,if(x%2==0) printf(\printf(\
4.2 编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。
提示:x,y代表平面坐标,if(x*x+y*y==1) printf(\printf(\
4.3 编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60
提示:char grade;
if(grade=='A') printf(\
else if(grade=='B') printf(\ ....
4.4 写出下面程序的运行结果: #include
{
int a=-1,b=1,c=5; switch(a>0){
case 1:switch(b-2<0){
case 1:printf(\ case 2:printf(\
}
case 0:switch(c= =5){
case 0:printf(\ case 1:printf(\ default:printf(\
}
default:printf(\
} }
运行结果:@
4.5 将以下语句改写成switch语句。 if((t>0)&&(t<=10))
if((t>=3)&&(t<=6)) x=2;
5
else if((t>1)||(t>8)) x=3; else x=1; else x=0;
提示:int t; if(t<=0||t>10) c=0; else c=t;
switch(t)
{ case 0: x=0;break; case 1: case 2: x=3;
case 3:case 4:case 5: case 6: x=2; case 7:case 8: case 9: x=3; case 10: x=2; }
4.7 编程实现一个具有简单四则运算功能的计算器。
提示:参照例4.18,随机产生3个数,其中一个数用来判断是哪种运算。 4.8 编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果。如:
a45b8&*3 则是4+5+8+3,结果为20。
提示:char c; int sum=0;
while((c=getchar())!='\\n') if(c>='0'&&c<='9')
sum=sum+c-'0';
4.9 编程实现,求?n!的值。
120提示:先计算n!,再在计算阶乘的外面套上一层循环。注意:20!是一个很大的值,float s=1;int i;例如:计算6!:
for(i=1;i<=6;i++) s=s*i;
4.10 编程实现,找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1,2,3,
所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。
提示:先判断数是否为完数,如果是再考虑输出因子。以6为例输出因子: for(i=1;i<6;i++) if(6%i==0) printf(\4.11 编程实现,计算序列的前20项之和,
23581321 ,,,,,,...
1235813提示:这是一个累加式,每项是一个分式,用a、b分别表示分子、分母。注意:如果a、b都是整数,则是整除。float sum=0,a=2,b=1; int i;
for(i-1;i<=20;i++){sum=sum+a/b;a=a+b;b=a-b;} 4.12 编程实现,求Sn=a+aa+aaa+...+aa
之值,其中a是一个数字。如:
2+22+222+2222+22222(此时n=5),n,a由键盘输入。
提示:这是一个累加式,后1项可以由前一项表示,譬如:第2项可以由第1项表示:
6
第1项 t=a; 第2项:t=t*10+a;
4.13 编程实现,把从键盘输入的金额数(以圆为单位)按人民币面额划分,
然后显示支付该金额的各种面额人民币的数量。
提示:譬如:123.58元可以表示100元:1张;20元:1张;2元:1张;1元:1张;5角:1张;5分:1枚;2分:1枚;1分:1枚。
为了简单可以只完成整数部分转换,即输入的金额数为整数。
4.14 编程实现,使用循环结构打印以下图案。 * * * * * * * * * * * * * * * * * * * * * * * * *
提示:输出时,本图案要按向上三角形和向下三角形进行输出。每行输出中包括空格输出,‘*’号输出。输出空格和‘*’号个数要与行循环控制变量关联起来。
4.15 编程实现,以菜单方式实现猜数游戏系统。(功能自己设定)
提示:模仿例4.14和例4.18完成。功能可以包括猜数范围,人数等设置。 4.16 编程实现,以菜单方式实现四则运算辅助教学系统。
提示:随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。
7
【习题5】
一、 填空题
5.1 若有定义int a[3][5];则排列在数组中的第9个元素是( a[1][3] )。 5.2 strlen(\的值是( 12 )。 5.3 C语言中字符串结束的标志是( '\\0' )。
5.4 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是( float s[6]={0}; )。
5.5 strcmp(\的值是( 32 或>0 )。 二、 选择题
5.6 若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是( D ) A.1 B.2 C.3 D.4 5.7 对数组的描述正确的是( B )。
A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。 5.8 对字符串\进行完整赋值的操作是( B )。
A.char s[3] = {'B','o','y'}; B. char s[] = \ C.char s[3] = {\ D.char s[3]; s=\
5.9在c语言中引用数组元素时,其数组下标的数据类型允许是( C )。 A.整型常量 B.整型表达式
C.整型常量或整型表达式 D.任何类型的表达式 5.10对以下说明语句的正确理解是( B )。 int a[10]={6,7,8,9,10};
A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10]
D.因为数组长度与初值的个数不相同,所以此语句不正确 三、看程序写结果 5.11 main()
{int a[3][3] = {{1,0,2}, {2,2},{0,2}}, c[3][3],i,j; for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
c[i][j] = a[a[i][j]][a[j][i]]; printf(\} }
printf(\}
运行结果为: 2 2 0 0 0 2 2 0 1
5.12当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。
8
main()
{ char s[80], c='a'; int i=0;
scanf(\ while(s[i++]!='\\0')
if(s[i] == c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32; puts(s); }
运行结果为:AH2Ma 四、编程题
5.13 用数组方法定义一个矩阵,求其转置矩阵。
提示:已知a[3][2],转置后的结果存放在b[2][3]; 则b[j][i]=a[i][j]; 5.15 从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的
最大元素,并输出其行、列下标。
提示:已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。
5.15利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1 ∶ ∶
提示:定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对角线也赋值。根据a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。
5.16 从键盘上输入一串字符(长度小于50个字符),找出其中最前面的一个X
和最后面的一个X之间的子串,并输出子串的长度。
提示:定义一个长度为81的字符数组,从左边查找第一字符'X'的下标,从右边查找第一个字符'X'的下标。 5.17 矩阵A是一个3×3的矩阵,B是一个3×2的矩阵,编程求C=A?B。
提示:定义一个3X2的数组c[3][2],该数组的元素值由A数组的一行元素分别与B的一列元素相乘得到。譬如:c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]。 5.18 把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个
学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和总分)。
提示:定义一个30行4列的数组。为了先快速测试算法是否正确?可以定义一个3行4列的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分。实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一维数组作为索引,再通过索引打印成
9