《C语言程序设计》编程总结汇总
院系:
专业年级:
班级名称:
学号:
姓名:
指导教师:
完成时间:
自我评价:

计算机科学与技术专业教研室
2018 年秋季学期

                   第四周编程总结

题目4-1. A乘以B (5 分)
看我没骗你吧 —— 这是一道你可以在10秒内完成的题:给定两个绝对值不超过100的整数A和B,输出A乘以B的值。
1).实验代码#include<stdio.h>
int main(){
int A , B ,C;
scanf("%d %d",&A,&B);
C = AB;
printf("%d",C);
return 0;}
2).设计思路
第一步输入变量A,B,C.
第二步定义变量A,B
第三步运算A
B
第四部对于要输出的结果进行定义
3).本题调试过程遇到的问题及解决方法
注意1.编程错误,段错误。这些错误可以通过编译器来查找。在打代码过程中我在第一题出现的错误是在scanf语句中没有打“&”符号。
注意2.格式错误。等号前后忘记打空格
注意3.答案错误。这个问题就需要自己来检查了,这个代码放到编译器中可以编译运行,但是放在pta中就无法得到正确答案。需要再次审题,看清题目的要求是,再去更改代码。

4).运行结果截图

题目4-2. 日期格式化 (5 分)
世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
1) 实验代码 #include<stdio.h>
int main(){
int m,d,y;
scanf("%d-%d-%d",&m,&d,&y);
printf("%04d-%02d-%02d" ,y,m,d);
return 0;}
2).设计思路
第一步输入变量m,d,y
第二步定义变量m,d,y
第三步转换变量,调换顺序
第四步对于要输出的结果进行定义
3).本题调试过程遇到的问题及解决方法
注意1.段错误。这个是我在打代码时漏打了主函数注意
2.部分正确。这个应该就是代码只有部分通过了测试点,在临界点上的运算不对。和同学讨论得出答案

4).运行结果截图

题目4-3. 是不是太胖了 (5 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
1) 实验代码 #include<stdio.h>
int main(){
float h ,w;
scanf("%f",&h);
w = (h-100)0.92;
printf("%.1f" ,w);
return 0;}
2).设计思路
第一步在草稿纸上写出表达式
第二步输入变量 h,w
第三步定义变量h
第四步写出运算式子
第五步对于要输出的结果进行定义
3).本题调试过程遇到的问题及解决方法
注意1,答案错误,此时要用的输入语句为float而不是int。通过编译器可以查找

4). .运行结果截图

题目4-4. 求整数均值 (10 分)
本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。
2) 实验代码 #include <stdio.h>
int main(void){
float a = 0.0, b = 0.0, c = 0.0, d = 0.0, Sum = 0.0, Average = 0.0;
scanf("%f %f %f %f", &a, &b, &c, &d);
Sum = a + b + c + d;
Average = Sum / 4;
printf("Sum = %.0f; Average = %.1f\n", Sum, Average);
return 0;
}
2).设计思路
第一步在草稿纸上写出表达式
第二步输入变量 a,b,c,d,sum,average
第三步定义变量a,b,c,d
第四步写出运算式子
第五步对于要输出的结果进行定义
3).本题调试过程遇到的问题及解决方法
注意1.答案错误。在给sum赋值时少加了一个d。自己检查

4). .运行结果截图

第五周编程总结
题目5-1,计算存款利息 (10 分)
本题目要求计算存款利息,计算公式为interest=money×(1+rate)year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。
1).实验代码 #include<stdio.h>

include<math.h>

int main(void){
float money,year,rate;
double interest;
scanf("%f %f %f",&money ,&year ,&rate);
interest = (money*pow(1+rate,year))-money ;
printf("interest = %.2f\n" ,interest);
return 0;
}
2).设计思路
第一步 构思,在大脑或草稿中大致形成一个代码框架
第二步 输入变量,并进行定义
第三步 输入赋值语句的表达式
第四步 输出变量,并进行定义
3).本题调试过程中碰到问题及解决办法
注意1.当调用数学函数时,记得加入#include<math.h>

4).运行结果截图

题目5-2. 计算分段函数[2] (10 分)
本题目要求计算下列分段函数f(x)的值:

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。1)1)实验代码 #include <stdio.h>

include <math.h>

int main() {
double x = 0.00 ,result = 0.00;
scanf("%lf" ,&x);
if(x>=0)
result = sqrt(x);
else
result = pow(x+1,2)+2*x+1/x ;
printf("f(%.2f) = %.2f\n" ,x,result);
return 0;
}
2).设计思路
第一步 大致构思,使用if-else语句
第二步 输入变量并进行定义
第三步 分条陈述使用if-else语句,调用数学函数
第四步 输出并定义变量
3). 本题调试过程中碰到问题及解决办法
注意1.答案错误 第13行的输出,f(x)应该表示为f(%.2f)

4).运行结果截图

题目5-3. 超速判断 (10 分)
模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。
1)实验代码 #include<stdio.h>
int main(void){
int v;//0<=v<=500
scanf("%d" ,&v);
if(v>60) printf("Speed: %d - Speeding\n" ,v);
else printf("Speed: %d - OK\n" ,v);
return 0;
}
2).设计思路
第一步 构思,运用if-else语句
第二步 输入变量,调用scanf函数
第三步 使用if-else语句
第四步 输出结果
3). 本题调试过程中碰到问题及解决办法
注意1 在使用if-else语句时,不是选着运算而是选着输出。鄙人没有遇到问题。

4).运行结果截图

题目5-4. 阶梯电价 (15 分)
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
1).实验代码#include<stdio.h>
int main(){
float consumption , m;
scanf("%f" , &consumption);{
if(consumption<0) printf("Invalid Value!\n");
else{
if(consumption<=50)
m = consumption0.53;}
else m = 50
0.53+(consumption-50)*0.58;
printf("cost = %.2f\n",m);}
return 0;
}
2).设计思路
第一步 构思,运用if-else语句
第二步 输入变量,调用scanf函数
第三步 使用if-else语句,此时有三种情况需要使用2个else
第四步 输出结果
3). 本题调试过程中碰到问题及解决办法
注意1.编译错误,if-else语句不仅可以用于2个条件中,还可以用于多个条件中。通过相互讨论得出结论。
4).运行结果截图

题目5-5. 输出三角形面积和周长 (15 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1).实验代码#include<stdio.h>

include<math.h>

int main(){
double a,b,c;
double area,perimeter,s;
scanf("%lf %lf %lf",&a,&b,&c);
if((a+b)>c&&(a+c)>b&&(b+c)>a) {
s = (a + b + c)/2;
area = sqrt(s(s-a)(s-b)*(s-c));
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else printf("These sides do not correspond to a valid triangle");
return 0;
}
2).设计思路
第一步 构思,运用if-else语句并确定条件,调用数学函数,
第二步 输入变量,调用scanf函数
第三步 使用if-else语句,此时有三种情况需要使用2个else
第四步 输出结果
3). 本题调试过程中碰到问题及解决办法
注意1.部分正确 在使用if条件语句时,对于三角形任意2边之和大于第三边的条件不知道输入,少了&符号。

4).运行结果截图

题目5-6. 三天打鱼两天晒网 (15 分)
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
1).实验代码#include<stdio.h>
int main (){
int i,n,s;
scanf("%d",&n);
s=n%5;
if(i<=1000) {
if((s1)||(s2)||(s==3))
printf("Fishing in day %d",n);
else printf("Drying in day %d",n);
}
return 0;
}
2).设计思路
第一步 构思,运用if-else语句并确定条件.
第二步 输入变量,调用scanf函数,输入赋值语句。
第三步 使用if-else语句。
第四步 输出结果
3). 本题调试过程中碰到问题及解决办法
注意1.构思要明确,知道如何让计算机编译运行得到想要的答案。起初我的构思不对,通过和同学的讨论明确思路。

4).运行结果截图

第六周编程总结
题目6-1 求N分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
1).实验代码#include<stdio.h>
int main(){
int denominator,i,n;
double item,sum;
scanf("%d",&n);
denominator = 1; sum = 0;
for(i = 1;i<=n;i++){
item = 1.0/denominator;
sum = sum+item;
denominator = denominator+1; }
printf("sum = %.6f\n",sum);
return 0;
}
2).设计思路
第一步 整形输入分母和i项和n项,和
第二步 分别给分母和和赋值
第三步 使用循环语句
3)本题调试中遇到的问题及解决方案
符号用错,除号和\没有分清

4).运行结果截图

题目6-2: 求奇数分之一序列前N项和 (15 分)
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
1).实验代码#include<stdio.h>
int main(){
int denominator,i,n;
double item,sum;
scanf("%d",&n);
denominator = 1; sum = 0;
for(i = 1;i<=n;i++){
item = 1.0/denominator;
sum = sum+item;
denominator = denominator+2; }
printf("sum = %.6f\n",sum);
return 0;
}
2).设计思路
第一步 整形输入i,n,分母
第二步 使用for语句进行循环
第三步 进行输出
3)本题调试中遇到的问题及解决方案
容易出现编译错误,denominator是以2为差值出现的
我在编译过程中没有出现错误
4).运行结果截图

题目6-3: 求简单交错序列前N项和 (15 分)
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
1).实验代码#include<stdio.h>
int main(){
int denominator,flag,i,n;
double item,sum;
scanf("%d",&n);
flag = 1;
denominator = 1;
sum = 0;
for(i = 1;i<=n;i++){
item = flag*1.0/denominator;
sum = sum+item;
flag = -flag;
denominator = denominator+3; }
printf("sum = %.3f",sum);
return 0;
}
2).设计思路
第一步 整形输入i,n,分母
第二步 使用for语句进行循环
第三步 进行输出
3)本题调试中遇到的问题及解决方案
本题需要注意分母的差值为2,我没有出现错误i
4).运行结果截图

题目6-4:求平方与倒数序列的部分和 (15 分)
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m2+1/m+(m+1)2+1/(m+1)+⋯+n2+1/n。
1).实验代码#include <stdio.h>
int main (void){
int m, n, i;
double sum = 0;
scanf("%d %d", &m, &n);
for(i = m; i <= n; i++)
sum += i * i + 1.0 / i;
printf("sum = %.6lf", sum);
return 0;
}
2).设计思路
第一步 输入并定义变量
第二步 使用for循坏语句
第三步 输出精确到小数点后六位的结果
3)本题调试中遇到的问题及解决方案
本题需要注意符号的使用,我在编译过程中没有遇到问题
4).运行结果截图

题目6-5: 求交错序列前N项和 (15 分)
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
1).实验代码

include<stdio.h>

int main(){
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
double j,k;
double m=1;
j=1;
for(i=2;i<=n;i=i+1)
{
if(i%2==0)
{
j=j+2;
k=-i/j;
}
else
{
j=j+2;
k=i/j;
}
m=m+k;
}
printf("%.3lf\n",m);
}
return 0;
}
3)本题调试中遇到的问题及解决方案
逻辑错误,没有注意奇偶性问题

4).运行截图

第七周编程总结
题目7-1: 生成3的乘方表 (15 分)
输入一个非负整数n,生成一张3的乘方表,输出30~3n的值。可调用幂函数计算3的乘方。
1).实验代码 #include<stdio.h>

include<math.h>

int main(){
int i,n,power;
scanf("%d",&n);
for(i = 0;i<=n;i++){
power = pow(3,i);
printf("pow(3,%d) = %d\n",i,power); }
return 0;
}
2).设计思路
第一步 输入变量i,n,power
第二步运用scanf语句进行定义
第三步使用for循环语句
第四步输出得到答案
3)本题调试中遇到的问题及解决方案
答案错误 printf语句放在了for语句的外面,通过查阅书籍。
4).运行结果截图

题目7-2:求平方根序列前N项和 (15 分)
本题要求编写程序,计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
1).实验代码 #include<stdio.h>

include<math.h>

int main(){
int n,i;
double s;
scanf("%d",&n);
for(i = 1;i<=n;i++)
s+=sqrt(i);
printf("sum = %.2f",s);
return 0;
}
2).设计思路
第一步 调用数学函数加入头文件
第二步 运用整形和浮点型输入变量
第三步 运用for循环语句 输入表达式
第四步 输出变量
3)本题调试中遇到的问题及解决方案
循环语句的错误,i是从1开始循环,不是0
4).运行结果截图

题目7-3:求幂之和 (15 分)
本题要求编写程序,计算sum=21+22+23+⋯+2n。可以调用pow函数求幂。
1).实验代码#include<stdio.h>

include<math.h>

int main(){
int sum,result,item,n; //n<=10
double i;
scanf("%d",&n);
sum = 0;
for(i = 1;i<=n;i++) sum+=pow(2,i);
printf("result = %d",sum);
return 0;
}
2).设计思路
第一步 调用数学函数加入头文件
第二步 运用整形和浮点型输入变量
第三步 写出题目运算表达式
第四步 输出答案
3)本题调试中遇到的问题及解决方案
没有注意题目中结果输出整形
4).运行结果截图

题目7-4: 求组合数 (15 分)
本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。
1).实验代码#include<stdio.h>
int main(){
int m,k,n,i,j,sum,ride,result;
double item;
scanf("%d %d",&m,&n);
item = 1; sum = 1; ride = 1;
for(i = 1;i<=n;i++) item = itemi;
for(j = 1;j<=m;j++) sum = sum
j;
for(k = 1;k<=n-m;k++) ride = ridek;
result = item/sum
1/ride;
printf("result = %d",result);
return 0;
}
2).设计思路
第一步 对于变量进行输入和定义
第二步 运用3次for循环语句,并且得到m!、n!(n-m)!
第三步 对于阶乘结果再次运算,得到组合数
3)本题调试中遇到的问题及解决方案
本题没有遇到问题
4).运行结果截图

题目7-5: 验证“哥德巴赫猜想” (20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
1)代码:#include <stdio.h>

include <string.h>

include<math.h>

int prime(int p){
int i;
int k = (int)sqrt(p);
for (i = 2; i <= k; i++)
if (p%i == 0) return 0;
return 1;}
int main(){
int N,i,j;
scanf("%d",&N);
if (N == 4) {
printf("4 = 2 + 2");
return 0; }
for (i = 3; i < N / 2;i+=2){
if (prime(i)) {
j = N - i;
if (prime(j)) {
printf("%d = %d + %d",N,i,j);
break;
}
}
}
return 0;
}
2)设计思路:
第一步 加入头文件
第二步 判断是否为偶数
第三步 q不断增加而p不断减小
第四步 输出结果
3)本题调试中遇到的问题及解决方案
不知道如何进行分解成2个素数,同样没有调用头文件
4)运行结果截图

第八周编程总结
题目8-1: 混合类型数据格式化输入 (5 分)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
1).实验代码#include<stdio.h>
int main(){
int n;
float number1,number2;
char op;
scanf("%f %d %c %f",&number1,&n,&op,&number2);
printf("%c %d %.2f %.2f",op,n,number1,number2); return 0;
}
2).设计思路
第一步 输入并定义变量
第二步 输出并定义变量
3)本题调试中遇到的问题及解决方案
没有遇到问题
4).运行结果截图

题目8-2:计算符号函数的值 (10 分)
对于任一整数n,符号函数sign(n)的定义如下:

请编写程序计算该函数对任一输入整数的值。
1).实验代码

include<stdio.h>

int main()
{
int n,result;
scanf("%d",&n);
if(n == 0)
result = 0;
else if(n<0)
result = -1;
else
result = 1;
printf("sign(%d) = %d",n,result);
return 0;
}
2).设计思路
第一步 整形输入变量n
第二步 使用if-else语句进行判断
第三步 输出结果
3)本题调试中遇到的问题及解决方案
If语句中的等号出现错误,==为等号,=为赋值语句
4).运行结果截图

题目8-3: 计算个人所得税 (10 分)
假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:
• 当工资不超过1600时,税率为0;
• 当工资在区间(1600, 2500]时,税率为5%;
• 当工资在区间(2500, 3500]时,税率为10%;
• 当工资在区间(3500, 4500]时,税率为15%;
• 当工资超过4500时,税率为20%。
1).实验代码

include<stdio.h>

int main(){
double wage,rate;
scanf("%lf",&wage);
if(wage>=0){
if(wage<=1600) rate = 0.00;
else if(wage>1600&&wage<=2500) rate = 0.05(wage-1600);
else if(wage>2500&&wage<=3500) rate = 0.10
(wage-1600);
else if(wage>3500&&wage<=4500) rate = 0.15(wage-1600);
else if(wage>4500) rate = 0.20
(wage-1600);
}
printf("%.2lf",rate);
return 0;
}
2).设计思路
第一步 使用双精度浮点型进行定义
第二步使用if-else语句进行对不同工资的判断
第三步进行个人税的输出
3)本题调试中遇到的问题及解决方案
无问题
4).运行结果截图

题目8-4:比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。
1).实验代码

include<stdio.h>

int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int e = 0;
if(a>b){
e = a;
a = b;
b = e;
}
if(a>c){
e = a;
a = c;
c = e;
}
if(b>c){
e = b;
b = c;
c = e;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
2).设计思路
第一步 使用4个盒子,其中一个空盒子用来储存2者之间较大的
第二步使用if-else语句进行大小的比较,
第三步按顺序输出
3)本题调试中遇到的问题及解决方案

4).运行结果截图

题目8-5:到底是不是太胖了 (10 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
1).实验代码

include<stdio.h>

int main()
{
int n;
double s,x,a,b;
scanf("%d",&n);
while(n--)
{
scanf("%lf%lf",&a,&b);
s=(a-100.0)0.9;
x=b/2.0;
if(x>(s-s
0.1)&&x<(s+s0.1))
printf("You are wan mei!\n");
if(x>=(s+s
0.1))
printf("You are tai pang le!\n");
if(x<=(s-s*0.1))
printf("You are tai shou le!\n");
}
}
2).设计思路
第一步 进行输入并定义变量
第二步有3种情况使用if-else语句进行不同的输出。
3)本题调试中遇到的问题及解决方案
If条件语句使用数学函数进行判断,导致部分正确
4).运行结果截图

题目8-6: 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
1).实验代码

include <stdio.h>

int main()
{
int speed,limit;
double a;
scanf("%d %d",&speed,&limit);
a=(double)(speed-limit)*100/(double)limit;
if(a<10||speed<limit)
printf("OK");
else if(a<50)
printf("Exceed %.0f%%. Ticket 200",a);
else
printf("Exceed %.0f%%. License Revoked",a);
return 0;
}
2).设计思路
第一步 输入并定义速度和限制速度
第二步求出罚款200元的条件
第三步使用if-else语句进行判断是否需要罚款
第四步 格式化输出
3)本题调试中遇到的问题及解决方案
满足一个速度小于10%是仅仅不够的,速度必须小于限制速度才是没有超速
4).运行结果截图

题目8-7: 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
1).实验代码

include<stdio.h>

int main()
{
int letter=0,digit=0,blank=0,other=0;
int i;
char ch;

for(i=0;i<=9;i++){
    scanf("%c",&ch);
    if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) 
           letter++;
    else if(ch>='0'&&ch<='9') 
           digit++;
    else if(ch==' '||ch=='\n') 
           blank++;
    else 
           other++;
}
  scanf("%c",&ch);
 printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
 return 0;

}
2).设计思路
第一步 进行格式化输入并定义储存变量的字符
第二步判断是否为字符,数字等,如果是并进行累加
第三步格式化输出
3)本题调试中遇到的问题及解决方案
空格和回车的判断不熟悉,查阅书籍可知
4).运行结果截图

题目8-8: 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
1).实验代码

include<stdio.h>

include<math.h>

int main(void)
{
int n,grade;
int count;
double sum,ave;
scanf("%d",&n);
count=0;
sum=0.0;
for(int i=0;i<n;i++){
scanf("%d",&grade);
sum+=grade;
if(grade>=60) count+=1;
}
ave = n!=0? sum/n : 0;
printf("average = %.1lf\n",ave);
printf("count = %d",count);
return 0;
}
2).设计思路
第一步 调用数学函数使用头文件
第二步 输入并定义变量
第三步使用if-else语句进行判断是否及格,是,则进行累加
第四步 求出平均数,并进行格式化输出
3)本题调试中遇到的问题及解决方案
需注意当n=0时不能进行平均值的运算
4).运行结果截图

题目8-9:输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
代码:#include<stdio.h>
int main()
{
int year, i, count=0;
scanf("%d", &year);
if(year<=2000||year>2100)
printf("Invalid year!\n");
else{
for(i=2001; i<=year; i++){
if(i%4 == 0&&i%100!=0||i%400 == 0){
printf("%d\n", i);
count++;
}
}
if(count == 0)
printf("None\n");
}
return 0;
}
2).设计思路
第一步 格式化输入年份
第二步 判断是否满足闰年的条件,使用if-elae语句
第三步 格式化输出变量
3)本题调试中遇到的问题及解决方案
If条件句的逻辑关系不明确,逻辑或和逻辑与的符号混淆
查询书籍
4).运行结果截图

第九周编程总结
题目9-1:查询水果价格 (15 分)
给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
1).实验代码

include<stdio.h>

int main(void)
{
printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
int i, price;
for(i=1;i<=5;i++){
scanf("%d",&price);
if(price==0){
break;
}
switch(price){
case 1:printf("price = 3.00\n");break;
case 2:printf("price = 2.50\n");break;
case 3:printf("price = 4.10\n");break;
case 4:printf("price = 10.20\n");break;
default:printf("price = 0.00\n");break;
}
}
return 0;
}
2).设计思路
第一步 进行价格输出
第二步 使用循环语句和switch语句对不同的商品的价格进行输出
第三步 返回主函数
3)本题调试中遇到的问题及解决方案
在运用switch语句时,没有考虑到输出格式,总是出现答案错误
4).运行结果截图

题目9-2:计算油费 (15 分)
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
1).实验代码

include<stdio.h>

int main()
{
int a,b;
double price;
char c;
scanf("%d %d %c",&a,&b,&c);

if(b90)
price=a*6.95;
else if(b
93)
price=a7.44;
else if(b==97)
price=a
7.93;

if(c=='m')
price=price0.95;
else
price=price
0.97;
printf("%.2lf",price);
return 0;
}
2).设计思路
第一步 对于服务等级和汽油号
第二步使用if-else语句进行条件选择计算价格
第三步输出价格
3)本题调试中遇到的问题及解决方案
本题没有遇到问题
4).运行结果截图

题目9-3:计算天数 (15 分)
本题要求编写程序计算某年某月某日是该年中的第几天。
1).实验代码

include <stdio.h>

int main() {
int y, m, d;
int p,i;
scanf("%d/%d/%d", &y, &m, &d);
p = d;
for(i = 1; i < m; i++)
{
switch(i) {
case 1:case 3:case 5:case 7:
case 8:case 10:case 12:
p += 31; break;
case 4:case 6:case 9:case 11:
p += 30;break;
case 2:
if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
p += 29;
else
p += 28;
}
}
printf("%d", p);
return 0;
}
2).设计思路
第一步 格式化输入年月日
第二步 运用for语句进行循环,switch语句对于不同的月份的天数进行判断和计算
第三步 输出总天数
3)本题调试中遇到的问题及解决方案
在case语句的运用错误,导致无法计算出结果
4).运行结果截图

第十周编程总结
题目10-1: 求奇数和 (15 分)
本题要求计算给定的一系列正整数中奇数的和。
1).实验代码

include<stdio.h>

int main()
{
int n,sum = 0;
while(1){
scanf("%d",&n);
if(n<=0){
break;
}
if(n%2!=0){
sum += n;
}
}
printf("%d\n",sum);
return 0;
}
2).设计思路
第一步 整形定义n,sum,并赋值sum为0
第二步 使用while循环语句【while(1)不断进行循环】,不断输入整数n
第三步 判断是否为奇数,将负数转为整数,进行累加;
第四步 输出结果
3)本题调试中遇到的问题及解决方案
不知道如何进行循环,不知道while(1)的意思和用法
4).运行结果截图

题目10-2: 韩信点兵 (10 分)
在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
• 按从1至5报数,记下最末一个士兵报的数为1;
• 再按从1至6报数,记下最末一个士兵报的数为5;
• 再按从1至7报数,记下最末一个士兵报的数为4;
• 最后按从1至11报数,最末一个士兵报的数为10;
请编写程序计算韩信至少有多少兵。
1).实验代码

include<stdio.h>

int main()
{
int i;
for(i=1;;i++){
if((i%51)&&(i%65)&&(i%74)&&(i%1110)){
printf("%d\n",i);
return 0;
}
}
}
2).设计思路
第一步 使用循环语句来进行判断和计算
第二步 输出兵的数量
3)本题调试中遇到的问题及解决方案
刚刚拿到题目完全不懂题意,更别说思路了,还是心急吃不了热豆腐
4).运行结果截图

题目10-3: 求整数的位数及各位数字之和 (15 分)
对于给定的正整数N,求它的位数及其各位数字之和。
1).实验代码

include<stdio.h>

int main()
{
int integer,sum,count;
scanf("%d",&integer);
sum = 0;
count = 0;
if(integer<=0){
integer = -integer;
}
while(integer>0){
sum+=integer%10;
integer = integer/10;
count++;
}
printf("%d %d",count,sum);
return 0;
}
2).设计思路
第一步 将整数不断除以10,将余数不断累加得到各位数字之和
第二步 输出数据,得到结果
3)本题调试中遇到的问题及解决方案
本题没有遇到困惑
4).运行结果截图

题目10-4: 整除光棍 (20 分)
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。
1).实验代码

include<stdio.h>

int main()
{
int n,i,x=0,flag=0;
scanf("%d",&n);
for(i=1;;i++)
{
x=x*10+1;
if(x>=n)
{
flag=1;
printf("%d",x/n);
}
else if(flag1)
printf("0");
x=x%n;
if(x
0)
break;
}
printf(" %d",i);
return 0;
}
2).设计思路
第一步 使用for语句进行循环,写出光棍数字的表达式
第二步 分条件来进行判断和输出
第三步
3)本题调试中遇到的问题及解决方案
4).运行结果截图

第十一周编程总结
题目1:11-1 打印九九口诀表 (15 分)
下面是一个完整的下三角九九口诀表:
11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81
本题要求对任意给定的一位正整数N,输出从1
1到N*N的部分口诀表。
1).实验代码

include<stdio.h>

int main()
{
int n;
scanf("%d",&n);
for(int i = 1;i <=n ;i++){
for(int j = 1;j <= i;j++){
if(i * j >= 10){
printf("%d%d=%d ", j, i, j * i); //2格
}
else{
printf("%d
%d=%d ", j, i, j * i);//3格
}
}
printf("\n");
}
return 0;

2).设计思路
第一步 考虑到使用嵌套语句循环,输入一个整数
第二步 定义i从1开始循环到n停止
第三步 定义一个j从1开始循环到i停止
第四步 格式化输出,当i和j的成绩大于10的时候要空2格,否则空3格
3)本题调试中遇到的问题及解决方案
在输出乘法表的时候出现空格问题,不知道如何去打印
4).运行结果截图

题目2:11-2 换硬币 (20 分)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
1).实验代码

include<stdio.h>

int main()
{
int x,count=0;
scanf("%d",&x);
for ( int k = x / 5; k > 0; k-- )
for ( int i = x / 2; i > 0; i-- )
for ( int j = x; j > 0; j-- )
if(k5+i2+jx){
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", k, i, j, k + j + i);
count++;
}
printf("count = %d",count);
return 0;
}
2).设计思路
第一步 输入零钱x
第二步 使用嵌套循环定义一个k从x/5开始循环,定义一个i从i/2开始循环,定义一个j从x开始循环,不断累减
第三步 当满足k5+i2+j
x条件时进行输出,此时就是对应的硬币数
4).运行结果截图

题目3:11-3 找完数 (20 分)
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
1).实验代码

include<stdio.h>

int main(){
int n,m,i,j,sum,num=0;
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++){
if(i1) continue;
sum=1;
for(j=2;j<i;j++)
if(i%j
0) sum+=j;
if(sumi){
printf("%d = 1",i);
for(j=2;j<i;j++)
if(i%j
0)
printf(" + %d",j);
printf("\n");
num++;
}
}
if(num0) printf("None\n");
return 0;
}
2).设计思路
第一步 输入2个数m、n
第二步 i从m开始循环到n结束,定义的j从2开始循环到i停止不断累加
第三步 用sum来累加能整出的数
第四步 如果sum
i说明完数只有1
3)本题调试中遇到的问题及解决方案
嵌套循环次数使用的次数过多,自己都有点晕
4).运行结果截图

第12周编程总结
题目12-1 编程打印空心字符菱形 (10 分)
本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
1) 实验代码

include<stdio.h>

int main(){
int n,i,j,m,k;
char ch;
k=1;
scanf("%c %d",&ch,&n);
getchar();
//printf("%c %d",ch,n);
m=(n+1)/2;
for(i=0;i<m;i++)
{
for(j=0;j<m-i-1;j++){
printf(" ");
}
printf("%c",ch);
if(i0){
ch++;
printf("\n");
continue;
}
for(j=0;j<2i-1;j++){
printf(" ");
}
printf("%c",ch++);
printf("\n");
}ch=ch-2;
for(i=n-m;i>0;i--){
for(j=0;j<k;j++){
printf(" ");
}k++;
printf("%c",ch);
for(j=0;j<2
i-3;j++){
printf(" ");
}
if(i
1){
printf("\n");
break;
}
printf("%c\n",ch--);
}
return 0;
}
2) 设计思路
第一步 使用for循环输出空格
第二步 继续使用for循环输出字符
第三步 考虑特殊情况最中间的那一行字符
3) 本周调试过程遇到的问题及解决方法
最中间的那一行属于特殊情况需要特殊考虑
4) 运行结果截图
题目12-2 跟奥巴马一起画方块 (15 分)
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
1) 实验代码

include<stdio.h>

int main()
{
int i,j;
int n;
char c;
scanf("%d",&n);
getchar();
scanf("%c",&c);
for(i=1;i<=(int)(n/2.0+0.5);i++)
{ for(j=1;j<=n;j++)
{
printf("%c",c);
}
printf("\n");
}
return 0;
}
2) 设计思路
第一步 使用getchar接收字符,使用for循环来输出行数
第二步 再嵌套一个for循环来输出字符
第三步 输出得到结果
3) 本周调试过程遇到的问题及解决方法
在看到别人的代码时,在使用for循环输出行数时一直不明白别人的式子为什么要加上那个0.5.通过讨论得出,0.5的作用就是四舍五入
4) 运行结果截图

题目12-3 输出三角形字符阵列 (15 分)
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
1) 实验代码

include<stdio.h>

int main()
{
int n, count = 0;
scanf("%d", &n);
for (int i = n; i > 0; i--) {
for (int j = 0; j < i; j++) {
printf("%c ", 'A' + count);
count++;
}
printf("\n");
}
return 0;
}
2) 设计思路
第一步 运用for循环输出行数
第二步 嵌套一个for循环输出字母
第三步 在循环外界输出空格
3) 本周调试过程遇到的问题及解决方法
这道题不是很难,勉强过关
4) 运行结果截图
题目12-4 阅览室 (20 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
1) 实验代码

include<stdio.h>

int main()
{
int N,n,hh,mm;
scanf("%d",&N);
char c;

for(int i=0;i<N;i++){
    int flag[1001]={0},time[1001]={0},sum=0,cnt=0;
    while(scanf("%d %c %d:%d",&n,&c,&hh,&mm)) {
     	    if(n==0) break;
	       	if(c=='S'){
			          time[n]=hh*60+mm;
			          flag[n]=1;
			          
	       	}
	       	else if(c=='E'){
	       	       if(flag[n]==1){
	       	            flag[n]=0;
				              sum+=hh*60+mm-time[n];
				              cnt++;
	       	        }
	       	}
	} 
   if(cnt==0) printf("0 0\n");
   else printf("%d %.0f\n",cnt,(double)sum/cnt);
} 

}
2) 设计思路
第一步使用for循环,一共有N天的记录,循环N次
第二步创建2个数组分别是学号和时间
第三步使用while进行循环,并用if来判断,输入0,表示结束。接收到字符就从s到E统计时间
3) 本周调试过程遇到的问题及解决方法
看到题目有点懵逼,但是通过同学的讲解,渐渐有了思路
4) 运行结果截图

第13周编程总结
题目13-1 使用函数计算两点间的距离 (10 分)
本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。

include <stdio.h>

include <math.h>

double dist( double x1, double y1, double x2, double y2 );

int main()
{
double x1, y1, x2, y2;

scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2);
printf("dist = %.2f\n", dist(x1, y1, x2, y2));

return 0;

}

/* 你的代码将被嵌在这里 */

5) 实验代码
double dist( double x1, double y1, double x2, double y2 )
{
double distance;
distance = sqrt(pow(x1-x2,2)+pow(y1-y2,2));

return distance;
}
6) 设计思路
第一步输入自定义函数名称
第二步定义变量距离
第三步运用函数求出距离
7) 本周调试过程遇到的问题及解决方法
木有问题呀
8) 运行结果截图

题目13-2 符号函数 (10 分)
本题要求实现符号函数sign(x)。

include <stdio.h>

int sign( int x );

int main()
{
int x;

scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));

return 0;

}

/* 你的代码将被嵌在这里 */
5) 实验代码
int sign( int x )
{
int s;

if(x>0){
s = 1;
}
else if(x==0){
s = 0;
}
else{
s = -1;
}

return s;
}
6) 设计思路
第一步 使用if-else语句对于X不同情况的讨论
第二步 分别输出结果
7) 本周调试过程遇到的问题及解决方法
这是做过的一道题,但是使用的方法不同,现在使用的自定义函数来打的代码。个人认为直接使用if-else语句会更优化
8) 运行结果截图

题目13-3 使用函数计算两个复数之积 (10 分)
若两个复数分别为:c1=x1+y1i和c2=x2+y2i,则它们的乘积为 c1×c2=(x1x2−y1y2)+(x1y2+x2y1)i。
本题要求实现一个函数计算两个复数之积。

include<stdio.h>

double result_real, result_imag;
void complex_prod( double x1, double y1, double x2, double y2 );

int main(void)
{
double imag1, imag2, real1, real2;

scanf("%lf %lf", &real1, &imag1); 			
scanf("%lf %lf", &real2, &imag2); 			
complex_prod(real1, imag1, real2, imag2); 	
printf("product of complex is (%f)+(%f)i\n", result_real, result_imag);

return 0;

}

/* 你的代码将被嵌在这里 */
5) 实验代码
void complex_prod( double x1, double y1, double x2, double y2 )

{

result_real = x1*x2 - y1*y2;

result_imag = x1*y2 + x2*y1;

}
6) 设计思路
直接写出表达式即可,表达式题目有
7) 本周调试过程遇到的问题及解决方法
本题使用了函数声明,无需使用return返回函数值
8) 运行结果截图

题目13-4 使用函数求最大公约数 (10 分)
本题要求实现一个计算两个数的最大公约数的简单函数。

include <stdio.h>

int gcd( int x, int y );

int main()
{
int x, y;

scanf("%d %d", &x, &y);
printf("%d\n", gcd(x, y));

return 0;

}

/* 你的代码将被嵌在这里 */
5) 实验代码
int gcd(int x,int y)
{
int max,min;
int n;
if(x>y)
max=x,min=y;
else
max=y,min=x;
do{
n=max%min;
max=min;
min=n;
}while(n);
return max;
}
6) 设计思路
第一步 使用if-else语句判断出最大的数
第二步 使用do-while进行循环求出最大公约数即余数
第三步 返回值
7) 本周调试过程遇到的问题及解决方法
注意主函数名称后面不能加标点
8) 运行结果截图

题目13-5 使用函数输出水仙花数 (20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

include <stdio.h>

int narcissistic( int number );
void PrintN( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

return 0;

}

/* 你的代码将被嵌在这里 */
1) 实验代码
int narcissistic(int number)
{
int digit, powersum, integer, count;
count = 0;
integer = number;
while(integer > 0)
{
integer = integer / 10;
count++;
}

powersum = 0;
integer = number;

for(int i=0; i < count; i++)
{
digit = integer % 10;
integer = integer / 10;
powersum = powersum + pow(digit, count);

}

if(powersum == number)
return 1;
else
return 0;
}

void PrintN(int m, int n)
{
int i;
for(i = m + 1; i < n; i++)
if (narcissistic(i) == 1)
printf("%d\n", i);
}
2) 设计思路
第一步使用while循环统计他的位数,并得到每位上的数字
第二步使用for循环得到他的余数。并计算,每位上数字的位数方的结果
第三步使用if-else语句来判断是否为水仙花数
3) 本周调试过程遇到的问题及解决方法
此题需要再定义一个函数来打印区间,此时应当把返回1和返回0的代码放入此函数
4) 运行结果截图

Posted on 2018-12-27 17:46  晨晨果  阅读(2052)  评论(0编辑  收藏  举报