C语言入门级教程六

C语言入门级教程                  icesongqiang


2016.11.21

总结

这次上机,有的同学依然会犯一些基础的错误,比如
1.字符串的初始化与结束
2.数据类型不匹配(输入输出 %d %f)
3.循环语句 if语句不加大括号
4. 关于字符串逆序输出,我们重点的考察的是逆序存放,而不是简单地直接从最后一个开始打印,直接打印到第0个结束。
下次上机就要调试指针了,请大家尽量使用可以调试的IDE,机房推荐使用VC。 还不会的请尽快向会的同学请教。

自定义atof()函数

#include<stdio.h>
#include<string.h>
double atof (char s[]) {
    int i=0, j=0, k=0, x=0, m=0, w=0, q=0, temp=0;
    double a=0, b=0, t=0;
    if (s[0]=='+') {        //i储存数的正负性,w表示第一个是否为符号 
        i=0;w=1;
    }
    if (s[0]=='-'){
        i=1;w=1;

    }
    j=strlen(s);
    for (k=0;k<j;k++) if (s[k]=='e'||s[k]=='E') break;
    if (k!=j) {
        if (s[k+1]=='+') q=1;       //q表示指数是否有符号,m储存指数的符号 
        if (s[k+1]=='-') {m=1;q=1;}
        x=s[k+1+q]-48;              //x储存指数的大小 
        if (s[k+2+q]!='\0') x=x*10+s[k+2+q]-48;
    }
    for (j=0;j<k;j++) if (s[j]=='.') break;
    if (j!=k) {
        t=10;
        for (temp=j+1;temp<k;temp++) {  //temp为了防止j的数据丢失 
            b+=(s[temp]-48)/t;          //b为小数部分 
            t*=10;
        }
    }
    for (k=0+w;k<j;k++) a=a*10+s[k]-48;//a为整数部分 
    a+=b;
    b=1; 
    for (k=0;k<x;k++) b*=10;
    if(m) b=1/b; 
    a*=b;
    if (i) a*=-1;
    return(a);
}
void main () {
    char s[256];
    double a;
    gets(s);
    a=atof(s);
    printf("%lf",a);
}

字符串反转

#include <stdio.h>
#include <string.h>

void rev_str(char *str) {
    int len = strlen(str);
    char c;
    for (int i=0;i<len>>1;i++)
    {
        c = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = c;
    }
}

void main()
{
    char A[400];
    printf("\nplease input a string:\n");
    gets(A);
    printf("origin is : %s\n", A);
    rev_str(A);
    printf("now    is : %s\n", A);
}

成绩统计

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define  SN 10
#define  CN 5
void get_static(double score[SN][CN]) {
    double sum;
    double mean[SN];
     stu mean score
    for (int i = 0; i < SN; i++) {
        sum = 0;
        for (int j = 0; j < CN; j++)
        {
            sum += score[i][j];
        }
        printf("学生%d的平均分是: %.2f\n\n", i+1, mean[i] = sum/CN);
    }

    course mean score
    for (int i = 0; i < CN; i++) {
        sum = 0;
        for (int j = 0; j < SN; j++)
        {
            sum += score[j][i];
        }
        printf("课程%d的平均分是: %.2f\n\n", i + 1, sum / SN);
    }

    max index
    double max = -1;
    for (int i = 0; i < SN; i++) 
        for (int j = 0; j < CN; j++)
            max = score[i][j]>max ? score[i][j] : max;

    for (int i = 0; i < SN; i++) 
        for (int j = 0; j < CN; j++)
            if (max == score[i][j])printf("学生%d在课程%d上得到最高分为%d\n", i+1, j+1,max);

    var
    double powsum=0, sumpow=0;
    for (int i = 0; i < SN; i++) {
        powsum += mean[i] * mean[i];
        sumpow += mean[i];
    }
    printf("\n平均分方差为:%f\n", powsum/SN - sumpow*sumpow/SN/SN);
}
void main()
{
    printf("atof的实现\n");
    char numstr[][40] = { {"1.23"},{"-123"},{"123e2"},
                        {"-123E-2"},{"12.3e2"},{"-12.3e-2"} };

    for (int i=0;i<6 ;i++)
    {
        printf("%s      \t->    %f\n", numstr[i],my_atof(numstr[i]));
    }

}

void main() 
{
    printf("\nstatic of student\ngenerate the random score\n");
    double score[SN][CN];
    double *p = score[0];
    for (int i = 0; i < SN*CN; i++)
    {
        p[i] = rand() % 30 + 70;
        printf("%.1f%c", p[i], (i%CN + 1 == CN) ? '\n' : ' ');
    }
    get_static(score);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值