孵化器 软件第三周

1. 编写程序实现下面功能:将一行字符中的每个单词的第一个字母改成大写,并将处理结 果保存在文件”d:\\program\\result.txt”中。

/*
 编写程序实现下面功能:将一行字符中的每个单词的第一个字母改成大写,并将处理结 果保存在文件”d:\\program\\result.txt”中。
 
 */
#include <stdio.h>
#include <stdlib.h>

char s[100000];

void Put(void);

int main()
{
    char *p = s;
    int i;
    
    gets(s);
    s[0] -= 32;
    
    for (i = 1; *(p+i) != '\0'; i++)
        if (*(p+i-1) == 32)
            s[i] -= 32;
    Put();
}

void Put()
{
    FILE * fp;
    int i;
    
    //if (!(fp = fopen("/Users/mengyue/Desktop/output.c","w")))
    if (!(fp = fopen("d:\\program\\result.txt","w")))
        exit(1);
    
    for (i = 0; s[i] != '\0'; i++)
        fputc(s[i],fp);
    
    fclose(fp);
}
01

 

2.利用结构数组处理多个学生信息。假设学生信息包括学号、姓名、3 门课的成绩,计算每 个学生的总分,并按总分从高到低进行输出。
例:
Input

先输入一个整数 n,表示有 n 个学生的信息。

接着输入每个学生的学号、姓名以及 3 门课程的成绩。

Output

输出每个学生的学号、姓名以及总分。每个学生的信息占据一行。

Sample input

3
1101
peter chen 90 91 92 1102
susan wang 87 88 89 1103

anney li 86 85 84

Sample output

1101 peter chen 273 1102 susan wang 264 1103 anney li 255

#include <stdio.h>

int n;
struct
{
    int number;
    char name[20];
    int score[3];
    int sum;
} Student[100],t;

void Scanf(void);
void Sort(void);
void Print(void);

int main()
{
    Scanf();
    Sort();
    Print();
}

void Scanf(void)
{
    int i;
    scanf("%d",&n);
    
    for (i = 0; i < n; i++)
    {
        scanf("%d",&Student[i].number);
        getchar();
        gets(Student[i].name);
        scanf("%d",&Student[i].score[0]);
        scanf("%d",&Student[i].score[1]);
        scanf("%d",&Student[i].score[2]);
        Student[i].sum = (Student[i].score[0]+Student[i].score[1]+Student[i].score[2]);
    }
}

void Sort(void)
{
    int i,j,k;
    for (i = 0; i < n-1; i++)
    {
        k = i;
        for (j = i+1; j < n; j ++)
            if (Student[j].sum > Student[k].sum)
                k = j;
        t = Student[i];
        Student[i] = Student[k];
        Student[k]= t;
    }
}

void Print(void)
{
    int i;
    
    for (i = 0;i < n; i ++)
    {
        printf("%d ",Student[i].number);
        printf("%s ",Student[i].name);
        printf("%d\n",Student[i].sum);
    }
}
02

 

 

3.有 N 个学生,每个学生的信息包含学号,姓名,和 M 门课的成绩 即有结构体数组

#define N 30 #define M 5 struct student {

char num[10]; char name[20]; float score[M]; float stu_avg; float cource_avg;

}stu[N]
(2) 利用函数 void input(struct student *p,int n, int m ) 完成数据的输入
(3) 利用函数 void process(struct student *p, int n, int m) 计算每个学生 M 门课的平

均成绩;

(4) 利用函数 void output(struct student *p, int n, int m) 将处理结果输出;

 

#include <stdio.h>
#define N 30
#define M 5

struct student
{
    char num[10];
    char name[20];
    float score[M];
    float stu_avg;
    float cource_avg;
}stu[N];

void input(struct student *p, int n, int m);
void process(struct student *p, int n, int m);
void output(struct student *p, int n, int m);

int main()
{
    input (stu, N, M);
    process(stu, N, M);
    output(stu, N, M);
}

void input(struct student *p, int n, int m)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        scanf("%s",(p+i)->num);
        getchar();
        gets((p+i)->name);
        for (j = 0; j < m; j++)
            scanf("%f",&(p+i)->score[j]);
    }
}

void process(struct student *p, int n, int m)
{
    int i, j;
    double sum;
    for (i = 0; i < n; i++)
    {
        sum = 0;
        for (j = 0; j < m; j++)
            sum += (p+i)->score[j];
        (p+i)->stu_avg = sum/M;
    }
}

void output(struct student *p, int n, int m)
{
    int i;
    for (i = 0; i < n; i++)
    {
        printf("%s ",(p+i)->num);
        printf("%s ",(p+i)->name);
        printf("%f\n",(p+i)->stu_avg);
    }
}
03

 

 

4.输入一个整数,将其低八位设置为 10101110,高八位保留原样,并以十六进制输出该 数。

 

#include <stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    n = n & 65454;
    n = n | 174;
    printf("%x",n);
    return 0;
}
04

 

 

5.(拓展题)设计 main()函数进行测试。已知一个正整数组成的无序序列,个数未知,但 至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后 将这个链表进行排序,使得排序后的链表为递增序列。正整数的输入用-1 作为结束标志, 注意-1 不算这个正整数序列中的元素(不要统计-1)。在排序的过程中,你可以自己选择 排序算法(冒泡排序、选择排序等),但必须是通过修改结点的指针域来进行排序,而不 是对结点的数据域进行修改。程序结束后要释放所有节点占据的空间。 输入与输出要求:输入一个元素个数未知的正整数序列,以输入“-1”结束,输入“-1” 前至少输入一个正整数。输出经过排序后的链表,每个元素后有一个空格,注意最后一个 元素后只有换行符。

程序运行效果:
Please input a list(end by -1):49 38 65 97 76 13 27 49 -1↙

The new list is:13 27 38 49 49 65 76 97

 

#include <stdio.h>
#include <stdlib.h>

struct link
{
    int date;
    struct link* next;
}   *pi, *pj, *q, *p, t;

int main()
{
    struct link * head, *ptail, *pnew;
    printf("Please input a list(end by -1):");
    
    /*build*/
    pnew = (struct link*) malloc(sizeof(struct link*));
    scanf("%d",&pnew->date);
    head = ptail = pnew;
    while(1)
    {
        pnew = (struct link*) malloc(sizeof(struct link*));
        scanf("%d",&pnew->date);
        if (pnew->date == -1) break;
        ptail->next = pnew;
        ptail = pnew;
    }
    ptail->next = NULL;
    
    
    /*sort*/
   
    pi = head;
    while (pi->next != NULL)
    {
        pj = pi->next;
        while (pj != NULL)
        {
            if (pi->date > pj->date)
            {
                t = *pi;
                *pi = *pj;
                *pj = t;
                t.next = pi->next;
                pi->next = pj->next;
                pj->next = t.next;
            }
            pj = pj->next;
        }
        pi = pi->next;
    }
    

    /*print*/
    printf("The new list is:");
    for (q = head; q->next != NULL; q = q->next)
    {
        if (q != head)
            free(p);
        printf("%d ",q->date);
        p = q;
    }
    printf("%d\n",q->date);
    free(p);
    free(q);
    
    return 0;
}
05

 

 

 

转载于:https://www.cnblogs.com/liumengyue/p/9939048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值