導航:首頁 > 編程語言 > c語言程序設計編程題

c語言程序設計編程題

發布時間:2022-01-24 00:00:39

1. 一個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;
}

2. c語言編程題目及答案

#include <stdio.h>
#include <math.h>
void main(void)
{
double a;

double b;

double c;/* 以上三個變數分別對應三邊 */

double sin_c;/* c邊對應角的正玄值 */

double cos_c;/*c邊對應角的余玄值*/

double cos_a;

double area; /* 三角形的面積 */

printf("輸入a,b,c:");

scanf("%lf, %lf, %lf", &a, &b, &c);

if(((a+b)>c) && (a-b)<c)
{
printf("三邊能夠成三角形\n.");

cos_c = (a*a + b*b -c*c)/(2*a*b);

cos_a = (b*b + c*c - a*a)/(2*b*c);

if ((cos_c > 0) && (cos_a >0))
{
printf("三角形是銳角三角形。\n");
}

else if ((cos_c < 0) || (cos_a < 0))
{
printf("三角形是鈍角三角形\n");
}
else
{
printf("三角形是直角三角形\n");
}

sin_c = sqrt(1- cos_c*cos_c);

area = a*b*sin_c/2;

printf("三角形的面積是%f.\n",area);
}
else
{
printf("三邊不能構成三角形\n");
}
}

3. c語言編程題

#include<stdio.h>

/*入參一:需要做處理的全字串
*入參二:需要刪除的字串
*返回值:經過處理後的字串
*要求是指針處理如果可以使用strlen和memcpy等會更容易理解
*/
char*myf_delsubstr(char*str_all,char*str_drop)
{
char*all=str_all;//臨時指針指向全字串
char*drop=str_drop;//臨時指針指向待刪除字串
char*tmp=NULL;//臨時指針後面處理字串時使用
staticcharout[1024]={0};//靜態字串作為返回值
char*u=out;//臨時指針指向返回的字串
intdrop_len=0;//待刪除字串的長度

//獲取待刪除字串的長度
while(''!=*drop)
{
drop++;
drop_len++;
}

//在獲取長度時drop這個指針的指向已被改變重新賦值
drop=str_drop;

/*雙層嵌套循環
*第一層循環遍歷全字串直到找到可能存在待刪除的字串停止
*第二層循環遍歷待刪除字串並與當前的全字串對比一旦發現完整匹配越過(刪除)該字串
*/
while(''!=*all)//直到全字串結尾
{
if(*all==*drop)//發現第一個和待刪除字串的第一個字元相等准備進入二層循環排除或證明懷疑
{
tmp=all;//臨時指針指向當前匹配的字串的首部
while(''!=*drop)//直到待刪除欄位結尾
{
tmp++;//每次循環臨時全字串和drop字串要往後偏移一位
drop++;//每次循環臨時全字串和drop字串要往後偏移一位
if(*tmp!=*drop)//一旦發現其中一個字元不相等排除懷疑
{
break;
}
}
if(''!=*drop)//如果還未檢查到字串尾就出來了肯定是排除了懷疑
{
*u=*all;//既然排除懷疑那就把當前字元賦值到帶返回的字串out中
u++;//賦值後要往後偏移
drop=str_drop;
}
else//證實了懷疑
{
all+=drop_len;//全字串越過待刪除的欄位長度
drop=str_drop;//指針的指向已被改變重新賦值
continue;//全字串中可能不止出現一次待刪除的字串繼續全字串的檢查
}
}
else
{
*u=*all;//既然不是待刪除字元那就把當前字元賦值到帶返回的字串out中
u++;//賦值後要往後偏移
}

all++;//既然是循環整個全字串檢查檢查完一個字元後指針要往後偏移一位
}

returnout;//u只是指向out這個字串的臨時指針我們返回的還是out本體
}
intmain(intargc,char*argv[])
{
charaa[1024]={0};
charbb[512]={0};

printf("輸入一個字串: ");
scanf("%s",aa);

printf("輸入需要刪除的字串: ");
scanf("%s",bb);

char*kk=myf_delsubstr(aa,bb);
printf("處理後的字串: %s ",kk);
return0;
}


輸入一個字串:
我覺得你是不可能愛上我的因為我是一個男孩子
輸入需要刪除的字串:

處理後的字串:
覺得你是不可能愛上的因為是一個男孩子

4. C語言編程的題目

#include <stdio.h>


int main()

{

int cnt;

char c;

for(cnt=0;(c=getchar())!=' ';)

if(c>='A'&&c<='Z')

cnt++;

printf("%d ",cnt);

return 0;

}

5. C語言程序設計編程題

#include <stdio.h>
#define N 100

struct student
{
int num;
char name[20];
int sex;
int age;
float score[3];
};

void count(struct student *stu,int n,float *sum,float *avg)
{
int i=0,j=0;

for(i=0;i<n;i++)
{
sum[i]=0;
for(j=0;j<3;j++)
{
sum[i]+=stu[i].score[j];
}
avg[i]=sum[i]/3;
}
}

void main()
{
struct student stu[N];
int i,n;
float sum[N],avg[N];

printf("請輸入學生個數:");
scanf("%d",&n);

for(i=0;i<n;i++)
{
printf("請輸入第%d個學生信息:\n",i+1);
printf("學號:");
scanf("%d",&(stu[i].num));
printf("姓名:");
scanf("%s",&(stu[i].name));
printf("性別(男=0,女=1):");
scanf("%d",&(stu[i].sex));
printf("年齡:");
scanf("%d",&(stu[i].age));
printf("第一門課程成績:");
scanf("%f",&(stu[i].score[0]));
printf("第二門課程成績:");
scanf("%f",&(stu[i].score[1]));
printf("第三門課程成績:");
scanf("%f",&(stu[i].score[2]));
}

count(stu,n,sum,avg);

printf("學號\t姓名\t性別\t年齡\t課程1\t課程2\t課程3\t總分\t平均分\n");
for(i=0;i<n;i++)
{
printf("%5d ",stu[i].num);
printf("%5s ",stu[i].name);
printf("%5s ",stu[i].sex==0?"男":"女");
printf("%6d ",stu[i].age);
printf("%6.2f ",stu[i].score[0]);
printf("%6.2f ",stu[i].score[1]);
printf("%6.2f ",stu[i].score[2]);
printf("%6.2f %6.2f\n",sum[i],avg[i]);
}
}

6. C語言編程題

#include<iostream>//載入控制台頭文件
usingnamespacestd;//開放std命名空間
intmain()//主函數
{inti,j,k,//代表百十個位
s,c,a,//s是和,c是個數,a是生成的三位數
n;//n是這個數
doublev;//平均數
do{printf("請輸入n:");//提示輸入n
scanf("%d",&n);//輸入n
if(n>=0&&n<7)break;//如果n在0-6之間完成輸入退出循環
printf("輸入錯誤,請重輸");}while(1);//否則要求重輸入
s=c=0;v=0;//初始化和,個數,平均值三個變數
for(i=n;i<=n+3;i++)//用一個三重循環確定百十個位
for(j=n;j<=n+3;j++)
for(k=n;k<=n+3;k++)
if(i!=j&&i!=k&&j!=k&&i!=0)//如果ijk互不相等且首位不等於0
{a=i*100+10*j+k;//生成這個三位數
printf("%d",a);//題目沒要求,但為了好驗證把生成的三位數一並顯示出來
s+=a;//把這個三位數累加起來
c++;}//計算器+1
v=s/c;//求出平均值
printf(" %d-%d之間所有不重復的3位數共有%d個,累計和是%d,平均是%0.2lf",n,n+3,c,s,v);
//題目只要求輸出平均數,這里只是為了查看方便,交作業時請自己去除
system("PAUSE");//屏幕暫停,以看清運行結果
return0;}//程序結束

7. c語言程序設計簡單編程題

題目沒說清。1.輸入僅限於小寫字母還是所有字元;2 y,z輸出a,b還是也按ASCII碼向後推兩位。
#include <stdio.h>
#include <string.h>
int main()
{
char iword;
char oword;

while(iword = getchar())
{
if(iword == '\n')
break;
oword = (iword - 95) % 26 + 97;
printf("%c",oword);
}
printf("\n");

return 0;
}
輸入:abcdefxyz
輸出:cdefghzab
此程序僅限輸入小寫字母。

8. c語言編程題

奇偶性的判斷演算法核心是除以2餘數為0
void fun(int *array,int len)

{
for(int i = 0 ; i < len ; i++)
{
if(0 != array[i] %2)
{
printf("%d ",array[i]);
}
}
}

9. c語言程序設計編程題

#include<stdio.h>
intmain()
{
doublex;
scanf("%lf",&x);
if(x>600)
printf("%0.2lf ",x*1.1);
else
printf("600 ");
}

第二題:

#include<stdio.h>
intmain()
{
intx,y;
scanf("%d%d",&x,&y);
if(x>y)
printf("%d%d ",x,y);
else
printf("%d%d ",y,x);
}

如有疑問的話就追問!

10. C語言程序設計編程題:

1、
#include
「stdio.h」
main()
{
double
r;
double
pi=3.14159;
printf("請輸入圓的半徑:");
scanf("%lf",&r);
printf("圓的周長為:%.2lf",2*pi*r);
printf("圓的面積為:%.2lf",pi*r*r);
getch();
}
2、
#include
「stdio.h」
main()
{
char
c;
printf("請輸入一個大寫字母:");
scanf("%c",&c);
printf("小寫字母為:%c",c+32);
getch();
}
3、
#include
「stdio.h」
#include
"math.h"
main()
{
double
a,b,c;
double
p;
double
area;
printf("請分別輸入三條邊的長度:");
scanf("%lf
%lf
%lf",&a,&b,&c);
p=(a+b+c)/2;
area=sqrt(
p*(p-a)*(p-b)*(p-c));
printf("三角形的面積為:%.2lf",area);
getch();
}

閱讀全文

與c語言程序設計編程題相關的資料

熱點內容
壓縮因子定義 瀏覽:968
cd命令進不了c盤怎麼辦 瀏覽:214
葯業公司招程序員嗎 瀏覽:974
毛選pdf 瀏覽:659
linuxexecl函數 瀏覽:727
程序員異地戀結果 瀏覽:374
剖切的命令 瀏覽:229
干什麼可以賺錢開我的世界伺服器 瀏覽:290
php備案號 瀏覽:990
php視頻水印 瀏覽:167
怎麼追程序員的女生 瀏覽:487
空調外壓縮機電容 瀏覽:79
怎麼將安卓變成win 瀏覽:459
手機文件管理在哪兒新建文件夾 瀏覽:724
加密ts視頻怎麼合並 瀏覽:775
php如何寫app介面 瀏覽:804
宇宙的琴弦pdf 瀏覽:396
js項目提成計算器程序員 瀏覽:944
pdf光子 瀏覽:834
自拍軟體文件夾名稱大全 瀏覽:328