《C语言程序设计》编程总结汇总

时间:2023-03-09 05:47:45
《C语言程序设计》编程总结汇总

《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(b93)

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(x0)

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+jx条件时进行输出,此时就是对应的硬币数

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%j0) sum+=j;

if(sumi){

printf("%d = 1",i);

for(j=2;j<i;j++)

if(i%j0)

printf(" + %d",j);

printf("\n");

num++;

}

}

if(num0) printf("None\n");

return 0;

}

2).设计思路

第一步 输入2个数m、n

第二步 i从m开始循环到n结束,定义的j从2开始循环到i停止不断累加

第三步 用sum来累加能整出的数

第四步 如果sumi说明完数只有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(i1){

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) 运行结果截图