编程实践题
要输入的分数太多,我懒得手数,用2位随机数代替手输入,输入函数我单独写了,你需要调用就行了,详细看备注。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#definestuNum15//学生人数
#definescNum7//模块数
typedefstructstu//定义学生数据结构
{
intsid;//学生ID
intsc[scNum];//对应7个模块成绩
intsum;//总成绩
}STU;
voidinsertSTU(STU*stu);//输入15个学生的信息
voidinsertTest(STU*stu);//测试,用随机数代替输入,我懒得输入那么多成绩,你要手输,调用insertSTU替换该函数
voidprintfSTU(STU*stu);//按输入顺序打印15名学生7模块成绩及每个模块前三名的成绩
intmain()
{
STUstu[stuNum];//定义15个学生
//inti,j,sc;
srand(time(NULL));
insertTest(stu);//想手动输入这里改成insertSTU(stu)
printfSTU(stu);
return0;
}
voidprintfSTU(STU*stu)//按输入顺序打印15名学生7模块成绩及每个模块前三名信息及总分前三名信息
{
inti,j,k,sc;
STU*max[3],*sum[3],newstu;//max对应7个模块前3的学生结构指针sum对应总分前3学生结构指针
for(i=0;i<stuNum;i++)
{
printf("编号%02d的学生7模块成绩及总分分别为:",stu[i].sid);
for(j=0;j<scNum;j++)
{
sc=stu[i].sc[j];
printf("%02d",sc);
}
printf("%d
",stu[i].sum);
}
for(j=0;j<scNum;j++)
{
for(k=0;k<scNum;k++)
{
newstu.sc[k]=0;
newstu.sum=0;
}
max[0]=max[1]=max[2]=&newstu;
for(i=0;i<stuNum;i++)
{
if(stu[i].sc[j]>max[0]->sc[j])
max[0]=&(stu[i]);
elseif(stu[i].sc[j]>max[1]->sc[j])
max[1]=&(stu[i]);
elseif(stu[i].sc[j]>max[2]->sc[j])
max[2]=&(stu[i]);
}
printf("模块%02d前3名分别为:编号:%02d分数:%02d编号:%02d分数:%02d编号:%02d分数:%02d
",j+1,max[0]->sid,max[0]->sc[j],max[1]->sid,max[1]->sc[j],max[2]->sid,max[2]->sc[j]);
}
sum[0]=sum[1]=sum[2]=&newstu;
for(i=0;i<stuNum;i++)
{
if(stu[i].sum>sum[0]->sum)
sum[0]=&(stu[i]);
elseif(stu[i].sum>sum[1]->sum)
sum[1]=&(stu[i]);
elseif(stu[i].sum>sum[2]->sum)
sum[2]=&(stu[i]);
}
printf("总分前3名分别为:编号:%02d总分:%02d编号:%02d总分:%02d编号:%02d总分:%02d
",sum[0]->sid,sum[0]->sum,sum[1]->sid,sum[1]->sum,sum[2]->sid,sum[2]->sum);
}
voidinsertSTU(STU*stu)//输入15个学生的信息
{
inti,j,sc;
for(i=0;i<stuNum;i++)
{
stu[i].sid=i+1;
stu[i].sum=0;
printf("输入编号%d的学生的7个模块成绩:",i+1);
for(j=0;j<scNum;j++)
{
//scanf("%d",&sc);//我懒得输入那么多成绩,就用随机数代替,你要输入把这句恢复
sc=(int)(rand()%100);//用随即2位数代替输入,不需要就注释掉
stu[i].sc[j]=sc;
stu[i].sum=stu[i].sum+sc;
}
}
}
voidinsertTest(STU*stu)//测试用代替输入
{
inti,j,sc;
for(i=0;i<stuNum;i++)
{
stu[i].sid=i+1;
stu[i].sum=0;
for(j=0;j<scNum;j++)
{
sc=(int)(rand()%100);
stu[i].sc[j]=sc;
stu[i].sum=stu[i].sum+sc;
}
}
}
⑵ 问几个c语言的编程题
所有程序在win-tc和Dev-c++下试验通过,代码简练。
第一题:
/* 编一个程序,输入n个互不相等的整数存于数组中,并输出。程序如发现输入的数据已输入过,则要求重新输入。要求用指针实现。 */
#include <stdio.h>
#include <malloc.h>
int main( )
{
int i=0,j,k,n,flag,*p;
printf("Please input number of the digits:\n");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
printf("Please input %d digits one by one:\n",n);
do
{ flag=0;
scanf("%d",p+i);
for(j=0;j<i;j++)
{ for(k=j+1;k<i+1;k++)
if(*(p+k)==*(p+j))
{ printf("Input repetition! Please input again!\n");
flag=1;
break; /*如有重复立即退出该层循环,提高判断速度*/
}
if(flag==1)
break; /*如有重复立即退出该层循环,提高判断速度*/
}
if(flag==0)
i++;
}while(i<n);
printf("The input digits are:\n",n);
for(i=0;i<n;i++)
printf("%d\n",*(p+i));
system("pause");
return 0;
}
第二题:
# include <stdio.h>
# include <string.h>
# define MAX 81 /* 输入字符串不超过80字符,可更改 */
int cycle(char *s)
{
char *h,*t;
for(h=s,t=s+strlen(s)-1;t>h;h++,t--)
if(*h!=*t) break;
return t<=h;
}
int main()
{
char s[MAX];
system("cls");
while(1) /* 输入应不包括字符@,输入字符串的第一个字符为@,退出 */
{
printf("Please input the string:(input '@' to quit)\n");
scanf("%s",s);
if(s[0]=='@')
break;
if(cycle(s))
printf("%s is a cycle string.\n",s);
else
printf("%s is not a cycle string.\n",s);
}
return 0;
}
第三题:
# include <stdio.h>
# define N 20 /*设定人数为20,实际请更改*/
struct workerdent
{ char num[11]; /*工号超过10位时请加长*/
char name[13]; /*实际请更改,名字不超过12字符,一个汉字2个字符*/
int age;
int page;
}worker[N];
int main()
{
int i;
/*以下为输入*/
for(i=0;i<N;i++)
{printf("\nInput work number of worker %d:\n",i+1);
printf("NO.:");
scanf("%s",worker[i].num);
printf("name:");
scanf("%s",worker[i].name);
printf("age:");
scanf("%d",&worker[i].age);
printf("page:");
scanf("%d",&worker[i].page);
}
/*以下为输出*/
printf("NO. name age page\n");
for(i=0;i<N;i++)
{ printf("%-11s%-13s%-5d%-5d\n",worker[i].num,worker[i].name,worker[i].age,worker[i].page);
}
system("pause");
return 0;
}