第五周作业1
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 要求我们掌握二维数组,可以更好的运用它 |
我在这个课程的目标是 | 学懂C语言,会编程一些简单的小应用 |
这个作业在那个具体方面帮助我实现目标 | 这个作业让我学懂了二维数组的运用 |
参考文献 |
https://blog.csdn.net/mathew_leung/article/details/80382098
|
第四周预习作业
统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
1)代码
#include<stdio.h>
#include<string.h>
int main()
{
int i,n,c=0;
char a[1000];
gets(a);
if(a[0]==' ')
c=0;
else
c=1;
for(i=0;a[i]!='\0';i++)
{
if(a[i]==' ' && a[i+1]!=' ' && a[i+1]!='\0')//计算单词字数
{
c++;
}
}
printf("%d\n",c);
return 0;
}
2)流程图
3)本题调试过程中碰到的问题及解决办法
问题:char a[]的储存值取小了,导致运行超时
解决办法:因为a[]的储存值越大越好,取较大的储存值
4)运行结果截图
第五周基础作业
英文单词排序
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
#
输出样例:
red blue green yellow purple
1)代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
FILE * fp;
char a[21][11];
char b[11];
int j,k,d,i=0;
if((fp=fopen("C:\\safemon\\Xinea.txt","w+"))==NULL)//打开文件
{
printf("Flie open error!\n");
}
while(1){ //输入字符串到‘#’结束
scanf("%s",a[i]);
fprintf(fp,"%s\n",a[i]);//把数据从屏幕输入到文件里
if (a[i][0]=='&')//我学号最后一位数字是1;1+37的ASCII字符是&
break;
i++;
}
a[i][0]='\0';
fprintf(fp,"\n");
for (k=0;k<i-1;k++) //用的是选择排序法
{
d=k;
for(j=k+1;j<i;j++)
{
if(strlen(a[j])<strlen(a[d])) //函数strlen()用来计算字符串长度
{
d=j;
}
}
strcpy(b,a[d]); //函数strcpy()用来把数组a中的字符串复制给数组b
strcpy(a[d],a[k]);
strcpy(a[k],b);
}
for(k=0;k<i;k++)//输出储存在数组b中的字符串
printf("%s ",a[k]);
fprintf(fp,"%s ",a[k]);//把数据输入到文件里
if(fclose(fp))//关闭文件
{
printf("Can not close the file!\n");
exit(0);
}
return 0;
}
2)流程图
3)本题调试过程中碰到的问题及解决办法
问题:开始时我写的是:b=a[d] a[d]=a[k] a[k]=b,导致编译错误
解决办法:查了百度说赋值是无效的,因为即使不发生错误,之后的程序还是会访问在结构体内的数组也就是原来数组的内容 ,
可以用函数strcpy(),复制外部数组的值到结构体中的数组里;
4)运行结果截图
第五周预习题
下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。 (2分)
int *p 的含义是 (2分)
如果有定义:int m, n = 5, *p = &m; 与m = n 等价的语句是 () 。 (1分)
变量的指针,其含义是指该变量的( )。 (1分)
有如下程序段
int *p,a=10,b=1;
p=&a; a=*p + b;
执行该程序段后,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;
}
执行如下程序段,打印输出的内容是: (2分)
#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;
}
第五周挑战题
由上周的求数组的最大子数组和,我们可知它的最简单的原型是求一维数组中的最大值。那么基于这个启发,我们可以把问题从二维数组转化为一维数组来求最大数组。
结对编程
1)结对编程的感悟
结对编程让我们相互分享各自的观点,互相学习编程技巧;还可以让我们互相监督,不容易偷懒
2)结对编程碰到的问题
我们对第四周的预习题思路不一样,无法统一意见;最后还是相互退让
第二周 | 第三周 | 第四周 | 第五周 | |
字数 |
548 | 661 | 1145 | 1242 |
代码行数 | 37 | 55 | 100 | 54 |
学习进度条
日期 | 花的时间 | 行数页码 | 学到的知识 | 日期的疑惑 |
3/1-3/7 | 4个小时 | 148-155 |
数组的定义与运用 |
无 |
3/9-3/15 | 4个小时 | 298-303 |
文件定义和文件数据的处理 |
无 |
3/18-3/22 | 4个小时 | 155-165 |
一维数组的排序方法 二维数组的运用 |
无 |
3/23-3/28 | 四个小时 | 166-172 | 字符串的储存方法,和字符串的运用 | 将字符串改成十进制输出 |
学习总结
这周的pta作业相比相对与上周的作业少了一些,难度也少了一些,上周的预习题老师稍微讲了一点,认真写的话可以做出来;但这周的基础题有难度,这周的基础题令我有成就感的是,经过我参考别人的编程学会了一个新的函数strcpy(),并运用到这周的基础题上了。