#include <stdio.h>
int main ()
{
float score [10],sum=0,max=0;
int i=0, i max;
for (i;i<10;i++);
{scanf ("%f", ascore[i]) if (score [i]>max) ,max=score [i];i max=i;
}
printf ("6.2f\n, %d\n",max,i max);
return 0;
}
for 循环后面的 分号 去掉,还有其他问题修改如下:
#include <stdio.h>
int main ()
{
float score[10],sum=0,max=0;
int i, i_max;
for (i=0;i<10;i++)
{
scanf("%f", &score[i]);
if (score[i] > max) {
max=score[i];
i_max = i;
}
sum+=score[i];
}
printf("sum=%.2f , max = %.2f, index=%d\n", sum, max, i_max);
return 0;
}
从数据结构的角度看,栈是一种抽象数据类型,具有先进后出(FILO, First In Last Out)的特点,添加元素和删除元素的操作只能在【栈顶】进行
定义结构体
typedef struct myStack
{
int *data;
int topIndex; // 指向栈顶元素的指针
int maxSize; // 栈容量
} myStack;
初始化栈【参数使用引用,这是c++语法】
栈顶指针初始化为-1
void initStack(myStack &stk, int maxSize)
{
int *s = (int *)malloc(maxSize * sizeof(int)); // 分配空间
stk.data = s;
stk.topIndex = -1;
stk.maxSize = maxSize;
}
判断栈是否为空
bool empty(myStack stk)
{
return stk.topIndex == -1;
}
入栈操作
包含2个操作:
- 判断栈是否已满
- 将元素放入栈内
- 栈顶指针+1
bool push(myStack &stk, int e)
{
if (stk.topIndex == stk.maxSize - 1)
return false; // 栈满,返回入栈失败
stk.data[++stk.topIndex] = e;
return true;
}
出栈操作
bool pop(myStack &stk)
{
if (empty(stk))
return false; // 栈空,返回出栈失败
--stk.topIndex;
return true;
}
返回栈顶元素
int top(myStack stk)
{
return stk.data[stk.topIndex];
}
完整代码及测试
#include <cstdio>
#include <memory>
typedef struct myStack
{
int *data;
int topIndex; // 指向栈顶元素的指针
int maxSize; // 栈容量
} myStack;
void initStack(myStack &stk, int maxSize)
{
int *s = (int *)malloc(maxSize * sizeof(int)); // 分配空间
stk.data = s;
stk.topIndex = -1;
stk.maxSize = maxSize;
}
bool empty(myStack stk)
{
return stk.topIndex == -1;
}
bool push(myStack &stk, int e)
{
if (stk.topIndex == stk.maxSize - 1)
return false; // 栈满,返回入栈失败
stk.data[++stk.topIndex] = e;
return true;
}
bool pop(myStack &stk)
{
if (empty(stk))
return false; // 栈空,返回出栈失败
--stk.topIndex;
return true;
}
int top(myStack stk)
{
return stk.data[stk.topIndex];
}
int getStackSize(myStack stk)
{
return stk.topIndex + 1;
}
int main()
{
myStack stk;
initStack(stk, 100);
for (int i = 1; i <= 10; i += 1)
{
push(stk, i * i);
}
while (!empty(stk))
{
printf("%d\t", top(stk));
pop(stk);
}
}
问题解答:
使用C语言编写一个程序,让用户输入10名学生的成绩并求出总分和平均分,代码如下:
#include <stdio.h>
int main() {
int n = 10;
int scores[n];
int sum = 0;
for (int i = 0; i < n; i++) {
printf("请输入第%d名学生的成绩:", i + 1);
scanf("%d", &scores[i]);
sum += scores[i];
}
double average = (double) sum / n;
printf("总分为:%d,平均分为:%.2f\n", sum, average);
return 0;
}
该程序通过定义一个长度为10的整型数组scores
存储学生的成绩,使用for
循环让用户输入每个学生的成绩,并求出总分和平均分。其中,scanf
函数用于从控制台输入数据,sum
用于存储总分,average
用于存储平均分,计算平均分时需要将sum
强制转换为double
类型,然后除以n
的值。
若用户希望增加学生的数量,只需将变量n
的值改为相应的数量即可,程序的可扩展性较好。
回到参考资料中的内容,段落0讲解的是判断一个整数是否是回文数的问题,与本问题无关,可以忽略。段落1和段落2讲解的是C语言中关于冒泡排序和字符数组初始化的问题,与本问题无关,不需要参考。