• 第二次作业


    一、题目6-7 删除字符串中数字字符##

    1.实验代码###

    `void delnum(char *s)
        {
      int i;
    	char *p = s;
    	for(i=0;*(s+i) != '';i++)
       {
             if ( *(s+i) >'9' || *(s+i) < '0' )
                   *p++=*(s + i) ;
       }
       *p='';
    	 
    }`
    

    2.设计思路###

    第一步:主函数,定义一个数组,写入数组,引用函数,输出。
    第二步:定义一个指针p并将s赋给p,用一个for循环遍历字符串,并在其中用一个if语句判断是否是数字,如果是 p++=*s ,循环过后将最后一个赋上‘’。

    3.流程图###

    4.问题###

    本题未遇到问题

    二、题目6-8 统计子串在母串出现的次数##

    1.实验代码###

    `int fun(char *str,char *substr)
        {
    	int n=0,i;
    	for(i = 0;*(str + i) != '';i++){
    		if(*(str + i) == 'a'&&*(str+i+1) == 's' && *(str + i + 2) == 'd'){
    			n++;
    	}
    	}
    return n;
    
    }`
    

    2.设计思路###

    第一步:调用定义的函数。
    第二步:定义i、j、n,使用双重循环结构,外层循环用来遍历数组元素,内层循环判断字符数组元素是否相等,完全相等时,可遍历子串,则次数加一。
    第三步:返回主函数。

    3.问题###

    三、题目6-9 字符串中除首尾字符外的其余字符按降序排列##

    1.实验代码###

    `int fun(char *s,int num)
    {
    int i,j;
    char t;
    for(j=0;j<num-3;j++)
       for(i=1;i<num-j-2;i++)
        if(*(s+ i)<*(s+i+1))
       {t=*(s+ i); *(s+ i)=*(s+i+1); *(s+i+1)=t;}
    }`
    

    2.设计思路###

    第一步:主函数,定义字符数组s,写入字符串,引用函数,输出排序后所得的字符串。
    第二步:函数,用一个for循环表示循环的趟数,由于只需要排出排除首尾的顺序所以只需要循环num-3次,在此循环下再用一次循环进行排序,并且只需要排出从第二个到num-j-2个数的顺序。

    3.问题###

    在for语句中循环次数出现错误,后来发现是运用冒泡排序法的时候for循环次数过多导致的。最后是通过修改for循环次数改正错误的。

    四、题目7-1 输出学生成绩##

    1.实验代码###

    `#include<stdio.h>
    
    int main()
    {
    int *p,i,sum = 0,max,min,n;
    double avg;
    scanf("%d",&n);
    
    if((p=(int*)calloc(n,sizeof(int)))==NULL){
    	 exit(1);
    }
    
    for(i=0;i<n;i++){
        scanf("%d",&*(p+i));
    	sum = sum + *(p+i);}
    
    avg = (double)sum /(double) n;
    max = *p;
    min = *p;
    for(i=1;i<n;i++){
    	if(*(p + i) > max){
    		max = *(p+i);
    	}
    	
    	if(*(p + i) < min){
    		min = *(p+i);
    	}
    }
        
    printf("average = %.2lf
    max = %.2lf
    min = %.2lf",avg,(double)max,(double)min);
    
    }`
    

    2.设计思路###

    第一步:输入数字个数n,动态存储分配。
    第二步:用for语句进行输入数据,并计算和,for语句结束后计算出平均值。
    第三步:令最大,最小值等于第0个数,遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录,输出最大最小值和平均数。

    3.问题###

    第一次提交未使用动态内存分配,不过提交通过了,之后经提醒添加使用了动态内存分配语句。

    五、题目7-1 计算职工工资##

    1.实验代码###

    #include<stdio.h> struct clerk { char name[10]; float wages, floating, pay, wage; }c1; int main() { int n, i; scanf("%d",&n); struct clerk c[n]; for(i = 0; i < n; i++) { scanf("%s %f %f %f",c[i].name, &c[i].wages, &c[i].floating, &c[i].pay); c[i].wage = c[i].wages + c[i].floating - c[i].pay; printf("%s %.2f ",c[i].name, c[i].wage); } }

    2.设计思路###

    第一步:定义结构体变量,成员包括——姓名、基本工资、浮动工资、支出和实发工资。
    第二步:输入人数n,引用结构体变量,使用循环结构,输入姓名、基本工资、浮动工资、支出,计算实发工资,并输出姓名和实发工资。

    3.流程图###

    4.问题###

    六、题目7-2 计算平均成绩##

    1.实验代码###

    `#include <stdio.h>

    struct student{
        
        char num[10],name[10];
        double score;
    };
    
    int main ()
    {
    double avg,sum = 0;
    int i, n;
    scanf("%d", &n);
    struct student s[n] ;
    for(i = 0;i < n;i ++)
    {
        scanf("%s %s %lf",&s[i].num,s[i].name,&s[i].score);
        sum = sum + s[i].score;
    }
     
     avg = sum / n;
     printf("%.2lf
    ",avg);
     
    for(i = 0; i < n; i++)
    {
        if(s[i].score < avg)
        printf ("%s %s
    ", s[i].name,s[i].num);
    }
    }`
    

    2.设计思路###

    第一步:定义一个结构体,并在其中定义学号num,姓名name,分数score,主函数中先输入整数n,引用结构体,用一个for循环输入学号,姓名,分数并计算出分数的和。
    第二步:计算出平均数,用一个for循环遍历数据,并用if语句判断当前分数是否低于平均数,如果是输出相应的姓名和学号。

    3.问题###

    七、题目6-1 按等级统计学生成绩##

    1.实验代码###

    ` int set_grade( struct student *p, int n ){

        int count = 0, i;
    
        for(i = 0;i<n;i++,p++){
    
            if(p->score<60){
    
                p->grade = 'D';
    
                count++;
    
            }
    
            else if((p->score<70)&&(p->score>=60)){
    
                p->grade = 'C';
    
            }
    
            else if((p->score<85)&&(p->score>=70)){
    
                p->grade = 'B';
    
            }
    
            else{
    
                p->grade = 'A';
    
            }
    
        }
    
        return count;
    
    }`
    

    2.设计思路###

    第一步:先定义函数,引入变量,在for循环中通过if语句进行多层判断,将学生成绩分出等级。
    第二步:使小于60分的单独计算出其数目,最后返回其值(count)即可。

    3.问题###

    八、题目6-2 结构体数组按总分排序##

    1.实验代码###

    `void calc(struct student *p,int n)
    {
    int i;
    for(i = 0;i < n;i ++,p++){
    p->sum = p->score[0] + p->score[1] + p->score[2];

    }
    }
    
    void sort(struct student *p,int n)
    {
    int j,i;
    struct student t;
        for(j=1;j<=n-1;j++)
       for(i=0;i<=n-j-1;i++){
            if((p + i)->sum < (p + i + 1)->sum){
                t = *(p + i);
                *(p + i)= *(p+ i + 1);
                *(p+ i + 1)= t;
               }
       }
    }`
    

    2.设计思路###

    第一步:定义一个结构体,并在其中定义学号num,姓名name,分数score,分数和sum,主函数中:先引用结构体,用一个for语句进行数据输入,引用函数calc求出每名学生的总分,函数sort按每名学生的总分从高到低对这组数据进行排序,用一个for语句进行输出。
    第二步:函数calc:仅需一个for语句进行遍历,并在遍历过程中算出sum值,函数sort:定义一个结构体t为之后交换做准备,之后用冒泡排序法进行排序即可。

    3.流程图###

    函数calc

    函数sort

    4.问题###

    最初在第二个函数中将t定义为int型,发现编译的时候出现问题,最后改为引用结构体定义t。

    九、学习总结和进度##

    1.总结###

    首先是对指针进行了深入的复习,并对pta中出现的问题进行讲评。之后,这两周主要学习了结构。首先学习的就是对结构体的概念和定义,并且在所需结构调用时需要在函数中调用一下结构体再去使用。再之后学习到结构数组,其中引用格式为结构数组名[下标].结构成员名。最后,学到了结构指针引用格式可以为p->结构成员名。总体来讲,这段时间学的还是比较充分的。

    2.图表###

    3.同学互评###

    刘富垚;
    [董欣](http://www.cnblogs.com/dx2017/);
    [丰大为](http://www.cnblogs.com/DavidPark/);

  • 相关阅读:
    RabbitMQ介绍
    idea根据Ctrl和滑轮改变字体大小
    com.fasterxml.jackson.databind.exc.InvalidDefinitionException
    Git出现Push rejected: Push to origin/master was rejected
    java单机操作redis3.2.10和集群操作增删改查
    java操作hbase1.3.1的增删改查
    Gobblin采集kafka数据
    使用连接池和缓存机制,处理连接数据库操作
    用cmd导入oracle的.dmp文件和修改oracle管理员密码
    oracle to_date函数和mysql DATE_FORMAT函数用法
  • 原文地址:https://www.cnblogs.com/zgq947/p/8747223.html
Copyright © 2020-2023  润新知