A. c语言编程题
根据题意:
题目1:函数参数是除数(这里传值8),返回满足条件的数字和。
题目2:函数参数是要找的项目数(这里传值10),返回对应项的值。
#include<stdio.h>
#define MIN 50
#define MAX 1000
int fa(int a);//对应题目1的函数,参数:要除的数,返回可以被整除的数之和
int getByIndex(int n);//对应题目2,返回数列第n项,错误返回-1
int main()
{
printf("1、%d~%d之间能被%d整除的数字之和为:%d ",MIN,MAX,8,fa(8));
printf("2、数列头三个数为4,5,6,以后的每个数为前三数和,求此数列第%d项:%d ",10,getByIndex(10));
return 0;
}
int fa(int a)//对应题目1的函数,参数:要除的数,返回可以被整除的数之和
{
int i,sum=0;
for(i=MIN;i<=MAX;i++)
if(i%a==0)
sum+=i;
return sum;
}
int getByIndex(int n)//对应题目2,返回数列第n项,错误返回-1
{
if(n<1)
return -1;
int i,nums[n];
nums[0]=4,nums[1]=5,nums[2]=6;
for(i=3;i<n;i++)
nums[i]=nums[i-1]+nums[i-2]+nums[i-3];
return nums[n-1];
}
B. C语言编程题
1.将程序段填充完整(实现12个月每个月天数的输出)
case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break;
case 4: case 6: case 9: case 11: days=30;break;
case 2:
if((yy%4==0 && yy%100!=0) || yy%400==0) days=29;
else days=28;
break;
2.输入4个整数a,b,c,d,编写程序,将它们按从大到小的顺序输出(if语句实现)
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a>b && a>c && a>d) printf("%d ",a);
if(b>a && b>c && b>d) printf("%d ",b);
if(c>a && c>b && c>d) printf("%d ",c);
if(d>a && d>b && d>c) printf("%d ",d);
3.假设奖金税率如下(ma代表税前奖金且ma>0,r代表税率),利用switch语句编写程序对输入的一个奖金数,输出税率和应交税款及实得奖金数(扣除奖金税后)。
int ma;
float r,ts,sd;
scanf("%d",&ma);
switch(ma/1000)
{
case 0: r=0;break;
case 1: r=0.05;break;
case 2: r=0.08;break;
default: r=0
C. c语言编程题
C语言编程题
1.(*)求分数序列:1/2,2/3,3/5,5/8,8/13,13/21...... 前20项的和。
main()
{float i=1,j=2,t=0,s,n,m;
for(n=1;n<=20;n++)
s=i/j,m=i,i=j,j=m+j,t=t+s;
printf("t=%f",t);
}
2.(*)从键盘输入一个字符串,再将其逆序输出。(如:输入abcde,输出edcba)
main()
{int i;
char c[10];
scanf("%s",c);
for(i=9;i>=0;i--)
printf("%c",c[i]);
}
3.(*)已知abc+cba=1333,其中a、b、c均为一位数,例如:617+716=1333, 518+815=1333,
试编程求出符合这一规律的a、b、c,并输出结果。
main()
{int a,b,c,x,y;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=1;c<=9;c++)
{ x=100*a+10*b+c;
y=100*c+10*b+a;
if(x+y==1333)
printf("x=%d,y=%d",x,y);}
}
4.(*)利用海伦公式求三角形面积,三边长a,b,c由键盘输入。若输入的三边长不能构成
三角形,输出相应提示信息。海伦公式如下:其中s=(a+b+c)/2
三角形面积=
#include"math.h"
main()
{ float a,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
if(a+b>c&&a+c>b&&b+c>a)
printf("area=%f",area);
else
.1 .
printf("no");
}_
5.(*)编程求出1!+2!+3!+…+8!+9!+10!的值并输出。
程序1: main()
{ int i,j;
double p=1, sum=0;
for(i=1;i<=10;i++)
{ for(j=1;j<=i;j++)
p=p*i;
sum=sum+p;p=1.0;}
printf("sum=%f",sum);
}_
程序2:float fac(n)
int n;
{flo
D. 求教c语言的编程题目
根据题意构建学生结构体。查询分析。
1.手动录取学生信息对应我的函数iputCStus,连续输入一个班级的学生信息,构建一条链表,返回头节点,想创建多个班级,反复调用即可。
2.统计平均分和最高最低分,对应我的函数showById。
3.统计功能对应函数tjRN。
另外,由于演示和测试需要一组学生信息,反复手动输入不合理,所以我又单独写了一个随机数自动生成数据的函数init,你不需要可以删除。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <malloc.h>
#define SN 3//学科门数
#define MINS 60//不及格阀值,低于该值不及格
typedef struct student
{
char id[10];
char name[10];
int scores[SN];
struct student *next;
}STU;
STU *iputCStus();//输入一个班级的学生信息,创建链表,成功返回头节点,失败返回NULL
void freeSList(STU *stusHead);// 释放链表
void showById(STU *stusHead);//按照学号输出成绩
void showBySc(STU *stusHead);//每门课程的平均分、最高分、最低分
void tjRN(STU *stusHead);//统计区间人数60以下,[60~79],[80~89],[90及以上],返回数组
int main()
{
//----测试用!!!代替手动输入---------
STU *init();
STU *stusHead=init();
//-------------------------------------
//题目要的手动输入--替换上面的测试函数--------------
//STU *stusHead=iputCStus();
//--------------------------------------------------
showById(stusHead);
showBySc(stusHead);
tjRN(stusHead);
return 0;
}
STU *init()//测试用函数,不需要可以删除,用到头文件stdlib和time也可以一并删除
{
#define STN 9//测试生成的学生数量
int i,j,sc;
char snum[STN];
STU *stusTail=NULL;
static STU stusHead,stusNew[STN];
srand(time(NULL));
printf("---开始生成测试用数据链表(50~100随机数作为成绩)---- ");
for(i=0;i<STN;i++)
{
strcpy(stusNew[i].id,"S00");
strcat(stusNew[i].id,itoa(i+1,snum,10));
strcpy(stusNew[i].name,"学生");
strcat(stusNew[i].name,snum);
for(j=0;j<SN;j++)
{
sc=rand()%51+50;//50~100的随机数
stusNew[i].scores[j]=sc;
}
if(i==0)
stusHead.next=&stusNew[i];
else
stusTail->next=&stusNew[i];
stusTail=&stusNew[i];
}
return &stusHead;
}
void freeSList(STU *stusHead)
{
STU *stusLast=NULL;
if(stusHead)
while(stusHead->next)
{
if(stusLast)
free(stusLast);
stusLast=stusHead->next;
stusHead=stusHead->next;
}
if(stusLast)
free(stusLast);
if(stusHead)
free(stusHead);
}
void tjRN(STU *stusHead)//统计区间人数60以下,[60~79],[80~89],[90及以上],返回数组
{
STU *stusHSave=stusHead;
int scnt=0,i,tj[SN][4];
for(i=0;i<SN;i++)
{
tj[i][0]=tj[i][1]=tj[i][2]=tj[i][3]=0;
printf(" 课程%d统计结果: ",i+1);
while(stusHead->next)
{
if(stusHead->next->scores[i]<60)
tj[i][0]++,printf("学号:%-5s 成绩:%3d不及格 ",stusHead->next->id,stusHead->next->scores[i]);
if(stusHead->next->scores[i]>=60 && stusHead->next->scores[i]<=79) tj[i][1]++;
if(stusHead->next->scores[i]>=80 && stusHead->next->scores[i]<=89) tj[i][2]++;
if(stusHead->next->scores[i]>=90) tj[i][3]++;
if(i==0) scnt++;
stusHead=stusHead->next;
}
printf("不及格人数共计:%d ",tj[i][0]);
printf("60-80分的人数为:%d,占比:%.0f%% ",tj[i][1],tj[i][1]*1.0/scnt*100);
printf("80-90分的人数为:%d,占比:%.0f%% ",tj[i][2],tj[i][2]*1.0/scnt*100);
printf("90分以上的人数为:%d,占比:%.0f%% ",tj[i][3],tj[i][3]*1.0/scnt*100);
stusHead=stusHSave;
}
}
void showBySc(STU *stusHead)
{
float avg[SN];
int i,sum[SN]={0},max[SN]={0},min[SN]={0},sCNT=0;
STU *stusHSave=stusHead;
printf(" ");
for(i=0;i<SN;i++)
{
if(stusHead->next)
max[i]=min[i]=stusHead->next->scores[i];
while(stusHead->next)
{
if(stusHead->next->scores[i]>max[i])
max[i]=stusHead->next->scores[i];
else if(stusHead->next->scores[i]<min[i])
min[i]=stusHead->next->scores[i];
sum[i]+=stusHead->next->scores[i];
sCNT++;
stusHead=stusHead->next;
}
avg[i]=sum[i]*1.0/sCNT;
stusHead=stusHSave;
}
for(i=0;i<SN;i++)
printf("课程%d的平均分为%.1f,最高分为%d,最低分为%d ",i+1,avg[i],max[i],min[i]);
printf(" ");
}
void showById(STU *stusHead)
{
int i;
printf(" ");
while(stusHead->next)
{
printf("学号:%-5s的成绩分别为:",stusHead->next->id);
for(i=0;i<SN;i++)
printf("%3d ",stusHead->next->scores[i]);
printf(" ");
stusHead=stusHead->next;
}
}
STU *iputCStus()
{
int i;
char c;
STU *stusHead=NULL,*stuNew=NULL,*stuTail=NULL;
stusHead=(STU *)malloc(sizeof(STU));
if(!stusHead) return NULL;
stusHead->next=NULL;
while(1)
{
stuNew=(STU *)malloc(sizeof(STU));
if(!stuNew)
{
freeSList(stusHead);
return NULL;
}
stuNew->next=NULL;
printf("请输入学生学号:"),scanf("%s",stuNew->id);
printf("请输入学生姓名:"),scanf("%s",stuNew->name);
for(i=0;i<SN;i++)
printf("请输入学科%d成绩:",i+1),scanf("%d",&stuNew->scores[i]);
if(stusHead->next==NULL)
stusHead->next=stuNew;
else
stuTail->next=stuNew;
stuTail=stuNew;
getchar();
c=0;
while(c!='Y' && c!='N')
printf(" 是否继续录入?Y/N "),c=getchar();
printf(" ");
if(c=='N')
break;
}
return stusHead;
}