A. 幾道簡單的c語言編程題目!!~~求教高手
//輸入兩個正整數m和n,求其最大公約數和最小公倍數
#include <stdio.h>
void main()
{
int p,r,n,m,temp;
printf("請輸入兩個正整數n,m:");
scanf("%d,%d",&n,&m);
//把大數放在n中,小數放在m中
if(n<m)
{
temp=n;
n=m;
m=temp;
}
//先將n和m的乘積保存在p中,以便求最小公倍數時用
//求n和m的最大公約數
p=n*m;
//展轉相除法,求最大公約數
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
printf("它們的最大公約數是%d\n",n);
//最小公倍數=兩數乘積/最大公約數
printf("它們的最小公倍數是%d\n",p/n);
}
//求1-1/3+1/5-1/7+…,直到某項的絕對值小於0.0001
#include<stdio.h>
void main()
{
float a=1,s=0;
int i=2,t;
while(a<=10000.0)
{
if((i%2)==0)
{
s+=1.0/a;
a=a+2.0;
i++;
}
else
{
s-=1.0/a;
a=a+2.0;
i++;
}
}
printf("%f\n",s);
}
//一球從100m高度自由落下,每次落地後反跳回原高度的一半,再落下.求它在第10次
//落地時,共經過多少m?第10次反彈多高?
#include <stdio.h>
void main()
{
float sn=100,hn=sn/2; //初始值
int n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn; //累記路徑長度
hn=hn/2; //反彈高度
}
printf("第10次落地時共經過%fm.\n",sn);
printf("第10次反彈%fm.\n",hn);
}
// 給出10個兒童的體重,要求計算平均體重並列印出低
於平均體重的數值。
#include<stdio.h>
void main()
{
float a[10],p,sum=0;
int i;
printf("請輸入10個人的體重:\n");
for(i=0;i<10;i++)
{
scanf("%f",&a[i]);
sum+=a[i];
}
p=sum/10.0;
printf("10個人的平均體重是%3.2f:",p);
printf("低於平均體重的是:\n");
for(i=0;i<10;i++)
{
if(a[i]<p)
{
printf("%3.2f\n",a[i]);
}
}
}
第一個有點復雜~~~加點分嘛~~~
//主函數實現從鍵盤輸入5個學生的5門功課的成績,sum函數實現統計出每個學生的5門功課的總成績,sort函數實現根據5個學生的總成績用冒泡法進行排序,再逆序存放並輸出。
#include<stdio.h>
#define N 5
void main(void)
{
int sum(int (*a)[N]);
void sort(int *y);
int a[N][N],he[N]={0};
int i,j,*p;
for(i=0;i<N;i++)
{
printf("Input the %dth student's scores:",i+1);
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<N;i++)
{
he[i]=sum(&a[i]);
}
printf("\n");
for(i=0;i<N;i++)
{
printf("%d ",he[i]);
}
p=he;
sort(p);
}
int sum(int (*a)[N])
{
int tmpsum=0;
int i;
for(i=0;i<N;i++)
{
tmpsum+=*(*a+i);
}
return tmpsum;
}
void sort(int y[N])
{
int j,i,tmp;
for(j=0;j<N-1;j++)
{
for(i=j+1;i<N;i++)
{
if(y[j]>y[i])
{
tmp=y[j];
y[j]=y[i];
y[i]=tmp;
}
}
}
for(j=0;j<N;j++)
{
printf(" %d",y[j]);
}
printf("\n\n");
for(j=0;j<N/2;j++)
{
tmp=y[j];
y[j]=y[N-j-1];
y[N-j-1]=tmp;
}
for(j=0;j<N;j++)
{
printf(" %d",y[j]);
}
}
B. 簡單c語言編程題
根據題意,程序分三個主要功能:1、從數組中查找一個整數。2、向數組插入一個整數。3、數組升序排列。
一、其中查找功能,數組無序或升序對應二種寫法(直接遍歷比較、二分法)。
對於升序數組用二分法查找更快(本案例只有10個數,如數字量大則效果更明顯)。
二、數組插入功能,將插入位置及其往後的元素均後移一位(數組大小需多預留1位)。
另外:重復的代碼段要寫成獨立函數,避免代碼冗餘。
下面是代碼(數值我用的隨機數填充,你想手動輸入自添scanf函數):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 10//最大整數個數
void input(int nums[],int len);//輸入
void showNum(int nums[],int len);// 列印數組
void px(int nums[],int len);//排序
int checkNum(int nums[],int len,int n);//檢查n是否存在於無序數組num,是返回下標,否將n插入數組並返回-1。
int checkNumPX(int nums[],int len,int n);//檢查n是否存在於升序數組num,是返回下標,否將n插入對應位置並返回-1。
void move1(int nums[],int len,int inx);//從下標inx開始的元素,全部往後移動1位(inx下標空出來給插入)
int main()
{
int nums[M+1],len=M+1,inx,n;//預留一位給插入
srand(time(NULL));
input(nums,len-1);
showNum(nums,len-1);
printf("請輸入要查找的數n:"),scanf("%d",&n);
inx=checkNum(nums,len-1,n);
if(inx!=-1) printf("存在!下標是%d ",inx);
if(inx==-1) printf("不存在!已在數組末尾插入,插入後的數組為: "),showNum(nums,len);
printf(" -----------------------下面是問題2------------------------------- ");
input(nums,len-1);
px(nums,len);
showNum(nums,len-1);
printf("請輸入要查找的數n:"),scanf("%d",&n);
inx=checkNumPX(nums,len-1,n);
if(inx!=-1) printf("存在!下標是%d ",inx);
if(inx==-1) printf("不存在!已在插入數組對應的位置 "),showNum(nums,len);
return 0;
}
void input(int nums[],int len)
{
int i;
for(i=0,printf("生成%d個2位隨機整數...... ",len);i<len;nums[i]=rand()%90+10,i++);//10~99隨機數
}
void showNum(int nums[],int len)
{
int i;
for(i=0,printf("當前數組元素為: ");i<len;printf("%d ",nums[i]),i++);
printf(" ");
}
void px(int nums[],int len)
{
int i,j;
for(i=0,printf("對數組進行升序排序...... ");i<len;i++)
for(j=i+1;j<len;j++)
if(nums[i]>nums[j]) nums[i]^=nums[j],nums[j]^=nums[i],nums[i]^=nums[j];
}
int checkNum(int nums[],int len,int n)
{
int i;
for(i=0,printf("數組中按元素順序查找%d...... ",n);i<len;i++)
if(nums[i]==n) return i;
if(i==len) nums[len]=n;
return -1;
}
int checkNumPX(int nums[],int len,int n)
{
int bInx=0,eInx=len-1,mInx;
printf("對升序數組按二分法查找%d...... ",n);
while(eInx-bInx>1)//當序列區間元素大於2個時,取中間值
{
mInx=bInx+(eInx-bInx)/2;
if(nums[mInx]==n) return mInx;
if(n<nums[mInx]) eInx=mInx;//n比中間值小,取前半區間中間繼續比較
if(n>nums[mInx]) bInx=mInx;//n比中間值大,取後半區間中間繼續比較
}
if(nums[eInx]==n) return eInx;
if(nums[bInx]==n) return bInx;
if(n<nums[bInx]) move1(nums,len+1,bInx),nums[bInx]=n;
if(n>nums[bInx] && n<nums[eInx]) move1(nums,len+1,eInx),nums[eInx]=n;
if(n>nums[eInx]) move1(nums,len+1,eInx+1),nums[eInx+1]=n;
return -1;
}
void move1(int nums[],int len,int inx)
{
int i;
for(i=len-1;i>inx;nums[i]=nums[i-1],i--);
}
C. C語言幾道簡單的題目
【B】2.變數a與b分別初始為10與20,正確的語句是:
A:
int
a=10,
int
b=20;
B:
int
a=10,
b=20;
C:
int
a=10;
b=20;
D:
int
a=10;
b=20,
【C】3.以下選項中正確的C語言常量是:
A:
0xEfGh
B:
'XYZ'
C:
12.34e5
D:
'\5A'
【A】4.設有double
x;char
s[50];輸出雙精度浮點數x和字元串s,正確的語句是:
A:
printf("%lf
%s",x,s);
B:
printf("%ld
%s",x,s);
C:
printf("%lf
%s",&&x,s);
D:
printf("%lf
%s",x,s[50]);
【B】5.語句printf("%.1f,%d\n",10./4,10/8);的輸出是:
A:
2.5,1.25
B:
2.5,1
C:
1,1.25
D:
2,1.25
【B】6.設有char
ch;
與語句「ch=getchar();」等價的語句是:
A:
scanf("%c",ch)
B:
scanf("%c",&ch);
C:
printf("%c",ch);
D:
printf("%c",&ch);
【C】7.
設int
n,m;
使m為n的十進制百位數的語句是:
A:
m
=
n/100;
B:
m
=
n%100;
C:
m
=
n/100%10;
D:
m
=
n%10/100;
【C】8.設float
x,y;
使y為x的小數部分的語句是:
A:
y
=
(int)x;
B:
y
=
int(x);
C:
y
=
x-(int)x;
D:
y
=
x-int(x);
【C】9.
與語句「m
+=
(x=5)
+
(--y);」等價的語句序列是:
A:
m=m+x+y;
x=5;
y=y-1;
B:
x=5;
m=m+x+y;
y=y-1;
C:
x=5;
y=y-1;
m=m+x+y;
D:
y=y-1;
m=m+x+y;
x=5;
【B】10.
設int
n;
對應「n為二位數(10至99)」的判斷表達式是:
A:
10<=n<=99
B:
10<=n
&&&&
n<=99
C:
10<=n
||
n<=99
D:
10<=n,
n<=99
【A】11.
設char
ch;
判斷「ch為數字字元」的表達式是:
A:
ch>='0'
&&&&
ch<='9'
B:
ch>0
&&&&
ch<9
C:
ch>='0'
||
ch<='9'
D:
ch>=0
||
ch<=9
【A】12.
與語句「x+=(a++==b)?c:--d;」功能等價的語句段是:
A:
if
(a==b)
{
a=a+1;
x=x+c;
}
else
{
a=a+1;
d=d-1;
x=x+d;
}
B:
a=a+1;if
(a==b)
{
x=x+c;
}
else
{
d=d-1;
x=x+d;
}
C:
if
(a==b)
{
a=a+1;
x=x+c;
}
else
{
a=a+1;
x=x+d;
d=d-1;
}
D:
if
(a==b)
{
a=a+1;
x=c;
}
else
{
a=a+1;
d=d-1;
x=d;
}
【C】13.
設有in
i;
寫出下列語句的運行結果:
for
(i=0;i<5;i++)
printf("%d",i);
A:
0123456
B:
012345
C:
01234
D:
0123
【C】14.
設有char
ch;
寫出下列語句的運行結果:
for
(ch='B';ch<='F';ch++)
putchar(ch);
A:
ABCDEFG
B:
ABCDEF
C:
BCDEF
D:
BCDEFG
【A】15.
以下一維數組定義中,正確的是:
A:
int
a[5]
=
{
1,2,3,4,5
};
B:
int
a[5]
=
1,2,3,4,5;
C:
int
a[1
to
5];
D:
int
a[]
【D】16.以下字元串定義與賦值中,正確的是:
A:
char
s[80];
s
=
{'A',
'B',
'C'};
B:
char
s[80];
s
=
"ABC";
C;
char
s[80]
=
{"A",
"B",
"C"};
D:
char
s[80]
=
"ABC";
【B】17.
在字元串常用函數中,用於復制字元串的函數是:
A:
strlen
B:
strcpy
C:
strcat
D:
strcmp
【B】18.
設有定義:int
i,
a[10];
能正確輸入a數組各元素的語句是:
A:
i=10;
scanf("%d",
&a[i]);
B:
for(i=0;
i<=9;
i++)
scanf("%d",
a+i);
C:for(i=0;i<10;i++)scanf("%d",a[i]);D:for(i=0;i<10;i++)scanf("%d",
&a);
【B】19.
設有定義:int
a[10]={6,7,8,9,10};正確的解釋是:
A:
將5個初值依次賦給a[1]至a[5]
B:
將5個初值依次賦給a[0]至a[4]
C:
將5個初值依次賦給a[6]至a[10]
D:
將5個初值依次賦給a[5]至a[9]