㈠ 求解一道c語言基礎編程題。。
舉個例子你就懂了,以16進制的2ABC為例,16進制轉為10進制的方法,就是從右到左,依次用該位的數字乘以16的0次方、16的1次方、16的2次方(同樣如果是其它進制,比如8進制,那就是8的0次方、1次方等等)。。之和,比如說2ABC轉10進制,就等於
2ABC(16)=C*1+B*16+A*16*16+2*16*16*16
你上面這個代碼就是模擬這個過程,從最後一位起,先將字元轉為實際對應的數字,比如說輸入的是2A,那麼'A'對應的數字就是10+'A'-'A'=11,同樣的'2'對應的數字就是'2'-'0'=2(或者'2'-48=2,48即'0'的ascii)得到的數字放在n里,然後用t來計算每一次該乘以多少(比如最後一位,t就是1,倒數第二位,t就是16,倒數第三位,t就是16*16),之後再通過sum+=n*t累加。
while (s[len]!='\0') len++; //通過循環獲取長度,實際上在string.h里有strlen可以直接獲取
i=len-1;
while (s[i]!='\0') { //循環開始
n=0;
if (s[i]>='0'&&s[i]<='9') //if else計算每一位實際對應的10進制數字
n=s[i]-48;
else if (s[i]>='A'&&s[i]<='F')
n=10+s[i]-'A';
t=1;
for (j=0; j<len-i-1; j++) t=t*k; //計算當前位應該乘以多少,比如i起始是len-1,那麼j=0;j<len-i-1實際上就是j<0;沒有循環,t為1,下一次循環i是len-2,j<len-(len-2)-1即為j<1,循環一次,t=1*16=16,同樣,再下一次就是16*16
printf("****%d\n",t);
sum += n*t;//累加
i--;
}
不過這樣寫確實有些繁瑣,也沒啥必要,可以是
int base(int k,char s[])
{
int len=0,sum=0;
int i,n;
while (s[len]!='\0') len++;
for(i=0;i<len;i++)
{
if (s[i]>='0'&&s[i]<='9')
n=s[i]-48;
else if (s[i]>='A'&&s[i]<='F')
n=10+s[i]-'A';
sum=sum*k+n;
}
return sum;
}
㈡ c語言用什麼軟體練習好
使用「turbo c for windows」,這是專門為c的學習開發的。
Turbo C/C++ for Windows 集成實驗與學習環境是從事一線教學的大學教師根據 C 語言初學者的特點,量身定製的一個簡單易用的 C 語言實驗與學習軟體。軟體集成了高校 C 語言教學中使用最多的三種編譯器 Visual C++ 6.0 、Turbo C++3.0和Turbo C 2.0 ,給高校 C 語言的實驗教學提供了簡單易用的軟體實驗環境(免費使用)。與軟體配套的《 C 語言入門教程》融入了作者多年的教學和學習經驗、編程建議、編程感悟等,同時,為了便於C語言學習,加入C語言學習指導、入門程序實例、典型源程序、典型的函數演算法,課程設計指導、課程設計源程序、 Visual C++6.0 常見編譯錯誤信息、Turbo C++3.0常見編譯錯誤信息、 Turbo C2.0 常見編譯錯誤信息、C語言專業詞彙的中英文對照、二級 C 語言的真題筆試試卷及答案與分析和上機模擬試題和詳盡的答案與分析等大量的學習資源。另外 「編程日記」 功能可以讓你記錄你的 C 語言學習歷程, 「資料管理」 功能讓你大量的下載資料不再難找 。
可以在華軍軟體園里下載,地址:http://www.onlinedown.net/soft/30053.htm
㈢ 初級C語言練習題
1、scanf printf
2、.c .obj .exe .exe
3、函數
4、分號
5、編歲談寫 調試 編譯 連接 運行
7 確定性 有零個或多個輸入 有一個或多個輸入乎雹碰 有效肆消性
8 順序 選擇 循環 單入口和單出口
9 N/S流程圖
㈣ 《C語言程序設計》練習題
一、選擇題
1、C語言規定,在一個源程序中,main()函數的位置(C )。
A) 必須在最開始 B)必須在最後
C) 可以任意 D) 必須在系統調用的庫函數後面
這題你死記就行,你看看這個
任何一個C++程序都必須定義一個main函數,它的返回類型總是int類型。這個函數由操作系統來調用,在main函
數執行完以後,程序也就終止了。 main也可以使用return向操作系統返回一個值,使用操作系統的命令可以檢測
main的返回值。一般約定在main返回0時,表示程序運行過程中沒有出現錯誤,其它非零值表示程序出現異常情況。
若沒有為main指定返回值,這樣返回值是任意的。
2、若x和y都是int 型變數,x=100,y=200,且有以下程序段,printf(「%d」,(x,y));則其輸出結果是( A)。
A) 200 B) 100 C) 100 200 D) 輸出不確定值
(x,y)這是個逗號表達式,表達式的值為最後一個逗號後面表達式的值,因為前面有一個%d,所以輸出 的是y的
值
3、合法的C語法字元常量是(C )。
A) 「A」 B) 65 C) 『\t』 D) A
字元都是由兩個單引號括起來的,死記, a)為字元串
4、表達式「3!=4」的值是(A )。
A) 1 B) 0 C) T D) F
!=是c語言的邏輯運算符,3!=4為真,多以得1, 3=4為假,值為0
5、 int a=1,b=2,c=3,d=4,執行下列程序後x的值為( C)。
if(a>b) x=1;else if (c>d) x=2;else x=3;
A) 1 B) 2 C) 3 D) 4
如果a>b,1>2為假,不執行x=1,執行else if(c>d),判斷:3>4為假,不執行x=2,執行=3,完
6、以下程序的輸出結果是(D)。
Int x=10,y=3,z;printf(「%d\n」,z=(x%y,x/y));
A)1 B) 0 C) 4 D) 3
逗號表達式,x%y,10%3,商3餘1,模取余數1,x/y,10/3,商3餘1,除法取商3,逗號表達式,表達式的值為最後一
個逗號後面表達式的值
7、為表示x≥y≥z,應使用C語言表達式(A )。
A) (x>=y)&&(y>=z) B) (x>=y) AND (y>=z)
C) (x>=y>=z) D) (x>=y) & (y>=z)
關系運算符,x>=y與y>=z必須是同時成立的,因此要用邏輯運算符&&,&&與的意思
8、合法的數組定義是( a )。
A) int a[ ]=」string」; B) int a[5]={0,1,2,3,4,5};
C) char a=」string」; D) char a[ ]={「01234」};
a不指定數組長度定義,正確
b數組長度為5,就是裡面有5個數組元素,多了一個數組元素
c定義a不是數組而是一個變數,素組應該是a[]
d是錯的,字元串是這樣定義的:char a[ ]={'0','1','2','3','4','\0'};
[4]中數字是數組長度,說明裡面有幾個元素
9、設x和y均為int型變數,則語句「x+=y;y=x-y;x-=y;」的功能是(D)。
A) 把x和y按從小到大排列 B)把x和y按從大到小排列
C)無確定結果 D)交換x和y中的值
x+=y等同於x=x+y,把x加y的值賦給x,x現在存的是x與y的和
y=x-y把x減y的值賦給y,x現在存的是x與y的和 (x+y)-y=x,把x的值給y,y存x的值
x-=y等同於x=x-y,把x減y的值賦給x,(x+y)-y=x,現在的後面的y存的是x的值,做完後x里存的值是y,完成交換
10、若已定義x和y為double類型,則表達式「x=1,y=x+3/2」的值是(C)。
A) 1 B)2 C) 2.0 D) 1.0
逗號表達式,先讓x=1在算y=x+3/2,得2,因為是double類型,所以有小數點
11、下列條件語句中,功能與其他語句不同的是 (D)
A) if(a) printf("%d\n",x); else printf("%d\n",y);
B) if(a==0) printf("%d\n",y); else printf("%d\n",x);
C) if (a!=0) printf("%d\n",x); else printf("%d\n",y);
D) if(a==0) printf("%d\n",x); else printf("%d\n",y);
a 如果a為真輸出x,如果a為假輸出y
b 如果a==0,也就是為假,輸出y,a為真輸出x,同a
c 如果a!=0為真,輸出x,a為假輸出y同上
d 如果a為假輸出x,如果a為真輸出y,與以上的都不同
12、以下能正確定義二維數組的是 (C)
A) int a[][3]; B) int a[][3]=2{2*3};
C) int a[][3]={0}; D) int a[2][3]={{1},{2},{3,4}};
a 沒有給數組賦初值
b {}里不能有*
c 正確,記住第一個[]中可以為空,第二個[]不能為空,死記
d a[2][3] 的意思是有兩個一維數組,每個一維數組里有3個元素,{{1},{2},{3,4}}; 她的意思是三個數組,{}中的每一個{}代表一個數組,里邊的數為數組元素
13、用C語言編寫的代碼程序 (B)
A)可立即執行 B)是一個源程序
C)經過編譯即可執行 D)經過編譯解釋才能執行
死記
㈤ 求解一道C語言基礎編程題。
首先看一下程序的邏輯(雖然貌似題主應該不是在這一塊有問題:
首先得知道每個字元和數值的對應關系(圖不清晰可看戳這里:ascii編碼對應表
好了,現在看程序中的第一個if語句,在用大於、小於這些運算比較符比較char的時候,會自動轉換為整數比較,也就是說『0』會轉換成48,『1』轉換成49……以此類推,最後是『9』轉換成57,你會發現把這些char減去48就會得到它們各自相對應的整數數值,這就是第一個if裡面減去48的目的。同理,接下來的else-if語句,『A』到『F』也會轉換成整數數值,具體對應的數值可以參看ascii表,一樣的道理減去『A』然後加10的目的也是轉換成數值,因為在大於10的進制下,A代表10,B代表11……以此類推,因為這個程序最高就16進制了,所以判斷到F就可以了。
然後我們來看進制的解釋:
所謂進制,其實就是組合數字的方式,理解了這一點就很好說了。比如說10進制,為什麼198等於198(好像很傻一問題)?其實是因為在十進制下,198 (10) = 1 * 10^2 + 9 * 10^1 + 8 * 10^0 = 198(好像是這么回事,(。ì _ í。)),同一個數字,放在不同的位置,它所代表的分量也不一樣,即組合數字的方式會影響數字的值,1後面還有2個數字,所以這個1實際上是1 * 10^2 = 100,而不是1,其它位置的數字同理,然後把這些值加起來,就得到了整個數字所代表的最終的值,因此我們才有了 198 = 198(好像很有道理)。
但是,198也可能不等於198,什麼時候不等於呢?在不同的進制下。比如說假如我們的這個198是在16進制下的198,那麼 198 (16) = 1 * 16^2 + 9 * 16^1 + 8 * 16^0 = 408 (10) = 408。
為什麼會產生這種差別呢?因為16進制下的那個1代表的分量是1 * 16^2了,而不是1 * 10^2了,同理,在其它進制下只需要把乘的數字換成對應的進制的數就好了,比如在9進制下那個1就是1 * 9^2等等。
這樣一來上面程序裡面的for語句就好理解了,之所以用for是因為要算出次方(這個應該不用解釋),一個數要乘的次方是它後面跟著的數字的個數,所以是「j = 0; j < len - 1」。
然後把這些值加起來,就得到這個數字對應的十進制下的數值,也就完成了最終的轉換。
題主可以隨便寫些不同進制下的數字,然後自己算出十進制下對應的數值,和網站上得出的結果比較比較,這樣也可以加深對進制的理解,同時提高計算能力。
戳這里:在線進制轉換
這里給出了一個鏈接,這種網頁到處都是,隨便搜一下就可以找到。
㈥ c語言 基礎練習題
其實這東西不難,剛開始看的時候會覺得很難上手,甚至有些莫名其妙,但是檔硬著頭皮學下去以後就會覺得C語言不難了,甚至會感覺剛剛學C語言是的問題都是小兒科。
在學的時候搭早辯不要急這自己編程序,先看程序,當一些簡單的程序能看懂後就學這改程序,試著把一些簡單的程序改成一個新的程序,然後才是自己編程序,最後就是把許多個小知缺程序集合到一起,編成一個打程序。
這個東西關鍵在熟練,就是多上機多連,多倒騰。很快的。
給你推薦我們大學你剛剛睜悉接手C語言的教材把很好上手的《C語言程序設計》
何欽銘
顏暉主編
㈦ 誰能幫找C語言基礎習題
C語言實驗參考答案
實驗一
5、輸入並運行自已編寫的程序(教材第一章P14 三 編程題)。
實驗二
1、編寫一個程序,從鍵盤接收3個實數(分別為10.0、20.0、5.0),輸出這3個數的和s、乘積t和平均值a。
#include <stdio.h>
main()
{float x,y,z,s,t,a;
printf(「x,y,z=」);
scanf(「%f,%f,%f」,&x,&y,&z);
s=x+y+z;
t=x*y*z;
a=s/3;
printf(「s=%f,t=%f,a=%f\n」,s,t,a);
}
2、編程。要求用戶輸入兩個整數a、b(分別為20、10), 讀取用戶從鍵盤輸入的值,然後:
1)用整數輸出這兩個數的和、差;
2)用長整型輸出這兩個數的積,用float輸出商;
3)用整數輸出這兩個數的余數,用float輸出平均值。
#include <stdio.h>
main()
{int a,b,he,cha,yu;
long ji;
float shang,aver;
printf(「a,b=」);
scanf(「%d,%d」,&a,&b);
he=a+b;
cha=a-b;
ji=(long)a*b;
shang=1.0*a/b;
yu=a%b;
aver=(a+b)/2.0;
printf(「a+b=%d,a-b=%d,a*b=%ld\n」,he,cha,ji);
printf(「a/b=%f,a%%b=%d,aver=%f\n」,shang,yu,aver);
}
實驗三
1、編寫一個程序,從鍵盤接收一個一位的整型數,經轉換,用字元函數putchar輸出。例如,輸入整數5,程序運行後輸出字元5。
#include <stdio.h>
main()
{int a;
char c;
printf(「a=」);
scanf(「%d」,&a);
c=a+48;
putchar(c);
}
2、編程。輸入半徑,計算球體表面積( )和球體積 ( )。
#include <stdio.h>
#define PI 3.1415926
main()
{float r,s,v;
printf(「r=」);
scanf(「%f」,&r);
s=4*PI*r*r;
v=4/3.0*PI*r*r*r;
printf(「s=%f,v=%f\n」,s,v);
}
3、編寫一個程序,要求通過鍵盤給6個變數賦值,然後將變數的值在屏幕上列印輸出。這六個變數的值分別為:10,-10,40000,a,3.14,hello。
#include <stdio.h>
main()
{int a,b;
long c;
char d,ch[6];
float e;
scanf(「%d,%d,%ld,%c,%f,%s」,&a,&b,&c,&d,&e,ch);
printf(「%d,%d,%ld,%c,%f,%s\n」,a,b,c,d,e,ch);
}
實驗四
1、輸入三個整數,分別存放到變數a,b,c中,試編程輸出其中的最小值。
#include <stdio.h>
main()
{int a,b,c,min;
printf(「a,b,c=」);
scanf(「%d,%d,%d」,&a,&b,&c);
min=a>b?(b>c?c:b):(a>c?c:a);
printf(「min=%d\n」,min);
}
2、輸入一個字元,如是大寫字母,則輸出相應小寫字母;如是小寫字母,則輸出相應大寫字母;其它字元原樣輸出 。(例如:輸入F,輸出f,輸入b,輸出B,輸入7,輸出7)。
#include <stdio.h>
main()
{char c,ch;
c=getchar();
ch=c;
if(c>=『A』&&c<=『Z』)
ch=c+32;
if(c>=『a』&&c<=『z』)
ch=c-32;
putchar(ch);
}
實驗五
1、函數
。
⑴用條件表達式求函數值y。
⑵用if語句編程,輸入x,輸出y,並給出你所使用的測試用例。
解(1)
#include <stdio.h>
main()
{int y;
float x;
printf(「x=」);
scanf(「%f」,&x);
y=x>0?1:(x==0?0:-1);
printf(「y=%d\n」,y);
}
解(2)
#include <stdio.h>
main()
{int y;
float x;
printf(「x=」);
scanf(「%f」,&x);
if(x>0)
y=1;
else if(x==0)
y=0;
else
y=-1;
printf(「y=%d\n」,y);
}
2、試編程輸入成績cj(cj為整型變數),如果cj的值在[100,90]內輸出A,在(90,80]內輸出B,在(80,70]內輸出C,在(70,60]內輸出D,在(60,0]內輸出E,其它輸出錯誤信息。請使用if語句和switch語句分別實現。
解(1)
#include <stdio.h>
main()
{int cj;
printf(「cj=」);
scanf(「%d」,&cj);
if(cj>=90&&cj<=100)
printf(「A\n」);
else if(cj>=80&&cj<90)
printf(「B\n」);
else if(cj>=70&&cj<80)
printf(「C\n」);
else if(cj>=60&&cj<70)
printf(「D\n」);
else if(cj>=0&&cj<60)
printf(「E\n」);
else
printf(「輸入錯誤\n」);
}
解(2)
#include <stdio.h>
main()
{int cj,n;
printf(「cj=」);
scanf(「%d」,&cj);
n=(cj>=0)+(cj>=60)+(cj>=70)+(cj>=80)+(cj>=90)+(cj>100);
switch(n)
{case 5:printf(「A\n」);break;
case 4:printf(「B\n」); break;
case 3:printf(「C\n」); break;
case 2:printf(「D\n」); break;
case 1:printf(「E\n」); break;
default:printf(「輸入錯誤\n」);
}
}
實驗六
1、編程:輸出200以內所有能被7整除的數。
#include <stdio.h>
main()
{int i;
for(i=0;i<=200;i+=7)
printf(「%4d」,i);
}
2、從鍵盤輸入n個數(n<10),找出其中最小值,請編寫相應程序。
#include <stdio.h>
main()
{int n,i,a,min;
printf(「n=」);
scanf(「%d」,&n);
for(i=1;i<=n;i++)
{scanf(「%d」,&a);
if(i==1)min=a;
if(min>a)min=a;
}
printf(「min=%d」,min);
}
3、鍵盤輸入正整數m和n(m<n),計算m~n之間所有奇數之和x與偶數之和y,請編程實現。
#include <stdio.h>
main()
{int m,n,i,x1=0,x2=0;
printf(「input m,n(m<n):」);
scanf(「%d,%d」,&m,&n);
for(i=m;i<=n;i++)
if(i%2==1)x1+=i;
else x2+=i;
printf(「x1(奇數之和)=%d,x2(偶數之和)=%d\n」,x1,x2);
}
實驗七
1、列印出所有的"水仙花數",所謂的"水仙花數"是指一個3位數,其各位數字的立方和等於該數本身。例如,153是一個"水仙花數",因為有153=1*1*1+5*5*5+3*3*3 。
解(1)
#include <stdio.h>
main()
{int a,b,c,n;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
{n=100*a+10*b+c;
if(n==a*a*a+b*b*b+c*c*c)
printf(「%d\n」,n);
}
}
解(2)
#include <stdio.h>
main()
{int a,b,c,n;
for(n=100;n<=999;n++)
{a=n/100;
b=n%100/10;
c=n%10;
if(n==a*a*a+b*b*b+c*c*c)
printf(「%d\n」,n);
}
}
2、請分別用三種循環結構編程計算: 1!+2!+3!+...+n! , n的值由鍵盤輸入。
解(1)
#include <stdio.h>
main()
{int n,i;
long p=1,sum=0;
printf(「n=」);
scanf(「%d」,&n);
for(i=1;i<=n;i++)
{p*=i;
sum+=p;
}
printf(「1!+2!+…+%d!=%ld\n」,n,sum);
}
解(2)
#include <stdio.h>
main()
{int n,i=1;
long p=1,sum=0;
printf(「n=」);
scanf(「%d」,&n);
while(i<=n)
{p*=i;
sum+=p;
i++;
}
printf(「1!+2!+…+%d!=%ld\n」,n,sum);
}
解(3)
#include <stdio.h>
main()
{int n,i=1;
long p=1,sum=0;
printf(「n=」);
scanf(「%d」,&n);
do
{p*=i;
sum+=p;
i++;
}
while(i<=n);
printf(「1!+2!+…+%d!=%ld\n」,n,sum);
}
實驗八
1、列印輸出由1,2,3,4四個數字組成的4位數,並統計它的個數(允許該4位數中有相同的數字,例如:1111,1122,,1212等).。
#include <stdio.h>
main()
{int n,a,b,c,d,num=0;
for(a=1;a<=4;a++)
for(b=1;b<=4;b++)
for(c=1;c<=4;c++)
for(d=1;d<=4;d++)
{n=1000*a+100*b+10*c+d;
printf(「%5d」,n);
num++;
}
printf(「\nnum=%d\n」,num);
}
2、從鍵盤輸入10個正整數進行求和,如果錯誤地輸入了負數,則求和結束。請分別用break和不用break編寫相應程序。
解(1) 用break編寫程序
#include <stdio.h>
main()
{int i,n,sum=0;
for(i=1;i<=10;i++)
{scanf(「%d」,&n);
if(n>=0)sum+=n;
else break;
}
printf(「sum=%d」,sum);
}
解(2) 不用break編寫程序
#include <stdio.h>
main()
{int i=1,n=0,sum=0;
while(i<=10&&n>=0)
{scanf(「%d」,&n);
if(n>=0)
sum+=n;
i++;
}
printf(「sum=%d」,sum);
}
實驗九
1、求一個3×3的整數矩陣的副對角線上所有奇數的和sum2。
#include <stdio.h>
main()
{int a[3][3],sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf(「%d」,&a[i][j]);
if(i+j==2&&a[i][j]%2)
sum2+=a[i][j];
}
printf(「sum2=%d」,sum2);
}
2、輸入一個正整數n(1<n≤10),再輸入n個整數,請編程實現:
⑴ 輸出這些數的平均值(保留2位小數)。
⑵ 把這些數逆序後再輸出。
⑶ 輸出它們中的最大值及其下標(設最大值唯一,下標從0開始)。
⑷ 將它們中的最小值與第一個數交換,最大值與最後一個數交換,然後輸出交換後的n個數。
#include <stdio.h>
main()
{int a[10],n,min,max,xb0,xb1,i,sum,t;
float aver;
printf(「n=」);
scanf(「%d」,&n);
for(i=0;i<n;i++)
scanf(「%d」,&a[i]);
min=a[0];xb0=0;
max=a[0];xb1=0;
sum=a[0];
for(i=1;i<n;i++)
{if(min>a[i]){min=a[i];xb0=i;};
if(max<a[i]){max=a[i];xb1=i;};
sum+=a[i];
}
aver=1.0*sum/n;
printf(「(1)平均值為:%3.2f\n」,aver);
printf(「(2)逆序輸出:」);
for(i=n-1;i>=0;i--)
printf(「%4d」,a[i]);
printf(「\n」);
printf(「(3)最大值為:%d,其下標為:%d\n」,max,xb1);
t=a[0];a[0]=a[xb0];a[xb0]=t;
t=a[n-1];a[n-1]=a[xb1];a[xb1]=t;
printf(「(4)經交換後輸出:」);
for(i=0;i<n;i++)
printf(「%4d」,a[i]);
printf(「\n」);
}
實驗十
1、輸入一個以回車結束的字元串(少於80個字元),將該字元串逆序後輸出。
#include <stdio.h>
#include <string.h>
main()
{char c[80],ch;
int i,l;
gets(c);
l=strlen(c);
for(i=0;i<l/2;i++)
{ch=c[i];
c[i]=c[l-i-1];
c[l-i-1]=ch;
}
puts(c);
}
2、輸入一個以回車結束的字元串(少於80個字元),再輸入一個字元,統計並輸出該字元在字元串中出現的次數,然後再輸出該字元串。
#include <stdio.h>
main()
{char c[80],ch;
int i,num=0;
gets(c);
ch=getchar();
for(i=0;c[i]!=『\0』;i++)
if(c[i]==ch)num++;
printf(「num(%c)=%d\n」,ch,num);
puts(c);
}
實驗十一
1、鍵盤輸入2個字元串,將二者連接後的結果輸出(用指針完成)。
#include <stdio.h>
#include <string.h>
main()
{char a[40],b[20],*p,*q;
int i,la,lb;
gets(a);
gets(b);
la=strlen(a);
lb=strlen(b);
p=&a[la];
q=b;
for(i=0;i<=lb;i++)
{*p=*q;
p++;
q++;
}
puts(a);
}
2、編一個程序,輸入15個整數存入一維數組,按逆序存放後再輸出(用指針完成)。
#include <stdio.h>
main()
{ int i,a[15],*p=a,*q,temp;
for(i=0;i<15;i++)
scanf("%d",p+i);
q=&a[14];
for(i=0;i<7;i++)
{temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
p=a;
for(i=0;i<15;i++)
printf("%3d",*(p+i));
}
3、用指針方法,編寫一個函數,求矩陣主對角線元素之和Sum。
#include <stdio.h>
main()
{int i,j,a[3][3],*p=*a,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%d",p);
if(i==j)sum+=*p;
p++;
}
printf("sum=%d\n",sum);
}
4、輸入一個3×6的二維整型數組,輸出其中最大值、最小值以及它們所在行和列的下標(用指針完成)。
#include <stdio.h>
main()
{int i,j,a[3][6],*p=*a,min,max,xb0_h,xb0_l,xb1_h,xb1_l;
for(i=0;i<3;i++)
for(j=0;j<6;j++)
{scanf("%d",p);
if(i==0&&j==0)
{max=*p;min=*p;
xb0_h=0;xb0_l=0;
xb1_h=0;xb1_l=0;
}
if(max<*p)
{max=*p;xb1_h=i;xb1_l=j;}
if(min>*p)
{min=*p;xb0_h=i;xb0_l=j;}
p++;
}
printf("最大值為:%d,行標:%d,列標:%d\n",max,xb1_h,xb1_l);
printf("最小值為:%d,行標:%d,列標:%d\n",min,xb0_h,xb0_l);
}
實驗十二
定義一個含10個學生成績的結構數組(每個學生的信息包括學號、姓名、成績),數據自定,要求:
1)求出平均成績。
2)將成績從高到低排序輸出。
#include <stdio.h>
main()
{int i,j,g[15],temp;
float aver=0;
struct student
{long num;
char name[20];
int grade;
}stu[10]={{101001,「zhao」,78},{101002,「qian」,86},
{101003,「sun」,69},{101004,「li」,77},
{101005,「zhou」,98},{101006,「wu」,56},
{101007,「zheng」,75},{101008,「wang」,88},
{101009,「chen」,73},{101010,「shen」,99}
};
for(i=0;i<10;i++)
{aver+=stu[i].grade;g[i]=stu[i].grade;}
aver=aver/10;
printf(「(1)平均成績:%5.2f\n」,aver);
for(i=0;i<10;i++)
for(j=i;j<10;j++)
if(g[i]<g[j])
{temp=g[i];
g[i]=g[j];
g[j]=temp;
}
printf(「(2)成績排序:」);
for(i=0;i<10;i++)
printf(「%4d」,g[i]);
printf(「\n」);
}
實驗十三
1、在主函數main()中已有變數定義和函數調用語句:「int a=1,b= -5,c; c=fun (a ,b)」; fun函數的作用是計算兩個數之差的絕對值,並將差值返回調用函數,請
1)編寫fun函數。
fun(int x , int y)
{ }
2)寫出這個主函數main()。
#include <stdio.h>
int fun(int x,int y);
main()
{int a=1,b=-5,c;
c=fun(a,b);
printf(「c=%d\n」,c);
}
int fun(int x,int y)
{if(x>y)return x-y;
else return y-x;
}
2、定義一個函數,求200~500之間滿足「用4除餘1,(或)用5除餘3,(或)用7除餘4」的數,且一行列印6個。
#include <stdio.h>
void f(int n);
main()
{int n;
for(n=200;n<=500;n++)
f(n);
}
void f(int n)
{static int p=0,m=0;
if(n%4==1 || n%5==3 || n%7==4)
{p++;
printf("%4d",n);
m=1;
}
else m=0;
if(p%6==0&&m==1)printf("\n");
}
3、函數isprime( ),用來判斷一個整形數a是否為素數,若是素數,函數返回1,否則返回0,請編寫isprime( ) 函數。
#include <stdio.h>
int isprime(int a);
main()
{int a,n=0;
printf(「a=」);
scanf(「%d」,&a);
if(a>0)n=isprime(a);
if(n==1)printf(「%d是素數」,a);
else printf(「%d不是素數」,a);
}
int isprime(int a)
{int m;
for(m=2;m<a;m++)
if(a%m==0)return 0;
return 1;
}
實驗十四
1、編程實現:輸入n(n<10)個整數,按從大到小的順序對其排序。
#include <stdio.h>
main()
{int i,j,a[10],n,t;
printf(「n=」);
scanf(「%d」,&n);
for(i=0;i<n;i++)
scanf(「%d」,&a[i]);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<n;i++)
printf(「%4d」,a[i]);
printf(「\n」);
}
實驗十五
1、用多文件模塊知識編程解決問題(題目自定)。
實驗十六
1、編程,要求實現:在主程序main( )中輸入2個整數,通過調用函數將兩者的值互換。(要求分別用值傳遞方式,地址傳遞方式以及全局外部變數傳遞方式編程)。
解(1) 用值傳遞方式編程
用值傳遞方式不能將兩者的值互換。
解(2) 用地址傳遞方式編程
#include <stdio.h>
void swap(int *x,int *y );
main()
{int x,y;
printf(「x,y=」);
scanf(「%d,%d」,&x,&y);
swap(&x,&y);
printf(「x=%d,y=%d\n」,x,y);
}
void swap(int *x,int *y )
{int temp;
temp=*x;
*x=*y;
*y=temp;
}
解(3) 用全局外部變數傳遞方式編程
#include <stdio.h>
void swap();
int x,y;
main()
{printf(「x,y=」);
scanf(「%d,%d」,&x,&y);
swap();
printf(「x=%d,y=%d\n」,x,y);
}
void swap()
{int temp;
temp=x;x=y;y=temp;
}
實驗十七
1、用遞歸方法實現求N的階乘。
#include <stdio.h>
long fact(int n);
main()
{int n;
printf(「n=」);
scanf(「%d」,&n);
if(n>=0)printf(「%d!=%ld\n」,n,fact(n));
else printf(「輸入錯誤!\n」);
}
long fact(int n)
{long p;
if(n<=1)return 1;
else p=n*fact(n-1);
return p;
}
2、用遞歸方法編寫求斐波那契數列的函數,返回值為長整型。斐波那契數列的定義為: ,並寫出相應主函數。
#include <stdio.h>
int fib(int n);
main()
{int n,i;
printf(「n=」);
scanf(「%d」,&n);
for(i=0;i<=n;i++)
printf(「%d,」,fib(i));
printf(「…\n」);
}
int fib(int n)
{ if(n==0) return 0;
if(n==1) return 1;
if(n>1) return fib(n-1)+fib(n-2);
}
實驗十八
1、統計一個文本文件(該文件您自已此前已建立)中字母、數字及其它字元各有多少個,試編程。
#include <stdio.h>
main()
{char ch;
int zm=0,sz=0,qt=0;
FILE *fp;
fp=fopen(「file1.txt」,「r」);
if(fp==NULL)
{printf(「不能打開文件file1.txt\n」);exit(0);}
while(!feof(fp))
{ch=fgetc(fp);
if((ch>=『a』&&ch<=『z』)||( ch>=『A』&&ch<=『Z』))
zm++;
else if(ch>=『0』&&ch<=『9』)
sz++;
else qt++;
}
fclose(fp);
printf(「zm=%d\n」,zm);
printf(「sz=%d\n」,sz);
printf(「qt=%d\n」,qt);
}
可用以下程序,建立文件file1.txt,並寫入20個字元到文件中。
#include "stdio.h"
main()
{int i;
char ch;
FILE *fp;
if((fp=fopen("file1.txt","w"))==NULL)
{printf("file open error!\n");
exit(0);
}
for(i=0;i<20;i++)
{ch=getchar();
fputc(ch,fp);
}
fclose(fp);
}
2、文本文件int.txt中包含若干整數,請把文件中所有數據相加,並把累加和寫入文件最後。
#include <stdio.h>
main()
{int a,sum=0;
FILE *fp;
fp=fopen("file2.txt","r");
if(fp==NULL)
{printf("不能打開文件file2.txt\n");exit(0);}
while(!feof(fp))
{fscanf(fp,"%2d",&a);
sum+=a;
}
fclose(fp);
fp=fopen("file2.txt","a");
if(fp==NULL)
{printf("不能打開文件file2.txt\n");exit(0);}
fprintf(fp,"%d",sum);
fclose(fp);
}
可用以下程序,建立文件file2.txt,並寫入10個整數到文件中。
#include "stdio.h"
main()
{int i,a;
FILE *fp;
if((fp=fopen("file2.txt","w"))==NULL)
{printf("file open error!\n");
exit(0);
}
for(i=0;i<10;i++)
{scanf("%d",&a);
fprintf(fp,"%2d",a);
}
fclose(fp);
}
㈧ c語言練習題
1、以下說法中正確的是____。(C)
A、C語言程序總是從第一個函數開始執行
B、在C語言程序中,要調用的函數必須在main()函數中定義
C、C語言程序總是從main()函數開始執行
D、C語言程序中的main()函數必須放在程序的開始部分
2、某文件中定義的靜態全局變數(或稱靜態外部變數)其作用域是_____。(B)
A、只限某個函數
B、本文件
C、跨文件
D、不限製作用域
3、下列敘述中正確的是_____。(A)
A、函數定義不能嵌套,但函數調用可以嵌套
B、函數定義可以嵌套,但函數調用不可以嵌套
C、函數定義和函數調用都不能嵌套
D、函數定義與函數調用都可以嵌套
4、以下說法中正確的是_____。(A)
A、#define和printf都是C語句
B、#define是C語句,而printf不是
C、printf是C語句,但#define
D、#define和printf都不是C語句
5、以下關於函數敘述中,正確的是_____。(D)
A、在函數體中可以直接引用另一個函數中聲明為static類別的局部變數的值
B、在函數體中至少必須有一個return 語句
C、在函數體中可以定義另一個函數
D、在函數體中可以調用函數自身
6、在C語言中,若對函數類型未加顯式說明,則函數的隱含類型是______。(A)
A、void
B、double
C、int
D、char
7、下面不正確的描述為______。(A)
A、調用函數時,實參可以是表達式
B、調用函數時,實參與形參可以共用內存單元
C、調用函數時,將為形參分配內存單元
D、調用函數時,實參與形參的類型必須一致
8、在一個源文件中定義的全局變數的作用域為______。(D)
A、本文件的全部范圍
B、本程序的全部范圍
C、本函數的全部范圍
D、從定義該變數開始至本文件結束
9、以下敘述中,錯誤的是______。(D)
A、不同函數中可以使用相同名字的變數
B、在函數外部定義的變數是全局變數
C、形式參數是局部變數
D、在main函數體內定義的變數是全局變數
10、C語言規定,調用一個函數時,當實參和形參都是普通變數時,它們之間數據傳遞的方式是______。(B)
A、地址傳遞
B、單向值傳遞
C、雙向值傳遞
D、由用戶定義傳遞方式
11、若用數組名作為函數調用的實參,則傳遞給形參的是______。(A)
A、數組的首地址
B、數組的第一個元素的值
C、數組中全部元素的值
D、數組元素的個數
12、C語言規定,函數返回值的類型是______。(D)
A、return語句中的表達式的類型
B、調用該函數時的主調函數的類型
C、由系統確定
D、該函數定義時的類型
13、若一個void型函數定義中沒有return語句,則調用該函數時,函數______。(A)
A、沒有返回值
B、返回若干個系統默認值
C、返回一個用戶所希望的函數值
D、返回一個不確定的值
14、以下有關C語言的敘述中,錯誤的是______。(A)
A、函數調用可以作為獨立的語句出現
B、函數調用可以出現在表達式中
C、函數調用可以作為函數的實參
D、函數調用可以作為函數的形參
15、以下程序輸出結果是__________。(B)
#include <stdio.h>
int i=10;
main()
{int j=1;
j=fun();
printf("%d,",j);
j=fun();
printf("%d",j);
}
fun()
{int k=0;
k=k+i;
i=i+10;
return (k);
}
A、0,0
B、10,20
C、10,10
D、20,20
㈨ 簡單C語言練習
這是非常簡單的一道程序題了,初學者經常會遇到這類型搜禪的問題。
其實就是考你對switch()的用法
實驗通過 代碼如下:
#include <stdio.h>
#include <conio.h>
int main()
{
float a,b;
char op,input;
do{
printf("請輸入你要計算的式子滲明:\n");
scanf("%f %s %f",&a,&op,&b);
switch(op)
{
case '+' :printf("%.2f + %.2f = %.2f\叢漏告n",a,b,a + b); break;
case '-' :printf("%.2f - %.2f = %.2f\n",a,b,a - b); break;
case '*' :printf("%.2f * %.2f = %.2f\n",a,b,a * b); break;
case '/' :printf("%.2f / %.2f = %.2f\n",a,b,a / b); break;
default:break;
}
printf("Do you want to continue(Y/N or y/n)? ");
scanf("%s",&input);
}while(input == 'Y' || input == 'y');
getch();
return 0;
}
㈩ c語言編程怎樣入門
相對於其他編程語言,C語言還是比較難的。初學者需要注意一下幾點:
一是學習順序
先從熟悉簡單的C語言語法開始入門,然後再循序漸進,學習C++語法,WIN32、MFC、QT、網路編程,資料庫、數據結構、演算法、COM、STL等。構建一個完整的C語言知識體系。這需要一個比較漫長的學習積累的過程。語法入門部分大概2-3個月,其他部分需要學習和工作中慢慢理解和消化了。
二是學習方法
人的知識80%是通過眼睛獲取的,但是學習編程有所不同,除了看書、看視頻之外,關鍵是要勤動手,勤動腦。通過做大量的練習、項目實戰不斷積累代碼量。只有代碼量足夠多了,項目做的多了,才能算是真正學會了。項目能否完成,就是衡量是否學會的唯一標准。後期就是代碼的質量和優化問題了,這個只能在項目工作中慢慢積累經驗了。
最後強調一點,很多人學不會編程是因為掉坑裡了。就是教程或者書上的知識點之間跨越太大,作為一個初學者很難自己摸索出來,前面的知識點沒有掌握,接著學習後面的知識,肯定是學不會了。目前絕大多數編程書籍和教程或多或少都有這樣的弊端。自學能力比較強的人可以通過各種方法,參考各種網上的資料自己解決。但是大多數自學能力不是很強的人,只能依賴老師、同學、同事或者朋友幫忙指導,或者報名培訓機構,老師指導完成了。學習編程通常需要一些好的學習資料,包括紙質的書籍,視頻教程,課件,項目練習,代碼。零基礎入門的書籍推薦《明解C語言》、《C Primer Plus》,還有一本非常特別的匯編和C語言正向逆向結合的書編程達人內部教材《匯編、C語言基礎教程》也非常不錯,講解匯編和C語言的本質非常透徹,非常細致。視頻資料也是特別多了,各種視頻網站、論壇、自媒體都有,比如網易課堂、騰訊課堂、慕客網這些。還有一些論壇,比如CSDN、編程中國等。最重要的一點就是答疑服務,推薦愛達人的網站也很不錯,從零基礎入門到應用課程,配套的視頻、課件、代碼、項目、答疑服務都有,還可以兼職接單,學以致用。