(新手向)中国大学mooc高级语言程序设计相关OJ解答(五)

中国大学mooc高级语言程序设计地址:https://www.icourse163.org/course/JLU-62001

第八讲:指针应用 & 结构体–编程题

3找出最长的单词(10分)

题目内容:输入5个单词,输出最长单词及其长度。如果有多个单词都是最长单词,则输出第一个。

输入:5个单词

输出:最长单词的长度及该单词(中间用一个西文空格间隔)

样例:输入:This table belongs to Mary 输出:7 belongs

#include<stdio.h>
int main(){
char a[100],flag[5],*p=a;
int i,t,max;
gets(a);
for(i=0;i<=4;i++)//一次i++对应一次完整的单词检查
{
t=0;
while(*p!=' '){t++;p++;if(*p=='\0')break;}
p++;//一次检查过后,再让指针指向下一个单词首字母
flag[i]=t;//储存单词长度
}
max=flag[0];
t=0;
for(i=1;i<=4;i++)//比较单词长度
{
if(max<flag[i]){
max=flag[i];
t=i;//储存最长单词的下标
}
}
p=a;
for(i=0;i<t;i++)while(*(p++)!=' ');//使指针指向最长单词的开头
printf("%d ",max);
while(*p!=' '){printf("%c",*p);p++;if(*p=='\0')break;}
return 0;
}

4求不及格学生姓名及成绩(10分)

题目内容:定义一个学生结构体,包括学生的姓名和一门课程成绩。实现用户从键盘输入n名学生的所有信息(最多不超过200人),输出所有不及格的学生姓名和成绩。

输入:依次输入n(正整数),姓名(不超过19个字符的字符串),成绩(正整数)。

输出:所有不及格的学生姓名和成绩(相邻数据用1个空格隔开,每个学生信息占用一行)。

样例1:

输入:

3

zhang 58

wang 72

zhao 34

输出:

zhang 58

zhao 34

#include<stdio.h>
struct {
	char name[19];
	int grade;
}ty_list[200];
int main(){
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%s%d",&ty_list[i].name,&ty_list[i].grade); 
	}
	for(i=0;i<n;i++){
		if(ty_list[i].grade<60)printf("%s %d\n",ty_list[i].name,ty_list[i].grade);
	}
	return 0;
}

5求总成绩最高的学生姓名(10分)

题目内容:定义一个学生结构体,包括学生姓名和数学和语文成绩。实现用户从键盘输入n名学生的所有信息(最多不超过200人),输出总成绩最高的学生姓名。

输入:学生人数n(一个正整数),n名学生的姓名(一个字符串,长度不超过19个字符)、数学成绩(一个正整数)、语文成绩(一个正整数)

输出:总成绩最高的学生姓名

样例:

输入:3

zhang 68 89

wang 72 56

zhao 34 78

输出:

zhang

#include<stdio.h>
struct {
	char name[19];
	int mgrade;
	int cgrade;
}list[200];
int main(){
	int i,n,r=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%s%d%d",&list[i].name,&list[i].mgrade,&list[i].cgrade);
	for(i=1;i<n;i++){
		if(list[r].mgrade+list[r].cgrade<list[i].mgrade+list[i].cgrade)r=i;
	}
	puts(list[r].name);
	return 0;
}

都是简单的结构体相关计算,不难。

第八讲:指针应用 & 结构体–编程题–拓展篇(不计入成绩)

1字符串替换(10分)

题目内容:编写程序,将字符串中的所有大写英文字母按以下对应规则替换,其余类型的字符不替换:

原字母: ABCD……XYZ

替换后字母:ZYXW……CBA

输入:在一行中输入一个不超过99个字符、并以回车结束的字符串。

输出:在一行中输出替换完成后的字符串。

样例1:输入:ABCD 输出:ZYXW

样例2:输入:AbCDefG, Hijklmn OPq …XYZ 输出:ZbXWefT, Sijklmn LKq …CBA

#include<stdio.h>
int main(){
	char a[99],*p=a;
	gets(a);
	while(*p!='\0'){
	if(*p>='A'&&*p<='Z')printf("%c",'A'+'Z'-*p);//要输出的元素与输入元素关于‘A’+‘Z’互补
	else printf("%c",*p);//其他字符不替换
	p++;
	}
	return 0;
}

2求n名学生各自的总成绩(10分)

题目内容:定义一个学生结构体,包括学生姓名、两门课成绩和总成绩。实现用户从键盘输入n名学生的所有信息(最多不超过200人),求每个学生的总成绩并输出。

输入:学生人数n(1个正整数),n名学生的姓名(1个字符串,长度不超过19个字符)和两门课程的成绩(2个正整数)

输出:每个学生的姓名、总成绩 (相邻数据用一个空格隔开,每个学生信息占用一行)

样例:

输入:

3

zhang 68 89

wang 72 56

zhao 34 78

输出:

zhang 157

wang 128

zhao 112

#include<stdio.h>
struct {
	char name[19];
	int g1;
	int g2;
}list[200];
int main(){
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%s%d%d",&list[i].name,&list[i].g1,&list[i].g2);
	for(i=0;i<n;i++)printf("%s %d\n",list[i].name,list[i].g1+list[i].g2);
	return 0;
}

3成绩排序(10分)

题目内容:定义一个学生结构体,包括学生名字、1门课程的成绩。实现用户从键盘输入n名学生的所有信息(最多不超过200人),根据成绩从高到低进行排序并输出。

输入:学生人数n(1个正整数),n名学生的姓名(1个字符串,长度不超过19个字符)和成绩(1个非负整数)

输出:每个学生的姓名、总成绩 (相邻数据用一个空格隔开,每个学生信息占用一行)

样例:

输入:

3

zhang 68

wang 72

zhao 34

输出:

wang 72

zhang 68

zhao 34

#include<stdio.h>
struct list{
	char name[19];
	int grade;
}list[200];
void max(struct list *a,int n){
	int i,j;
	struct list r;//r作为结构体中间变量
	for(j=0;j<n-1;j++)
	for(i=0;i<n-1;i++){
		if(a[i].grade<a[i+1].grade){
			r=a[i];
			a[i]=a[i+1];
			a[i+1]=r;
		}
	}
}
int main(){
	int i,j,n;
     scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%s%d",&list[i].name,&list[i].grade);
	max(list,n);
	for(i=0;i<n;i++)printf("%s %d\n",list[i].name,list[i].grade);
return 0;
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页