第五周作业

2019年春季学期第五周作业

这个作业属于哪个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2824
我在这个课程的目标是 学会判断回文,在选择排序的基础上更进一步
这个作业在哪个具体方面帮助我实现目标 这次作业在同学的帮助下学会了一些以前不知道的知识(自定义的运用)
参考文献 C语言程序设计(第3版)

7-1 英文单词排序 (25 分)

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple

输出样例:

red blue green yellow purple

要求:(1)通过以自己名字命名的文件输入英文单词,(2)英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符。(例如:你的学号最后一位为9,则结束标记为9+37=46所对应的ASCII字符“.”)(3)在不删除原有内容的情况下,将排序后的单词输出到文件。

实验代码:

#include<bits/stdc++.h>
int main (void)
{
  char a[21][11];
  char b[11];
  int i,j,m;
  FILE *fp;
  char tmp[11];
  if((fp=fopen ("E:\\Swallow.txt","a+"))==NULL){
  	printf("File open error!\n");
  	exit (0);
  }
  for(i=0;i<21;i++)
  {
  	fscanf(fp,"%s ",&a[i]);
  	if(a[i][0]==')')
  	  break;		  
  }
  for(m=1;m<i;m++)
  for(j=0;j<i-m;j++)
    if (strlen(a[j])>strlen(a[j+1]))
	{
           strcpy(tmp,a[j]);
           strcpy(a[j],a[j+1]);
           strcpy(a[j+1],tmp);
    }
    for(int n=0;n<i;n++)
     printf("%s ",a[n]);
     if(fclose(fp)){
       printf("Can not close the file!\n");
       exit (0);
   }
return 0;
}

设计思路:




遇到的问题及解决方法:

问题:定义变量时只定义了一个数组,对另外一个数组不理解
解决方法:询问同学知道了数组b是接收的一个数组;

问题:结尾没有正确的接收输出
解决方法:仔细审题然后运用一个for语句和printf语句;

问题:在写博客的时候对pta什么的文件的更改有些问题,很多例如scanf都会忘记fscanf
解决方法:自己多注意细节;

实验运行图:



第四周预习作业

7-1 统计一行文本的单词个数 (15 分)

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

实验代码:

#include <stdio.h>
int main()
{
	char a;
	int cnt=0,count=0;
  	while(1){
  		scanf("%c",&a);
		if(a=='\n'){    
			break;
		}
		else if(a!=' '){
			if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9')	{
				count++;   
				cnt++;
			}
				while(1){
					scanf("%c",&a);
					if(a==' '||a=='\n'){ 
						break;
					}
					cnt++;
				}
			if(cnt>1){
				if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9')	
			  count++; 
			}
			if(a=='\n'){
				break;
			}
		} 
	}
  	printf("%d",count);
    return 0;
}

设计思路:




遇到的问题及解决方法:

问题:一开始对单词的判断不会
解决方法:自己查资料就用了这一复杂的方法

问题:代码用了很多循环结构,一开始自己做的时候会循环不清楚了
解决方法:画流程图,询问同学解决这一问题

运行图:


2-1

下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是(B)。 (2分)

A.int a, *x = a;
B.int a, *x = &a;
C.int *x = &a, a;
D.int a, x = a;
作者: 张泳
单位: 浙江大学城市学院

2-2

int *p 的含义是 (2分)(B)

A.p是一个指针, 用来存放一个整型数
B.p是一个指针, 用来存放一个整型数据在内存中的地址
C.p是一个整型变量
D.以上都不对
作者: 李廷元
单位: 中国民用航空飞行学院

2-3

如果有定义:int m, n = 5, *p = &m; 与m = n 等价的语句是 (B) 。 (1分)

A.m = p;
B.
p = *&n;
C.m = &n;
D.m = **p;
作者: 张泳
单位: 浙江大学城市学院

2-4

变量的指针,其含义是指该变量的(B )。 (1分)

A.值
B.地址
C.名
D.一个标志
作者: 张泳
单位: 浙江大学城市学院

2-5

有如下程序段

int p,a=10,b=1;
p=&a; a=
p + b;
执行该程序段后,a的值是 (2分)(B)

A.12
B.11
C.10
D.编译出错
作者: 李廷元
单位: 中国民用航空飞行学院

2-6

对于下列程序,正确的是(A) 。 (2分)

void f(int *p)
{
*p = 5;
}
int main(void)
{
int a, *p;

  a = 10;
  p = &a;
  f(p);
  printf(“%d”, (*p)++);

  return 0;

}
A.5
B.6
C.10
D.11
作者: 张泳
单位: 浙江大学城市学院

2-7

执行如下程序段,打印输出的内容是: (2分)(C)

include <stdio.h>

void fun (int c, int d) {
c++;
(
d)++;
}
int main ( ){
int a=5, b=9;
fun(a, &b);
printf("%d, %d", a, b);
return 0;
}
A.5, 9
B.6, 10
C.5, 10
D.6, 9

预习总结:

  知道了地址可以体现指向关系,指针变量只能定向的指向定义时所规定类型的变量,指针变量定义后变量值是不确定的,所以应用前必须先赋值;指针变量只能存放地址,不能将一个常数赋给指针变量;*的结合性为从右往左,&的结合性为从左往右。

遇到的疑惑:有关指针的运算的题目,还是有点搞弄不明白。

学习进度条

周/日期 这周所花的时间 代码行数 学到的知识点 目前比较疑惑的问题
2/25-3/3 三天 45 学习数组及用法 数组的长度问题
3/4-3/10 三天 40 文件的处理问题 文件指针的用法
3/11-3/15 四天 50 对数组的遍历 关于遍历的范围还有不理解的地方
3/16-3/22 四天 80 用一维数组和二维数组编程 冒泡算法的运用
3/23-3/29 三天 65 学会规范的画流程图,认识了字符串 进制之间的转换的代码

学习感悟

总体来说还是自我感觉比以前强些了,但是仍然有许多自己不满意的地方,不要放弃,我就不信我搞不明白了。加油!!!

结对编程感想

因为我的搭档没有来,所以我是要向淇同学告诉我的,他很厉害,能够告诉我很多一开始我自己不知道的知识,希望能够通过结对编程学到更多。

posted @ 2019-03-29 14:28  黄哈哈呐  阅读(499)  评论(1编辑  收藏  举报