作业要求一 (20分)
完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里:
1)C高级第一次PTA作业(1)
2)C高级第一次PTA作业(2)
3)C高级第一次PTA作业(3)
4)C高级第一次PTA作业(4)
额外加题3:为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
作业要求二(60分)
1)C高级第一次PTA作业(1)
题目6-1 计算两数的和与差
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:两数相加求和。
第二步:两数相减求差。
第三步:通过指针返回多个值。
(2)流程图(4分)
略
2.实验代码(2分)
void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3.本题调试过程碰到问题及解决办法(12分)
无
题目6-2 拆分实数的整数与小数部分
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过转换数据类型去掉小数部分得到整数部分。
第二步:原来的数减去整数部分得到小数部分。
第三步:通过指针返回多个值。
(2)流程图(4分)
略
2.实验代码(2分)
void splitfloat(float x,int *intpart,float *fracpart)
{
*intpart= (int)x;
*fracpart=x-*intpart;
}
3.本题调试过程碰到问题及解决办法(12分)
无
2)C高级第一次PTA作业(2)
题目6-1 在数组中查找指定元素
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过for循环将所给值与数组中每个元素进行比较。
第二步:若在数组中找到与所给值相等的数则用mark=1来标记。
第三步:根据mark的值决定返回值。
(2)流程图(4分)
2.实验代码(2分)
int search(int list[], int n, int x)
{
int j;
int mark=0;
for(j=0;j<n;j++)
{
if(list[j]=x)
{
mark=1;
break;
}
}
if(mark==1)
{
return j;
}
else
{
return -1;
}
}
3.本题调试过程碰到问题及解决办法(12分)
无
题目6-2 找最大值及其下标
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过for循环找到数组中的最大值。
第二步:返回最大值。
(2)流程图(4分)
2.实验代码(2分)
int fun(int *a,int *b,int n)
{
int j;
int zuida=*a;
for(j=1;j<N;j++)
{
if(*(a+j)>*a)
{
*b=j;
zuida=*(a+j);
}
}
return zuida;
}
3.本题调试过程碰到问题及解决办法(12分)
无
3)C高级第一次PTA作业(3)
题目6-1 最小数放前最大数放后
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过input函数对数组初始化。
第二步:在max_min函数中对每个元素依次比较,找出其中最大值与最小值并记录并用mark,flag记录其角标。
第三步:通过中间变量c1将最小值与数组第一个元素交换。
第四步:通过中间变量c2将最大值与数组最后一个元素交换。
第五步:通过for循环依次输出该数组各元素。
(2)流程图(4分)
2.实验代码(2分)
void input(int *arr,int n)
{
int i;
for(i=0;i<10;i++)
{
scanf("%d",&*(arr+i));
}
}
void max_min(int *arr,int n)
{ int mark=0,flag=0;
int j=0;
int c1,c2;
int max=*arr,min=*arr;
for(j=0;j<10;j++)
{ if(*(arr+j)>max)
{max=*(arr+j);
mark=j;
}
if(*(arr+j)<min)
{min=*(arr+j);
flag=j;
}
}
c1=*arr;
*(arr)=min;
*(arr+flag)=c1;
c2=*(arr+9);
*(arr+9)=max;
*(arr+mark)=c2;
}
void output(int *arr,int n)
{
int k=0;
for(k=0;k<10;k++)
{printf("%3d",*(arr+k));
}
}
3.本题调试过程碰到问题及解决办法(12分)
无
题目6-2 指针选择法排序
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过for循环内嵌for循环找出最外层循环对应的每一个组数中的最大值,并记录其角标。
第二步:通过中间变量c1将其与外层循环对应的数据中的第一个数进行交换。
第三步:待循环结束后,输出数组中各元素。
(2)流程图(4分)
2.实验代码(2分)
void sort(int *x,int n)
{
int i,j,k,mark,c1;
int max;
for(i=0;i<10;i++)
{ max=*(x+i);
for(j=i;j<10;j++)
{ if(*(x+j)>max)
{max=*(x+j);
mark=j;
}
}
c1=*(x+i);
*(x+i)=*(x+mark);
*(x+mark)=c1;
}
}
3.本题调试过程碰到问题及解决办法(12分)
无
4)C高级第一次PTA作业(4)
题目6-1 判断回文字符串
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过strlen函数得到实参的字符长度,根据其判断可能是哪种回文类型。
第二步:通过for循环依次比较第一个与最后一个,第二个与倒数第二个,依次往下......
第三步:根据是否是回文返回不同的字符串。
(2)流程图(4分)
2.实验代码(2分)
bool palindrome(char *s)
{ int a[4]={true};
int b[5]={false};
int length;
int mark=0;
int i,j;
int n,m,flag=0;
length=strlen(s);
n=length-1;
for(i=0;i<length/2;i++,n--)
{
if(*(s+i)!=*(s+n))
{ flag=1;
break;
}
}
if(flag==1)
{return *b;
}
else if(flag==0)
{ return *a;
}
}
3.本题调试过程碰到问题及解决办法(12分)
无
6-2 使用函数实现字符串部分复制
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过for循环得到数组t的长度。
第二步:判断t的长度与m的大小来决定是否能够复制。
第三步:若否,s为空字符串。若是,用for循环依次将t中字符复制至s。
第四步:在字符串s的最后手动加上 。
(2)流程图(4分)
2.实验代码(2分)
void strmcpy(char *t,int m,char*s)
{
int count=0;
int i;
for(i=0;;i++)
{
if(*(t+i)==' ')
{break;
}
else
{count++;
}
}
if(count<m)
{*s=' ';
}
else
{
for(i=0;*(t+i)!=' ';i++)
{
*(s+i)=*(t+m-1+i);
}
*(s+i)=' ';
}
}
3.本题调试过程碰到问题及解决办法(12分)
问题:在写题过程中,误将 打成
导致段错误。其次,疏忽了在s数组后手动添加 。
解决方法:将该题改为编程题,在主函数达到题目要求后,对比排查问题所在。在肯定思路的情况下,尝试不同写法。
额外加题3:
为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
1 设计思路(6分)
(1)主要描述题目算法(1分)
第一步:通过for循环依次输入名字的各个字符。
第二步:判断各字符范围,进行变换。
第三步:输出加密后的名字。
(2)流程图(4分)
大量使用选择语句导致流程图横向宽度大
2.实验代码(2分)
#include <stdio.h>
int main()
{
char name[20];
int i;
for(i=0;;i++)
{
scanf("%c",&name[i]);
if(name[i]=='
')
{break;
}
if('A'<=name[i]&&name[i]<='Z')
{name[i]=name[i]+2;
}
if(name[i]>='a'&&name[i]<='z')
{if(name[i]=='y')
{name[i]='a';
}
if(name[i]=='z')
{name[i]='b';
}
else
{name[i]=name[i]+2;
}
}
}
printf("%s",name);
return 0;
}
3.本题调试过程碰到问题及解决办法(12分)
无
结果
要求三、学习总结和进度(20分)
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?(5分)
学会了:1. 使用指针在函数中返回多个值。
2. 数组与指针的等价替换。
3.指针字符串与字符串数组的区别。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址:https://git.coding.net/Donahue_Xu/The-First-Homework2.git
上传截图:
3、点评3个同学的本周作业
赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/8604534.html
刘炜旗:http://www.cnblogs.com/ryo-/p/8644256.html
于耀淞:http://www.cnblogs.com/jsjyys/p/8589997.html
4、请用表格和折线图呈现你本周(3/12 8:00~3/26 8:00)的代码行数和时间、博客字数和时间(3分)。
表格:
折线图: