A. c語言 學生成績篩選及排序等問題
#include "stdio.h"
main()
{
float std[30],B,S;
int n=0,bjg=0,i,j,temp;
system("cls");
printf("請輸入學生成績(不多於30個):\n");
do
{
scanf("%f",&std[n]);
n++;
}
while(std[n-1]>=0);
if(n==1)
printf("沒有收到哦!");
else
{
n--;
/*不及格成績篩選*/
for(i=0;i<n;i++)
{
if(std[i]<60)
{
printf("%.2f ",std[i]);
bjg++;
}
}
printf("\n不及格人數為:%d",bjg);
/*排序*/
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
if(std[i]>std[i+1])
{
temp=std[i];std[i]=std[i+1];std[i+1]=temp;
}
}
printf("\n排序結果為:\n");
for(i=0;i<n;i++)
printf("%.2f ",std[i]);
/*最高最低成績*/
printf("\n最高成績是: %.2f \n最低成績是:%.2f",std[n-1],std[0]);
}
}
B. 這是C語言編譯的一個成績篩選程序,為什麼最後輸出是0怎麼改呢
你的Input函數有問題啊
你只判斷了max<score的情況,當你的score小於0的時候,沒有處理,而且也沒有返回
上面估計默認就當你返回0了,因此你最後的時候y=0,而且max是個局部變數,你每次比較x都是與0比較,並沒有起到每次獲取大值的目的。
main函數中,你應該先判斷x是否小於0,然後調用Input
Input可以這樣用:
y=y>Input(x)?y:Input(x);
其實不都不用使用Input函數,直接在main中就能實現
intmain()
{
intx,y;
printf("pleaseinputscores(-1tobreak):");
y=0;
for(;;)
{
scanf("%d",&x);
if(x<0)
break;
y=y>x?y:x;
printf("%d已鍵入",x);
}
printf("最高成績為%d",y);
}
C. c語言篩選法
scanf("%s",name);//輸入名字
for(i=0;i<人數;i++)
{
//比較名字
if(strcmp(stu[i].name,輸入的名字)==0)
{
//列印
printf(.............);
}
}
D. C語言在數組中篩選數處理
#include"stdio.h"
#defineN100
intmain(intargc,charconst*argv[])
{
inta[N],i,j;
for(i=0;i<N;++i)
{
scanf("%d",a+i);
}
for(i=0;i<N;i++)
{
for(j=i+1;j<N;++j)
{
if(a[i]%2==1&&a[j]%2==1&&a[i]>a[j])
{
a[i]=a[i]-a[j];
a[j]=a[i]+a[j];
a[i]=a[j]-a[i];
}
}
}
for(i=0;i<N;++i)
{
if(i%10==0)printf(" ");
printf("%d",a[i]);
}
return0;
}
以上演算法基於選擇排序演算法
可將N設置為10 ,進行測試
E. C語言中篩選法是怎麼一回事,請知道的詳細講一下
你真是大哥啊,篩選法是演算法,他不是C語言中獨有的,是一種解題思想
F. C語言中篩選法是怎麼考慮的,就是分幾個步驟考慮篩選出素數
先解釋一下篩選法的步驟:<1>
先將1挖掉(因為1不是素數)。<2>
用2去除它後面的各個數,把能被2整除的數挖掉,即把2的倍數挖掉。<3>
用3去除它後面的各數,把3的倍數挖掉。<4>
分別用4、5…各數作為除數去除這些數以後的各數。上述操作需要一個很大的容器去裝載所有數的集合,只要滿足上述條件,即2的N次方的全部置0,3的N次方的全部置0,4的N次方的全部置0.。。。一直到這個數據集合的末尾,這樣一來不為0的數就是素數了,然後按下標在裡面進行查找就好了篩選法程序如下
#includeint
main()
{
int
x[100001];
int
temp,n,
i;
//初始化數組
for(i=0;i<100001;i++)
x[i]=0;
//初始化數組完成
/*
預計結果,
數組中質數為0,其它為1
*/
x[0]=x[1]=1;//因為
0和1不能通過計算得到,所以只能手工置1
,1即不是合數也不是質數for(i=2;i<100001;i++)
{//循環數組中的每個數
if(x[i]==0){//如果該數所存的值為0,即第一次接觸此數
temp=2*i;//將它的二倍,及n倍(要小於100000)
,都置為1,因為這些數都能被i整除
while(temp<=100000)
{
x[temp]=1;
temp+=i;
}
}
}
scanf("%d",&n);
while(n
!=
0)
{
if(x[n]==0)
printf("素數\n");
else
printf("合數\n");
scanf("%d",&n);
}
return
0;
}如果你覺得這個方法不好理解,你可以用上面他們寫的那些常規演算法,但是數字過大的話,算起來是很慢的
G. c語言篩選成績最高學生
#include<stdio.h>
#include<string.h>
#defineMaxNum30
typedefstruct{
charNo[7+1];
floatMathScore;
floatEnglishScore;
floatComputeScore;
doubleAverage;
}Student;
doubleave(Student*S,char*no);
voidprint(Student*S,char*no);
intfind(Student*S);
staticunsignedintcnt;
intmain(intargc,char*argv[]){
printf("Pleaseinputstudents'count:");
scanf("%d",&cnt);
Studentstd[MaxNum];
for(unsignedinti=0;i!=cnt;i++){
scanf("%s%f%f%f",std[i].No,&std[i].MathScore,&std[i].EnglishScore,&std[i].ComputeScore);
}
charno[7+1];
printf("Ave|Pleaseinputthestudent'sNo:");
scanf("%s",no);
doubleaverage;
average=ave(std,no);
printf(" no.=%s|ave=%.2f ",no,average);
printf("Find|");
unsignedintnumber;
number=find(std);
printf("%dth|%s ",number,std[number].No);
printf("Print|pleaseinputthestudents'No:");
scanf("%s",no);
print(std,no);
return0;
}
//輸出某個學生的全部信息
voidprint(Student*S,char*no){
printf("No. Math. Eng. Comp Average ");
for(unsignedinti=0;i!=cnt;i++){
if(strcmp(S[i].No,no)==0){
printf("%8s%8.2f%8.2f%8.2f%8.2f ",S[i].No,S[i].MathScore,S[i].EnglishScore,S[i].ComputeScore,S[i].Average);
}
}
}
//計算並返回某個學生的平均成績
doubleave(Student*S,char*no){
floatval=0.0;
for(unsignedinti=0;i!=cnt;i++){
S[i].Average=(S[i].MathScore+S[i].EnglishScore+S[i].ComputeScore)/3;
if(strcmp(S[i].No,no)==0){
val=S[i].Average;
}
}
returnval;
}
//查找並返回平均成績最高的學生在結構體數組中的位置下標
intfind(Student*S){
floatscore[MaxNum];
for(unsignedinti=0;i!=cnt;++i){
score[i]=(S[i].MathScore+S[i].EnglishScore+S[i].ComputeScore)/3;
}
floatmax;
unsignedinttmp;
for(unsignedinti=0;i!=cnt;++i){
if(score[i]>max){
max=score[i];
tmp=i;
}
}
returntmp;
}
結果如圖:
H. c語言中數組的篩選、排序
第二個要求需要用另外的數組去存儲所存數標記。
如定義一個數組A[11],然後判定上面要求篩選的數據的奇偶性,將標記存在新的數組中,需要時再判定數組聽標記,然後輸出所代表的標記的數據即可。
但是這樣的話空間耗費比較大。