- 1.定义n表示输入字符串的长度,count表示要输出的数,i来控制循环
- 2.循环2n-1次 for(i=1;i<=2n-1;i++)
- 3.先进行前面递增的部分(i<=n)
- 4.若n==1,printf("%d",count);
- 5.否则输出 printf("%d ",count)
- 6.得到(i>n&&i!=2*n-1) 进行递减输出 count--
7.if(i==2*n-1&&i!=1),既输出最后一个数时,printf("%d",count),不用输出空格
3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

第一个数后面输出有空格,一开始没注意,后来提示答案错误之后又加了一个条件就解决了
题目2:7-6 掉入陷阱的数字
1.本题PTA提交列表

2. 设计思路
- 1.N表示输入的自然数,sum表示下一位新的自然数,n用于置换,i用于循环
- 2.输入N scanf("%d",&N);
- 3.赋N值给n
- 4.进行无条件循环for(;;)
- 5.然后进行while(n!=0){
sum=sum+n%10;//将各位上的数字相加
n=n/10;}
sum=sum*3+1; 计算新的自然数
- 6.输出printf("%d:%d\n",i++,sum);
if(sum==N)便结束循环
7.否则n=sum,sum=0.重新开始循环(5)
3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明
这道题在DEV-C那边改好做对了,在PTA就直接对了。运行超时是因为循环括号扩错了,后来修改过了就行了
题目3:7-10 简单计算器
1. 本题PTA提交列表

2. 设计思路
- 1.定义velue1,velue2分别代表运算前后的数,sum表示一次运算后的值
- 2.char ch
- 3.输入 scanf("%d",&velue1);
- 4.(ch=getchar())!=‘=‘)进行循环
- 5.输入scanf("%d",&velue2);
- 6.若velue2==0,则表示分母为0,输出ERROR
- 7.否则switch(ch){//判断输入字符进行相应运算
case ‘+‘:sum=velue1+velue2;break;//因为本题运算是按从左到右的顺序来的,所以运行一次就结束
case ‘-‘:sum=velue1-velue2;break;
case ‘‘:sum=velue1velue2;break;
case ‘/‘:sum=velue1/velue2;break;
default:printf("ERROR\n");return 0;//若为其他字符,输出ERROR
}
- 8.velue1=sum;将sum赋值给velue1,进行下一次运算
9.输入字符为=时,结束循环
3.代码截图
{{uploading-image-65509.png(uploading...)}}
4.本题调试过程碰到问题及PTA提交列表情况说明

没判断非法字符,一时不会如何判断,然后记起switch语句中还有一个default语句,加上去就可以了。
二、截图本周题目集的PTA最后排名。

三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
类型名 数组名[数组长度]={初始值}
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

数组名表示 一个地址常量,存放数组内存空间的首地址
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来互相区分。它有表达简洁,可读性好,便于使用循环结构的优点
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
选择法:
- 1.定义变量i,index,n,k,temp
- 2.int a[10]
- 3.给数组赋值
- 4.for(k=0;k<=n-1;i++){
index=k;//index存放最小值所在下标
for(i=k+1;i<n;i++)//寻找最小值所在下标
if(a[i]<a[index]);//最小元素与下标为k的元素互换;
index=i;
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
5.输出数据
冒泡法(直接写主要部分了)
- 1.int I,j,t;
2.for(i=1;i<n;i++)//外部循环
for(j=0;j<n-1;j++)//内部循环
if(a[j]>a[j+1]){//比较两个数大小
t=a[j];a[j]=a[k+1];a[j+1]=t;}//如果前一个元素大,则互换