C语言一个编程问题

7-11 统计学生成绩(15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

如果用指针做。
(一)问题描述:设编号为1,2,…,n(n>())个人按顺时针方向围坐—圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到n,时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自l起顺序报数;如此下去,直到所有人全部出列为止。要求设计—个程序模拟此过程,并给出出列人的编号序列。
(二)基本要求:
(1)初始报数上限值m和测试数据在程序中确定;
(2)用带头结点的单循环链表作数据元素的存储结构;
(3)把带头结点的单循环链表作为抽象数据类型设计,
测试数据:
n=7,七个人的密码依次为3,1,7,2,4,8,4。
初始报数上限值m=20。
算法思想:
JesephRing()函数是实现问题要求的主要函数,其算法思想是:从l至m对带头结点的单循环链表循环计数,到m时,输出该结点的编号值,将该结点的密码作为新的m值,再从该结点的下一个结点起重新自1起循环计数。如此下去,直到单循环链表空时循环过程结束。
(三)模块划分:
(1)带头结点的单循环链表抽象数据类型为SCLinList,其中包括基本操作的函数有:初始化操作函数、插入一个结点操作函数、删除一个结点操作函数、取一个结点数据操作函数和判表是否非空操作函数。该抽象数据类型文件名为SCLinList.h。
(2)void SCLLl)eleteAfter(SCLNode *p),其功能是删除带头结点的单循环链表中指针P所指结点的下一个结点。这是对带头结点的单循环链表抽象数据类型SCLinLisl补充本问题需要的一个操作函数。
(3)void JesephRing(SCLNode *head,int m),其功能是对带头结点的单循环链表head,以m为初始报数上限值实现问题要求。
(4)void main(void),主函数,功能是给出测试数据值,建立测试数据值的带头结点单循环链表,调用JesephRing()函数实现问题要求。
(四)数据结构:数据类型DataType定义如下:
typedef struct
{ int number;/*人员编号*/
int cipher;/*人员密码*/
}DataType;
带头结点单循环链表抽象数据类型的结点结构定义如下:
typedef struct node
{ DataType data; /*单链表结点数据域。每个数据域包括:人员编号和人员密码*/
struct node * next; /*指向下一个单链表结点的指针域*/
}SCLNode;

#include
#include

struct Node
{
int ID;
struct Node * Next;
};

int main(void)
{
int num;
printf("请输入要删除的数据:\n");
scanf("%d", &num);
struct Node *p, *head, *q;
q = (struct Node *)malloc(sizeof(struct Node));
head = q;
for (int i = 0; i < 30; i++)
{
p = q;
p->ID = i+1;
q = (struct Node *)malloc(sizeof(struct Node));
p->Next = q;
}
p->Next = head;

printf("删除序号依次是:\n");
for (i = 1,p = head; p->Next != p; i++,p = p ->Next)
{
if ((i%num) == num-1)
{
printf("%d\t", p->Next->ID);
p->Next = p->Next->Next;
i++;
}
}
printf("%d\n", p->Next->ID);

return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-03
#include <stdio.h>
void main(){
int i,n,a[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
switch(a[i]/10)
{
case 10:
case 9: printf("A ");break;
case 8: printf("B ");break;
case 7: printf("C ");break;
case 6: printf("D ");break;
default: printf("E ");
}
}
printf("\b \b");
}

本回答被网友采纳

请用C语言帮我完成一道编程题
在进行编程题解答时,首先请根据说明输入一个整数。程序将提示您输入一个整数。请确保输入的整数大于1,以确保接下来的计算能够进行。接着,程序将检查输入的整数是否小于2。如果是,程序会输出一条提示信息,并立即终止。在确认输入的整数大于1之后,程序将开始对整数进行验证。它会从2开始,逐步递增到整...

C语言问题编程问题?
int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的平...

C语言初级编程的一个问题=和==的区别
x=0 switch(x)执行case 0:swithc(y==2) \/*注意以下两句解释*\/ 因为所有非0整数逻辑值都等于1.还有就是判断为真的,逻辑值为1.假为0 所以等于switch(1)(因为y=2==2判断成立)所以执行case 1: 打印出*,然后break;因为case 0:最后没有break。所以直接执行下一个case:swithc(z)z=3.所以...

求大神C语言编程,题目要求在下面
问题一:关键在输入字符和字符串要避开回车及空格分隔符。这里可以用getchar解决。问题二:就是让你函数调用。问题三:依然是函数调用,但需要函数1返回值或传递地址。至于数字字符转整型,大小写转换,都利用ascii码的差值来转换。下面是我的代码,三个函数分别对应三个问题。include<stdio.h> define MLE...

问一道C语言编程的问题,看下图
按你的提问,每天都吃一半多两个,第6天剩一个。程序按图片中的程序照猫画虎即可。计算结果,第一天摘了156个桃子,而不是100个。include <stdio.h>int main(){int day,x1,x2;day=5;x2=1;while(day>0){x1=(x2+2)*2;x2=x1;day--;}printf("total=%d\\n",x1);return 0;} 用...

C语言初级编程问题。输入两个数,打印出第一个有,第二个没有的数字
打印:i从0循环到9,如果p[i]和q[i]均等于1,输出i.实现自己做吧...这个算法的运行时间是输入数字位数的线性时间.不需要循环嵌套.比算出一个数的一位,然后循环在第二个数中判断相等效率高.设 两数分别为J位和K位,第一种算法,循环J+K次.第二种算法,循环为J*K次.第一种算法的缺点是 打印...

求教c语言的编程题目?
STU *iputCStus();\/\/输入一个班级的学生信息,创建链表,成功返回头节点,失败返回NULL void freeSList(STU *stusHead);\/\/ 释放链表 void showById(STU *stusHead);\/\/按照学号输出成绩 void showBySc(STU *stusHead);\/\/每门课程的平均分、最高分、最低分 void tjRN(STU *stusHead);\/\/...

请高手用C语言帮忙做个编程的题目,谢谢了!
{ if(number %dev == 0){ return 1;} return 0;} void EasyDone(int a){ int chose;int i,j;printf("Input your chose\\n1>能被3整除的"<Enter 1>","\\n2>能被5整除的<Enter 2>","\\n3>能被3或5整除的<Enter 3>\\n");scanf("%d",&chose);switch(chose){ case 1:for(i =...

用C语言编程写:有100个馍,100个和尚,大和尚一人吃了3个馍,小和尚3人吃...
include<stdio.h> int main(){ int x, y;for(x=1; x<34; x++){ y = 100 - x;if(y%3 == 0)if(3*x + y\/3 == 100)printf("x = %d, y = %d\\n", x, y);} return 0;}

关于C语言的基础编程,一个提问。NO.3
表达式: t =1,t+5, t++是一个逗号表达式,它的值是2.0(即表达式t++的值)。在c语言中提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14。

相似回答