第一篇:《C语言大作业》设计说明书大纲
《C语言大作业》设计说明书大纲
1.课程认识
可以围绕目的、性质、任务等方面写
2.课题选择
可以围绕课题 背景、意义、实用性等方面写
3.总体设计与分析
总体框架图及简要功能说明
4.模块详细设计
必须是自己承担任务的流程图+说明
5.主要实现方法
可以说明:
结构体、文件结构
函数功能
主要程序段及实现方法与技巧(严禁只粘贴长篇程序段)
6.课程设计总结
问题及解决方法
系统总体实现情况、评价
存在问题及改进思路
7.结论
课程设计心得
8.建议。
第二篇:C语言课程设计说明书
一 问题描述与分析
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开学学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计学生选修课程系统,使之能提供以下功能:
1.课程信息录入功能(课程信息用文件保存)2.课程信息浏览功能 3.排序:按总学时排序
4.查询功能:按开学学期查询 5.课程修改,删除(可选项)
二 总体设计
根据题目要求,定义结构体类型如下: struct subjects { char no[10];char name[20];char kind[20];int stime;
/*总学时*/ int ttime;
/*授课学时*/ int etime;
/*实验或上机学时*/ float score;int term;}sub[N];
三 详细设计
1)存储结构的选择
在这个程序中,我们选择用结构体数组来存储课程,即顺序存储结构 Struct subjects sub[N] 2)系统初始化
这个模块的主要功能是得到初始的课程。为了实现“一次输入,多次使用”,我们用文件来保存课程。第一次运行本程序需从键盘输入所有课程并保存到文件中,以后运行就可以从文件中读取数据,直接使用了。这样既可以减少输入的麻烦,更重要的是使本程序可以连续运行,每次运行都可以使用上一次保存的结果。void newfile(){ int i;FILE *fp;if((fp=fopen(“sub.dat”,“wb”))==NULL){
printf(“文件建立失败!请重新运行程序。n”);
exit(0);
} } printf(“请输入课程门数”);scanf(“%d”,&num);for(i=0;i 3)课程浏览功能 按课程编号进行浏览 void read1(){ FILE *fp;num=0;fp=fopen(“sub.dat”,“r”);if(fp==NULL){ printf(“文件打开失败!请重新运行程序。n”); exit(0);} while(!feof(fp)){ fread(&sub[num],1,sizeof(struct subjects),fp); num++;} num--;fclose(fp);printf(“现在共有%d门课程,初始数据为:n”,num);output();} 3 4)排序 按总学时排序:使用改进的起泡法排序。void sortstime(){ int i,j,flag;struct subjects temp;for(i=0;i flag=0; for(j=0;j if(sub[j].stime { temp=sub[j]; sub[j]=sub[j+1]; sub[j+1]=temp; flag=1; } if(flag==0) break;}printf(“排序后的课程为:n”);output();} 4 5)查找(总学时) 按开学学期查询,查找用顺序查找法。void find(){ int i,cterm;printf(“请输入要查找课程的开学学期:n”);getchar();scanf(“%d”,&cterm);i=findterm(cterm);if(i==-1) printf(“要查找的学期不存在:n”);else { printf(“查找到的课程信息为:n”); printf(“课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,总学分,开学学期:n”); printf(“===================================n”); printf(“%st%-10st%st%dt%dt%dt%.1ft%dt”,sub[i].no,sub[i].name,sub[i].kind,sub[i].stime,sub[i].ttime,sub[i].etime,sub[i].score,sub[i].term); printf(“n”);} } int findterm(int cterm[]){ } int i;for(i=0;i<=num;i++)if(cterm-sub[i].term==0) return i;return-1; 6)参考文献 C语言指导书。7)心得体会 通过对课程精心设计,我从中获得了不少东西: 1.我知道一些自己不太熟悉的知识,比如文件系统中的好多知识; 2.从中懂得了合作的重要性,这是以前没注意的; 3.也锻炼了自己的思维能力,可以把一整块东西分成若干个小块来处理; 4.在锻炼的同时,自己得到了一种满足感。 Problem B: 算术基本运算 Description 计算两整数x和y(0 printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y); return 0;} Problem C: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。Input 输入一个浮点型数据,有效数字不会超过十进制的6位。Output 输出为两行。 第一行为圆的面积,第二行为圆的周长,格式见sample。Sample Input Sample Output Area: 28.260000 Perimeter: 18.840000 HINT 了解浮点类型的输入、输出和算术运算符 #include double Area,Perimeter,r,p=3.14; scanf(”%lf“,&r); Area=p*r*r,Perimeter=2*p*r; printf(”Area: %lfn“,Area); printf(”Perimeter: %lfn“,Perimeter); return 0;} Problem D:平均值 Description 求3个数的平均值。Input 输入只有一行,为3个较小的整数。Output 输出为这3个整数的平均值,保留3位小数。Sample Input 1 2 3 Sample Output 2.000 HINT 注意除法运算对整型数据和浮点型数据是不一样的。#include int x,y,z; float ave; scanf(”%d %d %d“,&x,&y,&z); ave=(x+y+z)/3.0; printf(”%.3f“,ave); return 0;} Problem E: 货币兑换 Description 给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额,求给定金额的外币能兑换成人民币的金额。要计算的外币有三种:美元、欧元、日元。Input 输入有三行。 第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100外币为单位,精确到小数点后4位,如668.5200表示“100美元=668.5200人民币”。汇率浮动范围为(0,10000)。 第二行为外币金额x,第三行为人民币金额y。x,y均为整数,且0 第一行为金额为x的美元、欧元、日元兑换成人民币的金额,用空格分开。第二行为金额为y的人民币兑换成美元、欧元、日元的金额,用空格分开。所有金额精确到小数点后两位。Sample Input 668.5200 908.0685 7.9852 1500 1500 Sample Output 10027.80 13621.03 119.78 224.38 165.19 18784.75 HINT 了解浮点数据类型的精确度和输出控制。 #include return 0; } Problem F: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。Input 输入为3个字符。Output 输出为3行。 每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。Sample Input 0 A Sample Output 048 060 030 032 040 020 065 101 041 HINT 了解字符值的存储和整型的关系。#include Problem G: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。Input 输入只有一行,为一个100以内的正整数。Output 输出为一行。 若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30 Sample Output even HINT 用整数运算可以解决,练习“?:”表达式。#include int x; scanf(”%d“,&x); if(x%2==0) printf(”even“); else printf(”odd“); return 0;} Problem H: 绝对值 Description 求整型数据和浮点型数据的绝对值。Input 输入两个数,第一个是整数,第二个是浮点数。Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。Sample Input-1 1 Sample Output 1 1 HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人!#include int x; float y; scanf(”%d“,&x); scanf(”%f“,&y); printf(”%dn“,abs(x)); printf(”%gn“,fabs(y)); return 0;} Problem I: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。Input 输入只有一行,三个整数m、n和x,且0 300 4 Sample Output 334.40 HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。#include int m,n,x; double y; scanf(”%d%d%d“,&m,&n,&x); y=m*x; if(y>n) y=y*0.88; else y=y; printf(”%.2lfn“,y); return 0;} Description 输入一个正整数的年份,判断是否为闰年。Input 输入只有一行,为一个10000以内的正整数。Output 输出为一行。 若输入为闰年偶数则输出“Yes”,否则输出“No”。Sample Input 2010 Sample Output No HINT 了解逻辑运算符和关系运算符。#include int a; scanf(”%d“,&a); if(a%4==0&&a%100!=0||a%400==0) printf(”Yes“); else printf(”No“); return 0;} Problem K: GHacker的解谜过关游戏 Description GHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。但是GHacker的数学实在糟糕。他无法在短暂的时间内算出来,只好求助Jackie。Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。Input 输入为串S,只有一行。Output 串S中用非数字(0~9)分隔开的非负整数之和,不会超出int类型的数据范围。Sample Input `13?:[7514],54.487==”(438922x159??392)%032n111cdef120$95;Sample Output 447899 HINT scanf()可以解决这个问题,注意转义字符和格式控制字符。#include int i,sum,num; char str[1000]; while(scanf(“%s”,str)!=EOF) { num=sum=0; for(i=0;;i++) { if(str[i]>='0' && str[i]<='9') num=num*10+str[i]-'0'; else { sum=sum+num;num=0; if(str[i]==' ')break; } } printf(“%dn”,sum); } return 0;} Problem L: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。Input 一个整数x,100<=x<=999。Output x是水仙花数,则输出“YES”,否则为“NO”。Sample Input 153 Sample Output YES #include int x,a,b,c,sum; scanf(“%d”,&x); a=x/100; b=(x-a*100)/10; c=(x-a*100-b*10); sum=a*a*a+b*b*b+c*c*c; if(x==sum) printf(“YES”); else printf(“NO”); return 0;} Problem M: 求1+2+...+n=? Description 给定一个n,求出s = 1+2+3+...+n的值。Input 输入只有一行,包含一个正整数n(n<=232)。Output 输出一行,为1+2+...+n的值。Sample Input 10 Sample Output 55 HINT n的数据范围大,需注意数据类型的选择和计算次序,以避免数据溢出。#include unsigned long long n,s,a; scanf(“%llu”,&n); a=n%2; if(a==0){ s=n/2*(n+1); printf(“%llu”,s);} else if(a!=0) {s=n*((n+1)/2);printf(“%llu”,s);} return 0;} Problem N: 2的多少次幂 Description 从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。Input 一个非负有理数x,x在[0,2256]范围内。Output 一个整数y。Sample Input 1 Sample Output 0 HINT 看起来数据很大,但是用double完全可以存储。为什么?请研究下IEEE-754标准的浮点数存储格式。这里要用到C语言标准库的数学函数。#include double x; scanf(“%lf”,&x); printf(“%g”,log2(x)); return 0;} Problem A: 哪一行比较长 Description 读取两行字符串,按每行的长度从长到短输出。Input 输入为两行,每行不会超过26个字符。Output 输出为两行,按每行的长度从长到短输出。Sample Input abcdefghijk abcdefghijklmnopqrstuvwxyz Sample Output abcdefghijklmnopqrstuvwxyz abcdefghijk HINT 了解字符串的存储和操作,了解gets()和scanf(“%s”)读入字符串的不同之处。#include puts(a); puts(b); return 0; } puts(b);puts(a);} Problem B: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 Input 输入只有一行,为三个整数。 Output 按从小到大输出这三个数。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if语句判断各种情况可以解决这个问题。 include scanf(“%d%d%d”,&a,&b,&c);if(a>b){ t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c){ t=b; b=c; c=t;} printf(“%d %d %dn”,a,b,c);return 0;} Problem C: 输出是m的倍数或n的倍数、但不是m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n Input 输入三个整数,依次为k、m、n。 Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。 #include { int k,m,n,a; scanf(“%d%d%d”,&k,&m,&n); { if(m>n) { printf(“%d”,n); for(a=n+1;a<=k;a++) { if((a%m==0&&a%n!=0)||(a%m!=0&&a%n==0)) printf(“ %d”,a);} } else { printf(“%d”,m); for(a=m+1;a<=k;a++) { if((a%m==0&&a%n!=0)||(a%m!=0&&a%n==0)) printf(“ %d”,a);} } } return 0;} Problem D: A+B Problem Description 计算a+b,0<=a,b<1000。Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。Output 每行输出一个a+b的值,顺序与输入对应。Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。#include int a,b; while(scanf(“%d %dn”,&a,&b)!=EOF) printf(“%dn”,a+b);} Problem E: A+B Problem(II): Input/Output Pratice Description 计算a+b,0<=a,b<1000。 Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的和,顺序与输入对应。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N给出了测试样例数,用for循环处理方便。 #include scanf(“%d %d”,&a,&b); printf(“%dn”,a+b);} return 0;} Problem F: A+B Problem(III): Input/Output Pratice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 练习break的使用。 #include int a,b; while(scanf(“%d%d”,&a,&b)) { if(a==0&&b==0) break; printf(“%dn”,a+b); } } Problem G: A+B Problem(IV): Input/Output Pratice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。 Sample Input 1 2 10 20 35 Sample Output 3 30 50 HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。#include int a,b,i; scanf(“%d %d”,&a,&b); printf(“%dn”,a+b); while(scanf(“%d %d”,&a,&b)!=EOF) printf(“n%dn”,a+b);} Problem H: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。 Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。 输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。 Output 输出为两行,格式见sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(“%d”)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。 #include scanf(“%d”,&y); if(min>y) min=y; if(max max=y;} printf(“The maximum number is %d.n”,max);printf(“The minimum number is %d.n”,min);return 0;} Problem I: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之间的输入是非法数据,输出“Error”。 Input 输入多行,每行一个整数。 Output 输入所对应的成绩等级。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。 #include int a,grade; while(scanf(“%d”,&grade)!=EOF) { if(grade>=0 && grade<=59) a=1; else if(grade>=60 && grade<=69) a=2; else if(grade>=70 && grade<=79) a=3; else if(grade>=80 && grade<=89) a=4; else if(grade>=90 && grade<=100) a=5; else a=6; switch(a) { case 1: printf(“Failingn”); break; case 2: printf(“Passn”); break; case 3: printf(“Averagen”); break; case 4: printf(“Goodn”); break; case 5: printf(“Excellentn”); break; case 6: printf(“Errorn”); break; } } return 0;} Problem J: 只有一个二元运算符的表达式运算 Description 编程序读入并计算只有一个二元运算符的表达式的值。用到的二元运算符有:“+”、“-”、“*”、“/”、“%”,与C语言的语法一致。 Input 每行输入一个表达式,格式为:二个整型的操作数a和b,中间用一个符号分开,这个符号就是运算符。测试样例不存在除数为0的情况。 输入以a和b为0,且用一个空格分开结束。 Output 每行对应输入的运算符为“+”、“-”、“*”、“/”、“%”,则计算a+b、a-b、a*b、a/b、a%b的值;否则输出“invalid op”。 Sample Input 33+5 8*9 2.2 1-6 17/3 9%3 0 0 Sample Output 38 72 invalid op-5 5 0 HINT 教材上有非常相似的例题可以参考。 #include int a, b; char ch; while(scanf(“%d%c%d”, &a, &ch, &b)) { if(a == 0 && b == 0 && ch == ' ')break; if (ch == '+')ch = '+'; else if(ch == '-')ch = '-'; else if(ch == '*')ch = '*'; else if(ch == '/')ch = '/'; else if(ch == '%')ch = '%'; else ch = '~'; switch(ch) { case '+' : printf(“%dn”, a + b); break; case '-' : printf(“%dn”, a2x + 1 = 0 only one real root : 1 Case 3 : 5x^22x = 0 two real roots : 0, 0.666667 Case 5 : 3x^2 + 12 = 0 two imaginary roots : 2i,-2i Case 6 : 2x^2 + 4x + 4 = 0 two imaginary roots :-1+i,-1-i HINT 输出方程格式的各种情况要想清楚,这一部分测试数据给的很全面。另一个就是浮点数的精度控制,这一部分sample给出了例子。 值得注意的是,linux下gcc编译的浮点数运算结果有-0,这是OJ系统Judge端使用的系统;而windows XP下的minGW编译器和VC6不会产生-0,只会输出0;但windows 7下的minGW编译器是能够产生-0的(确实很诡异)。因此使用windows XP的同学忽略了对结果为0的检测,程序需要对结果为0的情况进行全面考虑,确保正确的输出0。这个问题卡了好些同学好几天。 关于是否会产生-0,输出表达式0.0/-1的结果就能测试出来。浮点数从负数方向运算出结果为0,则浮点值为-0是符合C语言浮点数运算规则的,目前尚不清楚windows XP系统不能产生-0的原因。 #include int i,n=1; double a,b,c,x1,x2,p,q,m,t; char x,y; while(1) { scanf(“%lf”,&a); if(fabs(a)< eps) break; //结束条件 scanf(“%lf%lf”,&b,&c); p=(-b)/(2*a); q=b*b-4*a*c; if(fabs(q)< eps) //精度控制 q = 0; m=(sqrt(-q))/(2*a); x1 =(-b + sqrt(q))/(2*a); x2 =(-bxx-y; if(a * x + b * y +(c * 1.0)/(d * 1.0)* z == m) printf(“%ld,%ld,%ldn”,x,y,z); } } printf(“n”); } } return 0;} Problem I: 神棍的纯真愿望 Description 问题背景: 神棍队的神棍童鞋很喜欢和女盆友逛街。神棍节这天,他们照例去逛街,亲昵过程中忽然发现路边上围了好一圈人。好奇心大盛的神棍于是凑过去围观。原来那里有一个棍神,他出了一道题目,如果有人能够答对的话,他就会实现那个人的一个愿望。神棍心想,有个女盆友多么幸福,要是大家都有女盆友该有多好。于是神棍想要答出这个问题,然后许一个让大家都可以很快拥有自己的女盆友的愿望,顺便在女盆友的面前臭美一番。神棍扫了一眼题目,拿出贴身小电脑,巴拉巴拉几下就敲出了代码,解决了那个问题。大家都在为神棍欢呼。这是什么问题 呢?你是否也有兴趣看看?如果AC了的话就可以跟魔法少女签订契约,成为魔法少女的奴隶喔! 问题描述: 某个数的立方如果以111结尾的话,我们就称其为“神棍数”,现在要你求第k大的“神棍数”是多少。 Input 多组case,以EOF结尾。 每个case一行,只包含一个整数k(1<=k<=***0000)。 Output 一个整数表示第k大的“神棍数” Sample Input 1 Sample Output 471 #include unsigned long long k; while(scanf(“%llu”,&k)!=EOF) { if(k>1) printf(“%llu471n”,k-1); else printf(“471n”,k); } return 0;} Problem J: 魔方阵 Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等。如三阶魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的规律如下: 从1~N*N的 各个数依次如下规则存放: (1)1在第一行中间一列; (2)每一个数存放的行比前一个数的行数减一,列数加一(如上的三阶方阵5在4的上一行,后一列); (3)如果上一个数在第一行,则下一个数在最后一行,列数加一; (4)如果上一个数在最后一列,则下一个数在第一列,行数减一; (5)如果按上述规则确定的位置已经有数,或上一个数在第一行第N列,则下一个数放在上一个数的正下方。 Input 输入包含多组数据,每组为一个小于100的正奇数。 Output 对于每个输入的N,输出N阶魔方阵;两组数据之间用一个空行分隔。方阵中每行每两个数之间有一个空格,行首和行末没有多余的空格。 Sample Input 3 Sample Output 8 1 6 3 5 7 4 9 2 HINT #include int i, j, k, n, a[200][200]; while(scanf(“%d”, &n)!=EOF) { for(i = 1;i <= n;i++) for(j = 1;j <= n;j++) a[i][j] = 0; j = n / 2 + 1; a[1][j] = 1; for(k = 2;k <= n * n;k++) { i=i-1; j=j+1; if(i < 1 && j > n) { i=i+2; j=j-1; } else { if(i < 1)i = n; if(j > n)j = 1; } if(a[i][j] == 0)a[i][j] = k; else { j=j-1; i=i+2; a[i][j] = k; } } for(i = 1;i <= n;i++) { printf(“%d”, a[i][1]); for(j = 2;j <= n;j++) printf(“ %d”, a[i][j]); printf(“n”); //for(j=1;j<=n;j++) //printf(“%5d”,a[i][j]); //printf(“n”); } printf(“n”); } return 0;} 第一章 使用printf()函数按下面的形式显示某应用程序的功能 #include 编写一个C程序,能够从键盘输入一个浮点数,然后输出它的倒数。#include 第二章 将华氏温度转换为摄氏温度。使用公式:C=5/9(F-32.#include 输入两个角度值分别赋给变量x和y,计算下面算式的结果,#include void main(){ int x,y,z,s1,s2;printf(“请输入两个角度值n”);scanf(“%f%f”,&x,&y);x=x*PI/180.0;y=y*PI/180.0;s1=sin(fabs(x)+fabs(y));s2=sqrt(cos(fabs(x)+fabs(y)));z=s1/s2;} printf(“所的结果为%f/n”,z); 贷款额的计算,即计算一次可向银行贷款多少元,其计算公式为 D=a(In-1)/[(I-1)In-] 式中:D为一次可向银行的贷款额,a为每年可以还贷的金额,I=1+人(r为年利率),n为还清贷款的年数。a、r、n由键盘输入。#include 第三章 将China译成Glmre。方法是:用原来字母后面的第4个字母代替原来的字母。#include 把十进制数97转化为八进制、十六进制数。#include 设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。#include 已知三角形的三边长,求三角形面积。#include } p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf(“此三角形的面积是%f”,s); 输入三个字母m,a,n,并以”man”m a n(竖行排列)的形式输出 #include 输入一个字符,找出他的前一个字符和后一个字符,并根据ASCII值,按从大到小的顺序输出这三个字符级ASCII码值。#include printf(”%d,%d,%d“,c1,c2,c3);} 已知鸡免总头数为h(30),总脚数为f(90),求鸡免各有几只 #include }printf(”请输入总头数和总脚数n“);scanf(”%d,%d“,&h,&f);a=(4*h-f)/2;b=h-a;printf(”鸡有%d只,兔有%d只“,a,b); 输入一个三位正整数,反向输出对应的数 #include }printf(”请输入一个三位整数:n“);scanf(”%d“,&i);j=i/100;k=(i-j*100)/10;l=i-j*100-k*10;m=l*100+k*10+j;printf(”此数的倒置数为:%dn“,m); 计算方程ax2+bx+c=0的根 #include p=sqrt(b*b-4*a*c);x1=(-b+p)/(2*a); x2=(-b-p)/(2*a);printf(”x1=%f,x2=%fn“,x1,x2);} 用putchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出 #include 第四章 输入三个整数x,y,z,请把这三个数由小到大输出,#include 当月收入超过1600元时,超过部分交税款20%。试编写一程序计算税款(其中月收入由键盘输入。 #include }printf(”请输入月收入n“);scanf(”%f“,&a);if(a>1600)b=(a-1600)*0.2;printf(”应缴税款为%f元n“,b); 计算y=3x+6(x>=0) -x*x+2x-8(x<0) #include } printf(”请输入自变量x的值n“);scanf(”%f“,&x);if(x>=0)y=3*x+6;else y=-x*x+2*x-8;printf(”对应因变量的值为%fn“,y); 为优待顾客,商店对购货在1000元和1000元以上的,八折优惠;500元以上(包括500元,下同),1000元以下的,九折优惠;200元以上,500元以下的,九五折优惠;100元以上,200元以下的,九七折优惠;100元一下不优惠。请输入购货款后,打印出该交的货款。#include }printf(”请输入购货款n“);scanf(”%f“,&x);if(x>=1000)y=x*0.8;else if(x>=500)y=x*0.9;else if(x>=200)y=x*0.95;else if(x>=100)y=x*0.97;else y=x;printf(”应交货款为%.1f元n“,y); 输入班号,输出该班学生人数(用switch语句编程)#include }printf(”请输入班号n“);scanf(”%d“,&m);switch(m){ case 21:n=45;break;case 22:n=51;break;case 23:n=48;break;case 24:n=46;break;case 25:n=48;break;case 26:n=52;break;default:printf(”输入错误n“);} printf(”该班有%d个学生n“,n); 第五章 任意输入N个数,统计其中正数,负数和零的个数。 #include }printf(”请输入数字个数n“);scanf(”%d“,&N);for(n=1;n<=N;n++){ printf(”请输入数字n“);scanf(”%d“,&m);if(m>0) a++;else if(m<0) b++;else c++;} printf(”正数有%d个,负数有%d个,零有%d个n“,a,b,c); 第五章 任意输入N个数,统计其中正数,负数和零的个数。#include } printf(”请输入第%d个数:n“,i);scanf(”%d“,&m);if(m>0) a++;else if(m<0) b++;else c++;} printf(”正数有:%d个,负数有:%d个,零有:%d个n“,a,b,c); 求值 #include 在1~500中,找出所有能同时满足用3除余2,用5除余3,用7除余4的整数。#include if(i%3==2&&i%5==3&&i%7==4) printf(”%dn“,i);} } 任意输入一串字符,以“?”结束,分别统计其中字母,数字和其他字符的个数。#include if(d>='A'&&d<='Z'||d>='a'&&d<='z') a++; else if(d>='0'&&d<='9') b++; else c++;} printf(”字母有%d个,数字有%d个,其他字符有%d个n“,a,b,c);} 第六章 求任意20个数中的正数之和及个数。#include printf(”请输入第%d个数n“,i+1); scanf(”%f“,&a[i]); if(a[i]>0) { sum+=a[i]; k++; } } printf(”正数之和为%fn“,sum);printf(”正数的个数为%dn“,k);} 统计全班某门功课的平均成绩,找出最高,最低分。#include printf(”请输入第1个同学的成绩:n“);scanf(”%d“,&a[0]);j=k=a[0];for(i=1;i<38;i++){ printf(”请输入第%d个同学的成绩:n“,i+1);scanf(”%d“,&a[i]);while(a[i]>100||a[i]<0){ printf(”输入的成绩无效!请重新输入!n“); scanf(”%d“,&a[i]);} sum+=a[i];if(a[i]>j)j=a[i];if(a[i] } 一个数如果恰好等于他的因子之和,这个数就称为完数。找出1000以内的所有完数。#include } printf(”从2到1000的完备数有:n“);for(n=2;n<1000;n++){ sum=0;for(i=1;i 电话传递数据加密。#include } printf(”请输入一个三位数n“);scanf(”%d“,&n);a[0]=n/1000;a[1]=(n/100)%10;a[2]=(n%100)/10;a[3]=n%10;for(i=0;i<4;i++)a[i]=(a[i]+5)%10;b=a[0];a[0]=a[3];a[3]=b;b=a[1];a[1]=a[2];a[2]=b;n=1000*a[0]+100*a[1]+10*a[2]+a[3];printf(”%dn“,n); 计算两个矩阵的乘积。#include printf(”请给数组a[2][3]赋值n“);for(i=0;i<2;i++){ for(j=0;j<3;j++) scanf(”%d“,&a[i][j]);} printf(”请给数组b[3][4]赋值n“);for(i=0;i<3;i++){ for(j=0;j<4;j++) scanf(”%d“,&b[i][j]);} for(i=0;i<2;i++){ for(j=0;j<4;j++){ for(k=0,s=0;k<3&&s<3;k++,s++) c[i][j]+=a[i][k]*b[s][j];} } } for(i=0;i<2;i++){ for(j=0;j<4;j++) printf(”%d “,c[i][j]);printf(”n“);} 第七章 #include if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'||str[i]>='0'&&str[i]<='9'||i==0||str[i]!=str[i-1]) str[j++]=str[i]; str[j]=' ';} void main(){ } char str[80];gets(str);change(str);puts(str);return; #include int sum(int n){ int i,j,k,l;i=n%10;n=n/10;j=n%10;k=n/10;l=i*i*i+j*j*j+k*k*k;return l;} void main(){ int x,y;for(x=100;x<1000;x++){ y=sum(x); if(y==x) } } printf(”%dn“,x); #include int min(int m,int n){ int i,j,k;i=m;j=n;if(i>j){ k=i; i=j; j=k;} while(k!=0){ k=j%i; j=i; i=k;} k=m*n/j;return k;} void main(){ int a,b,c,d,e;int x,y,z,w; } printf(”请输入5个正整数n“);scanf(”%d,%d,%d,%d,%d“,&a,&b,&c,&d,&e);x=min(a,b);y=min(c,d);z=min(x,y);w=min(z,e);printf(”%dn“,w); #include int wanbeishu(int n){ int i,j=0;for(i=1;i void main(){ int x,y;printf(”30000以内的完备数有:n“); } for(x=1;x<=30000;x++){ y=wanbeishu(x);if(x==y)printf(”%dn“,x);} #include int yueshuhe(int n){ int i,j=0;for(i=1;i void main(){ int x,y,z;printf(”互满数有:n“);for(x=1;x<=30000;x++){ y=yueshuhe(x); z=yueshuhe(y); } } if(x==z&&x 习题八 #include printf(”请输入升序a的第%d个元素值:“,p-a+1); scanf(”%d“,p);} printf(”请输入升序数组b的元素个数:“);scanf(”%d“,&n);for(q=b;q printf(”请输入升序b的第%d个元素值:“,q-b+1); scanf(”%d“,q);} p=a;q=b;len=m; } while(p for(t=a+len-1;t>=p;t--)*(t+1)=*t; *p=*q; len++; q++; if(q==b+n)break;} p++;} while(q #include } printf(”请输入报数值:“);scanf(”%d“,&m);i=0;k=0;s=0;while(s printf(”%d “,*(p+i)); *(p+i)=0; k=0; s++;} i++;if(i==n)i=0;} printf(”n“); #include func(a,N);for(i=0;i void func(int *a,int n){ int *p,*q;int count=0;for(p=a;p if(*p==0)count++; for(p=a,q=a+n;p if(*p==0) { while((*q-1)==0)q--; if(p==q)break; *p=*(q-1);*(q-1)=0; } for(p=a,a=q;p for(q=p+1;q if(*p>*q){*p=*p+*q;*q=*p-*q;*p=*p-*q;} } #include { int a[N],*p[N],i,k,m;printf(”请任意输入%d个数组元素:n“,N);for(i=0;i printf(”第%d大元素的值:%dn“,k,*p[m]); printf(”第%d大元素的下标:“,k); for(i=0;i if(a[i]==*p[m])printf(”%d“,i); printf(”n“);} else printf(”第%d大元素不存在!n“,k);} int search(int *a[],int n,int k){ int i,j,*t;for(i=0;i for(j=i+1;j if(*a[i]<*a[j]){t=a[i];a[i]=a[j];a[j]=t;} i=1;j=0; while(i { if(*a[i-1]>*a[i])j++; if(j==k)break; i++; } if(k<=0||j else return i-1;} #include p--; *p=x%10; x=x/10;} while(x!=0);do { q--; } *q=k%10;k=k/10;}while(k!=0);while(p if(*t==*r) { t++; r++; } else break; if(r==b+10)s++; p++;} return s; 习题九 #include } printf(”请输入原始字符串: “);gets(str);for(i=0;str[i]!=' ';i++)if(str[i]>='A'&&str[i]<'Z'||str[i]>='a'&&str[i]<'z') str[i]+=1;else if(str[i]=='Z'||str[i]=='z') str[i]-=25;printf(”结果字符串为:“);puts(str); #include gets(str[i]); len=strlen(str[i]); for(j=len-1;j>=0;j--) if(str[i][j]>='a'&&str[i][j]<='z'||str[i][j]>='A'&&str[i][j]<='Z') { } word=1;l++;} else if(word){ for(k=j+1;k s[m++]=str[i][k];s[m++]=str[i][j];word=0;l=0;} else s[m++]=str[i][j];if(word)for(k=j+1;k s[m++]=str[i][k];s[m]=' ';strcpy(str[i],s);m=0;l=0;word=0;} puts(”经过处理的英文文章:n“);for(i=0;i #include } puts(”请输入字符串:“);gets(str);for(p=str;*p!=' ';p++)if(!(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'||*p>='0'&&*p<='9')) if(*p==*(p+1)) { for(q=p;*q!=' ';q++) *q=*(q+1); p--; } puts(”处理后的字符串为:“);puts(str);#include printf(”从第几个字符开始复制?“);scanf(”%d“,&n);printf(”复制到第几个字符?“);scanf(”%d“,&m);len=strlen(str1);if(len==0)printf(”字符串为空n“);else if(m>len||m<1||len||n<1)printf(”输入的字符范围应为%d~%dn“,1,strlen(str1));else { strcopy(str1,str2,m,n); printf(”复制字符串:%sn",str2);} } void strcopy(char *p,char *q,int m,int n){ char *s1=p+m-1,*s2=p+n-1;if(m while(s1<=s2) *q++=*s1++;else while(s1>=s2)*q++=*s1--; *q=' ';} 1、C语言程序常见的书写格式; 2、printf()和scanf()函数常用的方法,主要包括格式控制符; 3、常见的基本类型(现学过3种)以及表示数据的范围(大致的)。 4、熟练掌握以下几类运算符的运算规律:算术运算符、关系运算符、逻辑运算符、条件运 算符、自增自减运算符、逗号运算符、简单赋值运算符以及复合的赋值运算符。 5、C程序三种结构。 6、数组(主要是字符和一维)定义、初始化以及引用和函数的定义、以及引用。 7、常见的数组字符串处理函数(包括stccpy()和strcmp())。 8、常见的转义字符的表示及含义作用(如nrtb 等)。 9、C语言标识符规则(主要有3条)。 10、break语句和continue语句的功能和使用。 11、逻辑值“真”“假”的判定。 12、if和else配对原则。 13、数组长度与有效下标的关系。 14、熟练掌握三种结构语句的执行流程,特别是循环语句。 15、熟练掌握求最大(小)值、判断素数以及排序等基本算法和程序实现。 建议:除了上述的知识点之外,老师上课用的PPT过一遍,平时实验作业再做一遍。第三篇:C语言作业
第四篇:C语言作业
第五篇:C语言复习大纲