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;
}