c语言课后答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C程序设计》课外作业及参考答案
说明:(1)章节顺序按照PowerPoint电子教案;
(2)教材上的作业注明了章节和题号;
(3)所用教材是《C程序设计(第二版)》谭浩强清华大学出版社;
第一章C语言概述
1.1 简答题:写出C语言的主要特点(教材习题1.1)。
1.2填空题:
1.C语言与操作系统并称“栾生兄弟”。
2.C语言俗称为形式。
3.C源程序文件经过处理后产生目标文件,目标文件经处理后生
成可执行文件。
1.3 单项选择题
1. 以下说法中正确的是。
(A)C语言程序总是从第一个定义的函数开始执行
(B)在C语言程序中,要调用的函数必须在main函数中定义
(C)C语言程序总是main函数开始
(D)C语言程序中的main函数必须放在程序的开始部分
2. 以下正确的C标识符是。
(A)_125 (B)C# (C)C++ (D)A$
1.4 多项选择题
1. 以下关于C语言的说法中,错误的是。
(A)俗称为“低级语言的高级形式”,因此功能简单
(B)不是结构化程序设计语言
(C)可能直接访问内存
(D)语法限制不严
2. 以下标识符属于C语言关键字的有。
(A)integer (B)else (C)include (D)while
第二章C语言基本数据类型、变量、常量与表达式
2.1简答题
1.求下面算术表达式的值。
(教材习题3.9)
a)x+a%3*(int)(x+y)%2/4
设x=2.5, a=7, y=4.7
b)(float)(a+b)/2+(int)x%(int)y
设a=2, b=3, x=3.5, y=2.5
2.写出下面程序的运行结果。
(教材习题
3.10)
main()
{ int i, j, m, n;
i=8; j=10; m=++i; n=j++;
printf("%d,%d,%d,%d", i, j, m, n);
}
3.写出下面表达式运算后a的值,设原来a=12。
设a和n已定义为整型变量。
(教材习题
3.12)
a)a+=a b) a-=2 c) a*=2+3
b)d) a/=a+a e) a%=(n%=2), n的值等于5 f) a+=a-=a*=a
4.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
2.2 填空题
1. 写出下面各逻辑表达式的值。
设a=3, b=4, c=5。
(教材习题5.3)
(1) a+b>c&&b==c (2) a||b+c&&b-c
(3) !(a>b)&&!c||1 (4) !(x=a)&&(y=b)&&0
(5) !(a+b)+c-1&&b+c/2
2. (1)5<<2 (2)0 ! = 1 (3)!!3
(4)105%10 (5)3/2*2 (6)5^3
(7)1<2<0 (8)1%2*2
3. 已知int a = 1, b = 2 , c; 执行下列语句后,写出各变量的值。
c = ++b―a++ ; 变量(1) a = ,(2) b= ,(3) c=
4. C语言表达式是。
5. 当算术表达式中出现了float型变量时,系统自动将该型变量值转换为(1)类型,然后参与运算,如果出现char型变量时,直接转换为(2)型参与运算。
2.3 单项选择题
1. C语言中,常量0.5F在内存需占用字节存储。
(A) 1 (B)2 (C)4 (D)8
2. 下列符号中,合法的C常量是。
(A)097 (B)0.5e+1.0 (C)0x5FH (D)'\\'
3. C语言没有专门的逻辑变量,它表示逻辑真的方法是。
(A)TRUE (B)0 (C)1(D)一切非零数值
4. 以下C常量错误的是。
(A)'\xX0d ' (B)-1U (C)1e-2F (D)
5. 以下不正确的字符串常量是。
(A)"12'12" (B)'abc' (C)"\\0" (D)""
6. 逻辑运算符两侧运算对象的数据类型 。
(A )只能是0或非0正数 (B )可以是任何类型的数据。
(C )只能是整型或字符型数据。
(D )只能是0或1
7. 下列符号中,合法的C 常量是 。
(A ) ‘\t’ (B ) 079 (C ) 3.5e2.1 (D ) 0xch
2.4 多项选择题
1. 以下变量在内存中占2个字节的是 。
(只考虑TC
2.0)
(A ) int a; (B ) int b[2]; (C )char c[2]; (D ) float d[2];
2. C 语言中,与常量 'A' 等效的常量表达式有 。
(A )65 (B )'\x41' (C )'a'-32 (D )0101
第三章 简单C 程序设计
3.1 程序设计题
1. 输入一个华氏温度,要求输出摄氏温度。
公式为
5(32)9
C F =- 要求输出要有文字说明,取2位小数。
(教材习题4.9)
2. 输入年增长率p, 编程计算并输出经过多少年后,生产总值会翻一翻。
3.2 单项选择题
1.已知实型变量a 存贮的是一个0~1之间的实数,将a 以两位小数百分比形式输出(如:a=0.,则输出为34.75%)正确的打印语句是 。
(A )printf(“%.2f%%”,a*100); (B )printf(“%.2f%”,a);
(C )printf(“%.2f%%”,a/100); (D )printf(“%.2f%%”,100*(a+0.5));
2. 能正确输出字符A 的语句是 。
(A )putchar(‘\41’); (B )puthcar(“A ”); (C )printf(“%d ”, ‘A ’); (D )putchar(‘\101’);
第四章 C 语言的控制语句及基本程序设计技术(统计/计数、递推/迭代、数论问
题、字符图形、搜索/穷举求解)
4.1 程序分析题
1. 若a=3, b=2, c=1, 则执行下列if 语句后,依次写出a 、b 、c 的值。
if (a>b) a=b;
if (b>c) b=c;
else c=b; c=a;
2. 执行下列程序后,x 和y 的值分别是多少。
int x,y;
for (y=1,x=1;y<=50;y++)
{ if (x>=10) break;
if(x%2= =1)
{x+=5; continue;}
x-=3;
}
3. 写出以下程序的输出结果。
#include <stdio.h>
main()
{ int c='A',a=0,k=1;
while((k+=2)<8)
{ putchar(++c);a+=k;
}
printf("%d\n",a);
return 1;
}
4. 下面程序的循环体共执行了多少次,输出的结果是什么?
#include "stdio.h"
void main()
{ int m,n;
m=10;n= -1;
do { m++; n+=5;
if(!(n%3)) printf("%4d %4d\n",m,n);
} while(m>n);
}
5.若输入为ABCD↵,下面程序的输出是什么?
#include <stdio.h>
void main()
{ char ch,n;
for(n=0;(ch=getchar())!=10;n++) putchar(ch+32);
printf("%d\n",n);
}
4.2 单项选择题
1.以下程序的输出结果是。
x=0;do printf(“%d”,x++); while(x<1);
(A)0 (B)01 (C)012 (D)无任何显示2. 以下能正确计算10!的程序段是。
(A)do{i=1;s=1;s=s*i; i++; }while(i<=10);
(B)do{i=1;s=0; s=s*i; i++;}while(i<=10);
(C)i=1;s=1; do{s=s*i; i++;}while(i<=10);
(D)i=1;s=0; do{ s=s*i; i++;}while(i<=10);
3. 若变量已有正确定义,程序a=0; for (i=1; i<=n; i++) for (j=0; j<=i; j++) a++; 执行后,变量a的值是。
(A)n (n +1 ) / 2 (B)( n + 1 ) ( n + 2 ) / 2
(C)n ( n-1) / 2 (D)n ( n + 3 ) / 2
4. 与语句if (a!=0) …等效的语句是。
(A)if (!a) …(B)if (a) …(C)if (a = = 0) …(D)if ( a>=0 | | a<=0 ) …
5. break语句的作用是()。
(A)中止函数的执行(B)立即中止循环
(C)中止本次循环,直接开始下一次循环(D)从一个循环体直接跳转至另一个循环体内
4.3 程序填空题
#include "stdio.h"
#include " (1) "
main()
{ int m, i, k;
for(m=2; m<=1000; m++)
{ k=(int)sqrt(m)+1;
for(i=2; i<=k; i++) if( (2) ) break;
if( (3) ) printf("%5d", m);
}
4.4 程序设计题
1.企业放发的奖金根据利润提成。
设企业的利润为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,计算输出提成金额。
(教材习题5.8)
2. 编写一个决定学生成绩的程序。
这个程序将读入一个学生的三次考试成绩(0-100),然后计算其平均值,并根据这个平均值决定学生的总成绩(用字母A, B, C, D, E来表示)。
字母成绩按如下规定来确定:
A 平均成绩在90或90分以上
B 平均成绩在80到89分
C 平均成绩在70到79分
D 平均成绩在60到69分
E 平均成绩在60分以下。
(教材习题5.6)
输入若干整数,直到输入0时停止,统计并输出奇数的数目和偶数的数目。
3. 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
(教材习题
6.2)
4. 计算s =!)!1(!2!1!0!0n n k n
k +-+⋅⋅⋅+++=∑=。
要求n 值由用户输入。
(教材习题6.4)
5. 打印水仙花数(教材习题
6.6)。
6. 输入x 值,计算⋅⋅⋅+-+-=!
7!5!3)sin(7
53x x x x x ,要求最后一项绝对值小于10-6时停止计算。
7. 用公式⋅⋅⋅⨯+⨯-⨯⋅⋅⋅⨯⨯⨯⨯=1
22122543432122n n n n π计算π的近似值,计算时取1000个因子。
8. 韩信点兵:有兵一队,五伍剩一,六伍剩五,七伍剩四,十一伍剩十,问兵几何?
9. 有30个男女小孩同在一家饭馆进餐,共花了50元,其中每男宾3元,女宾2元,小孩1元。
问男、女、小孩各多少?
10. 将一张面值100元的人民币兑换为5元、2元、1元和5角的零钞,要求零钞总数不超过40张且每种至少1张,求所有兑换方案。
11. 有一个算式缺少了四个数字(如下所示),请编程找出这四个数字。
1 0566+(475 -3 49)*1 6=
12. 打印如下图形。
要求输入最大的字母来控制打印行数。
比如,下图应该输入字母D 。
A
B-B
C―――C
D―――――D
C―――C
B-B
A
13. 如果一个自然数的所有因子之和等于该数本身,称这个数为“完数”。
编程输出1000以内的全部完数。
要求输出格式如下:(教材习题6.7)
28=1+2+4+7+14
第五章 数组
5.1 单项选择题
1. C 语言的数组下标默认从 开始。
(A )1 (B ) 0 (C ) 任意整数 (D )有时为1,有时为0
2. 若有定义int a[5], k=4; 以下表达式没有安全隐患的是 。
(A )a[k-1] (B ) a[-1] (C )a[++k]; (D) a[5]
5.2 多项选择题
1. 以下能对二维数组a正确定义并进行初始化的语句有。
(A)int a[2][3]={{1,1},{2}}; (B)int a[3][]={{1},{2},{3}};
(C)int a[][]={1,2,3,4,5,6}; (D)int a[][3]={{1,1,1},{2,2},{3}};
5.3 程序设计题
1. 求一个3⨯3矩阵对角线元素之和。
(教材习题7.3)
2. 一个数组中的值按逆序重新存放。
(教材习题7.5)
3. 用二维数组实现如下格式杨辉三角形的打印。
(教材习题7.6)
4. 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。
(教材习题10.5)
第六章指针初步
6.1 程序分析题
1. 写出下面程序的运行结果。
#include "stdio.h"
int a[4]={ 1, 2, 3, 4 };
void main()
{ int *p=a, m, n;
for(m=3; m>=0; m --)
for(n=0; n<=m; n++) printf("%d", *(p+n));
}
2. #include “stdio.h”
#define N 8
void main()
{ int a [N ] , k , *p;
for ( k = 0 ; k < N ; k + + ) scanf ( “%d” , & a [ k ]);
p=a;
for (k = 0 ; k < N ; k + + )
if (a[k]>0) *p++=a[k];
while(p>a) printf (“%d”, ――*p);
}
若该程序的输入为0 -9 6 -14 54 3 -5 21,则程序的输出是什么?
6.2 单项选择题
1. 有定义static int a[ ] = {0 , 1 , 2 , 3 , 4 } , *p=a+2 ;表达式*++p的值为。
(A)1 (B)2 (C)3 (D)4
2. 已有定义int k=2; int *ptr1,*ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。
(A)k= *ptr1+*ptr2; (B)ptr2=k;
(C)ptr1=ptr2; (D)k= *ptr1*(*ptr2);
3. 若有定义:int a[10], *p=a;,则p+5表示(8) 。
(A)元素a[5]的地址(B)元素a[5]的值(C)元素a[6]的地址(D)元素a[6]的值第七章函数(含习题课)
7.1 程序分析题
1. 下面程序的运行结果是。
void fl(void)
{ int x=1;
static y=2;
x++;
y++;
printf("%d,%d\n",x,y);
}
main()
{ int k;
for(k=1;k<=3;k++) fl();
}
2. 下列程序的运行结果是。
int d=1;
void fl(int p)
{ int d=2;
d+=p++;
printf("%d ",d);
}
main()
{ int a=3;
fl(a);
d+=a++;
printf("%d\n",d);
}
3. 下列程序的运行结果是。
#include <stdio.h>
int a= 10,c=5;
main()
{ int a=1, b=2, d=4, e=5;
printf("%d\n",func((a+b,b*c,c%d),(d,e/b)));
}
int func (int x, int y)
{
return x+y;
}
4.下面程序的运行结果是什么?
#include <stdio.h>
static int x=150;
void show(int x,int y)
{ printf("x=%d,y=%d\n",x,y);
x=300; y=400;
}
void main()
{ int x=100,y=200;
show(y,x);
printf("x=%d,y=%d\n",x,y);
}
5. 下面程序的运行结果是。
void fl(void)
{ int x=1;
static y=2;
x++;
y++;
printf("%d,%d\n",x, y);
}
void main()
{ int k;
for(k=1;k<=3;k++) fl();
}
7.2 程序填空题
1. 以下函数f的功能是实现N⨯N阶方阵转置,请填空。
#define N 8
void swap( )
{ int temp=*p;
*p=*q;*q=temp;
}
void f(int )
{ int i,j;
for(i=0;i<N;i++)
for(j=0;j< ;j++) swap(&a[i][j], );
}
2. 下程序的功能是求M行N列矩阵的最大值元素,请填空。
#include "stdio.h"
#define M 5
#define N 4
float *getmax( )
{ int i,j;float *pmax;
pmax= ;
for(i=0;i<M;i++) for(j=0;j<N;j++) if(b[i][j]>*pmax) pmax= ;
return( );
}
float a[M][N];
void main()
{ int i,j;
for(i=0;i<M;i++) for(j=0;j<N;j++) scanf(" ",&a[i][j]);
printf("max=%.2f \n",*getmax( ));
}
3. bubsort函数的功能是实现对N元整型数组冒泡排序(由大到小),请填空使之完善。
#define N 10
int a[N];
void bubsort( )
{ int i,j,t;
for(i=1; i<N-1; i++)
for(j=0; j< ; j++)
if(a[j] a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]= ; } }
7.3 填空题
1. C语言中变量有4种存储类型,即extern、static、register和。
2. 在结构化程序设计中,只需使用三种程序结构,分别是顺序结构、(1)结构和(2)结构。
7.4 单项选择题
1. C语言中,形参与实参之间的数据传递方式是。
(A)只能按值传递(B)只能按地址传递
(C)由使用者指定传递方式(D)既可以按值传递也可以按地址传递
2. 若有函数声明为:void func(double *p);则以下函数调用正确的是。
(A)double x; f(x);(B)double x; f( x); (C)double x; f(&x); (D)int x; f(&x);
3. 以下语句用于函数返回的是。
(A)break;(B)continue;(C)return;(D)quit;
4. 以下关于C语言static型变量的说法正确的是。
(A)都是局部变量(B)都是全局变量(C)存储在动态数据区(D)初值自动为0 5. 定义C函数时,不给出返回值类型,则默认的返回值类型是。
(A)float (B)void (C)int (D)NULL指针
7.5 多项选择题
1. 若有函数原型void f(int a[]);和数组定义int b[10];则以下函数调用正确的是。
(A)f(b[0]); (B)f(&b[0]); (C)f(b); (D)f(b+2);
2. 若定义交换实型变量值的函数swap如下,以下函数调用正确的是。
void swap ( float *p , float *q ) { float t=*p;*p=*q;*q=t; }
main() { float a[4] , x , y ; … }
(A)swap(x,y); (B)swap(&x,&y);
(C)swap(a+1,a+2); (D)swap(*a , *(a+1));
7.6 程序设计题
1. 写两个函数,分别求两个整数的最大公约数与最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
(教材习题8.1)
2. 写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。
(教材习题8.3)
3. 写一个函数,实现N个整数的由小到大排序,要求用改进冒泡排序方法。
4. 实现长整数按数位分解打印,如:输入34289,输出3 4 2 8 9。
(要求用递归函数实现)
字符串处理专题
7_1. 程序分析题
1.#include ”stdio.h”
void main()
{char a[61],*s;int n;
gets(a);
for(s=a;*s;s++) if(*s>=’A’ && *s<=’Z’) *s+=32;
puts(a);
}
若程序的输入为SWJTU,则输出结果为。
2. 若程序输入为 ABCD, 下面程序的输出结果是。
#include "stdio.h"
#include "string.h"
void main()
{ char s[81], *p, *q, t;
gets(s);
p=s;q=s+strlen(s)-1;
while(p<q) { t=*p; *p=*q; *q=t; p++; q --; }
puts(s);
}
3. 下面程序的输出是。
#include "stdio.h"
void main()
{ char a[40]= "administrators", *p;
for(p=a; *p!= 'i'; p++) putchar(*p -32);
}
7_2. 单项选择题
1. 以下语句,没有语法错误的是。
(A)a*=3+2++; (B)int a[5]; ++a;
(C)char s[10]; strcpy(s,"");(D)if a>0 a=1; else a=0;
2. C语言存贮字符串时,用特殊字符()表示字符串结束。
(A)’\x0d’ (B)’0’ (C)’\n’ (D)’\0’
3. 以下选项中,不能正确赋值的是。
(A)char s[10];s="Hello"; (B)char s[]={'H', 'e', 'l', 'l', 'o', '\0'};
(C)char s[10]="Hello"; (D)char *s="Hello\n";
4. 以下程序能够安全正确地输入字符串的是。
(A)c har s[41]; scanf("%s", s[0]);
(B)c har s[41]; scanf("%c",s);
(C)c har *s; scanf("%s", s);
(D)c har s[41], *p=s; scanf("%s",&(*p));
7_3. 程序设计题
1. 编写程序,输入一个字符串,用函数实现字符的逆序存储后输出该字符串。
2. 从键盘接收一个字符串,判断该字符串是否为回文。
所谓回文,就是正读和反读顺序相同的串,如: ABCDCBA
3. 编写程序将字符串中的小写英文字符变成大写,其它字符保持不变。
(要求用函数实现)
第八章编译预处理指令
8.1 单项选择题
1. 为计算机多项式f (x ) = 3 x 2 + 2 x +1 ,最恰当的宏定义是。
(A)#define f ( x ) = 3 * x * x + 2 * x + 1
(B)#define f (x ) f ( 3 * x * x +2 * x + 1)
(C)#define f ( x ) (3 *x * x + 2 * x +1)
(D)#define f ( x ) (3 * ( x ) * ( x ) + 2 * ( x) + 1 )
2. 以下不能判断一个整数x的奇偶性的宏定义是。
(A)#define odd(x) ((x)%2) (B)#define odd(x) ((x)&1)
(C)#define odd(x) ((x)==1) (D) #define odd(x) ((x)-2*((x)/2))
8.2 程序设计题
1. 定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。
输出已交换后的两个值。
(教材习题9.1)
2. 年份year, 定义一个宏,以判别该年是否闰年。
(教材习题9.2)
第九章指针深入
9.1 单项选择题
1. 以下关于指针的说法中,不正确的是。
(A)指针表达式也称为地址表达式
(B)指针值的存贮长度有2字节、4字节两种(TC2.0)
(C)指针变量可以进行加减乘除运算
(D)函数的名字就是一个函数指针常量,表示该函数代码的入口地址
2. 若有定义和语句:int a=10,b=20,*p=&a,**pp=&p;p=&b;printf("%d %d\n",*p,**pp);,则输出结果是。
(A)10,20 (B)10,10 (C)20,10 (D)20,20
9.2 多项选择题
1. 若有定义int a[4][5],(*p)[5]=a;则以下正确而安全访问数组元素的表达式是。
(A)**p; (B)*(*(p+4)+1) (C)**(a+1)+1 (D)*(*a+1)
(E)*p[0]+2(F)(*(p+3))[4] (G)a[4][3] (H)*(a[3]+1)
2. 若有数组定义int a[3][4];以及函数原型void f(int (*a)[4]);
以下函数调用正确的是。
(A)f(a); (B)f(a[0][0]); (C)f(a[0]); (D)f(a+2);
(E)f(&a[1]);(F)f(&a[0][0]); (G)f(*a); (H)f(*a[0]);
4.若有定义和语句:int w[2][3],(*pw)[3]; pw=w;则能对w数组元素正确引用的
是。
(A)*(w[0]+2); (B)*(w[2][3]); (C)pw[0][0]; (D)*(pw[1][ 2]);
9.3 程序分析题
1. 以下程序的输出是。
#include <stdio.h>
void main()
{ double a=2.5,*p,**q;
p=&a;q=&p;(*p)++;
printf("%.2f\n",**q);
}
2. 以下程序的输出是。
#include "stdio.h"
main()
{ int x[][3]={1,2,3,4,5,6,7,8,9 };int (*p)[3]=x+1;
printf("%d,%d,%d\n",**p,*(*(p+1)+2),*(*x+1));
return 0;
}
3. 下列程序的运行结果是。
main()
{ int a[10]={9,7,6,1,2,3,0,4,8,5},*p,**k;
p=a;
printf("%d",*(p++));printf("%d",*(++p));
k=&p;
printf("%d\n",**k);
}
第十章结构、联合、枚举、类型定义
10.1 单项选择题
1. 有定义struct { int a[5]; } b; 则正确表达成员数组a的最后一个元素地址的是。
(A) b.a (B)b.a[5] (C)b.a+4 (D)&(&b->a[4])
2. 以下对枚举类型名的定义中正确的是。
(A)enum a={one,two,three}; (B)enum b{one=9,two=-1,three};
(C)enum c={"one","two","three"}; (D)enum d{"one","two","three"};
3. 以下关于结构体的说法正确的是。
(A)结构体的成员变量可以与结构体变量同名
(B)结构体的成员变量不能是指针类型的变量
(C ) 指向结构体的指针变量不能在定义时初始化 (D ) 结构体数组不能在定义时进行初始化
4. 以下关于C 语言结构体变量的说法中错误的是 。
(A )各成员变量首地址不相同 (B )各成员变量首地址相同 (C )存贮空间为所有成员变量长度之和 (D )定义时可以初始化 10.2 多项选择题
1. 若有定义struct d1_tp { int a,b; }; struct d2_tp { d1_tp a; int b; } b; 则以下正确的成员变量表达式是 。
(A )a.a (B )b.a.b (C )(&b.a)->a (D )b.b
2.以下选项中,能正确定义s 为结构体变量并进行初始化的有 。
第十一章 C 文件操作
11.1 单项选择题
1. 以只写方式打开一个二进制文件,应选择的文件操作方式是 。
(A )"a +"
(B )"w +"
(C )"rb"
(D )"wb"
2. 改写磁盘文件中的数据,文件打开方式正确的是 。
(A )"ab+" (B )"rb+" (C )"wb+" (D )"rb"
3. 以下文件打开方式串中,不能创建新文件的是 。
(A )"r+" (B )"a" (C )"w+" (D )"a+" 11.2 程序填空题
1. 以下程序的功能是统计字符文件a.txt 中有多少个空格,请填空。
#include "stdio.h" #include "process.h" void main()
{ FILE fp; int ch; int n= (1) ;
if(!(fp=fopen("a.txt", "rt"))) { printf("File open error!\n");exit(1); } while(1)
(B )struct ABC
{ char name[20];
int age;
}s={"Jack",20};
(D )struct
{ char name[20];
int age;
}s={"Jack",20};
(A )typedef struct tag { char name[20];
int age; }ABC; ABC s={"Jack",20}; (C )struct
{ char name[20];
int age; }ABC;
A BC s={"Jack",20};
{ ch=fgetc(fp); if( (2) ) break; if( (3) ) n++; }
printf("n=%d\n",n); fclose(fp); }
2. 以下程序的功能是统计正文(文本)文件ABC.TXT 的行数。
#include “stdio.h ” main()
{ FILE *fp;int ch , count=0;
fp=fopen(“abc.txt”, (1) );
if(fp==NULL) { printf(“ABC.TXT not found.\n”);return; } while(1)
{ ch=fgetc(fp);if( (2) ) break; if(ch== (3) ) count++; }
fclose(fp);printf(“numbers of lines=%d \n”,count); }
3. 以下程序段的功能是从键盘上输入一个字符串,将字符串中的大写字母转换为小写字母,输出到文本文件test.txt 中。
请填空使该程序功能完整。
11.3 程序设计题
1.
印如下图形到屏幕上和字符文件ABC.TXT 中。
(打印行数n 由键盘输入)
*
* * * n 行 * * * * * * * * * * * *
习题参考答案
1.1语言简洁、紧凑、使用方便、灵活;
运算符丰富;
数据结构丰富;
具有结构化的控制语句;
语法限制不太严格,程序设计自由度大;
允许直接访问物理地址;
生成目标代码质量高,程序执行效率高;
程序可移植性好。
1.2 1. UNIX
2. 低级语言的高级
3. (1) 编译(2) 连接
1.3 1. C
2. A
1.4 1. AB
2. BCD
2.1 1. a) 2.5 b)
3.5 2. 9,11,9,10 3. a) 24 b) 10 c) 60 d) 0 e) 0 f) 0
4. 非0值表示“真”;0表示“假”。
如果一个量不等于0,判断为“真”,反之判断为“假”。
2.2 1. (1) 0 (2) 1 (3) 1 (4) 0 (5) 1
2. (1) 20 (2) 1 (2) 1 (3) 5 (4) 2 (5) 6 (7) 0 (8) 2
3. (1) 2 (2) 3 (3) 2
4. (-b+sqrt(fabs(b*b-4*a*c)))/(2*a)
5. (1) double (2) int
2.3 1. C 2. D
3. D
4. A
5. B
6. B
7. A
2.4 1. AC 2. ABCD
3.1 1. #include “stdio.h”
void main()
{ double C,F;
printf(“Input F=”);scanf(“%lf”,&F);
C=5.0/9*(F-32);
printf(“C=%.2f\n”,C);
}
2. 分析:(1+p)n=2 有n=ln(2)/ln(1+p)
#include “stdio.h”
#include “math.h”
void main()
{ double p,n;
printf(“Input p=”);scanf(“%lf”,&p);
n=log(2)/log(1+p);
printf(“n=%.0f\n”,n);
}
3.2 1. A 2. D
4.1 1. a=2, b=1, c=2 2. x=10, y=6
3. BCD15
4. 循环体共执行了3次,输出为:12 9
5. abcd4
4.2 1. A 2. C 3. D 4. B
5. B
4.3 (1) math.h (2) m%i!=0 或m%i (3) i>k 或i>=k+1
4.4
1. /* if 语句求解*/
#include “stdio.h”
void main()
{ double I,p=0;
printf(“Input I=”);scanf(“%lf”,&I);
if(I>100) { p+=(I-100)*0.01; I=100; }
if(I>60) { p+=(I-60)*0.015;I=60; }
if(I>40) { p+=(I-40)*0.03;I=40; }
if(I>20) { p+=(I-20)*0.05;I=20; }
if(I>10) { p+=(I-10)*0.075;I=10; }
p+=I*0.1;
printf(“p=%f\n”,p);
}
/* switch语句求解*/
#include “stdio.h”
void main()
{ double I, p=0;
printf(“Input I=”);scanf(“%lf”,&I);
if(I>=100) { p+=(I-100)*0.01;I=100; }
swith((int)(I/10))
{ case 10: case 9:case 8:case 7:case 6:
p+=(I-60)*0.015;I=60;
case 5:case 4:
p+=(I-40)*0.03;I=40;
case 3:case 2:
p+=(I-20)*0.05; I=20;
case 1:
p+=(I-10)*0.075;I=10;
default:
p+=I*0.1;
}
printf(“p=%f\n”,p);
}
2.
#include “stdio.h”
void main()
{ int s1,s2,s3; float av; char level;
while(1)
{ printf(“Input three scores of one student:\n”);
scanf(“%d%d%d”,&s1,&s2,&s3);
if(s1<0||s2<0||s3<0) break;
av=(s1+s2+s3)/3.0F;
switch((int)(av/10))
{ case 9:case 10: level=’A’;break;
case 8:level=’B’;break;
case 7:level=’C’;break;
case 6:level=’D’;break;
default:level=’E’;
}
printf(“level=%c\n”,level);
}
}
3.
#include “stdio.h”
void main()
{ char ch; int ne, ns, nd, n;
n=ne=ns=nd=0;
while(1)
{ ch=getchar();if(ch==’\n’) break;
n++;
if(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’) ne++;
if(ch>=’0’&&ch<=’9’) nd++;
if(ch==32) ns++;
}
printf(“the number of English letters = %d\n”, ne);
printf(“the number of digital numbers = %d\n”, nd);
printf(“the number of spaces = %d\n”, ns);
printf(“the number of other characters = %d\n”,n-ne-ns-nd); }
4.
#include “stdio.h”
void main()
{ double s,a;int k,n;
printf(“Input n=”);scanf(“%d”,&n);
s=0;a=1;
for(k=0;k<=n;k++) { s+=a;a=(n+1)*a;}
printf(“s=%.0f\n”,s);
}
5. 答案见电子教案例题
6.
解:令s=sin x, ⎪⎪⎭
⎫ ⎝⎛-=-!)
1(2
1k x a k k k , k=1, 3, 5, … 则∑=k k a s
x k=1
a k =
22
)
1(---
k a k k x k=3, 5, 7, … #include "stdio.h" #include "math.h" void main()
{ double s,x,a;int k;
printf("Input x=");scanf("%lf",&x); a=x;s=0;k=1;
while(fabs(a)>1e-6){ s+=a;k+=2;a*=-x*x/k/(k-1);} printf("sin(%.4f)=%.4f\n",x,s); } 7.
#include "stdio.h" void main()
{ int n;double pi=1;
for(n=2;n<=2000;n+=2) pi*=(double)n*n/(n-1)/(n+1); pi*=2;
printf("pi=%f\n",pi); } 8.
#include "stdio.h" void main() { int m;
for(m=1;m<=10000;m++)
if(m%5==1&&m%6==5&&m%7==4&&m%11==10) printf("m=%d\n",m); }
1万以内的解有4个:即2111, 4421, 6721, 9041 9.
#include "stdio.h" void main()
{ int man,child,women;
printf("%8s%8s%8s\n","man","women","child"); for(man=1;man<17;man++) for(women=1;women<25;women++) { child=50-3*man-2*women;
if(child>=1&&man+women+child==30)
printf("%8d%8d%8d\n",man,women,child);
}
}
10.
#include "stdio.h"
#include "conio.h"
void main()
{ int i5,i2,i1,i0_5,count=0;
for(i5=1;i5<=20;i5++)
for(i2=1;i2<37;i2++)
for(i1=1;i1<37;i1++)
{ i0_5=2*(100-5*i5-2*i2-i1);
if(i0_5>=1&&i5+i2+i1+i0_5<=40)
{ printf("%4d%4d%4d%4d\n",i5,i2,i1,i0_5);
count++;
if(count%20==0)
{ printf("press any key to continue...\n");
getch();
}
}
}
}
11.
#include "stdio.h"
void main()
{ long s;int a,b,c,d;
for(a=1;a<=9;a++)
for(b=1;b<=9;b++)
for(c=1;c<=9;c++)
for(d=1;d<=9;d++)
{ s=+a*10000+(4750+b-(3049+c*100))*(106+d*10);
if(s==) printf("%4d%4d%4d%4d\n",a,b,c,d);
}
}
12.
#include "stdio.h"
void main()
{ int n,i,j;
printf("Input n=");scanf("%d",&n);
if(n%2==0) { printf("Input is not correct.\n");return; }
n=n/2+1;
for(i=1;i<=n;i++)
{ printf("%*s",n-i,"");
for(j=1;j<=2*i-1;j++) putchar(j==1||j==2*i-1?'A'+i-1:'-');
printf("\n");
}
n--;
for(i=n;i>=1;i--)
{ printf("%*s",n-i+1,"");
for(j=1;j<=2*i-1;j++) putchar(j==1||j==2*i-1?'A'+i-1:'-');
printf("\n");
}
}
13.
#include "stdio.h"
void main()
{ int m,i,s;
for(m=1;m<=1000;m++)
{ s=1;
for(i=2;i<=m/2;i++) if(m%i==0) s+=i;
if(s==m)
{ printf("%d=1",m);
for(i=2;i<=m/2;i++) if(m%i==0) printf("+%d",i);
printf("\n");
}
}
}
5. 1 1. A 2. A
5.2 1. AD
5.3
1.
#include “stdio.h”
void main()
{ int a[3][3], m,n; int sum=0;
for(m=0;m<3;m++) for(n=0;n<3;n++) scanf(“%d”,&a[m][n]); for(m=0;m<3;m++) sum+=a[m][m];
printf(“sum=%d\n”,sum);
}
2. 答案见电子教案上的例题
3.
#include “stdio.h”
#define N 100
void main()
{ int a[N][N], i, j, n;
printf(“Input number of rows=”);scanf(“%d”,&n);
for(i=0;i<n;i++) a[i][i]=a[i][0]=1;
for(i=2;i<n;i++)for(j=0;j<i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<n;i++)
{ for(j=0;j<=i;j++) printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
4.
#include “stdio.h”
#define N 10
void main()
{ int k,m=3,x,j;
for(k=0;k<N;k++) scanf(“%d”,&a[k]);
for(k=1;k<=m;k++)
{ x=a[0];
for(j=1;j<N;j++) a[j-1]=a[j];
a[N-1]=x;
}
for(k=0;k<N;k++) printf(“%6d”, a[k]);
printf(“\n”);
}
6.1 1. 2. 3. swjtu
6.2 1. C 2. B 3. A
7.1 1. 2,3
2,4
2,5
2. 5 4
3. 3
4.x=200, y=100
x=100, y=200
5.
7.2
1. int *p,int *q a[][N]或a[N][N]或(*a)[N] i &a[j][i]
2. b[M][N]或b[][N]或(*b)[N] 数组b任一元素的地址
&b[i][j] pmax %f a
3. a[N] 或a[ ] j<N-i < t
7.3 1. auto 2. (1)选择(分支)结构(2)重复(循环)结构7.4 1. D 2. C 3. C 4. D 5. C
7.5 1. BCD 2. BC
7.6
1.
#include “stdio.h”
int gcd(int a,int b)
{ int t;
while(b!=0) { t=a%b; a=b; b=t; }
return a;
}
int lcm(int a, int b)
{ return a*b/gcd(a,b);
}
void main()
{ int x, y;
printf(“Input two integers:”);scanf(“%d%d”,&x,&y);
printf(“gcd=%d,lcm=%d\n”,gcd(x,y),lcm(x,y));
}
2.
#include “stdio.h”
#include “math.h”
int isPrime(int a)
{ int i,k=(int)sqrt(a+1.0);
for(i=2;i<=k;i++) if(a%i) break;
return i>k;
}
void main()
{ int a;
printf(“Input a integer number:”);scanf(“%d”,&a);
printf(“It is “);
if(!isPrime(a)) printf(“not “);
printf(“prime.\n”);
}
3.
#include “stdio.h”
#define N 10
int a[N];
void sort(int a[])
{ int i,j,flag, tmp;
for(i=1;i<N;i++)
{ flag=1;
for(j=0;j<N-i;j++) if(a[j]>a[j+1]) { tmp=a[j];a[j]=a[j+1];a[j+1]=tmp; flag=0;} if(flag) break;
}
}
void main()
{ int i;
for(i=0;i<N;i++) scanf(“%d”, a+i);
sort(a);
for(i=0;i<N;i++) printf(“%d “, a[i]);
printf(“\n”);
}
4.
#include “stdio.h”
void prt(long a)
{ if(a==0) return;
prt(a/10); printf(“%d “,a%10);
}
void main()
{ long a;
printf(“Input a long integer number:”);scanf(“%ld”,&a); prt(a);
}
7_1. 1. swjtu 2. DCBA 3. ADM
7_2. 1. C 2. D 3. A 4. D
7_3.
1.
#include “stdio.h”
void reverse(char *s)
{ char *p,*q,ch;
for(p=q=s;*q;q++); q--;
while(p<q) { ch=*p; *p=*q; *q=ch; p++; q--; }
}
void main()
{ char s[81];
printf(“Input a string:”);gets(s);
reverse(s);
puts(s);
}
2.
#include “stdio.h”
#include “string.h”
int isPldr(char *s)
{ int m,n;
n=strlen(s)-1;
for(m=0;m<n;m++,n--) if(s[m]!=s[n]) break;
return m>=n;
}
void main()
{ char s[255];
printf(“Input a string:”);scanf(“%s”,s);
if(isPldr(s)) printf(“It is palindrome.\n”); else printf(“It is not palindrome.\n”); }
3.
#include “stdio.h”
void toUpper(char *s)
{ int m;
for(m=0;s[m]!=’\0’;m++) if(s[m]>=’a’&&s[m]<=’z’) s[m]-=32;
}
void main()
{ char s[200];
gets(s); toUpper(s); puts();
}
8.1 1. A 2. C
8.2
1.
#include “stdio.h”
#define swap(a,b,t) ((t)=(a),(a)=(b),(b)=(t)) /* a, b借助t换值*/
void main()
{ int x,y,temp;
scanf(“%d%d”,&x,&y); swap(x,y, temp);
printf(“x=%d , y=%d\n”,x, y);
}
2.
#include “stdio.h”
#define LEAP_YEAR(y) ((y)%4==0&&(y)%100!=0)||((y)%400==0)
void main()
{ int year;
printf(“Input a year:”); scanf(“%d”,&year);
if(LEAP_YEAR(year)) printf(“%d is a leap year.\n”, year);
else printf(“%d is not a leap year.\n”, year);
}
9.1 1. C 2. D
9.2 1. ADFH 2. ADE 3. AC
9.3 1. 3.5 2. 4, 9, 5 3. 966
10.1 1. C 2. B 3. A 4. B
10.2 1. BCD 2. ABD
11.1 1. D 2. A 3. A
11.2 1. (1) 0 (2) feof(fp) 或ch==EOF (3) ch==32 或ch==’‘
2. (1) “r”或“rt”(2) feof(fp) 或ch==EOF (3) 10 或‘\n’
3. (1) FILE * (2) fopen (3) str[i] (4) fclose(fp)
11.3
1.
#include “stdio.h”
void main()
{ int n, i, j; FILE *fw;
printf(“Input n=”):scanf(“%d”,&n);
fw=fopen(“abc.txt”, “w”);
for(i=1;i<=n;i++)
{ printf(“%*s”, n-i, “”); fprintf(fw, “%*s”, n-i, “”);
for(j=1;j<=2*i-1;j++) { putchar(‘*’); fputc(‘*’,fw); }
printf(“\n”);fprintf(fw,”\n”);
}
fclose(fw);
}。