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); }
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); } }
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); } }
4.输入一个整数,将其低八位设置为 10101110,高八位保留原样,并以十六进制输出该 数。
#include <stdio.h> int main() { int n; scanf("%d",&n); n = n & 65454; n = n | 174; printf("%x",n); return 0; }
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; }