❶ 編程題(C語言)
#include "stdio.h"
double fun(double a[],int len)
{
double min=a[0];
int i;
for(i=1;i<len;i++)
if(a[i]<min)
min=a[i];
return min;
}
int main()
{
double a[10]={0};
int i;
printf("請輸入10個數: ");
for(i=0;i<10;i++)
scanf("%lf",&a[i]);
printf("這10個數的最小值為:%lf ",fun(a,10));
}
❷ c語言編程題
《C語言程序設計試題匯編》由三部分組成:第一部分為試題集,每章都提供了大量試題,並給出了每道試題的答案及解析;第二部分為全國計算機等級考試指導,包括大綱規定的考試內容、重要知識點與分值預測,筆試應試指導與復習策略,2007年9月、2008年4月、2008年9月三套筆試真題試卷解析與筆試應試技巧,上機考試應試方法與技巧,上機題主要演算法及實例,上機考試流程和操作方法;第三部分為綜合模擬訓練,提供了五套筆試模擬試卷以及答案與解析。
《C語言程序設計試題匯編》適合作為大專院校中各專業層次的學生學習C語言程序設計的輔導教材。通過對《C語言程序設計試題匯編》的學習,讀者能夠進一步復習、鞏固和掌握C語言程序設計的知識,並適應和滿足最新的等級考試要求,幫助廣大考生順利通過全國計算機等級二級C語言程序設計考試。
圖書目錄
第一部分 試題集
第1章 C語言概述
第2章 數據類型、運算符與表達式
第3章 最簡單的C程序設計
第4章 邏輯運算和判斷選擇控制
第5章 循環結構
第6章 數組
第7章 函數
第8章 編譯預處理
第9章 指針
第10章 結構體與共用體
第11章 位運算
第二部分 全國計算機等級考試指導
第三部分 綜合模擬訓練
❸ 計算機編程題
import java.util.Scanner;//導入Scanner,用於接收鍵盤輸入
public class Text13 {//主類
public static void main(String[] args) {//主方法,程序入口
Scanner input=new Scanner(System.in);//構造Scanner對象
System.out.println("請輸入一個數:");//提示用戶輸入
double b=input.nextDouble();//獲取用戶輸入,保存到double類型的b中
double temp=Math.sqrt(b);//Math類調用sqrt()方法,獲取b的平方根,保存到double類型的temp中
int a=(int)temp;//將double型的temp轉化為int,使其丟失部分精度後保存到a中
if(a*a==b) {//當丟失精度的後的a如果相乘等於用戶輸入的數,那麼證明輸入的數有平方根
System.out.println(a);//輸出該數
}else {
System.out.println("NO");//否則輸出no
}
}
}
❹ java題目編程題
首先初始化一個HashMap,存入一些用戶名和電話號碼的初始值,然後分別使用map的API來進行相應的map增刪改查操作就行了。
增/改:put(K key,V value),這里可以初始化用戶名為key,電話號碼為value,前提是用戶名要沒有重復的,如果是相同的用戶名會覆蓋前一個,可以當做改功能來使用
刪:remove(Object key)根據鍵,刪值,如果之前的key存的用戶名,那麼這里就是根據用戶名刪值
查:get(Object key)根據鍵查值,相當於根據用戶名查電話號碼
❺ 推薦幾個編程題庫
http://acm.sgu.ru
SGU大學網站,演算法性很強的,推薦
http://acm.timus.ru
URAL大學網站,做的人很多
http://train.usaco.org
USACO,USA網站,有很多大牛
http://acm.pku.e.cn
北大網站,中文討論
其他還有很多,如西班牙的,浙江的,湖南的,同濟的都很好
很快提高編程思維與水平
❻ C語言編程題
1.
#include<stdio.h>
int calc(int profit)
{
float sal=500;
if(profit<=2000&&profit>1000) sal+=(0.1*profit);
else if(profit>2000&&profit<=5000) sal+=(0.2*profit);
else if(profit>5000&&profit<=10000) sal+=(N*profit); //估計你這里少了5000-10000的提成率,補上後只需要把N換成提成率就ok了
else if(profit>10000) sal+=(0.25*profit);
return sal;
}
int main()
{
int p;
printf("enter profit:\n");
scanf("%d",&p);
printf("result:%d\n",calc(p));
return 0;
}
2.
#include<stdio.h>
int main()
{
int i;
for(i=200;i<=300;++i)
if(!i%7) printf("%d\n",i);
return 0;
}
3.這個題我估計是2n-1,奇數相加,樓主應該是多打了括弧
#include<stdio.h>
int calc(int n)
{
int i,sum=0;
for(i=1;i<=n;++i)
sum+=(2*i-1);
return sum;
}
int main()
{
int n;
printf("enter n:\n");
scanf("%d",&n);
printf("result:%d\n",calc(n));
return 0;
}
4.
這道題樓主應該是想從大到小排序輸出吧
我用的是冒泡排序
#include<stdio.h>
int main()
{
int a[10],i,j;
int t;
printf("enter number(10):\n");
for(i=0;i<10;++i)
scanf("%d",a+i);
for(j=9;j>0;--j) //冒泡排序
for(i=0;i<j;++i)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=9;i>=0;--i)
printf("%d\n",a[i]);
return 0;
}
程序已測試,網路不讓貼圖,我就不粘了,有問題請追問
各位大神,不要,求你們了……
❼ 一個編程題
#include "stdio.h"
#include "conio.h"
#define nmax 50
main()
{
int i,k,m,n,num[nmax],*p;
printf("please input the total of numbers:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)
{
if(*(p+i)!=0) k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) i=0;
}
while(*p==0) p++;
printf("%d is left\n",*p);
getch();
}
❽ 一個C語言編程題
這個問題可以分為3部分
1、輸入一個字元串,將其格式化的儲存在一個數組中,以方便的記錄表達式中數和各個符號的出現順序
約定在數組中記錄時,每個數或符號用兩個整數來記錄
第一個整數記錄該位是什麼東西,0表示是一個數,1表示是括弧,2表示反括弧,3、4、5、6分別表示乘除加減號
如果該位是一個數,那麼第二個整數記錄著個數的具體取值,否則記錄該位的符號的ASCII碼
比如字元串"(1-23)"會被轉化成二位數組{ {1,'('} , {0,1} , {6,'-'} , {0,23} , {2,')'}}
這個轉化過程每什麼技巧性,對原字元串各位順次判斷並處理即可
原先的字元串中可能出現一元運算符正號'+'和負號'-',為了處理方便,一律在其前面加個0,改寫成"0+..."或者"0-..."
另外為了之後轉化逆波蘭表達式方便,處理過程中會在轉化出的數組的首尾一律添加一對括弧
2、將之前所提到的格式數組轉化為逆波蘭表達式
約定依然用二位數組記錄一個逆波蘭表達式,並且格式與之前的數組相同,除了沒有括弧以外
比如逆波蘭表達式 1 2 - 35 +,會被記錄成{ {0,1} , {0,2} , {6,'-'} , {0,35} , {5,+}}
轉化時,需要用一個棧
具體轉化操作如下:
順次處理格式數組的每一位,對其作判斷
如果該位是一個數或者是括弧'(',,將其入棧
如果該位是乘號'*'或者除號'/',不斷進行出棧操作直到棧頂元素是個括弧'('或者加號'+'或者減號'-',然後將這個乘號或者除號入棧
如果該位是加號'+'或者減號'-',不斷進行出棧操作直到棧頂元素是個括弧'(',然後將這個加號或者減號入棧
如果該位是反括弧')',那麼不斷進行出棧操作直到有一個括弧'('出棧
在上述操作中,所有的出棧元素,除了括弧'('以外,都被順次添加到所要生成的逆波蘭表達式的末尾
這樣就轉化出了一條逆波蘭表達式
3、對逆波蘭表達式求值
求值時,也需要用到一個棧
求值步驟如下:
順次處理逆波蘭表達式的每一位,對其作判斷
如果該位是一個數,將這個數入棧
如果該位是一個運算符,那麼連續進行兩次出棧操作,可以得到棧頂的兩個元素,對這兩個元素用該位的運算符做運算,將所得的結果入棧
比如,如果當時棧頂元素是3,次棧頂的元素是2,運算符是減號'-',那麼連續兩次出棧得到3和2兩個元素,再將2-3的運算結果1入棧
注意有些運算符(減號和除號)不符合交換律,因此運算時必須是次棧頂元素在前、棧頂元素在後,順序不能反
當每一位都處理完了之後,只要輸入的是一個合法的逆波蘭表達式,必然棧中只剩下一個元素,這個元素就是逆波蘭表達式求值的結果
源代碼如下:
#include <stdio.h>
#include <ctype.h>
void transform(char *str,int a[][2],int *n)
//將輸入的字元串轉化為格式化的數組以記錄輸入的表達式,str為輸入的字元串,a為目標數組,n記錄數組a的大小
{
int i;
*n=1;
a[0][0]=1;
a[0][1]='(';//在表達式首添加一個括弧
for (i=0;str[i];)
{
if (isdigit(str[i]))
{
a[*n][0]=0;
a[*n][1]=0;
while (isdigit(str[i]))
{
a[*n][1]=a[*n][1]*10+str[i]-'0';
i++;
}
}
else
{
if (str[i]=='(') a[*n][0]=1;
else if (str[i]==')') a[*n][0]=2;
else if (str[i]=='*') a[*n][0]=3;
else if (str[i]=='/') a[*n][0]=4;
else if (str[i]=='+' || str[i]=='-')
{
if (i==0 || (!isdigit(str[i-1]) && str[i-1]!=')'))
{
a[*n][0]=0;
a[*n][1]=0;
(*n)++;
}
if (str[i]=='+') a[*n][0]=5;
else a[*n][0]=6;
}
a[*n][1]=str[i];
i++;
}
(*n)++;
}
a[*n][0]=2;
a[*n][1]=')';//在表達式尾添加一個反括弧
(*n)++;
}
void poland(int a[][2],int n,int p[][2],int *m)
//將格式化數組轉化為逆波蘭表達式,a為輸入的數組,n為其長度,p為輸出逆波蘭表達式的目標,m記錄逆波蘭表達式的長度
{
int i;
int stack[1000];//轉化所用的棧
int depth;//棧的深度
depth=0;
*m=0;
for (i=0;i<n;i++)
{
if (a[i][0]==0) stack[depth++]=i;
else if (a[i][0]==1) stack[depth++]=i;
else if (a[i][0]==2)
{
while (a[stack[depth-1]][0]!=1)
{
depth--;
p[*m][0]=a[stack[depth]][0];
p[*m][1]=a[stack[depth]][1];
(*m)++;
}
depth--;
}
else if (a[i][0]==3 || a[i][0]==4)
{
while (a[stack[depth-1]][0]==0 || a[stack[depth-1]][0]==3 || a[stack[depth-1]][0]==4)
{
depth--;
p[*m][0]=a[stack[depth]][0];
p[*m][1]=a[stack[depth]][1];
(*m)++;
}
stack[depth++]=i;
}
else if (a[i][0]==5 || a[i][0]==6)
{
while (a[stack[depth-1]][0]!=1)
{
depth--;
p[*m][0]=a[stack[depth]][0];
p[*m][1]=a[stack[depth]][1];
(*m)++;
}
stack[depth++]=i;
}
}
}
void print_poland(int p[][2],int m)
//列印逆波蘭表達式,p為逆波蘭表達式,m為表達式長度
{
int i;
for (i=0;i<m;i++)
{
if (p[i][0]==0) printf("%d",p[i][1]);
else printf("%c",p[i][1]);
}
putchar('\n');
}
double evaluate(int p[][2],int m)
//對逆波蘭表達式求值,p為逆波蘭表達式,m為表達式長度
{
double stack[1000];//求值所用的棧
int depth;//棧的深度
int i;
depth=0;
for (i=0;i<m;i++)
{
if (p[i][0]==0) stack[depth++]=p[i][1];
else
{
double a,b;
b=stack[--depth];
a=stack[--depth];
if (p[i][0]==3) stack[depth++]=a*b;
else if (p[i][0]==4) stack[depth++]=a/b;
else if (p[i][0]==5) stack[depth++]=a+b;
else stack[depth++]=a-b;
}
}
return stack[0];
}
int a[1000][2];
int n;
int p[1000][2];
int m;
main()
{
transform("5*(8-2)+9",a,&n);
poland(a,n,p,&m);
print_poland(p,m);
printf("The result of the expression is %lf\n",evaluate(p,m));
return;
}
❾ 編程問題
棋子如果只能向右或向下走,就是動態規劃題
但是題目要求是棋子可以向上下左右四個方向走,那麼就不好動態規劃了,因為無法確定一個前後的順序。
可以這么做,把m*n個格子,看成m*n個點,相鄰點之間有路,以下一點的值為該路權值,然後計算最短路。
上面的方法還可以優化,可以把連在一起的值為0的點合並成一個點,這樣可以減少點的個數。
至於最短路,稍網路一下就有好多常式,一種是dijk啥啥啥的那個名字(總沒記清)的演算法,一種是破圈法,都可以。