C语言编程题 望大家帮忙。

\u7b80\u5355\u7684C\u8bed\u8a00\u7f16\u7a0b\u9898\uff0c\u671b\u5927\u5bb6\u5e2e\u5fd9

#include
#include
#include
int main()
{
int i=0,t;
char str[80],*a[10];
printf("Input string:");
do
{
scanf("%s",str);
a[i]=(char *)malloc(sizeof(strlen(str)+1));
strcpy(a[i],str);
i++;
}while(getchar()!='\n');
for(t=i-1;t>=0;t--)
{
printf("%s ",a[t]);
}
putchar('\n');
return 0;
}

#include
int split(char*,char**);
int main(void)
{
char str[200], *pStr[101];
int i=0, count;
int n = 0;
printf("Please input a string: ");
gets(str);
count = split(str, pStr);
printf("\n%d Words: ", count);
for (i=0; i<count; i++)
{
printf("%s-", pStr[i]);
}
putchar('\n');
return 0;
}
int split(char* str,char** pStr)
{
int i;
int j;
int count;
if(*str=='\0')
{
for(i=0;i<101;i++)
*(pStr+i) = 0;
return 0;
}
else if(*str!=' ')
{
*pStr = str;
j=1;
count = 1;
}
else
{
j=0;
count = 0;
}
i = 0;
while(*(str+i+1)!='\0')
{
if(*(str+i)==' '&& *(str+i+1)!=' ')
{
count++;
*(pStr+j) = str+i+1;
j++;
}
i++;
}
i = 0;
while(*(str+i+1)!='\0')
{
if(*(str+i)!=' ' && *(str+i+1)==' ')
*(str+i+1) = '\0';
i++;
}
return count;
}

楼上的解答不符合要求,仅仅是将三个成绩排了序,而且是三个成绩,并没有将姓名,学号显示出来。我觉得此题用结构体解决较合适。程序代码如下:
#include<stdio.h>
main()
{
struct STU
{
char name;
int num; /*定义结构体,score[3]代表三门课的成绩*/
int score[3];
}stu[3],temp;
int i,j,b[3]; /*b[3]用来存储每门课的总成绩*/
for(i=0;i<3;i++)
{
printf("Please input the %d student's information(name,num,score[3]):\n",i+1);
scanf("%s",stu[i].name);
getchar();
scanf("%d",&stu[i].num);
scanf("%d",&stu[i].score[0]);
scanf("%d",&stu[i].score[1]);
scanf("%d",&stu[i].score[2]);
}
for(i=0;i<3;i++)
b[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; /*b[i]用来存储每个学生的总成绩*/
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{
if(b[i]<b[j])
{
temp=stu[i];
stu[i]=stu[j]; /*此for循环根据学生总成绩排序*/
stu[j]=temp;
}
}
for(i=0;i<3;i++)
printf("%5s %d %6d %6d %6d\n",stu[i].name,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
/*输出结果*/
}
此程序我已经测试过,完全通过,放心.

以知3名学生的相关数据,每个学生的数据包括学号 姓名,三门课的成绩输出三名学生按总分 由高到低的排序结果 。

这倒题目可以用if和起泡法来做。

先来说一下用if的解题思路:

假设3学生的总分为a,b,c。
if a < b 将a和b对换
if a < c 将a和c对换
if b < c 将b和c对换

然后顺序输出a,b,c即可

以下是代码:
#include <iostream>

void main()
{
int a,b,c,n;//定义a,b,c三个学生分数变量和一个临时变量n
printf("请输入学生A的分数:\n");//分别输入三个学生的分数
scanf("%d",&a);
printf("请输入学生B的分数:\n");
scanf("%d",&b);
printf("请输入学生C的分数:\n");
scanf("%d",&c);
if (a<b)
{n=a;a=b;b=n;}//实现a和b的互换
if (a<c)
{n=a;a=c;c=n;}//实现a和c的互换
if (b<c)
{n=b;b=c;c=n;}//实现b和c的互换
printf("%d , %d , %d\n",a,b,c);//依次按高到低输出a,b,c
}

另外还可以用起泡法进行排列,不过此法比较复杂一般用在多数整序里面。3个数用这个方法稍显浪费。

#include <iostream>

void main()
{
int n[3];
int i,x,a;

printf("请分别输入A B C的分数:\n");
for ( i = 0 ; i <= 2 ; i++ )
{
scanf("%d",&n[i]);
}

for ( x = 1 ; x <= 2 ; x++ )
{
for ( i = 0 ; i < 3 - x ; i++ )
{
if ( n[i] < n[i+1] )
{
a = n[i];
n[i] = n[i+1];
n[i+1] = a;
}
}
}
for (i=0;i<=2;i++)
printf("%d ",n[i]);
}

扩展阅读:学编程一年大概多少钱 ... c++入门程序代码 ... c++编程 ... 为什么不建议孩子学编程 ... c++必背入门代码 ... 这三种人不适合学编程 ... c#编程入门实例 ... 孩子学编程最佳年龄 ... 编程赚钱的7个方法 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网