1. c語言排序 選擇排序和冒泡排序
幾點建議:
1 C語言有自帶的qsort,就是實現快速排序的。你應該學習使用它就好了。
2 NODE*records[100]; 只能排序最多100個元素嗎?這樣的程序沒有什麼實際意義啊
3 rank函數里,那麼多strcpy,如果有bug的話,你可就有得哭了。
4 那個超級長的if語句啊,你沒有學過switch語句嗎?
2. c語言--有關學生的成績排名
小小我一般不搞這東西的,老生常談。看你那麼急,急人所難吧。程序已調試通過。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
char num[6];
char name[8];
int score[4];
int All;
int rank;
} stu[5];
void input()
{
int i,m,j;
for(i=0;i<5;i++)
{ stu[i].All=0;
stu[i].rank=1;/* 名次預置初值 */
printf("\n請輸入第 %d個學生數據\n",i+1);
printf("學號: ");
scanf("%s",stu[i].num);
printf("姓名: ");
scanf("%s",stu[i].name);
for(j=0;j<4;j++)
{
printf("成績 %d:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].All=stu[i].All+stu[i].score[j];
}
}
printf("\n");
for(i=0;i<5;i++)
for(m=0;m<5;m++)
if(stu[i].All<stu[m].All)stu[i].rank++;
}
void print()/* stu[]是全局結構體變數,無需作為參數傳遞 ,函數無返回值聲明為void型,不聲明默認返回類型為int型 */
{
int i,j;
system("cls");/*為了增加可移植性,用這個代替clrscr(),因為clrscr()不是標准庫函數*/
for(i=0;i<60;i++)printf("-");
printf("\n");
printf("| 學號 | 姓名 | 數學 | 英語 | 計算機| 哲學 |\n");
for(i=0;i<5;i++)
{
for(j=0;j<60;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("|\n");
}
for(i=0;i<60;i++)printf("-");
}
void print1()
{
int i,j;
system("cls");
for(i=0;i<77;i++)printf("-");
printf("\n");
printf("| 學號 | 姓名 | 數學 | 英語 | 計算機| 哲學 | 總分 | 名次|\n");
for(i=0;i<5;i++)
{
for(j=0;j<77;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("| %5d |",stu[i].All);
printf(" %2d |\n",stu[i].rank);
}
for(i=0;i<77;i++)printf("-");
}
int main()
{
int i,j;
for(j=1;j<5;j++)
{
system("cls");
printf("Please select:\n");
printf("1: input data.\n");
printf("2: print original data.\n");
printf("3: print the sorted data.\n");
printf("4: exit.\n");
scanf("%d",&i);
switch(i)
{
case 1 : input(); break; /* input()函數根本沒有實參,沒有實參怎麼可以有形參勒?實參形參要對應哦,這里也不需要實參,下同 */
case 2 : print(); getch();break;
case 3 : print1();getch();break;
case 4 : break;
}
}
system("pause");
return 0;
}
/* 不要這樣寫: */
/* void input() */
/* struct student stu[]; */
/* 這不符合現在的ANSI的c99標准 ,現在被認為是錯誤的,要這樣寫 */
/* void input(struct student stu[]) 當然我說的是當需要傳遞參數的情況下 */
3. 編寫程式輸出十個同學C語言成績,並從大到小排序
編寫程式輸出十個同學C語言成績,並從大到小排序
編寫程式輸出十個同學C語言成績,並從大到小排序
#include<stdio.h>intmain(){doublea[10];inti,j;doubletem;boolbchange=false;printf("請輸入10位同學的C語言成績,用空格隔開:\n");for(i=0;i<10;i++){scanf("%lf",&a[i]);}Bubblefor(i=1;i<10;i++){bchange=false;for(j=0;j<10-i;j++){if(a[j]<a[j+1]){tem=a[j];a[j]=a[j+1];a[j+1]=tem;bchange=true;}}if(!bchange)notchangebreak;}printf("10位同學的C語言成績由高到低是:\n");for(i=0;i<10;i++){printf("%5.1lf",a[i]);}printf("\n");return0;}
#include<stdio.h>
voidmain()
{
floata[10],k;
inti,j;
for(i=0;i<=9;i++)
scanf("%f",&a[i]);
for(i=0;i<=9;i++)
for(j=i+1;j<=9;j++)
if(a[i]>a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<=9;i++)
printf("%f",a[i]);
}
用C語言編寫「給十個數從大到小排序」
氣泡排序法:
voidrank1(inta[],intn)
{inti,j,t;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(a[j-1]>a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;}
};
}
優化後的程式:
voidrank1(inta[],intn)
{inti,j,t,flag;
for(i=0;i<n-1;i++)
{flag=0;
for(j=n-1;j>i;j--)
if(a[j-1]>a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;flag=1;}
if(flag==0)break;
}
}
求解,用C語言編寫一個程式,隨機生成100個數,並從大到小排序
#include"stdafx.h"vc++6.0加上這一行.#include"stdio.h"#include"time.h"#include"stdlib.h"intmain(void){intnDec[100],i,j,k;srand((unsigned)time(NULL));for(i=0;i<100;nDec[i++]=rand());for(i=0;i<100;i++){for(k=i,j=k+1;j<100;j++)if(nDec[k]<nDec[j])k=j;if(i!=k){j=nDec[i];nDec[i]=nDec[k];nDec[k]=j;}printf("%d",nDec[i]);}printf("\n");return0;}
C語言編寫程式,從鍵盤輸入10個數據,按從大到小的順序輸出
main()
{
inta[10],i,j,k;
printf("輸入10個整數:");
for(i=0;i<10;i++)
{
scanf("%d",a+i);
for(j=i;j>0;j--)
if(a[j-1]>=a[j])
break;
else{k=a[j-1];a[j-1]=a[j];a[j]=k;}
}
for(i=0;i<10;i++)
printf("%d",a[i]);
}
c語言要求:編寫程式將十個元素的個數組a[10]從大到小列印輸出…
#include<stdio.h>
intmain()
{
inta[10];
inti,j;
intt;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;
}
c語言程式設計輸入50個字元,按從大到小排序輸出
輸入一行字串,排序前50個,
#include<stdio.h>
#include<string.h>
intmain()
{
charc;
inti,j;
charbuf[50],temp;
printf("input50numbers\n");
for(i=0;i<50;i++)
{
if((c=getchar())==EOF)
{
printf("inputerr\n");
return-1;
}
buf[i]=c;
}
for(i=0;i<49;i++)
{
for(j=0;j<49-i;j++)
{
if(buf[j]<buf[j+1])
{
temp=buf[j];
buf[j]=buf[j+1];
buf[j+1]=temp;
}
}
}
for(i=0;i<50;i++)
putchar(buf[i]);
printf("\n");
return0;
}
氣泡排序,選擇排序,快速排序
c語言編寫,計算一矩陣的特徵值,按從大到小排序輸出。
#include<stdio.h>
intmain()
{
inta[3][5],i,j,k,temp;
通過讀取給3×5的陣列賦值
for(i=0;i<3;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
一行一行的判斷
for(k=0;k<3;k++)
{
標准冒泡法
for(j=0;j<9;j++)
{
for(i=0;i<9-j;i++)
{
if(a[k][i]<a[k][i+1])
{
temp=a[k][i];
a[k][i]=a[k][i+1];
a[k][i+1]=temp;
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
c語言(排序演演算法)隨機輸入10個整數,將其從大到小排序並輸出。
#include<stdio.h>voidmain(){inti,a[10];voidpaixu(ints[10],intn);printf("請輸入10個數:\n");for(i=0;i<10;i++){scanf("%d",&a[i]);}paixu(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}voidpaixu(ints[10],intn){inti,j,t=0;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++){if(s[i]<s[j]){t=s[i];s[i]=s[j];s[j]=t;}}}
分頁:
1
23
4. C語言中的排序函數是什麼
include <cstdlib> 或 #include <stdlib.h>
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))
參數表
*base: 待排序的元素(數組,下標0起)。
num: 元素的數量。
width: 每個元素的內存空間大小(以位元組為單位)。可用sizeof()測得。
int(*)compare: 指向一個比較函數。*elem1 *elem2: 指向待比較的數據。
比較函數的返回值
返回值是int類型,確定elem1與elem2的相對位置。
elem1在elem2右側返回正數,elem1在elem2左側返回負數。
控制返回值可以確定升序/降序。
產生隨機數的函數也是rand(),不是rank().
5. c語言中排名問題
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#definestatusint
#defineNAME30/*各類名稱字數上限*/
#defineSTU100/*學生人數上限*/
#defineSUB10/*課程數上限*/
typedefstructrecord{
floatscore;/*成績分數*/
}record;
typedefstructstudent{
intid;/*索引性質的id*/
intno;/*學號*/
charname[NAME];/*姓名*/
recordscores[SUB];/*各門課成績分數*/
floattotalScore;/*總分*/
floataverageScore;/*平均分*/
intranking;/*名次*/
}student;
intsubNum=3;/*課程數*/
charsubject[SUB][NAME]={"數學","英語","計算機"};/*課程名稱*/
/**********************以下為函數聲明**********************/
intstuInfoEmpty(studentstu[],intstuNum);/*學生信息判空*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum);/*錄入單個學生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum);/*錄入全部學生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum);/*計算處理單個學生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum);/*計算處理全部學生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking);/*輸出單個學生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking);/*輸出全部學生信息*/
statusdescSort(studentstu[],intstuNum,intsubNum);/*按總分降序排列並錄入名次*/
intgetCommand(void);/*輸入命令編號*/
statusprintMeunText(void);/*列印菜單文本*/
statusrunMeun(studentstu[],intstuNum,intsubNum);/*調出菜單*/
/**********************以上為函數聲明**********************/
intmain(void){
studentstu[STU]={-1};/*學生結構體數組*/
intstuNum;
inti;
runMeun(stu,stuNum,subNum);
return0;
}
/*學生信息判空*/
/*為空返回1;不空返回0*/
intstuInfoEmpty(studentstu[],intstuNum){
inti;
if(stuNum==0)
return1;
for(i=0;i<stuNum;i++)
if(stu[i].id==-1)
return1;
return0;
}
/*錄入單個學生信息*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
scanf("%d",&stu[stuIndex].no);/*學號*/
if(stu[stuIndex].no==-1){/*學號錄入-1以結束*/
stu[stuIndex].id=-1;
return-1;/*本次未錄入*/
}
scanf("%s",&stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++){
scanf("%f",&stu[stuIndex].scores[i].score);
}/*各門課成績分數*/
for(i=0;i<subNum;i++)
if(stu[stuIndex].scores[i].score>100||stu[stuIndex].scores[i].score<0)
return0;/*本次錄入錯誤*/
return1;/*本次錄入成功*/
}
/*錄入全部學生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum){
inti,inputStatus,count;
puts("======================================================");
puts("錄入學生信息");
puts("======================================================");
putchar(' ');
if(*stuNum!=0){
printf("已有%d名學生信息! ",*stuNum);
putchar(' ');
puts("繼續錄入以新增(學號錄入-1以結束)↓↓");
putchar(' ');
}
else{
puts("請錄入學生信息(學號錄入-1以結束)↓↓");
putchar(' ');
}
/*錄入信息之表頭*/
puts("------------------------------------------------------");
printf(" 學號 姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
putchar(' ');
puts("------------------------------------------------------");
/*錄入信息*/
count=0;
i=*stuNum;
while(1){
printf("第%d名學生 ",i+1);
stu[i].id=i+1;
inputStatus=inputStuInfo(stu,i,subNum);
if(inputStatus==1){
i++;
count++;
}
elseif(inputStatus==0){
putchar(' ');
puts("成績輸入錯誤!請重新輸入↓");
continue;
}
elseif(inputStatus==-1)
break;
}
*stuNum+=count;
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
if(count!=0)
printf("本次%d名學生信息錄入完畢!即將返回主菜單。 ",count);
else
printf("您本次未輸入學生信息!即將返回主菜單。 ");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*計算處理單個學生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
stu[stuIndex].totalScore=stu[stuIndex].averageScore=0;
/*計算總分*/
for(i=0;i<subNum;i++){
stu[stuIndex].totalScore+=stu[stuIndex].scores[i].score;
}
stu[stuIndex].averageScore=stu[stuIndex].totalScore/subNum;/*計算平均分*/
return1;
}
/*計算處理全部學生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum){
inti;
/*計算總分、平均分等*/
for(i=0;i<stuNum;i++)
calcStuInfo(stu,i,subNum);
return1;
}
/*輸出單個學生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking){
inti;
if(inclRanking)
printf("%d ",stu[stuIndex].ranking);/*名次*/
printf("%d ",stu[stuIndex].no);/*學號*/
printf("%s ",stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++)/*各門課成績分數*/
printf("%.2f ",stu[stuIndex].scores[i].score);
printf("%.2f ",stu[stuIndex].totalScore);/*總分*/
printf("%.2f ",stu[stuIndex].averageScore);/*平均分*/
putchar(' ');
return1;
}
/*輸出全部學生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking){
inti;
if(stuInfoEmpty(stu,stuNum)){
puts("尚未錄入學生信息!即將返回主菜單。");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return0;
}
puts("======================================================");
puts("全部學生信息");
puts("======================================================");
putchar(' ');
if(inclRanking)
printf("%d名學生信息如下,按總分由高到低排列名次↓↓ ",stuNum);
else
printf("%d名學生信息如下↓↓ ",stuNum);
putchar(' ');
/*輸出信息之表頭*/
puts("------------------------------------------------------");
if(inclRanking)
printf("名次 ");
printf("學號 ");
printf("姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
printf("總分 ");
printf("平均分 ");
putchar(' ');
puts("------------------------------------------------------");
/*輸出信息*/
for(i=0;i<stuNum;i++)
printStuInfo(stu,i,subNum,inclRanking);
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
puts("學生信息輸出完畢!即將返回主菜單。");
putchar(' ');
puts("按任意鍵繼續...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*按總分降序排序、錄入名次並輸出*/
statusdescSort(studentstu[],intstuNum,intsubNum){
inti,j;
studenttemp;
if(stuInfoEmpty(stu,stuNum))
return0;
/*按總分降序*/
for(i=0;i<stuNum-1;i++)
for(j=0;j<stuNum-1-i;j++)
if(stu[j].totalScore<stu[j+1].totalScore){
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
/*錄入名次*/
for(i=0;i<stuNum;i++)
stu[i].ranking=i+1;
return1;
}
/*輸入命令編號*/
intgetCommand(void){
intkey;/*命令編號*/
printf("請輸入命令編號以開啟操作:");
scanf("%d",&key);
returnkey;
}
/*列印菜單文本*/
statusprintMeunText(void){
puts("======================================================");
puts("學生信息管理");
puts("------------------------------------------------------");
printf("%4c 功能詳情 ",'#');
puts("------------------------------------------------------");
printf("%4d 輸入學生信息 ",1);
printf("%4d 按成績由高到低排序 ",2);
printf("%4d 退出 ",7);
puts("======================================================");
putchar(' ');
return1;
}
statusrunMeun(studentstu[],intstuNum,intsubNum){
intkey;
do{
system("cls");/*清屏*/
printMeunText();/*列印菜單文本*/
key=getCommand();/*輸入命令編號*/
putchar(' ');
switch(key){
case1:system("cls");inputAllStuInfo(stu,&stuNum,subNum);calcAllStuInfo(stu,stuNum,subNum);break;
case2:system("cls");descSort(stu,stuNum,subNum);printAllStuInfo(stu,stuNum,subNum,1);break;
case7:puts("程序結束! ");break;
default:puts("輸入錯誤,請重新輸入! 按任意鍵繼續...");getch();break;
}
}while(key!=7);
getch();
return1;
}
運行結果
主菜單
6. c語言中rank函數怎麼用
c語言中rank函數是自定義的函數吧?如果是的話,怎麼用,還必須看這個函數是怎麼定義的了。
7. C語言編程:隨機產生20個20-50之間的隨機整數,然後排序後輸出。 急求答案,謝謝
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[20],b[20];
for(int i = 1; i<= 20; i++)
{
a[i] = rand()%30 + 20;//產生一個1到30的隨機數,然後再加20 就是20到50的隨機數了
}
for (int j = 1; j<=20;j++)
{
for(int i = 1; i<=20; i++)
{
int temp;
if(a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}//end if
}//end for i
}//end for j
for ( i = 1; i <=20; i++)
{
printf("%d,",a[i]);
}
printf("\n");
return 0;
}
8. 計算機二級c語言評分標準是什麼
1、選擇題:40題,每題1分。按標答給分
2、程序填空:3處空,每空6分。共18分,按標答給分,如果和標答的寫法不一樣,就算對的也沒有分。每一空有每一空的分數。做對一空就給6分
3、程序改錯:2處錯誤,每處9分,共18分。都是/*found*/下面的一行有錯誤,按標答給分,如果和標答的寫法不一樣,就算對的也沒有分。
4、程序編制題:共24分。按程序結果給分。編程完成後,存檔,編譯,連接,執行,按題目要求輸入,得到要求的結果就有24分,否則就是0分。
計算機二級考試是全國計算機等級考試(National
Computer
Rank
Examination,簡稱NCRE)四個等級中的一個等級,考核計算機基礎知識和使用一種高級計算機語言編寫程序以及上機調試的基本技能。
考試採用全國統一命題,統一考試的形式,各科目均為上機操作考試。
9. C語言使用隨機函數rand()產生50個10~99的互不相同的隨機整數放入數組a中,再按從大到小的順序排序
你好!!
你的代碼就沒有輸出部分呀
#include"stdlib.h"
#include"stdio.h"
#include"time.h"
voidmain()
{
intn,a[50],i,j,t;
srand(time(NULL));
for(i=0;i<50;i++)
{
a[i]=rand()%90+10;
for(j=0;j<i-1;j++)
if(a[i]==a[j])
i--;
}
printf("nafter:
");
for(i=0;i<50;i++)//下面這是列印輸出
{
if(i%10==0)//十個數字換行
printf("
");
printf("%d",a[i]);
}
}