《c语言课后习题代码 .docx》由会员分享,可在线阅读,更多相关《c语言课后习题代码 .docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结第四章1. 编程实现:输入一个字母,假设为小写,就把它变成大写输出。代码如下:#include mainchar c;printf Please input a character:; scanf %c ,&c;ifc= a&c= zprintf The result is :%cn ,c-32;2. 由键盘输入 3 个数 a、b、c,编程输出其中最小的数。代码如下:#include maininta,b,c,t;printf Please input three numbers:; scanf %d%d%d ,&a,&b,&c;ifabt=a; a=b; b=t;ifact=
2、a; a=c; c=t;printf The minimum is :%dn,a;3. 由键盘输入三个数 a、b、c,用条件运算符求出最大值和最小值。代码如下:#include maininta,b,c,min,max;printf Please input three numbers:; scanf %d%d%d ,&a,&b,&c;可编辑资料 - - - 欢迎下载精品名师归纳总结max=min=a; /初始化最大值与最小值为 a/求出最大值max=maxb . max:b; max=maxc . max:c;/求出最小值min=minb . b:min; min=minc . c:min;
3、printf The maximum is :%d,the minimum is :%dn,max,min;4. 编 写 程 序 , 实 现 功 能 : 从 键 盘 上 输 入 1 , 2 , 3 , 4 , 分 别 显 示excellent ,good,pass,fail。代码如下:#include mainint a;printf Please input a number:; scanf %d ,&a;switch acase 1:printf Excellentn ; break ;case 2:printf Goodn ; break ;case 3:printf Passn ; b
4、reak ;case 4:printf Failn ; break ;default :printf You input a wrong number.n;5. 试编程判定输入的正整数是否既是 5又是7的整数倍。假设是,就输出 yes。 就输出 no。代码如下: #include main可编辑资料 - - - 欢迎下载精品名师归纳总结int a;printf Please input a number:; scanf %d ,&a; ifa%5=0&a%7=0printf Yesn ;else printf Non ;6. 编写程序,要求:输入一个正整数,判定其能否被3、5整除,并输出一下信
5、息之一。(1) 能被3、5整除。(2) 能被3整除。(3) 能被5整除。(4) 不能被 3、5整除。代码如下:#include mainint a;printf Input a number: ; scanf %d ,&a; ifa%3=0ifa%5=0printf 能被3、5整除n; else printf 能被3整除n ;可编辑资料 - - - 欢迎下载精品名师归纳总结elseifa%5=0 printf 能被5整除n ; else printf 不能被 3、5整除n ;可编辑资料 - - - 欢迎下载精品名师归纳总结7. 对于给定的一百分制成果, 要求输出相应的五分制成果, 即90 分及
6、以上为 A, 8089 分为B,7079 分为C, 6069 分为D,60 分以下为 E。代码如下:#include mainfloat a;printf Please input score: ; scanf %f ,&a;ifa60 printf The class is :En ; elseifa70 printf The class is :Dn ;elseifa80 printf The class is : Cn ;可编辑资料 - - - 欢迎下载精品名师归纳总结elseifa90 printf The class is : Bn ; elseifa=100 printf The
7、class is : An ; else printf Error.n ;可编辑资料 - - - 欢迎下载精品名师归纳总结第五章1.编一个程序,求 1100 全部偶数和。代码如下:#include maininti, sum=0; /考虑到时空效率, 此处可用 short ,节省空间 ,sum 记录偶数 /和, 变量参加累加,必需赋初值fori=1;i=100;i+ ifi%2=0 sum+=i;printf The sum is :%dn ,sum;2.编一个程序,求 s=1.+2.+3.+10.的值。代码如下:#include maininti,j,sum=0,t; fori=1;i=10
8、;i+forj=1,t=1;j=i;j+ t*=j;sum+=t;printf s=1.+2.+3.+-+10.=%dn ,sum;3.运算1-3+5-7+9+ -99+ 101 。代码如下: #include mainint i,s=1,sum=0; fori=1;i=101;i+=2可编辑资料 - - - 欢迎下载精品名师归纳总结sum+=s*i; s*=-1;printf 1-3+5- 7+9 -99+101 = %dn ,sum;4. 编程求 1000 以内包括 1000 能被 5同时又能被 11 整除的数的和。代码如下:#include mainint i,sum=0; fori=1
9、;i=1000;i+ifi%5=0&i%11=0 sum+=i;printf %dn ,sum;5. 编程打印出全部的“水仙花数”。所谓“水仙花数”是指一个三位数,其中各位数字的立方和等于该数本身。例如:153=1*1*1+5*5*5+3*3*3。代码如下: #include mainint a,b,c,i; fori=100;i1000;i+a=i%10; b=i/10%10;c=i/100; ifi=a*a*a+b*b*b+c*c*cprintf %d ,i;printf n ;6.有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13求出这个数列的前 20 项和。代码如下:
10、#include mainint i;float a=2,b=1,t,sum=0; /a为分子, b为分母fori=0;i20;i+可编辑资料 - - - 欢迎下载精品名师归纳总结sum+=a/b; t=a;a+=b; b=t;printf The sum is :%fn ,sum;7.有一个球从 10m 高度落下并反弹,且每次反弹的高度为下落高度的一半。问第4次落的时共经过多少米?第 4次反弹的高度是多少 .代码如下: #include mainfloat h1=10,sum=0; int i; fori=0;i4;i+ifi=0 sum+=h1; else sum+=2*h1; h1/=2
11、;printf 第4次落的时共经过 :%.3f 米,第4次反弹的高度为 :%.3f米n,sum,h1;第六章1. 求二维数组中全部元素的和。假定二维数组为a23=1,2,3,4,5,6代码如下: #include mainint a23=1,2,3,4,5,6,i,j,sum=0;fori=0;i2;i+ forj=0;j3;j+sum+=aij;printf The sum is :%dn ,sum;2. 有三个字符串,要求依据字母的次序输出。假定为:America,China,India;代码如下:可编辑资料 - - - 欢迎下载精品名师归纳总结#include mainchar a=Ch
12、ina ,b= America ,c= India , t=0; int i,j;if strcmpa,b0strcpyt,a;strcpya,b;strcpyb,t;if strcmpa,c0strcpyt,a;strcpya,c;strcpyc,t;if strcmpb,c0strcpyt,b;strcpyb,c;strcpyc,t; putsa;putsb;putsc;3. 求一个 3*4矩阵的全部靠外侧的元素值之和。矩阵如下:123456789101112代码如下: #include mainint a43,i,j,m=1,sum=0; fori=0;i4;i+forj=0;j3;j+
13、,m+ aij=m;fori=0;i4;i+ forj=0;j3;j+ifi=0|i=3sum+=aij;可编辑资料 - - - 欢迎下载精品名师归纳总结elseifj=0|j=2sum+=aij;可编辑资料 - - - 欢迎下载精品名师归纳总结printf The sum is: %dn ,sum;4. 将一个数组中的值按逆序重新存放,例如原先的次序为:8,6,5,4,1 。要求改为: 1,4,5,6,8 。代码如下: #include int main可编辑资料 - - - 欢迎下载精品名师归纳总结int a = 8, 6, 5, 4, 1 , i, j, t;for i = 0;i=2;
14、 i+t = ai;ai = a4 - i; a4 - i = t;for i = 0; i 5; i+ printf %d, ai;printf n ;5. 已有一个排序好的数组,输入一个数,要求按原先的次序将它插入数组中。假定排序好的数组为: a=1 ,8,11,14,16,17,21代码如下: #include int mainint a = 1, 8, 11, 14, 16, 17, 21 , i, j, t, b8;printf Please input a number:; scanf %d , &t;for i = 0; i tj = i; break ;for i = 0; i
15、 8; i+if ij bi = ai;else if i = j bi = t; else bi = ai - 1;for i = 0; i 8; i+ printf %d, bi;printf n ;6. 求一维数组各元素的平均值。假定数组为:a=1,2,3,4,5,6代码如下: #include main可编辑资料 - - - 欢迎下载精品名师归纳总结int a6,i,sum=0; fori=0;i6;i+ai=i+1; fori=0;i6;i+sum+=ai;printf The sum is :%dn ,sum;#include int mainchar a = China , b
16、= stronger. ; char c sizeof a+ sizeof b;int i, j;for i = 0; ai .= 0; i+ci = ai;for j = 0; bj .= 0; j+ci + j = bj; ci + j = 0;printf 连接后的字符串为: %sn , c;1.第七章编写一个函数,使输入的一个字符串反序存放,在主函数中输入和输出字符串。代码如下:#include #include void sort char; int mainchar a101;printf 请输入一个字符串 100 个字符以内: ; scanf %s , a;sorta;print
17、f %sn , a;/参看函数原型声明,参数为字符数组,为传址调用,故对形参的操作会转变实参void sort char str7. 编写一个程序,将两个字符串连接起来,不要用strcat 函数。代码如下:可编辑资料 - - - 欢迎下载精品名师归纳总结char t;int i, j = strlen str;/j猎取串长for i = 0; i = j-1 / 2; i+/实现倒序交换t = stri;stri = strj-i-1;strj-i-1 = t;strj = 0; /在字符串末尾加上终止符2. 已有变量定义和函数调用语句 “ intx=57 。isprime x。 ”函数 is
18、prime 用来判定一个整数 x 是否为素数,假设是素数,函数返回 1,否就返回 0。请编写 isprime 函数。函数代码如下:int isprime int aint i, s = 1;for i = 2; i a; i+if a%i = 0s = 0;break ;return s;3. 已有变量定义和函数调用语句 ” inat =1,b=5;c=funa,b,”fun 函数的作用是运算两个数之差的确定值, 并将差值返回调用函数, 请编写 fun函数。函数代码如下:int fun int a, int bint s;if a bs = b - a; else s = a - b; ret
19、urn s;4. 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出统计结果。代码如下:可编辑资料 - - - 欢迎下载精品名师归纳总结#include void fun char str int i,num,ch,sp,other;num = ch = sp = other = 0; for i = 0; str i .= 0; i+if stri = a& stri = A& stri = 0& stri = 9num+;else if str i = sp+;else other+;printf 字母个数: %d, 数字个数
20、:%d, 空格个数 :%d, 其他字符 :%dn , ch, num, sp, other;int mainchar a11; getsa;funa;5. 输入一个只含数字字符的字符串,编写一函数,要求输出这个字符串,但每个数字字符之间空一个空格, 例如,输入:“123456”,应输出:“1 2 3 4 5 6。 ”代码如下:#include void print char strint i;for i = 0; str i .= 0; i+if stri+1=0printf %c, stri;else printf %c , stri;printf n ;int mainchar a11=
21、123456 ;printa;可编辑资料 - - - 欢迎下载精品名师归纳总结6. 编写函数,把一个字符串连接到另一个字符串的后面, 形成一个新的字符串。代码如下:#include #include void contact char a, char bint i, j; char c20;for i = 0; ai .= 0; i+ci = ai;for j = 0; bj .= 0; j+cj + i = bj; ci + j = 0;printf %sn , c;int mainchar a = China , b = stronger. ; contacta, b;7.用递归法求 1+
22、2+3+4+ n。代码如下:#include int sum int aint s;if a 0s =a+suma-1; else s=0;return s;int mainint n;scanf 输入一个整数 :%d, &n;printf %dn , sumn;第八章可编辑资料 - - - 欢迎下载精品名师归纳总结1. 输入 2 个整数,求它们相除的余数,用带参的宏实现。代码如下:#include #define mi,j i%j int mainint i,j;printf 请输入两个整数 :;scanf %d%d , &i,&j;printf %dn , mi,j;2. 给年份定义一个宏
23、,以判定该年份是否为闰年。代码如下:#include #define FLAG i i%400=0|i%4=0&i%100=0int mainint i,j;printf 请输入一个年份 :;scanf %d , &i;if FLAG i printf 该年是闰年。 n ; else printf 该年不是闰年。 n ;第九章1. 编写一个函数对输入的10 个字符按由小到大排序,用指针作参数。#include char * sort char *;/形参为指针,传址调用,返回值类型可设为空int mainchar a11,*b; int m;for m = 0; m 10; m+ scanf
24、%c , &am;b=sorta;for m = 0; m 10; m+ printf %c, bm;char * sort char * chint i, j;可编辑资料 - - - 欢迎下载精品名师归纳总结char t;for i = 0; i 10; i+for j = i; j chjt = ch i; chi = ch j; chj = t;return ch;2. 用指向指针的方法对 6个字符串排序输出。 要求将排序单独编写成一个函数。数据在主函数中输入,最终在主函数中输出排序结果。代码如下: #include #include char *sort char *; int mai
25、nchar *a6,str6101; int i;printf 请输入 6个字符串 100 字符以内 :;for i = 0; i 6; i+scanf %s , stri; ai = stri;sorta;for i = 0; i 6; i+ printf %sn , ai;char *sort char *sint i,j;char *temp;for i = 0; i 6; i+for j = i; j 0temp = sj; sj = si; si = temp;return *s;3. 输入5行文字, 每行不超过 40 个字符。统计各行大写字母、 小写字母、 空格、数字以及其他字符各
26、有多少,用二维字符数组指针实现。代码如下:#include int *kind char *,int *; int mainchar *str5, s541; int i;int result3;printf 请输入 5行字符串 40 字符以内 : ; for i = 0; i 5; i+scanf %s , si; stri = si;kindstr, result;printf 数字个数为 :%d, 小写字母个数为 :%d, 大写字母个数为 :%d.n , result0, result1, result2;int *kind char *s,int * result int digit
27、= 0, ch1 = 0, ch2 = 0, space = 0, i, j; for i = 0; i = a& sij = A&sij = 0&sij = 9 digit+;可编辑资料 - - - 欢迎下载精品名师归纳总结else space+;result 0 = digit; result 1 = ch1; result 2 = ch2; return result ;4. 用指针编写求字符串长度的函数。函数代码如下:int slength char* sint i, j = 0;for i = 0; si .= 0; i+ j+;return j;5. 编写函数,对传送过来的 3个数
28、选出最大数和最小数,并通过形参返回调用函数。函数代码如下: #include int mainvoid compare int, int, int, int &, int &; int a, b, c, max, min;scanf %d%d%d , &a, &b, &c; max = min = a;comparea, b, c, max, min;printf 最大值:%d, 最小值:%d.n , max, min;void compare int a, int b, int c, int & x, int & yx = x c . x b . x : b : c;y = y c . y
29、b . y : b : c;6. 编写程序,将字符串中的第 m个字符开头的全部字符复制成另一个字符串。要求在主函数中输入字符串及 m的值并输出复制结果,在被调用函数中完成复制。代码如下: #include int main可编辑资料 - - - 欢迎下载精品名师归纳总结char* copy char *, int; char s101;char* r; int m;printf 请输入字符串 :;scanf %s , &s;printf 请输入复制的起始位置 : ; scanf %d , &m;r=copys, m;printf 复制后的函数为 :%s, r;char * copy char
30、* str , int siteint i; char *p;p = & strsite - 1; return p;第十章1. 定义一个结构体类型,成员包括职工号、性别、年龄、工资和的址。定义结构体指针和数组,数组含 4 个元素,用初始化方式赋值并输出。代码如下: #include int mainstruct workerchar number5; /职工号char name20;char sex; int age,pay;char address100;struct worker*p,workers4 = 0001 , Zhousan , M , 23, 1300, Nanchang J
31、iangxi, 0002 , Lisi , F, 25, 1300, Poyang Jiangxi province, 0003 , Wangwu , F, 22, 1400, Xinyu Jiangxi, 0004 , Maliu , M , 21, 1100, Ganzhou Jiangxi;int i;可编辑资料 - - - 欢迎下载精品名师归纳总结p = workers;printf NumbertNametSextAgetPaytAdresstn; for i = 0; i 4; i+printf %st%st%ct%dt%dt%sn, pi.number, pi.name, pi.
32、sex, pi.age, pi.pay, pi.address;2. 储备一个班同学,然后输入一个同学的,查找该人是否为该班的同学。代码如下:#include #include int mainstruct studentchar name20;struct student *p, stu5 = Zhou chang , Zhang long , Zhao qing , Hu wei , Liu jian ;char n20= Zhao qing ;int i;p = stu;printf 请输入以查找 :; getsn;for i = 0; i name, n = 0printf 是该班级同
33、学。 n; break ;else if i = 4printf 不是该班级同学。 n ;3. 读入班级同学人数, 每名同学学号和 4 门功课成果, 运算全班每名同学 4 门功课的平均成果。代码如下: #include #include #define len sizeof struct student int main可编辑资料 - - - 欢迎下载精品名师归纳总结typedef struct studentchar name20;char number10; /学号float score4;float aver;struct student * next; /使用链表,假设不使用链表,可使
34、用动态数组stus;/置空指针stus* stu = NULL ; stus* p = NULL ; stus* head = NULL ; unsigned n, i, j;float sum = 0;printf 请输入同学人数 :;scanf %d , &n;head = stus *malloc len ;/假设未正常开创内存空间,报错if head = NULL printf 内存不足! ; return 0;head-next =NULL ;/下一节点置空p = head;for i = 0; i number;printf 请输入该同学 19字符以内 : ;scanf %s ,
35、p-name;printf 请输入该同学四门功课成果 : ; for j = 0; j scorej; stu = p;stu-next = stus *malloc len ;/开创新空间给下一节点p = stu-next;p-next = NULL ;/尾部始终置空for i = 0, stu = head; i n; i+for j = 0; j scorej; stu-aver = sum / 4.0;可编辑资料 - - - 欢迎下载精品名师归纳总结sum = 0;stu = stu-next;printf 这些同学信息如下 :n ; printf 学号tttt 平均分nn ;for i = 0, stu = head; i nextprintf %stt%stt%.2fttn, stu-number, stu-name, stu-aver; printf n ;freehead; /释放内存空间4. 有 4 个同学,每个同学包括学号、 、成果。要求找出成果最高者的学号和。代码如下:#include int maintypedef struct studentchar number10; char name2
限制150内