C语言博客作业--函数嵌套调用

一、实验作业

PTA

题目: 6-7 递归法对任意10个数据按降序排序

设计思路

 定义整型变量 max=a[0],temp,循环变量i
 如果 n==1 
 a[n-1]=a[0] 设置递归出口
 否则
 for i=0 to i=n-1;
 如果 a[i]>a[n-1]
      交换a[i]和a[n-1];
 end for

重复进行,每次n-1,直到递归出口      

代码截图

1232194-20171227133539894-1590817454.png

调试问题

  • 1,发现进行到最大值后,其他值都发生了改变--------if语句没有加花括号
    1232194-20171227133708363-489470309.png

  • 2,开始没有设置递归出口导致程序崩溃

1232194-20171227133955722-1374389470.png

学生成绩管理系统

目前的问题:

  • 1.学号的输入位数有限,因为用字符串类型,学号比较难进行比较,排序

尝试一:
1232194-20180104225558112-1585989631.png
1232194-20180104225643362-1713226891.png
(失败)
1232194-20180104225724424-1326988672.png

  • 2.目前的项目是根据群里的文件改的,之前自己建过一个无法运行

还未进行

代码行数:264->301->333

1.2.1 画函数模块图,简要介绍函数功能。

1232194-20180101222746331-1842917254.png

1.2.2 截图展示你的工程文件,如:

1232194-20180101222807049-1120557561.png

1.2.3 函数代码部分截图

1.删除学生成绩

1232194-20180101222914909-1616972645.png

2.查询学生成绩

1232194-20180101222956471-1372823587.png

3.插入学生信息

1232194-20180101223130721-97284836.png

1.2.4 调试结果展示

  • 1.信息录入

1232194-20180102172356659-271540260.png

  • 2.信息输出(包括按学号输出,总分输出,平均分输出)

1232194-20180102173941581-864176375.png

1232194-20180102174038721-344313267.png

  • 3修改学生成绩信息(包括各科)

1232194-20180102174123440-1463775625.png

   输入成绩格式错误的提示:

1232194-20180102174747940-496081397.png

  • 4.删除学生的成绩信息(包括各科,我的操作是将该科成绩化为0)

1232194-20180102174230753-1475674279.png

  • 5.插入新的学生信息

1232194-20180102173106034-1934385176.png

输入人数过多或者为负数的提示:

1232194-20180104230127940-2037423486.png

1.2.5 调试碰到问题及解决办法。

  • 1.输入修改的学生信息后,总分和平均分没有改变。

1232194-20180101225851253-952340736.png

  • 解决方案:在每一次修改后都重新进行一次计算总分和平均分

1232194-20180102162027471-1953069968.png

  • 2.输出的格式很难统一

1232194-20180102164138893-981938848.png

  • 解决方案:对输出的格式修改

1232194-20180104230231784-29593062.png

(由于与下列同样的原因暂时无法展示结果)

  • 3.对于联系方式考虑用字符串,但是出现错误,不知道怎么订正

1232194-20180102170325612-1738836968.png

已解决并在上机时成功输出,但是没有及时保存截图,后来由于对学号的类型做了改变,导致程序无法运行,所以暂时得不到结果展示

二、截图本周题目集的PTA最后排名。

1232194-20171231191944054-796630216.png

三、阅读代码

吴军霖同学递归7-1 整数分解为若干项之和的代码

#include<stdio.h>
int u=0,store[66],m,cnt=0,sum;
void Split(int n,int min){
    int i,j;
    if(!n){  //0无法再分解,出口 
        if(cnt++) printf(";"); //每行第一个前面不需要分号. 
        printf("%d=",m);
        for(j=0;j<u;j++){
            printf("%d",store[j]);
            if(j<u-1) printf("+");
        }
        
        if( !(cnt%=4) ) putchar('\n'); 
        return;
    }
    for(i=min;i<=n;i++){ //后面不能比前面小,i为下一层的最小值 
        store[u++]=i;  //收藏前因子,继续分解后因子 
        Split(n-i,i);
        
        u--; //递归返回过程中重置u为0 
    }
}
int main(){
    scanf("%d",&m);
    Split(m,1);
    return 0;
}

1.它的功能:将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

2.如注释

四、本周学习总结

10.3.2 宏基本定义(用来定义一些符号常量,在程序中所有出现宏名的地方都会用宏定义字符串替换,所以也称为宏替换.。)

一。宏定义的格式

#define 宏名  宏定义字符串//以#开始,表起编译预处理作用,而不是真正的C语句,行尾无需跟分号(分号会被当成宏替换内容)。

#define  TRUE  1

二。宏的用途

  • 1.符号常量,如PI。

  • 2.简单的函数功能实现(要在一行内完成后面跟的“”表示该行未结束,与下一行合起来成为完整一行)

  • 3.为程序书写方便(当程序中多次使用一些相同内容时)

三。带参数的宏定义(宏的简单函数功能)

宏引用与函数调用的区别:
  • 1.实现过程
    宏引用在程序编译预处理时完成
    函数调用在程序执行时进行

  • 2.调用特点
    宏引用不做计算,直接替换进去
    函数调用,如果实参是表达式,先计算表达式,再把结果传递过去,所以宏引用要注意括号的使用.

10.3.4文件包含

1.格式

#include<需包含的文件名>//C语言标准头文件
或
#include“需包含的文件名”//当前文件夹被包含的文件

2.头文件的应用

1232194-20171231194321117-1533543105.png

一.ctype.h常见的功能
  • 1.isalnum
    功能: 测试传入参数其对应的ASCII符号是否为数字或英文字母,当传入参数为A~Z、a~z、0~9,则函数返回非零值,否则返回零。
    返回非零值的状况:传入字符A~Z、a~z、0~9或数65~90、97~122、48~57。

  • 2.isalpha
    功能:测试传入参数其对应的ASCII符号是否为英文字母,当传入参数为A~Z、a~z,则函数返回非零值,否则返回零。
    返回非零值的状况:传入字符A~Z、a~z或数65~90、97~122。

  • 3.isdigit
    功能:测试传入参数其对应的ASCII符号是否为阿拉伯数字,当传入参数为0~9,则函数返回非零值,否则返回零。
    返回非零值的状况:传入字符0~9,或数48~57。

  • 4.isupper  
       功能: 测试传入参数是否为大写英文字母,当传入参数为A~Z,则函数返回非零值,否则返回零。 
      返回非零值的状况:传入字符A~Z或数97~122。

  • 5.islower
    功能:测试传入参数是否为小写英文字母,当传入参数为a~z,则函数返回非零值,否则返回零。
    返回非零值的状况:传入字符a~z或数97~122。

二、strins.h常用函数
  • 1.函数名:strcpy
    功能: 拷贝一个字符串到另一个
    用法: char strcpy(char destin, char *source);

  • 2.函数名:strncpy
    功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。

  • 3.函数名:strcat
    功能: 字符串拼接函数
    用法: char strcat(char destin, char *source);

  • 4.函数名:strcmp
    功能: 串比较
    用法: intstrcmp(char str1, char str2);
    看Asic码,str1>str2,返回值 > 0;两串相等,返回0。Str1<Str2,返回值<0;

  • 5.函数名:strlen
    功能: strlen函数求的是字符串的长度,它求得方法是从字符串的首地址开始到遇到第一个'\0'停止计数,如果你只定义没有给它赋初值,这个结果是不定的,它会从 字符串首地址一直记下去,直到遇到'\0'才会停止。

  • 6.函数名:strstr
    功能: 在串中查找指定字符串的第一次出现
    用法: char strstr(char str1, char *str2);

  • 7.函数名:strupr
    功能: 将串中的小写字母转换为大写字母
    用法: char strupr(char str);

三、Stdlib.h常用
  • 1.函数名称:malloc
    函数原型: void * malloc(unsigned size);
    函数功能: 分配size字节的存储区

  • 2.函数名称:free
    函数功能: 释放p所指的内存区

  • 3.函数名称: rand
    函数原型: int rand(void);
    函数功能: 产生0到32767间的随机整数(0到0x7fff之间)

  • 4.函数名称: atof
    函数原型: double atof(char *str)
    函数功能: 将字符串转换成一个双精度数值

  • 5.函数名称: atoi
    函数原型: int atoi(char *str)
    函数功能: 将字符串转换成一个整数值

第11章 指针进阶

1.用指针操作字符串---------将五个字符串从小到大排序

1232194-20180101135653815-628727364.png

2.动态分配内存方法处理多个字符串的输入---------藏头诗

1232194-20180101135438878-621507890.png

1.总结本周学习内容。

12.26指针进阶

-1指针数组的概念:数组的各个元素都是指针类型,用存放内存地址,那么这个数组就是指针数组
一般指针数组定义的一般格式:

类型名 *数组名[数组长度]

如:

char *color[5];

定义了字符指针类型的数组
其中 color[i]中存放的是字符串的首地址 .

  • 2.指针数组的交换
    如:
char *temp;
tamp=color[0];
color[0]=color[4];
color[4]=temp;

课本266
对于这个操作,颜色字符串本身并没有变化,只是color[0]和color[4]交换了所指向的单元.

3.指向指针的指针(也称为二级指针)

  • (1)定义

指向指针的指针一般定义为:

类型名**变量名;

课本266

int a=10;
int *p=&a;
int **pp=&p;

a,*p,**pp代表同一个单元,他们的值相同

  • (2)二级指针操作

看课本266

2.罗列本周一些错题。

1.课堂派

  • 互动12.25
    1232194-20171225224648962-2005114251.png
  • 互动12.27指针数组
    1
    1232194-20171227003405338-592564541.png
    2
    1232194-20171227003458213-1809644955.png

  • C语言预习作业--函数嵌套调用
    1232194-20171227003559291-2099558072.png

转载于:https://www.cnblogs.com/Zeng99/p/8111607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值