當前位置:首頁 » 編程語言 » c語言的難題

c語言的難題

發布時間: 2022-04-16 14:52:01

c語言的難點

c學起來也不是很難,主要是指針和其他的知識點入數組、函數等組合起來難理解一些
要想學習,主要有幾點需要注意
一、記憶部分
1、保留字,如if,int,for等
2、常規的結構,如條件,循環,switch、數組的結構,指針定義,結構體的定義等
3、語法的構成,如printf,scanf等一些語句的構成
4、一些系統帶的函數,常用的要記住,如strlen,printf等

5、一些經典的演算法,如素數的計算,排序的寫法等
二、演算法,語法等
這個就是解決問題的方法,沒有好的捷徑,只要慢慢的積累,數學方面的演算法要加深

其實,c基礎也就是那麼一些基礎點
1、保留字
2、定義變數等,int,float等

3、條件語句if,選擇語句switch,循環,do--while、for、while、goto
4、注意逗號語句,scanf和printf要熟練,知道格式(這個很基礎,用錯了很麻煩)
5、數組,這里注意二維數組和字元串的一些函數
6、指針,這個是難點,也就是說很難理解,特別是和數組函數結構體等結合使用的時候
7、結構體共用體,這個不難,就是繁瑣而已。這里涉及到鏈表,其實不難理解,可以想像成一串珠子,next指針就是串珠子的線,結構體就是珠子
8、文件操作,這個就是套用格式,沒難度
9、宏定義,這個沒難度,就是最簡單的直接替換。注意一點就是在定義宏的時候多用幾個括弧增加優先順序沒壞處
10、函數。這個難度不大,主要是要理解,參數是在調用的時候另外開辟內存空間。除了數組和用&定義的參數。要不然子函數改變了參數變數,調用它的地方的變數時不會改變的

其實就是這些基本的知識點

㈡ C語言難題 高手求解2

#include<stdio.h>
#include<string.h>
typedef struct{ long id;char name[10];char sex[2];}PS;

int del(PS *p1, int m, PS *p2,int n)
{
int i,k,j;
for(i=0;i<m;i++)
{
for(k=0;k<n;k++)
if(p1[i].id==p2[k].id)
{
for(j=i;j<m;j++)
{
p1[j]=p1[j+1];
i--;
}
m--;
break;
}
}
return m;
}
int merge(PS *p1,int m, PS *p2 ,int n)
{
int i,j,k,q;
PS temp;
for(i=n,j=0;i<m+n;i++,j++)
p2[i]=p1[j];
for(k=0;k<m+n;k++)
{
for(q=0;q<m+n-k-1;q++)
if(p2[q].id>p2[q+1].id)
{
temp=p2[q+1];
p2[q+1]=p2[q];
p2[q]=temp;
}
}
return m+n;
}
void sort(PS *p,int n)
{
PS temp;
int i,j=0,k;
for(i=0;i<n;i++)
if(p[i].sex[0]=='f')
{
temp=p[i];
p[i]=p[j];
p[j]=temp;
j++;
}
for(i=0;i<j;i++)
{
for(k=i+1;k<j;k++)
{
if(strcmp(p[i].name,p[k].name)>0)
{
temp=p[i];
p[i]=p[k];
p[k]=temp;
}
}
}
for(i=j;i<n;i++)
{
for(k=i;k<n;k++)
{
if(strcmp(p[i].name,p[k].name))
{
temp=p[i];
p[i]=p[k];
p[k]=temp;
}
}
}
}
void display(PS *p,int n)
{
int i;
printf("ID NAME SEX\n");
for(i=0;i<n;i++)
printf("%d %s %s\n",p[i].id,&p[i].name,&p[i].sex);
}
int main()
{
PS a[10]={{101, "tom","m"},{103,"mary","f"},{104,"mark","m"},{105,"julia","f"},{106, "sara","f"}};
PS b[10]={{102, "mark","m"},{104,"mark","m"}};
printf("a:\n");
display(a,5);
printf("b:\n");
display(b,2);
int m=del(a,5,b,2);
printf("a:\n");
display(a,m);
int n=merge(a,m,b,2);
printf("b:\n");
display(b,n);
sort(a,m);
printf("a:\n");
display(a,m);
}

㈢ C語言難題

第一題B和C,C表示ASCII表上的八進制值為034的字元。A中八進制沒有9,最後D是雙引號的空字元串。不是字元。有圖為證

C的表示方式稍微有點錯誤,八進制前面要加0。但是既然編譯器默認了

第二題:C選項被識別為八進制,因為表示方法為8進制。但是2位元組的存儲空間最大能存儲有符號數為32767,但是B前面並沒有+號強調一定是帶符號int。無符號數的表示範圍為0-65535.

第3題,A,這個很簡單,A選項沒有轉義符。


我可以合法合理地告訴你,這種題只有中國和日本才會出,總之最終答案的解釋權都在出題人手裡,如果你不是考試的話,這種題有多遠扔多遠,實在惡心又沒有任何用處。

㈣ C語言編程難題

#include<stdio.h>

int main()

{

int M=1, N,i;

scanf("%d", &N);

for (i = N; i > 1; i--)

M = 2 * (M + 1);

printf("%d ", M);

return 0;

}

㈤ 有關c語言難題

樓上似乎太簡略了一點喔···
#include
<stdio.h>
void
main()
{
int
year;
printf
("請輸入一個年份:
");
scanf
("%d",&year);
if
(
year
%4
==
0
&&
year
%
100
!=
0
||
year
%
400
==
0
)
printf
("%d是閏年\n",year);
else
printf
("%d不是閏年\n",year);
}

㈥ C語言難題

typedef struct stu{
char * name,gender;
int score;
}STU;

void f(char *p)
{
//p=(char *)malloc(10);
strcpy(p,"Qian");
}

int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(b.name);
b.gender ='f';
b.score =350;
printf("%s,%c,%d

\n",a.name,a.gender,a.score);
printf("%s,%c,%d

\n",b.name,b.gender,b.score);
return 0;
}

為啥注釋掉了以後的答案變成:Qian,m,290,Qian,f,

350,?
而不注釋掉答案卻是: Zhao,m,290,Zhao

,f,350?

你的目的是通過函數去修改另外一個結構體對象b中成員name

的值。
觀察到成員中的gender和score基本上沒有什麼值得研究 ,

所以只研究第一個成員name。

在你執行了代碼b=a的時候,b和a分別在內存條上佔用

sizeof(stu)的空間大小。而且,這兩個空間中的值都是一

模一樣的。
當你執行了函數f()的時候,分兩種情況。
第一沒有注釋:函數f會在棧上分配4個位元組的內存(sizeof

(char*),因為p的類型就是char*)。那麼p的值就是等於

b.name。
b.name的值我們假設是0x1234567,那麼現在p的值也就是

0x1234567。沒有注釋的情況下,p的值馬上被修改成malloc

的返回值,所以現在p的值一定不是0x1234567。
假如malloc的返回值是0x7654321,那麼現在p的值也就是

0x7654321。你使用了strcpy,那麼0x7654321首地址開始的

內容就變成了zhao。
所以,你沒有改變0x1234567所指向的內容。結果就是

0x1234567指向的內容還是為zhao。

第二有注釋:函數f會在棧上分配4個位元組的內存(sizeof

(char*),因為p的類型就是char*)。那麼p的值就是等於

b.name。
b.name的值我們假設是0x1234567,那麼現在p的值也就是

0x1234567。有注釋的時候。p的值沒有被malloc改變,還是

0x1234567.你使用了strcpy,就修改了0x1234567所指向的

內存。
最開始的內存中值是zhao,你修改後就變成了qian.

你的這個例子錯誤很多,但是基於你是實驗的目的,我就不指

正了。針對不注釋的情況,如果你要改變的話,我認為比較正

確的做法應該是這樣的。

typedef struct stu{
char * name,gender;
int score;
}STU;

void f(char **p)
{
*p=(char *)malloc(10);
strcpy(*p,"Qian");
}

int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(&b.name);
free(a.name);
a.name=NULL:
return 0;
}

㈦ 你知道哪些學習C語言過程中的難點

實際學習c語言最大難點是c語言之外的東西,大家都說指針難懂,但如果您非常熟悉某一種匯編,熟悉微機原理,甚至了解編譯原理過程,有操作系統的知識,了解最終目標代碼中heap,stack等,指針就是一個so easy的事,同理關於struct也是。我們上學早,那時沒有c,只有pascal,印象關於文件那章我就學的雲里霧里,最終只是應付考試的水準。後來工作,接觸多了,重新學習了操作系統,甚至是匯編,發現實際這個問題和操作系統有很大關系。c/c++也是這期間自學的,根本沒看過什麼譚浩強的書,通過反匯編看c/c++代碼,了解其實際實現機制,突然發現所謂c++的虛函數,純虛函數如此簡單,甚至了解了gcc和vc的差異。後來是看官方庫(那時還是bc),讀linux內核,重讀編譯原理發現實際c/c++真的非常好學:因為他們最接近底層,如果您這些知識扎實,才發現c是最直接的。之所以,c難學並非語法本身,而是相關知識不足。

㈧ C語言的難題

0分,果然是難題

㈨ c語言問題

您好,c語言經典100題:
【程序1】
題目:有1,2,3,4個數字,能組成多少個互不相同且無重復數字的三位數 都是多少
1.程序分析:可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去
掉不滿足條件的排列.
2.程序源代碼:
main()
{
int i,j,k;
printf("\n");
for(i1;i<5;i++) /*以下為三重循環*/
for(j1;j<5;j++)
for (k1;k<5;k++)
{
if (i!k&&i!j&&j!k) /*確保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}

【程序2】
題目:企業發放的獎金根據利潤提成.利潤(i)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤i,求應發放獎金總數
1.程序分析:請利用數軸來分界,定位.注意定義時需把獎金定義成長整型.
2.程序源代碼:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else if(i<200000)
bonusbonus1+(i-100000)*0.075;
else if(i<400000)
bonusbonus2+(i-200000)*0.05;
else if(i<600000)
bonusbonus4+(i-400000)*0.03;
else if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}

【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果.請看具體分析:
2.程序源代碼:
#include "math.h"
main()
{
long int i,x,y,z;
for (i1;i2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("it is the %dth day.",sum);}

【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum0;break;
case 2:sum31;break;
case 3:sum59;break;
case 4:sum90;break;
case 5:sum120;break;
case 6:sum151;break;
case 7:sum181;break;
case 8:sum212;break;
case 9:sum243;break;
case 10:sum273;break;
case 11:sum304;break;
case 12:sum334;break;
default:printf("data error");break;
}
sumsum+day; /*再加上某天的天數*/
if(year%4000||(year%40&&year%100!0))/*判斷是不是閏年*/
leap1;
else
leap0;
if(leap1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It is the %dth day.",sum);}
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出.
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小.
2.程序源代碼:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{tx;xy;yt;} /*交換x,y的值*/
if(x>z)
{tz;zx;xt;}/*交換x,z的值*/
if(y>z)
{ty;yz;zt;}/*交換z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}

【程序6】
題目:用*號輸出字母c的圖案.
1.程序分析:可先用'*'號在紙上寫出字母c,再分行輸出.
2.程序源代碼:
#include "stdio.h"
main()
{
printf("hello c-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}

【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,very beautiful!
1.程序分析:字元共有256個.不同字元,圖形不一樣.
2.程序源代碼:
#include "stdio.h"
main()
{
char a176,b219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}

【程序8】
題目:輸出9*9口訣.
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i1;i<10;i++)
{ for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左對齊,佔3位*/
}
printf("\n");/*每一行後換行*/
}
}

【程序9】
題目:要求輸出國際象棋棋盤.
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
}

【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉.
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j;
printf("\1\1\n");/*輸出兩個笑臉*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}

【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少
1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
main()
{
long f1,f2;
int i;
f1f21;
for(i1;i<20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%20) printf("\n");/*控制輸出,每行四個*/
f1f1+f2; /*前兩個月加起來賦值給第三個月*/
f2f1+f2; /*前兩個月加起來賦值給第三個月*/
}
}

【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數.
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數.
2.程序源代碼:
#include "math.h"
main()
{
int m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{ ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe total is %d",h);
}

㈩ C語言難題 高手求解

#include<stdio.h>
#include<stdlib.h>

structdata_array{
longnum;
intscore;
};

typedefstructstudent{
longnum;
intscore;
structstudent*next;
}NODE;

NODE*create(structdata_array*array,intn)
{
inti;
NODE*head=NULL,*phead,**preNext;

for(i=0;i<n;i++){
NODE*node=(NODE*)malloc(sizeof(NODE));
if(!node){
continue;
}
node->num=array[i].num;node->score=array[i].score;node->next=NULL;
for(phead=head,preNext=&head;
phead&&phead->num<array[i].num;
preNext=&phead->next,phead=phead->next);
*preNext=node;
node->next=phead;
}

returnhead;
}

voiddisplay(NODE*head)
{
while(head){
printf("%d%d ",head->num,head->score);
head=head->next;
}
}

void_list(NODE*head1,NODE**head2)
{
NODE*node=NULL,**preNext=head2;
while(head1){
node=(NODE*)malloc(sizeof(NODE));
if(node){
*preNext=node;
node->num=head1->num;node->score=head1->score;node->next=NULL;
preNext=&node->next;
}
head1=head1->next;
}
}

NODE*merge(NODE*head1,NODE*head2)
{
NODE*node1,**preNext1,*pnode2;
while(head2){
for(node1=head1,preNext1=&head1;
node1&&node1->num<head2->num;
preNext1=&node1->next,node1=node1->next);
pnode2=head2->next;
if(node1&&node1->num==head2->num){
node1->score=head2->score>node1->score?head2->score:node1->score;
head2=head2->next;
continue;
}
*preNext1=head2;
head2->next=node1;
head2=pnode2;
}
returnhead1;
}

NODE*del(NODE*head1,NODE*head2)
{
NODE*node1,*node2,**preNext;
for(node2=head2;node2;node2=node2->next){
for(node1=head1,preNext=&head1;node1;/**noactionhere*/){
if(node1->num==node2->num){
*preNext=node1->next;
free(node1);
node1=*preNext;
continue;
}
preNext=&(node1->next);
node1=node1->next;
}
}

returnhead1;
}

intmain(intargc,char**argv)
{
NODE*a=NULL,*b=NULL,*a_p=NULL,*b_p=NULL;
structdata_arraydata_a[]={{20304,75},{20311,89},{20303,62},{20307,87},{20320,79}};
structdata_arraydata_b[]={{20302,65},{20301,99},{20311,87},{20323,88},{20307,92},{20322,83}};

a=create(data_a,sizeof(data_a)/sizeof(structdata_array));
b=create(data_b,sizeof(data_b)/sizeof(structdata_array));

a=merge(a,b);
display(a);

return0;
}


main函數還需要你自己完善。

熱點內容
python查看編碼 發布:2025-01-21 19:58:12 瀏覽:836
人記憶存儲位置 發布:2025-01-21 19:55:05 瀏覽:690
計算機存儲容量的基本單位是 發布:2025-01-21 19:35:44 瀏覽:980
c語言怎麼給字元賦值 發布:2025-01-21 19:30:45 瀏覽:122
拍賣php源碼 發布:2025-01-21 19:27:52 瀏覽:115
數控編程南京 發布:2025-01-21 19:20:16 瀏覽:163
ftp伺服器功能為 發布:2025-01-21 19:05:53 瀏覽:121
7z解壓有密碼 發布:2025-01-21 19:05:08 瀏覽:608
軒逸經典豪華有哪些配置 發布:2025-01-21 18:56:16 瀏覽:71
hibernate查詢sql語句 發布:2025-01-21 18:48:46 瀏覽:304