C程序设计教程与实验课后习题答案-- 给呆呆
更新时间:2023-12-29 01:18:01 阅读量: 教育文库 文档下载
第1章习题 一、选择题
1、A 2、D 3、C 4、D 5、B 6、C 7、C 8、B 9、B 10、A 二、填空题 1、一,函数体
2、main(主),main(主) 3、编译,目标 4、.c,.obj,.exe
5、缩进,无影响,/* */ 三、程序分析题 1、
***************** Very good!
***************** 2、
a=12,b=5 a=17,b=22 3、
r= 5.50,s=95.033098
四、编程题
1.用printf()函数在屏幕上输出自己的班级、学号、姓名。 #include\void main() {
printf(\班级:BX1109\\n\
printf(\学号:111003530901\\n\ printf(\姓名:王孟荣\\n\}
2.从键盘输入两个整数,计算它们的和、差、积、商,并在屏幕上输出结果。
#include
int x,y,a,b,c; float d;
printf(\scanf(\a=x+y; b=x-y; c=x*y; d=1.0*x/y;
printf(\}
第2章习题 一、选择题 1~5 BCDCD 6~10 DBBCA 二、填空题
1.单精度浮点型、双精度浮点型、字符型 2.0
3.x*10+x/10 4.5.5 5.5.7 20
6.sin(sqrt(x*x))/(a*b) 7. ,
8.1111011 173 7B 9.3 3 10.3
三、程序分析题 1. 7,8,10 2. 1,3 3. 5 F
4. (int)i=12, 12.50 5. 4 61 57 9 112
四、编程题
1.编写程序,求表达式c=21%9-(float)a+4/b*b的值,假设表达式中a和b的值分别由键盘输入。
#include
int a,b; float c;
printf(\ scanf(\ c=21%9-(float)a+4/b*b; printf(\ }
2. 编写程序,从键盘输入两个整数存入变量a和b中,求a2-b2的值并输出。 #include
int a,b,c;
printf(\ scanf(\ c=a*a-b*b;
printf(\ }
第3章习题 一、选择题
1 D
2 C
3 A、B
4 A
5 B
6 B
7 B、C
8 B
9 D
10 D
二、填空题
1. 有穷性 确定性 可行性 2. #
3. 从终端(键盘)输入一个字符 4. m d
5. 97,g
6. 123.456000, 123.46, 123
7. 格式控制符不正确(输入数据时不能控制列宽和小数位数) 8. 63,63,77,3f 9. %f%f &x,&y
10.
三、程序分析题 1. c=11
2. a=123 f=457 3. x=345 y=3.460000 4. a=1,b=3 a=3,b=1
5. (题目需修改为:从键盘输入一个除a和z以外的小写字母)
程序的功能:从键盘输入一个除a和z以外的小写字母,求出该字母对应的大写字母的前趋和后继字母,然后顺序输出此三个大写字母,每个字母所占列宽为3。 运行结果: 假如输入:f ' 输出: E F G
四、编程题
1.编写程序,计算的值并输出(保留3位小数),其中a、b的值由键盘输入。 #include
scanf(\ x=(a*a+b*b)/sqrt(3*(a+b)); printf(\}
2.编写程序,从键盘输入一个梯形的上底a、下底b和高h,输出梯形的面积s。
#include
scanf(\ s=(a+b)*h/2;
printf(\梯形面积s=%.2f\\n\ }
3.编写程序,在屏幕上输入你姓名的第一个字母,显示出该字母以及下面的信息: Hello!
This is a c program.
My name is [第一个字母]
#include
char name;
name=getchar(); putchar(name); printf(\
printf(\ printf(\ }
第4章习题 一、选择题 1 2 3 4 B
B
C
B
二、填空题 1. ! && || 2. 1 3. a b 4. 1 5. 0
6. x%4= =0 && x0!=0 7. 5 6 8. A
9. x<0 || x>10 && x<50 10. -1
三、程序分析题 1. No 2. -2 3. 5 3 2 4. #&
5 6 C
A C
7 8 B
A
9 10 C
C
if(a[m]>a[j]) m=j; if(m!=i)
{t=a[i];a[i]=a[m];a[m]=t;} }
puts(a); printf(\ }
5.编写程序输出以下杨辉三角形(要求输出10行)。 1 1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1 … … … … … …
#include
{ int i,j,a[10][10]; for(i=0;i<10;i++) { a[i][0]=a[i][i]=1; for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j]; }
for(i=0;i<10;i++) { for(j=0;j<=i;j++) printf(\ printf(\ } }
6.编程将s数组中的字符串的正序和反序进行连接,形成一个新串放在t数组中。例如,当s数组中字符串为\时,则t数组中的内容应为:\。 #include
char s[100], t[100]; int i,d;
printf(\scanf(\
d=strlen(s);
for(i=0;i for(i=0;i printf(\} 7.某公司在传输数据过程中为了安全要对数据进行加密,若传递的是四位的整数,对其进行加密的规则为:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。如:输入数字7659,则加密后的数字为4012 #include { int a,i,aa[4],t; printf(\输入一个需加密的四位数整数:\scanf(\aa[0]=a; aa[1]=a0/10; aa[2]=a00/100; aa[3]=a/1000; for(i=0;i<=3;i++) {aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) { t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } printf(\加密后的数字为:\for(i=3;i>=0;i--) printf(\printf(\} 8.编写程序查找数值18在以下二维数组中第一次出现的位置。 3 4 5 18 8 12 16 54 43 34 18 7 #include { int i,j,a[3][4]={{3,4,5,18}, {8,12,16,54}, {43,34,18,7}}; for(i=0;i<3;i++) { for(j=0;j<4;j++) if(a[i][j]==18) break; if(j<4)break; } printf(\数值18第一次出现的位置在%d行,第%d列\\n\} 9.设有4行4列的数组a,其元素a[i][j]=3*i+2*j-6。编写程序,实现如下功能: (1) 求第二行4元素的累加和; (2) 求第四列4元素的平均值; (3) 求主对角线4元素中负数的个数。 #include { int a[4][4],i,j,s=0,m=0; float n=0; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=3*i+2*j-6; printf(\原始数组为:\\n\for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(\printf(\} for(j=0;j<4;j++) s+=a[1][j]; printf(\第二行4元素累加和为:%d\\n\for(j=0;j<4;j++) n+=a[j][3]; printf(\第四列4元素平均值为:%.2f\\n\for(i=0;i<4;i++) if(a[i][i]<0) m++; printf(\主对角线4元素中负数的个数为:%d\\n\} 10.约瑟夫环问题:编号为1,2,3,...,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。 分析:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。 #include main() { int a[100]; int i,j,m,n,k=0; printf(\输入人数n和任选的一个正整数m:\ scanf(\ printf(\输入n个人的密码: \ for (i=0;i while(j { while(a[k]==0) /*跳过已出列的人*/ k=(k+1)%n; j++; k=(k+1)%n; } while(a[k]==0) /*跳过已出列的人*/ k=(k+1)%n; printf(\ m=a[k]; a[k]=0; } } 第7章习题 一、选择题 1 2 3 4 5 6 7 A D D B A D C 二 填空题 1. main() 2. main() 3.函数首部 4. 解决函数必须“定义在前,使用在后”的原则问题 5. int 6. 定义 调用 7. 地址传递 值传递 8. return void 9. void f(float a,float b) float f(float a,float b) 10. static 三 程序分析题 1. a=48 8 9 D B 10 A 2. 8,17 3. 2721 4. BASIC C COBOL FORTRAN PASCAL Smalltalk 5. 6 1 2 3 6 5 4 四、编程题 1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。 #include printf(\ scanf(\ if (prime(n)) printf(\ else printf(\ } int prime(int n) {int flag=1,i; for (i=2; i 2.写一个函数,用于实现函数strcmp()的功能,能将两个字符串进行比较,将两个字符串中第一个不相同字符的ASCII码值之差作为函数的返回值。 #include int MyStrcmp(char s[], char t[]); main() { char str1[20],str2[20]; printf(\gets(str1); printf(\gets(str2); if (MyStrcmp(str1,str2)>0) printf(\ else if (MyStrcmp(str1,str2)<0) printf(\ else printf(\} int MyStrcmp(char s[], char t[]) { int i; for (i=0;s[i]==t[i]; i++) if (s[i]=='\\0') return 0 ; return (s[i]-t[i]); } 3. 写一个函数,用于实现函数strcat()的功能, 能将两个字符串连接。 #include {void concatenate(char string1[],char string2[],char string[]); char s1[100],s2[100],s[100]; printf(\ scanf(\ printf(\ scanf(\ concatenate(s1,s2,s); printf(\ } void concatenate(char string1[],char string2[],char string[]) {int i,j; for (i=0;string1[i]!='\\0';i++) string[i]=string1[i]; for(j=0;string2[j]!='\\0';j++) string[i+j]=string2[j]; string[i+j]='\\0'; } 4. 从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。 #include void MaxMinExchang(int a[], int n) { int maxValue=a[0], minValue=a[0], maxPos=0, minPos=0; int i, temp; for (i=1; i if (a[i] > maxValue) { maxValue = a[i]; maxPos = i; } else if (a[i] < minValue) { minValue = a[i]; minPos = i; } } temp = a[maxPos]; a[maxPos] = a[minPos]; a[minPos] = temp; } main() { int a[ARRSIZE],i; printf(\ for (i=0; i MaxMinExchang(a, ARRSIZE); printf(\for (i=0;i 5. 写一函数,能对给定的一个二维数组(3×3)进行转置(即行列互换)。 #include { void convert(int array[][3]); int i,j; printf(\ for (i=0;i scanf(\ printf(\ for (i=0;i printf(\ printf(\ } convert(array); printf(\ for (i=0;i printf(\ printf(\ } } void convert(int array[][3]) {int i,j,t; for (i=0;i array[i][j]=array[j][i]; array[j][i]=t; } } 6. 写一函数,能用“起泡法”对输入的10个字符按由小到大顺序排序。 #include {void sort(char str[]); int i,flag; for (flag=1;flag==1;) {printf(\ scanf(\ if (strlen(str)>N) printf(\ else flag=0; } sort(str); printf(\ for (i=0;i void sort(char str[]) {int i,j; char t; for(j=0;j for (i=0;(i str[i]=str[i+1]; str[i+1]=t; } } 7. 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数。 #include int letter,digit,space,others; void main() {void count(char str[]); char text[80]; printf(\ gets(text); printf(\ puts(text); letter=0; digit=0; space=0; others=0; count(text); printf(\} void count(char str[]) {int i; for (i=0;str[i]!='\\0';i++) if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z')) letter++; else if (str[i]>='0' && str [i]<='9') digit++; else if (str[i]==32) space++; else others++; } 8. 编写程序输出3~10000内的可逆素数。可逆素数是指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。如157和751均为素数,它们是可逆素数。要求调用两个子函数实现。 #include int s=0; while(a>0) { s=10*s+a; a/=10; } return s; } int prime(int a) { int i; for(i=2;i<=(int)sqrt(a);i++) if(a%i==0) return 0; return 1; } main() { int i; for(i=3;i<10000;i++) if(prime(i)) if(prime(invert(i))) printf(\printf(\} 9. 编写一个函数,实现将一个十进制数转换成八进制数。 #include int i,n; char a[33]; void trans10_8(char x[],int m); printf(\ scanf(\ trans10_8(a,n); for (i=strlen(a)-1;i>=0;i--) printf(\printf(\ } void trans10_8 (char x[],int m) { int r,i=0; while(m>0) { r=m%8; x[i]=r+48; m=m/8; i++; } x[i]='\\0'; } 10. 编写一个函数,实现对由实参传来的一个字符串,将其字符顺序颠倒后重新存放。 #include {void inverse(char str[]); char str[100]; printf(\ scanf(\ inverse(str); printf(\} void inverse(char str[]) {char t; int i,j; for (i=0,j=strlen(str);i<(int)(strlen(str)/2);i++,j--) {t=str[i]; str[i]=str[j-1]; str[j-1]=t; } } 第八章编程题答案 1.输入2个字符串,每个字符串的长度均不超过80字符,用自己实现的cmpstr()函数完成这两个字符串的大小比较,cmpstr()函数的功能和字符串比较函数strcmp()的功能相同。 #include int cmpstr(char *s1, char *s2) { char *p, *q; p=s1; q=s2; while(*p!='\\0' && *q!='\\0') { if(*p==*q) { p++; q++; } else break; } return *p-*q; } void main() { char str1[81], str2[81]; int c; printf(\请输入第1个字符串:\gets(str1); printf(\请输入第2个字符串:\gets(str2); c=cmpstr(str1,str2); if(c>0) printf(\字符串%s 大于 字符串%s\\n\else if(c<0) printf(\字符串%s 小于 字符串%s\\n\else printf(\字符串%s 等于 字符串%s\\n\} 3.定义一个函数delSubstr(),删除字符串中第k个字符开始的m个字符,例如删除字符串abcde第2个字符开始的3个字符,则删除后结果为ae;又如删除字符串abcde第4个字符开始的5个字符,则删除后结果为abc。 #include int delSubstr(char *str, int k, int m) { char *p, *q; if(k<=0||m<=0) return -1; else if(k>strlen(str)) return -2; else if(k+m>strlen(str)) { str[k-1]='\\0'; return 1; } else { p=str+k-1; q=str+k+m-1; while(*q!='\\0') *p++=*q++; *p='\\0'; return 1; } } void main() { char str[81]; int k, m, state; printf(\请输入字符串:\\n\gets(str); printf(\请输入要删除的子串起始字符的序号和子串长度:\\n\scanf(\state = delSubstr(str, k, m); if(state<0) printf(\要删除子串起始字符的序号或子串长度输入错误!\\n\else printf(\删除指定子串后的字符串为:%s\\n\} 4.定义一个函数delSpechar(),使用字符指针删除字符串中的所有指定字符(如把字符串“I love you!”中的o字符删除,得到“I lve yu!”)。 #include void delSpechar(char *str, char ch) { char *p, *q; p=str; while(*p!='\\0') { if(*p==ch) { q=p; while(*q!='\\0') { *q=*(q+1); q++; } } else p++; } } void main() { char str[81], ch; printf(\请输入一个字符串:\gets(str); printf(\请输入要从字符串中删除的字符:\ch = getchar(); delSpechar(str, ch); printf(\删除所有指定字符后的字符串为:%s\\n\} 5.求整型二维数组a[M][N]中的最大元素值及最大元素的位置(用指针法引用数组元素)。 #include void max(int (*pa)[N], int *pRow, int *pCol) { int i, j; for(i=0; i if(pa[i][j]>pa[*pRow][*pCol]) { *pRow = i; *pCol = j; } } void main() { int a[M][N]={{4,2,7,9},{1,3,13,0},{-5,6,-11,10}}; int row=0, col=0; max(a, &row, &col); printf(\二维数组中的最大元素值为a[%d][%d]=%d\\n\} 6.已知字符串str[80],编写函数lstrchar(),实现在数组str中查找字符ch首次出现的位置,如果字符串中找不到该字符,则返回-1。 #include int lstrchar(char *str1, char ch1) { char *p,i=1; p=str1; while(*p!='\\0') { if(*p==ch1) break; else { p++; i++; } } if(*p=='\\0') return -1; else return i; } void main() { char ch,str[80]; int poi; printf(\请输入字符串:\gets(str); printf(\请输入待查找的字符:\ scanf(\poi=lstrchar(str,ch); if(poi==-1) printf(\字符串中不存在指定字符!\\n\else printf(\该字符在字符串中出现的第一个位置为%d\\n\} 7.定义一个整型二维数组并初始化,编程求该数组所有元素的和。 要求:分别用数组下标法、一级指针法、二级指针法实现。 /*数组下标法*/ #include int sum(int b[M][N]) { int i, j, s=0; for(i=0; i void main() { int a[M][N]={{4,2,7,9},{1,3,13,0},{-5,6,-11,10}}; printf(\二维数组中的所有元素之和为%d\\n\} /*一级指针法*/ #include int i,s=0; for(i=0;i void main() { int a[M][N]={{4,2,7,9},{1,3,13,0},{-5,6,-11,10}}; printf(\二维数组中的所有元素之和为%d\\n\} /*二级指针法*/ #include int sum(int (*pa)[N]) { int i,j,s=0; for(i=0;i for(j=0;j return s; } void main() { int a[M][N]={{4,2,7,9},{1,3,13,0},{-5,6,-11,10}}; printf(\二维数组中的所有元素之和为%d\\n\} 8.输入一行数字字符存入字符数组str[80]中,用num[10]中的数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符“0”的个数,用下标为1的元素统计字符“1”出现的次数,??。输出每个奇数字符出现的次数。 #include void count(char *str, int num[]) { int i=0; while(str[i]!='\\0') { switch(str[i]) { case '0': num[0]++; break; case '1': num[1]++; break; case '2': num[2]++; break; case '3': num[3]++; break; case '4': num[4]++; break; case '5': num[5]++; break; case '6': num[6]++; break; case '7': num[7]++; break; case '8': num[8]++; break; case '9': num[9]++; break; } i++; } } void main() { char str[80],*p=str; int num[10]={0}, i; printf(\请输入一行数字字符:\gets(p); count(p,num); for(i=1;i<10;i+=2) printf(\数字串中%d出现的次数为%d\\n\} 9.在主函数中输入10个不等长字符串,用另一函数sort()对它们排序,然后在主函数中输出已排好序的字符串。要求:每个字符串长度均不超过30字符,用指针数组进行处理。 #include void sort(char *pstr[]) { int i,j; char *t; for(i=0; i for(j=0; j if(strcmp(pstr[j],pstr[j+1])>0) { t = pstr[j]; pstr[j] = pstr[j+1]; pstr[j+1] = t; } } } void main() { char str[M][N], *pstr[M]={NULL}; int i; printf(\请输入10个字符串,每个字符串均不超过30个字符:\\n\for(i=0; i gets(str[i]); pstr[i]=str[i]; } sort(pstr); printf(\排好序的字符串从小到大依次为:\\n\for(i=0; i printf(\} 10.输入一个字符串,内有数字字符和非数字字符如123a345bcd567,将其中连续的数字作为一个整数,依次存放到整型数组a中,例如,123放在a[0],345放在a[1]中,567放在a[2]中,??,统计共有多少个整数,并输出这些整数。 #include char ch[1000],*p=ch; int a[50],*q=a,num=0,i; gets(ch); for( ; *p!='\\0'; p++) if(*p>='0' && *p<='9') { *q=(*p)-'0'; p++; while(*p>='0' && *p<='9') *q=(*q)*10+(*(p++)-'0'); num+=1; q+=1; } for(i=0,q=a; i printf(\一共输入了%d个整数。\\n\}
正在阅读:
淄博论文网职称论文发表网-工程造价审核思考论文选题题目04-14
小学英语语法总复习附练习答案09-12
童真,激荡10-29
轴承套机械加工工艺过程卡片02-29
小学篮球运动的选材和运用10-06
2015-2020年中国责任保险行业分析与投资决策研究报告 - 图文05-10
市场营销期中考试试题10-07
绿色康复答案06-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 课后
- 习题
- 程序设计
- 呆呆
- 答案
- 实验
- 教程
- 《仪器分析》模拟考试试题
- 交大网络学院现代管理学考试复习资料整理(完整)
- 关心家乡1 - 图文
- 西方社会学理论
- 2017-2023年中国漆包线行业市场调查现状报告(目录) - 图文
- 2015年北京市教师招聘考试备考资料:每日一练(8.22)
- 二十五项反措
- 设备自动化课设—冷水机组
- 2012领航考研英语语法 - 图文
- 2017年员工异动、借调和离职管理制度及相关表格
- 这个长寿的方法你真的应该知道
- 2010年会计职称考试《经济法基础》全真模拟试题(4)-中大网校
- 石嘴山钢煤斗吊装方案
- 全国2011年10月(00243)民事诉讼法学练习题及答案20
- 推荐 地税局办税服务厅绩效管理试点工作总结范文
- 高考语文大一轮复习文学类文本阅读把握小说的情节(二)学案
- 2019年工商局公务员工作总结范文
- 福田戴姆勒行销系统使用说明书(新编) - 图文
- 2016年5月21日事业单位联考综合应用能力真题与答案B类
- 精选最新版2020公文写作与处理完整题库300题(含标准答案)