本次作业所属课程 | C语言程序设计|| |
本次作业要求 | |
我在这个课程的目标是 | 理解指针与数组的关系 |
本次学习在哪些具体方面帮组我实现目标 | 学会画流程图 |
参考文献 | C primer plus第六版 |
一、基础题
题目一:每个单词的最后一个字母改成大写
1)实验代码
#includevoid fun( char *p );int main(){ char chrstr[64]; int d ; gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; fun(chrstr); printf("\nAfter changing: %s\n", chrstr); return 0; }void fun( char *p ){ int i; for(i=0;*(p+i)!='\0';p++) { if(*(p+i+1)==' ') *(p+i)=*(p+i)-32; }}
2)设计思路
3)本题调试过程中遇到的问题及解决方案
这题主要卡在了那个大小写转变的问题,查了一下百度,对比了书上后面的ASCII码集,就差不多解决了
4)运行结果截图
题目二:自动售货机
1)实验代码
#includeint main(void){ char a[10][20] = { "Table-water","Table-water","Table-water","Coca-Cola","Milk","Beer","Orange-Juice","Sprite","Oolong-Tea","Green-Tea"}; int static b[11]; int c[100]; int i=1,sum=0,money,j=0,change,flag=0; scanf("%d",&money); while((money!=-1)&&(money<=10)) { sum += money; scanf("%d",&money); } scanf("%d",&c[i]); while(c[i]!=-1) { switch(c[i]) { case 1: j = j + 1;break; case 2: j = j + 1;break; case 3: j = j + 1;break; case 4: j = j + 2;break; case 5: j = j + 2;break; case 6: j = j + 3;break; case 7: j = j + 3;break; case 8: j = j + 3;break; case 9: j = j + 4;break; case 10: j = j + 4;break; default:break; } if(j>sum) { printf("Insufficient money"); flag = 1; break; } i++; scanf("%d",&c[i]); } change = sum-j; i = 1; while(c[i]!=-1) { switch(c[i]) { case 1: b[1]++;break; case 2: b[2]++;break; case 3: b[3]++;break; case 4: b[4]++;break; case 5: b[5]++;break; case 6: b[6]++;break; case 7: b[7]++;break; case 8: b[8]++;break; case 9: b[9]++;break; case 10:b[10]++;break; default:break; } i++; } if(flag==0) { printf("Total:%dyuan,change:%dyuan\n",sum,change); for(i=1;i<=10;i++) { if(b[i]==0) continue; else { printf("%s:%d;",a[i-1],b[i]); } } } return 0;}
2)设计思路
3)本题调试过程中遇到的问题及解决方案
这题有点难,借鉴了别人的思路,一开始数组长度小了,后面在输出的if语句的判断条件又出了点问题,不过最后还是解决了,只是调试的过程有点漫长
4)运行结果截图
二、预习题
题目一:使用函数删除字符串中的字符
1)实验代码
#includevoid delchar(char str[],char op);int main(){ int repeat; char str[80],op; scanf("%d\n",&repeat); while(repeat--) { gets(str); scanf("%c",&op); printf("result: "); delchar(str,op); } return 0;}void delchar(char str[],char op) { while(*str!='\0') { if(*str!=op) { putchar(*str); } str++; }}
2)设计思路
3)本题调试过程中遇到的问题及解决方案
这一题在PTA上的正确答案到Dev答案又变成错误的了,调试的过程中各种问题都出来了,主要是这题在自定义函数里面输出不是特别理解,借鉴了下别人的思路
4)运行结果截图
三、挑战题
题目一:子数组” 并不要求是一个矩形, 而是联通的元素即可 (上下或左右相邻即视为联通), 那解法会是怎么样呢?
自己有几把刷子心里还是有点逼数的,挑战题不会写,大概的写点思路吧:逐个查找,将他们的路径连接起来在逐个判断
四、学习进度条
时间 | 这周所花时间 | 代码行数 | 学到的知识简介 | 目前比较迷惑的问题 |
第一周 | 5小时 | 80 | 初步了解数组 | 数组的引用 |
第二周 | 6小时 | 200 | 指针的了解 | 完全没听懂老师上课在讲什么,继续努力 |
第三周 | 7小时 | 200 | 文件与数组的使用 | 没看到代码运行后文件的内容发生改变 |
第四周 | 9小时 | 120 | 冒泡法,选择排序法 | 冒泡法不会 |
第五周 | 9小时 | 120+ | 字符型数组 | 把代码改成文件格式 |
第六周 | 4小时 | 130左右 | 指针 | 指针的调用 |
第七周 | 6小时+ | 200 | 指针与数组 | 指针与数组的连续有点模糊 |
五、累积博客字数及代码行数
六、结对编程感想
这次的题目就充分体现了我们两个人自身能力不足的缺点,题目难度偏大,两个人都做不出,思路也是乱七八糟,互相拖后腿
总结:这次的题目自我感觉偏难,做了很久效果还不明显