第五周作业
基础作业一
7-1 统计一行文本的单词个数 (15 分)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let's go to room 209.
输出样例:
5
(一)实验代码:
include<stdio.h>
int main()
{
int i,count=0,number=0;
char c,string[10000];
gets(string);
for(i=0;(c=string[i])!=' ';i++) /*
if(c' ')
number=0;
else if(number0){
number=1;
count++;
}
printf("%d
",count);
return 0;
}
(二)设计思路
(三)实验遇到的问题及解决方案
在老师详细的讲解一维字符数组的定义及引用,加入字符串这个东西,本题一遍过
运行结果截图
7-1 英文单词排序 (25 分)
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
输出样例:
red blue green yellow purple
一 实验代码
include<stdio.h>
include<stdlib.h>
include<string.h>
int main(void)
{
FILE *fp;
char a[21][11] = { ' ' };
char s[11] = { ' ' };
int q, j = 0, len;
fp=fopen("D:\Users\Administrator\Documentsc\语言作业\zoujian.txt","r+");
while (1) {
scanf("%s", a[q]);
fscanf(fp,"%s", &a[q]);
if (a[q][0] == '(')
break;
q++;
}
len = q;
for (q = 0; q < len-1; q++)
{
for (j = 1; j < len - q; j++)
{
if (strlen(a[j - 1]) > strlen(a[j]))
{
strcpy(s, a[j - 1]);
strcpy(a[j - 1], a[j]);
strcpy(a[j], s);
}
}
}
for (q = 0; q < len; q++)
printf("%s ", a[q]);
fprintf(fp,"
");
for(q = 0; q < len; q++)
fprintf(fp,"%s ", a[q]);
fclose(fp);
return 0;
}
设计思路
本题遇到的问题及解决方法
刚开始一直用PTA上的输入样例:
blue
red
yellow
green
purple
运行半天弄不成结果,后来仔细看了老师的题目要求
英文单词输入的结束标记为你学号最后一位数+37所对应的ASCII字符,才发现需要把#改成(,
因为我的学号末尾数为3加上37对应的ASCII字码为(,然后就运行正确了
运行结果
第五周预习题
(二)预习内容
预习了指针这一新内容,顾名思义指针就是用来存放变量地址的变量,懂得了指针变量的可以通过指针找到所需要访问变量的地址。定义指针变量时要加上指针声明符,说明所定义变量是指针,此外还预习了定义指针变量所需要注意的几点。指针变量同其他变量一样具有地址和数值。使用运算符&可以得到指针本身的地址。.不能对未初始化的指针变量取值,.运算符*可取出指针变量指向地址中存储的数值。
预习困惑
不知道两个同类型的指针变量可不可以相加减乘除
结对编程:
两个人对编写程序的熟练度都不高,也很容易出现一些小问题,或者根本就不知道某些地方该怎么写,后来向大佬求助,才慢慢的到好转,总体来说还可以
学习感悟
本周学习了字符串与一维字符数组的区别、字符串的存储以及字符串的操作方法,对字符串数组还不太会用,还预习了指针,但是指针比较难,还看不太懂。