當前位置:首頁 » 編程語言 » c語言難題解決方案
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言難題解決方案

發布時間: 2022-05-13 00:04:52

A. c語言中的問題不明白為什麼 新人麻煩詳細解釋一下謝謝

這里scanf指定逗號為輸入的分隔符號。所以輸入時數字和字元之間必須有逗號。

scanf不指定分隔符時,默認以空白字元(空格、回車、製表符)為分隔符。

PS:如果寫%d%c不指定分隔符號。由於第二個變數是字元型,輸入時中間不要加空格符,否則會將空白符號做為字元接收。

B. C語言編程題沒有思路怎麼辦

C語言編程題沒有思路:先對問題進行分析,心裡大體有個演算法來解決,然後再開始一步步編寫程序,如果想不好,可以先畫畫結構圖,當然這是對編程題。對填空題就得先了解程序的用途,然後看代碼中缺少的內容了。

程序就是讀取文件到數組,再將數組進行排序,最後寫入文件。讀寫文件流程:fopen獲取文件流(根據讀寫需求,選擇參數,使用完必須調用fclose函數關閉),fscanf讀取文件內容,fseek控制文件流指針,fprintf寫入文件。選擇排序:每個循環周期選出一個最值,交換一次。

主要特點

C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。

C. C語言中什麼是解決方案

解決方案
就是解決問題的方法
在C語言中 就是解決一個問題,完成一項功能的具體演算法
在方案階段, 只是一個解決的思路,或者演算法
將方案實施,就是將演算法轉化為具體的代碼

D. c語言編程問題!!

1.編程在一個已知字元串中查找最長單詞,假定字元串中只含有字母和空格,空格用來分割不同單詞!

方法一:

//VC++ 6.0 編譯通過

#include
void main()
{
char str[]="hello world my name is xun yi cao !!";
char*p=str,*p1;
int max=0,count=0,i;
while(*p)
{
count=0;
while(*p==' ')p++;
while(*p!=' '&&*p)
{//一定要注意這里的判斷 *p!=0 也要判斷,不然到了最後一個單詞時,它一直向後面加,直到碰見空格,所以會超界。
p++;
count++;
}
if(max<count)
{
max=count;
p1=p-count;
}
}
printf("the largest number is :%d \n",max);
printf("the largest word is : ");
while(*p1!=' '&&*p1) //這里也要判斷*p1!='\0',因為如果最長的單詞在字元串的末尾的話,如果不判斷*p1!='\0',也會過界。
{
putchar(*p1);
p1++;
}
putchar('\n');
}

/*
求字元串中最長的單詞。要注意的是:如果在一個循環A 裡面還有循環B 的話。那麼不僅在循環B裡面要保證,數組不過界。
而且要要保證在循環A裡面數組也不過界。就像上面的例子一樣。現給出一個更容易理解的例子。
while(*p)
{
while(*p!=' '&&*p)
{
p++;
}
}
雖然外循環和內循環在循環條件上沒有什麼必然的聯系,但是對於一個數組的指針而言(如果以變數下標的
形式來訪問數組的話,下標的加減也要引起注意),它的加減也要引起注意,必須要保證不能過界。
*/

方法二:

//VC++ 6.0 編譯通過。

#include
#include
void main()
{
char str[]=" I am a student";
char*p=str,Array[10][20]={0};
int i=0,j=0,max=0;
while(*p)
{
while(*p==' ')*p++;
while(*p&&*p!=' ')
{
Array[i][j++]=*p;
p++;
}
i++;j=0;
}
i=0;
max=strlen(Array[i]);
p=Array[i];
while(strlen(Array[i]))
{
if(max<strlen(Array[i]))
{
max=strlen(Array[i]);
p=Array[i];
}
i++;
}
printf("%d\n%s\n",max,p);
}

/*
求字元串中最長的單詞(不能分辨含非字母字元的單詞),採用的是二維數組的形式判斷的。
定義了一個二維數組,它的每一個元素用來存放一個字元串(每個被分離後的單詞)。
再判斷最長的那個。

這中方法對比第一種方法來說,思路更清晰一些。但是缺點就是要分配一個二維的數組來存放被分離後的每個
單詞,佔用存儲空間。
*/

2.編寫實現任意十進制數,轉換成r進制數(r在2到16之間)

轉換為二進制:

//VC++ 6.0編譯通過

#include
#include
void main()
{
int a,b[30],i;
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%2;
a=a/2;
}
for(--i;i>=0;i--)
{
printf("%d",b[i]);
}
putchar('\n');
}

//關於二進制的轉換,還可以用位移運算符。通過和某一個數如1相按位與,就得到它的二進
制最低位,在位移,再得到二進制最低位,依此類推。

轉換為8進制:

/VC++ 6.0編譯通過。

#include
#include
void main()
{
int a,b[20],i;
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%8;
a=a/8;
}
for(--i;i>=0;i--)
{
printf("%d",b[i]);
}
putchar('\n');
}

/*
轉換為8進制就沒有16進制那麼麻煩了,它不需要另外定義一個字元數組用來存放,進制的
所有基數了,而是直接輸出來就可以了。而對與16進制還要存放他的基數。從0到F
*/

轉換為16進制:

//VC++ 6.0 下編譯通過

#include
#include
void main()
{
int a,b[20],i,base=16;
char X[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%base;
a=a/base;
}
for(--i;i>=0;i--) //開始有一個 --i
{
int j=b[i];
printf("%c",X[j]);
}
printf("\n");
}

/*
一般把其它進制的數轉換為十進制的數較容易,有一個現成的乘法公式供我們使用。
但把十進制的數轉換為其它進制的數,則要用到除法。這題的思路是比較清晰的,應該是
解決這類問題的典型演算法了。

而對於把十進制的數轉換為二進制的數來說,除了用到除法外,還可用位運算。

這個問題主要是這兩句話值得理解:

b[i]=a%base;
a=a/base;
我們一般是用這兩句循環使用來得到一個整數的各位的數字,這也恰巧說明了,我們得到
一個整數的各個位數所用到的方法,正是把一個十進制的數轉換為一個 "十進制" 數的演算法
也就是我們得到一個十進制數的各個位的數字的過程,實際上就是求把他轉換為一個十進制
的數字的過程(雖然這里本身沒必要在轉換,因為本身它就已經是一個十進制數了)。用同樣
的道理可以推算把十進制數轉換為其他進制數的過程,和這個是類似的。

然後將後得到的結果先輸出,而先取余數得到的結果則在數字的最後面,在低位。

*/

通用解決方案:

#include
#include
void main()
{
int a[10]={0,1,2,9,10,5,12,7,8,15};
for(int i=9;i>=0;i--)
{
if(a[i]>=10)
switch(a[i])
{
case 10: printf("%c",'A');break;
case 11: printf("%c",'B');break;
case 12: printf("%c",'C');break;
case 13: printf("%c",'D');break;
case 14: printf("%c",'E');break;
case 15: printf("%c",'F');break;
}
else
printf("%d",a[i]);
}
}

/*
其實進制轉換的演算法我們都知道,就是用我們要轉換的那個數,對進制的基數(如果是16進制)
進行取余,把取余的結果保存在一個數組裡面,再對他取整重新賦值,也就是丟掉余數部分,
相當於取上一步的商,再取余,再取整。如此循環,直到為0。

其實上面的演算法,只要我們想起把一個十進制的數轉換為二進制的數的計算方法,就不難理解,
因為都是相通的。

現在關鍵是,如果我的這些事情都做好了,也就是余數都放在一個數組里了,現在要做的就是
把數組逆序輸出就ok了。那麼如果是二進制或八進制,我們只要直接輸出就可以了,但是如果是
一個十六進制的話,就不能這樣了,也就是如果數組裡面有一個元素是14,那麼我就不能原樣輸出
了,此時必須輸出E,因為E就是十六進制裡面的基數,而且也是與十進制的14相對應的。但是如果
是一個二進制或者是一個八進制的話,就可以直接輸出,因為數組裡面的數都是0,1(對二進制)
或者(0....8),這些數就是二進制和八進制的基數。

所以這里要面臨的問題就是,在輸出一個整數的時候,如果這個整數滿足某一條件,就輸出什麼字
符的問題,例如:如果這個整數等於14則輸出'E'字元。

當然我們可以用 if..else 語句來判斷,對於十六進制的數特殊的字元也就只有A,B,C,D,E,F六個
用 if...else 來判斷也不算太煩瑣。當然我們還可以用 switch 來判斷,這樣更加有條理。代碼
也更清晰。

當然這是對於16進制的數來說的,我們可以這樣判斷,但是如果實際生活中遇到的問題和這個有點
類似,而且字母有多的話,用條件判斷或switch就太煩瑣了,代碼也不直觀,還容易出錯。

那麼這時我們可以在定義一個字元數組,分別放我們要輸出的字元,如果有以下對應的關系:

10 A
11 B
12 C
13 D
14 E
15 F
16 G
17 H
18 I
19 J

也就是說在數組a裡面放的是數字,在數組b裡面放的是字元,要求數組a裡面的數字是10的時候,輸
出'A',而不是輸出10,依次類推(看上面的對應關系),當然我上面的對應關系都是順序的,其實也
可以不是順序的,對於數字和字元都可以是亂的,當然這要看實際遇到的問題是什麼樣的了。如果
對上面的問題還用if...else來判斷的話,那未免太煩瑣。所以我們定義一個字元數組來專門存放
字元。那麼怎麼讓數字和字元聯系起來呢,怎麼讓a[i]的值是10的時候就輸出'A'而是14的時候就輸
出'E'呢,在這里我們可以這樣定義b數組:

char b[30]={0};
b[10]='A';
b[11]='B';
b[12]='C';
b[13]='D';
b[14]='E';
...
b[19]='J';

這樣也就是說當a[i]元素的值是10時,就輸出b[10],是11就輸出b[11];這樣就和數字對應起來
了。我們可以這樣用:

int t=a[i];
printf("%c",b[t]); a[i]的值是多少,我們就輸出b[多少]

但對於上面舉的例子來說,可以這樣:

if(a[i]>=10&&a[i]<=19) //對應關系是連續的,才可以這樣判斷
{
int t=a[i];
printf("%c",b[t]);
}
else
{
printf("%d",a[i]);//如果不屬於定義的對應的特殊字元,就原樣輸出。
}

當然了,上面的是對應的連續的情況,對與10進制與二進制,8進制,16進制之間的轉換,都是連續的情況。
如果對應的是不連續的情況,那有該怎麼辦呢:

20 'A'
25 'B'
30 'D'
50 'G'
53 'H'
58 'C'
100 'Z'
200 'W'

對於上面的情況,是一點規律性也沒有的,而且如果為了這幾個數就去定義一個200個元素的數組,實在是
有點劃不來。所以如果是上面這種情況,就沒有比較好的辦法了。只用用判斷語句了,當然如果有20多個
字元的對應關系的話,判斷語句也是不合適的,那麼就沒有比較好的辦法了。還要進一步探索....

*/

這些都是我在考計算機等級考試碰到過的題目哦,演算法都是相當典型的,有的是書上看到的,有的是自己擴展的。還是要自己認真哦。。。

由於文字太多第三題提交不上來了哦。。不好意思。。。

E. c語言可以解決哪些實際問題,及思路

摘要 主要是學習思維,C語言是一門很好的功課,在裡面的演算法,流程圖的描繪,可以幫助我們很好的入門,同時鍛煉我們的邏輯

F. 如何解決c語言難題。 某餐廳有18個包廂,編號為1到18。其中a[i]存儲第i個包廂的

a[19];//各個包廂的座位數
int GuestNum[4];//每組的客人數
bool UsedFlag[19]={false};//包廂已經使用標志
int AllocRoom(int GuestNum){//分配最合適包廂函數
int BestRoom=20;//初始設定為不存在的包廂號,用於後面判斷是否有合適包廂
int Temp=20;//用於保存包廂座位數與客人數的差值
for(int i=0;i<19;i++)
{
if(a[i]>0&&//無預定的房間
a[i]-GuestNum>=0&&//確保每一位客人都能就座
Temp>=a[i]-GuestNum&&//判斷有更合適的包廂
UsedFlag[i]==false)//判斷包間處於空閑狀態
{
Temp=a[i]-GuestNum;//保存差值用於下一次判斷有更合適的包廂
BestRoom=i;//更新最合適包廂號
}
}
UsedFlag[BestRoom]=true;//最合適包廂找出,將該包廂標為已使用
return BestRoom+1;//輸出包廂序號
}
main()
{
INPUT(GuestNum[4]);//獲取每組客人數
int Number=0;//最合適包廂序號
for(int i=0;i<4;i++)
{
Number=AllocRoom(GuestNum[i]);
if(Number==21)
OUTPUT(第i組家庭 沒有合適的包廂);//輸出
else
OUTPUT(第i組家庭在Number號包廂就餐);//輸出
}
}
這是一個想法骨架,你看著改。

G. c語言編程看不懂,怎麼辦啊

我的專業軟體工程,大學第1學期學的就是這個,下面說說個人的一些體會:
1,開始的時候先是學好基礎,如int,char各代表什麼,要記憶的東西要記牢並且要好好理解;
2,通過1段時間的學習要對C語言的基本特點有個大概的認識,找些參考書籍看看簡短的語句表示什麼意思,和一些改錯題,要十分注意,有可能這些就是你要犯的錯誤哦。
3,當然是多多的練習編寫程序了,最起碼要能快速的打完程序,因為考試可是有時間限制的。這時候就要注意了,開始編寫程序的程序的時候可能不知道自己編的是什麼東東,這要多聽老師的講解。最主要的是老師編寫程序的思想和邏輯,這時候你就要把自己所學的循環,數組,指針,函數的聲名調用等等運用到你的程序中去了,而且要形成1種C語言的思維。強烈介意多看點思維邏輯方面的閑書(總不能都看C語言吧,那真是太痛苦了),培養自己的思維。
4,程序要從簡單的寫起,不要一下子渴望能寫出什麼來,主要還是你要在編寫程序時候要培養思維方式的,等你能寫出老師規定的程序和一般程序都沒什麼問題的時候,要規范你的程序了,形成自己獨有的風格啊,讓人1看這就是你的程序
5,多多注意你程序編寫運行時候出現的錯誤,要對每個錯誤要有深刻的理解,還有注意細節,不要出現丟個分號什麼的。
6,還有就是不要灰心和輕易說自己不會,可以明確的告訴你,剛學C語言是覺的困難正常,全班1班人不過正常,只要你堅持就行了,我第1次考試才48,但之後就都是80多了,所以開始沒學好沒什麼的,想想我考了40,你的心理總有些安慰吧。
總之,想學好C語言就是理解基礎,培養思維和多多編寫程序了

H. c語言問題

結果是2。
循環i能整除3就結束,反之就將i的值累加到s。
第一次循環,i值2,執行s+=I;
第二次循環,i值3,break;結束循環。
這里while沒有大括弧,所以作用域是下面的if else語句。

I. c語言難題 請高手進來幫忙解決 在線等

#include <stdio.h>
int main()
{
char sex,sports,diet;
double faHeight,moHeight,yourHeight;
printf("輸入你的性別(F女/M男):");
scanf("%c",&sex);
getchar();
printf("輸入你父親的身高(cm):");
scanf("%lf",&faHeight);
getchar();
printf("輸入你母親的身高(cm):");
scanf("%lf",&moHeight);
getchar();
printf("你喜愛體育運動嗎?(y/n)");
scanf("%c",&sports);
getchar();
printf("你有有良好的飲食習慣嗎?(y/n)");
scanf("%c",&diet);
getchar();
if (sex=='F')
yourHeight=(faHeight*0.923 + moHeight) / 2;
else if (sex=='M')
yourHeight=(faHeight + moHeight)*0.54;
else printf("性別錯誤\n");
if (sports=='y') yourHeight=yourHeight*1.02;
if (diet=='y') yourHeight=yourHeight*1.015;
printf("你的身高為:%lfcm",yourHeight);
return 0;

}
你把程序改成這樣就可以了!就是double和float的類型轉換!

J. c語言編程方面的問題應該如何解決

1、學習方法:基本掌握面向過程程序設計的基本思路和方法。

2、達到熟練掌握C語言的基本知識和技能。

3、能夠利用所學的基本知識和技能,解決簡單的程序設計問題。