請大神幫忙看下c語言編程問題,c語言編程常見問題解答

本文目錄一覽:

C語言程序編程題,求大神幫幫忙

#includestdio.h

int main()

{ struct stu

{ int id;

  char name[11];

  int a,b,c;

} t,st[5];

int i,j;

FILE *fp1,*fp2;

if((fp1=fopen(“d:\\stud.dat”,”r”))==NULL)

{ printf(“f1 open error!\n”);

  return 1;

}

if((fp2=fopen(“d:\\studsort.dat”,”w”))==NULL)

{ printf(“f2 open error!\n”);

  return 2;

}

for(i=0; i5; i++)

  fscanf(fp1,”%d%s%d%d%d”,st[i].id,st[i].name,st[i].a,st[i].b,st[i].c);

for(i=0; i4; i++)

  for(j=0; j4-i; j++)

    if(st[j].a+st[j].b+st[j].cst[j+1].a+st[j+1].b+st[j+1].c)

    { t=st[j];

      st[j]=st[j+1];

      st[j+1]=t;

    }

for(i=0; i5; i++)

{ printf(“%d %10s %4d %4d %4d  %7.2f\n”,st[i].id,st[i].name,st[i].a,st[i].b,

         st[i].c,(st[i].a+st[i].b+st[i].c)/3.0);

  fprintf(fp2,”%d %10s %4d %4d %4d  %7.2f\n”,st[i].id,st[i].name,st[i].a,st[i].b,

          st[i].c,(st[i].a+st[i].b+st[i].c)/3.0);

}

fclose(fp1);

fclose(fp2);

return 0;

}

有一個C語言的編程問題,求大神幫忙看看下面的碼哪有錯,運行時總是計算不對

我和 solidco2 是同一個人,原回答不知道為什麼不能修改,所以用小號來貼代碼:

int main()

{

    int n = 0;

    int m = 0;

    double *name; /*真正動態大小的只能用指針*/

    double *avarage1;

    int i, j;

    double avarage_all1, max1;

    //賦值

    printf(“Please enter two numbers to decide the length of array:”);

    scanf(“%d%d”, n, m);

    name = (double *)malloc(sizeof(double) * m * n); /*然後動態分配空間*/

    avarage1 = (double *)malloc(sizeof(double) * n);

    printf(“Please enter %d numbers for the array:”, n * m);

    for(i = 0; i  n; i++)

    {

        for(j = 0; j  m; j++)

            scanf(“%lf”, ( (double (*)[m]) name)[i][j]);  /*這裡要加強制轉換,也可以換成 name[i*m+j]*/

    }

    //開始調用

    for(i = 0; i  n; i++)

        avarage1[i] = avarage(n, m, i, (double (*)[m])name); /*下面的調用也一樣要強制轉換*/

    avarage_all1 = avarage_all(n, m, (double (*)[m])name);

    max1 = max(n, m, (double (*)[m])name);

    print(n, avarage1, avarage_all1, max1);

    //getch();

    free(name); /*用完記得回收*/

    free(avarage1);

    return 0;

}

我是儘可能保留樓主原來的思路來修改的代碼,所有 /* */ 標註的注釋的地方,都是我改過的。另外,不知道樓主用的什麼編譯器,一般double型變數,輸入輸出的時候用%lf小寫的,樓主的%Lf表示的是long double,也就是long long float,為了編譯不出警告,我統一換成了%lf了。

下面說明一下所有改動,按照solidco2裡面的引用所說,數組用變長來表示的時候,在函數開始執行的時候,長度就是已經確定了的,name也一樣,按照樓主的寫法,在main函數一開始,name就被確定為m=0,n=0了,所以sizeof(name)是0。而不管後面m和n輸入什麼值。或許樓主會想,那把name的定義放到m和n被輸入之後呢?很遺憾,這樣仍然不行,因為編譯過程,變數定義會被移到所有初值賦值的前方。所以這裡只能在輸入之後,使用malloc來重新劃定空間。而傳參為了能夠正常傳給變參二維數組的函數,malloc出來的一維數組要模擬成二位數組,也就是指針的強制轉換。於是便有了上面的代碼。看出來裡面有很多轉換,可讀性不高,寫起來也麻煩。

那麼真的沒有辦法按樓主的方法去寫代碼嗎?有一個,繼續拆函數。

原代碼更改如下:main2函數和樓主的就幾乎一樣了(除了輸入m和n的過程)

int main2(int m, int n, double name[n][m], double avarage1[n])

{

    int i, j;

    double avarage_all1, max1;

    printf(“Please enter %d numbers for the array:”, n * m);

    for(i = 0; i  n; i++)

    {

        for(j = 0; j  m; j++)

            scanf(“%lf”, name[i][j]);  

    }

    //開始調用

    for(i = 0; i  n; i++)

        avarage1[i] = avarage(n, m, i, name);

    avarage_all1 = avarage_all(n, m, name);

    max1 = max(n, m, name);

    print(n, avarage1, avarage_all1, max1);

    //getch();

    return 0;

}

int main() {

    int m=0, n=0;

    void *name, *avarage1;

    //賦值

    printf(“Please enter two numbers to decide the length of array:”);

    scanf(“%d%d”, n, m);

    name = malloc(sizeof(double) * m * n); /*然後動態分配空間*/

    avarage1 = malloc(sizeof(double) * n);

    main2(m, n, (double (*)[m])name, (double *)avarage1);

    free(name); /*用完記得回收*/

    free(avarage1);

    return 0;

}

C語言編程問題,大神來解答

首先,d 的值 分別是 5 跟12,不是 5 跟7;

下面開始解釋:

題目 的不同點 是 ①b=2,c=3;②b=3,c=2;該不同點 在 m 值 的運算中,將直接導致 a 值的不同;

②題比較好理解,a=bc→a=32,條件成立,a=1;d=d+e=12;m=a d,a(1)、d(12)值都為真,m=1;所以 ②的列印是 :1,3,2,12,7,1;

① 中,a=bc→a=23,條件不成立,a=0;(到此後開始麻煩),邏輯與()運算中,先進行左邊(a=bc)的運算,如果左邊結果為真,就繼續算右邊的結果。但如果左邊的結果為 假,那麼右邊的結果將不影響 整個 與運算 結果,於是 就不在 執行 右邊的運算。於是乎,①中 a=0,m 直接=0,不執行 d=d+e,所以 d 不變,結果列印 :0,2,3,5,7,0

c語言編程100題,有沒有大神幫幫忙

您好,c語言經典100題:

【程序1】

題目:有1,2,3,4個數字,能組成多少個互不相同且無重複數字的三位數

都是多少

1.程序分析:可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去

掉不滿足條件的排列.

2.程序源代碼:

main()

{

int

i,j,k;

printf(“\n”);

for(i1;i5;i++)

/*以下為三重循環*/

for(j1;j5;j++)

for

(k1;k5;k++)

{

if

(i!ki!jj!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(i100000)

bonusi*0.1;

else

if(i200000)

bonusbonus1+(i-100000)*0.075;

else

if(i400000)

bonusbonus2+(i-200000)*0.05;

else

if(i600000)

bonusbonus4+(i-400000)*0.03;

else

if(i1000000)

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%40year%100!0))/*判斷是不是閏年*/

leap1;

else

leap0;

if(leap1month2)/*如果是閏年且月份大於2,總天數應該加一天*/

sum++;

printf(“It

is

the

%dth

day.”,sum);}

【程序5】

題目:輸入三個整數x,y,z,請把這三個數由小到大輸出.

1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果xy則將x與y的值進行交換,

然後再用x與z進行比較,如果xz則將x與z的值進行交換,這樣能使x最小.

2.程序源代碼:

main()

{

int

x,y,z,t;

scanf(“%d%d%d”,x,y,z);

if

(xy)

{tx;xy;yt;}

/*交換x,y的值*/

if(xz)

{tz;zx;xt;}/*交換x,z的值*/

if(yz)

{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;i10;i++)

{

for(j1;j10;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;i8;i++)

{

for(j0;j8;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;i11;i++)

{

for(j1;ji;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;i20;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;m200;m++)

{

ksqrt(m+1);

for(i2;ik;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語言編程的問題,麻煩大神看下

題主給的代碼錯誤有兩個點:

①進入第二個for循環之前,應當重新初始化p1, p2,讓它們重新p1指向數組a首地址,p2指向數組a第二個地址。

②第二for循環裡面,應該是if判斷,而不是while

下面是我修改後的代碼:

#include stdio.h

void fun(char *w)

{ char s,*p1,*p2;

int i,j;

for(i=0;i4;i++)

p1 = w;

p2 = w + 1;

for(j=0;j4-i;j++) 

if (*p1  *p2)

{

s = *p1;

*p1 = *p2;

*p2 = s;

}

p1++;

p2++;

}

}

int main()

{

char a[]={‘B’,’Y’,’A’,’J’,’a’};

int n;

fun(a); 

char *p=a; 

for(n=0;n5;n++,p++) 

printf(“%c\n”,*p);

}

c語言編程問題,求大神幫忙

把scanf(“% d,% d”,year,month);改成scanf(“%d,%d”,year,month);,輸入時逗號隔開。

把類似printf(“%d年的%d月有30天\n”,year,month); 的語句都改成printf(“%d年的%d月有30天\n”,year,month); 。

原創文章,作者:FVZP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139460.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FVZP的頭像FVZP
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • AK大神叫什麼

    AK大神,世界級音樂製作人,被譽為”日本流行音樂的教父”,同時也是一位出色的DJ。他的真實姓名是宇多田光(Hikaru Utada)。 一、AK大神的音樂之…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28

發表回復

登錄後才能評論