C语言I博客作业11

这个作业属于那个课程 C语言程序设计I
这个作业要求在哪里 C语言I作业11
我在这个课程的目标是 能熟练地进行编程
这个作业在那个具体方面帮助我实现目标 完成PTA作业
参考文献 百度

1.PTA实验作业

1.1 题目名1 统计某类完全平方数

   本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
   函数接口定义:
   int IsTheNumber ( const int N );
   其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
   裁判测试程序样例:

   #include <stdio.h>
   #include <math.h>

   int IsTheNumber ( const int N );

   int main()
   {
   int n1, n2, i, cnt;

   scanf("%d %d", &n1, &n2);
   cnt = 0;
   for ( i=n1; i<=n2; i++ ) 
   {
   if ( IsTheNumber(i) )
   cnt++;
   }
   printf("cnt = %d
", cnt);

   return 0;
   }

  /* 你的代码将被嵌在这里 */
  输入样例:
  105 500
  输出样例:
  cnt = 6

1.1.1数据处理

数据表达:该函数定义了整形变量n1,n2,i,cnt;n1,n2位输入的取值范围,i则用于控制循环,cnt用于放范围内满足条件的数
定义了整形变量m,n,a,b,i;m为接收n传过来的平方根,n为用户输入的整数,整形数组a[10]用来记录n的位数,b用于判断N的位数,i用于循环.

数据处理:伪代码

  #include <stdio.h>  
  #include <math.h>

  int IsTheNumber(const int N);

  int main()//主函数
  {
  int n1, n2, i, cnt;//定义整形变量n1, n2, i, cnt; n1, n2位输入的取值范围, i则用于控制循环, cnt用于放范围内满足条件的数

  scanf("%d %d", &n1, &n2);//输入整形变量n1,n2
  cnt = 0;     //cnt初始化赋值为0
  for (i = n1; i <= n2; i++) {
  if (IsTheNumber(i))//自定义函数反回来的值不为零
  cnt++;//cnt累加
  }
  printf("cnt = %d
", cnt);//输出cnt并换行

  return 0;
  }
  int IsTheNumber(const int N)//自定义函数
  {
  int n = N;// 定义了整形变量m, n, a, b, i; m为接收n传过来的平方根,n为用户输入的整数,整形数组a[10]用来记录n的位数, b用于判断N的位数, i用于循环.
  int b;
  int a[10] = { 0,0,0,0,0,0,0,0,0,0 };//定义数组a[10]并初始化为0
  int m = sqrt(n);  //定义整形变量m,并将根号n赋值给m
  if (m * m == n)
  {
  while (n)
  {
  b = n % 10;//n除以10的余数
  a[b]++;//a[b]自增
  n /= 10;//n自除10
  }
  for (int i = 0; i <= 9; i++)
  {
  if (a[i] >= 2)
  return 1;//返回1
  }
  }
  return 0;//返回0
  }

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
25 625 cnt = 7 有七个类完全平方数
36 196 cnt = 3 有三个类完全平方数
45 555 cnt = 7 有七个类完全平方数

1.1.4 PTA提交列表及说明


提交列表说明
答案错误:for循环中的次数搞错了

1.2 题目2 统计各位数字之和是5的数

本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
函数接口定义:

  int is( int number );
  void count_sum( int a, int b );

  函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。
  函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式
  count = 满足条件的整数个数, sum = 这些整数的和
  进行输出。题目保证0<a≤b≤10000。

裁判测试程序样例:

#include <stdio.h>

int is( int number );
void count_sum( int a, int b );

int main()
{
int a, b;

scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.
", a);
if (is(b)) printf("%d is counted.
", b);
count_sum(a, b);

return 0;
}

输入样例:

104 999

输出样例:

104 is counted.

count = 15, sum = 3720

1.2.1 数据处理

数据表达:定义了整形变量a,b为输入的范围,定义了整形变量x,sum1,sum2,i,count;x来存放number的每一个数字,sum1和sum2为number的每一位数累加的和,其中count为记录满足要求的个数,i为控制循环的变量
数据处理:伪代码

    #include <stdio.h>

    int is(int number);
    void count_sum(int a, int b);

    int main()//主函数
    {
int a, b;//定义整形变量a,b,为输入的范围

scanf("%d %d", &a, &b)//输入a,b
if (is(a)) printf("%d is counted.
", a);//自定义函数is返回来的值不为0  输出a is counted
if (is(b)) printf("%d is counted.
", b);//自定义函数is返回来的值不为0  输出b is counted
count_sum(a, b);//自定义函数

return 0;
    }
    int is(int number)//自定义函数is
    {
int x;//定义整形变量x
	int sum1 = 0; //定义整形变量sum1
while (number != 0)//number不等于0
{
	x = number % 10;//number求余并赋值给x
	sum1 = sum1 + x;//sum自加x
	number = number / 10;//number自除10
}
if (sum1 == 5)
{
	return 1;//返回1
}
else
{
	return 0;//返回0
}
    }
    void count_sum(int a, int b) {
int i;//定义整形变量i,用来控制循环
int sum2 = 0; //定义整形变量sum2并赋值为0
int count = 0;//定义整形变量count用于记录满足条件数的个数
for (i = a; i <= b; i++)
{
if (is(i))
{
count++;//count自加
sum2 = sum2 + i;//sum自加i
}
}
printf("count = %d, sum = %d", count, sum2);//输出count,sum
    }

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
122 456 122 is counted.count = 12, sum = 3003 122~456内有15个各位数字之和是5的数,且他们的和为3003
100 500 500 is counted.count = 15, sum = 3720 100~500内有6个各位数字之和是5的数,且他们的和为3720
78 437 count = 14, sum = 3220 78~437内有15个各位数字之和是5的数,且他们的和为3220

1.2.4 PTA提交列表及说明


编译错误:我将“}”给漏掉了一个,并且将“d”写成了"D"

2.代码互评

同学代码

我的代码


1.他是用数组把各位数都存下来,然后再判断是否有有相同的数,而我则是定义一个变量i,如果出现了2次则跳出循环
2.其他的都差不太多,都是用根号开出一个数再平方,用来判断看是否是平方数

同学代码

我的代码


1.他用的是do-while语句先求各位数再判断,而我则是用的while语句先判断再求各位数。
2.其他的都差不太多,都是通过求各位数来判断给定正整数的各位数字之和是否等于5。

三、学习总结

3.1学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第四周 10 140 如何用 MinGW-w64 来编译C程序
第五周 20 160 学会了输入
第六周 8 220 学会了if-else
第七周 16 378 运用if,else语句
第八周 20 341 运用for循环语句 对for的用法还不怎么会
第九周 21 345 学习了如何使用自定义函数 自定义函数还不太会
第十周 23 425 熟悉并掌握多分支结构、字符型数据类型和逻辑运算符结构
第十一周 20 456 熟悉并掌握分支结构switch语句
第十二周 25 430 学会使用while和do-while结构解决问题 各个运算符的意思还不太理解
第十三周 27 340 嵌套循环,一.二维数组 多层嵌套还不太熟练
第十四周 34 530 学习了指针和一维字符数组 有了一个初步的了解,但指针还不太会使用
第十五周 36 620 动态变量.静态变量.全局变量和局部变量 对于全局变量和静态变量还是不太懂

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第四周 545 140
第五周 756 160
第六周 1257 220
第七周 1564 378
第八周 1678 341
第九周 2143 345
第十周 2645 425
第十一周 2738 456
第十二周 3756 430
第十三周 4837 340
第十四周 5432 530
第十五周 7680 620

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

这周的作业让我觉得非常的难,也需要一定的数学知识,我的数学真是有点差了,不过让我意外的是前段时间学的数组终于能应用了,我发线数组是非常的实用,凡是大一点的数据都能用数组变得简单起来,刚开始学数组的时候我还以为数组很厉害,后来不断地看到其他的,才发现数组只是C语言的冰山一角而已,指针真的是特别强大,引起我的极大兴趣,继续加油!

原文地址:https://www.cnblogs.com/1bing/p/11985577.html