『壹』 求一份c語言實訓報告
1)程序結構是三種:順序結構,循環結構(三個循環結構),選擇結構(if 和 switch)
2)讀程序都要從main()入口, 然後從最上面順序往下讀(碰到循環做循環,碰到選擇做選擇)。
3)計算機的數據在電腦中保存是以 二進制的形式. 數據存放的位置就是 他的地址.
4)bit是位 是指為0 或者1。 byte 是指位元組, 一個位元組 = 八個位.
5)一定要記住 二進制 如何劃成 十進制。
概念常考到的:
1、編譯預處理不是C語言的一部分,不再運行時間。C語言編譯的程序稱為源程序,它以ASCII數值存放在文本文件中。
2、每個C語言程序中main函數是有且只有一個。
3、在函數中不可以再定義函數。
4、演算法的是一定要有輸出的,他可以沒有輸入。
5、break可用於循環結構和switch語句。
6、逗號運算符的級別最低。
第一章
1)合法的用戶標識符考查:
合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。
並且第一個必須為字母或則是下劃線。第一個為數字就錯了。
關鍵字不可以作為用戶標識符號。main define scanf printf 都不是關鍵字。迷惑你的地方If是可以做為用戶標識符。因為If中的第一個字母大寫了,所以不是關鍵字。
2)實型數據的合法形式:
2.333e-1 就是合法的,且數據是2.333×10-1。
考試口訣:e前e後必有數,e後必為整數。.
3)字元數據的合法形式::
'1' 是字元佔一個位元組,"1"是字元串占兩個位元組(含有一個結束符號)。
'0' 的ASCII數值表示為48,'a' 的ASCII數值是97,'A'的ASCII數值是65。
4) 整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組:
考試時候一般會說,在16位編譯系統,或者是32位系統。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組就可以了。
5)轉義字元的考查:
在程序中 int a = 0x6d,是把一個十六進制的數給變數a 注意這里的0x必須存在。
在程序中 int a = 06d, 是一個八進制的形式。
在轉義字元中,』\x6d』 才是合法的,0不能寫,並且x是小寫。
『\141』 是合法的, 0是不能寫的。
『\108』是非法的,因為不可以出現8。
6)算術運算符號的優先順序別:
同級別的有的是從左到右,有的是從右到左。
7)強制類型轉換:
一定是 (int)a 不是 int(a),注意類型上一定有括弧的。
注意(int)(a+b)和(int)a+b 的區別。 前是把a+b轉型,後是把a轉型再加b。
8)表達式的考查:
是表達式就一定有數值。
賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。
自加、自減表達式:假設a=5,++a(是為6), a++(為5);
運行的機理:++a 是先把變數的數值加上1,然後把得到的數值放到變數a中,然後再用這
個++a表達式的數值為6,而a++是先用該表達式的數值為5,然後再把a的數值加上1為6,
再放到變數a中。 進行了++a和a++後在下面的程序中再用到a的話都是變數a中的6了。
考試口訣:++在前先加後用,++在後先用後加。
逗號表達式:優先順序別最低 ;表達式的數值逗號最右邊的那個表達式的數值。
(2,3,4)的表達式的數值就是4。
9)位運算的考查:
會有一到二題考試題目。
總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進制變成二進制再變成十進制)。
例1:char a = 6, b;
b = a<<2; 這種題目的計算是先要把a的十進制6化成二進制,再做位運算。
例2:一定要記住,
例3:在沒有捨去數據的時候,<<左移一位表示乘以2;>>右移一位表示除以2。
10)018的數值是非法的,八進制是沒有8的,逢8進1。
11)%符號兩邊要求是整數。不是整數就錯了。
12)三種取整丟小數的情況:
1、int a =1.6;
2、(int)a;
3、
第二章
1)printf函數的格式考查:
%d對應整型;%c對應字元;%f對應單精度等等。寬度的,左對齊等修飾。
%ld對應 long int;%lf 對應double。
2)scanf函數的格式考察:
注意該函數的第二個部分是&a這樣的地址,不是a;
Scanf(「%d%d%*d%d」,&a,&b,&c); 跳過輸入的第三個數據。
3)putchar ,getchar 函數的考查:
char a = getchar() 是沒有參數的,從鍵盤得到你輸入的一個字元給變數a。
putchar(『y』)把字元y輸出到屏幕中。
4)如何實現兩個變數x ,y中數值的互換(要求背下來)
不可以把 x=y ,y=x; 要用中間變數 t=x;x=y;y=t。
5)如何實現保留三位小數,第四位四捨五入的程序,(要求背下來)
這個有推廣的意義,注意 x = (int)x 這樣是把小數部分去掉。
第三章
特別要注意:c語言中是用非0表示邏輯真的,用0表示邏輯假的。
1)關系表達式:
表達式的數值只能為1(表示為真),或0(表示假)
當關系的表達是為真的時候得到1。如 9>8這個是真的,所以表達式的數值就是1;
2)邏輯表達式:
只能為1(表示為真),或0(表示假)
a) 共有&& || ! 三種邏輯運算符號。
b) !>&&>|| 優先的級別。
c) 注意短路現象。考試比較喜歡考到。
d) 要表示 x 是比0大,比10小的方法。0<x<10是不可以的(一定記住)。是先計算0<x 得到的結果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用(0<x)&&(x<10)表示比0大比10小。
3)if 語句
else 是與最接近的if且沒有else的相組合的。
4)條件表達式:
表達式1 ?表達式2 :表達式3
注意是當非0時候是表達式2的數值,當為0是就是表達式2的數值。
考試口訣:真前假後。
5)switch語句:
a)一定要注意 有break 和沒有break的差別,書上(34頁)的兩個例子,沒有break時候,只要有一個case匹配了,剩下的都要執行,有break則是直接跳出了swiche語句。
b)switch只可以和break一起用,不可以和continue用。
第四章
1)三種循環結構:
a)for() ; while(); do- while()三種。
b)for循環當中必須是兩個分號,千萬不要忘記。
c)寫程序的時候一定要注意,循環一定要有結束的條件,否則成了死循環。
d) do-while()循環的最後一個while();的分號一定不能夠丟。(當心上機改錯)
2) break 和 continue的差別
記憶方法:
break:是打破的意思,(破了整個循環)所以看見break就退出真個一層循環。
continue:是繼續的意思,(繼續循環運算),但是要結束本次循環,就是循環體內剩下的語句不再執行,跳到循環開始,然後判斷循環條件,進行新一輪的循環。
3)嵌套循環
就是有循環裡面還有循環,這種比較復雜,要一層一層一步一步耐心的計算,一般記住兩層是處理二維數組的。
4) while((c=getchar())!=』\n』) 和 while(c=getchar() !=』\n』)的差別
先看a = 3 != 2 和 (a=3)!=2 的區別:
(!=號的級別高於=號所以第一個先計算 3!=2)第一個a的數值是得到的1;第二個a的數值是3。
考試注意點:括弧在這里的重要性。
第五章
函數:是具有一定功能的一個程序塊;
1) 函數的參數,返回數值(示意圖):
main()
{
int a = 5,b=6,c;
c =add(a,b);
printf(「%d」,c);
}
調用函數
a,b是實參
整個函數得到一個數值就是
Add函數的返回數值。
int add ( int x, int y)
{
int z;
z=x+y;
return z;
}
被調用函數
x,y是形式參數
函數返回數值是整型
z就是這個add函數計算後得到的結果,就是函數返回給主程序的返回數值。
程序是在從上往下順序執行,當碰到了函數add後,把a,b的數值穿給調用函數,程序暫時中斷等待返回數值。當得到了返回數值後,再順序的往下執行
2)一定要注意參數之間的傳遞
實參和形參之間傳數值,和傳地址的差別。(考試的重點)
傳數值的話,形參的變化不會改變實參的變化。
傳地址的話,形參的變化就會有可能改變實參的變化。
3)函數聲明的考查:
一定要有:函數名,函數的返回類型,函數的參數類型。
不一定要有:形參的名稱。
第六章
指針變數的本質是用來放地址,而一般的變數是放數值的。
int *p 中 *p和p的差別:
*p可以當做變數來用;*的作用是取後面地址p裡面的數值
p是當作地址來使用。
*p++ 和 (*p)++的之間的差別:改錯題目中很重要
*p++是 地址會變化。
(*p)++ 是數值會要變化。
三名主義:(考試的重點)
數組名:表示第一個元素的地址。數組名不可以自加,他是地址常量名。(考了很多次)
函數名:表示該函數的入口地址。
字元串常量名:表示第一個字元的地址。
第七章
1一維數組的重要概念:
對a[10]這個數組的討論。
1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。
3、a是一維數組名,所以它是列指針,也就是說a+1是跳一列。
對a[3][3]的討論。
1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。
3、a是二維數組名,所以它是行指針,也就是說a+1是跳一行。
4、a[0]、a[1]、a[2]也都是地址常量,不可以對它進行賦值操作,同時它們都是列指針,a[0]+1,a[1]+1,a[2]+1都是跳一列。
5、注意a和a[0] 、a[1]、a[2]是不同的,它們的基類型是不同的。前者是一行元素,後三者是一列元素。
二維數組做題目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}這樣的題目。
步驟一:把他們寫成:第一列第二列第三列
a[0]à 1 2 3 ->第一行
a[1]à 4 5 6 —>第二行
a[2]à 7 8 9 ->第三行
步驟二:這樣作題目間很簡單:
*(a[0]+1)我們就知道是第一行的第一個元素往後面跳一列,那麼這里就是a[0][1]元素,所以是1。
*(a[1]+2)我們就知道是第二行的第一個元素往後面跳二列。那麼這里就是a[1][2]元素,所以是6。
一定記住:只要是二維數組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。
數組的初始化,一維和二維的,一維可以不寫,二維第二個一定要寫
int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。
二維數組中的行指針
int a[1][2];
其中a現在就是一個行指針,a+1跳一行數組元素。 搭配(*)p[2]指針
a[0],a[1]現在就是一個列指針。a[0]+1 跳一個數組元素。搭配*p[2]指針數組使用
還有記住脫衣服法則:
a[2] 變成 *(a+2) a[2][3]變成 *(a+2)[3]再可以變成 *(*(a+2)+3)
這個思想很重要!
『貳』 c語言萬年歷實訓目的 實訓步驟 實訓重難點
4億元萬年歷已實現目的,實現步驟實現重點難點,這具體你看看在網上的一些動態啥的,都了解一下此方的新聞。
『叄』 C語言實訓項目編程一般步驟
稱 計算機工程系 專業 網路安全 指導教師
學生姓名 班級
實訓
時間 年 月 日---------- 年 月 日
實訓項目和地點:
實訓項目:C++程序的設計與應用
地點:
實訓目的:
在實踐過程中,使我們進一步鞏固C++程序設計課程所學知識,更加深入地了解面向對象程序設計的主要技術特點以及C++語言的強大編程功能指導學生利用獲取信息的手段進一步獲取新知識,以解決實訓過程中遇到的技術難點,從中提高自學能力;按照軟體開發的基本要求引導我們完成實訓課題,以便我們了解軟體開發的幾個重要環節;提高我們的編程技術,使程序的編寫更趨於專業化,為從業打下良好的基礎、培養我們分工協作的團隊精神。
實訓設備及器材:
1、計算機配置:Celeron cpu 2.66GHz 1G內存 計算機一台
2、操作系統平台: Windows XP
3、軟體開發平台:Visual C++ 6.0
4、其它應用軟體:Microsoft Access / SQL Server 、Word、Visio等
實訓的步驟和內容:
設計題目:輸入4個整數,要求按由大到小的順序輸出
第1步、問題描述:
輸入4個整數,要求按由大到小的順序輸出。
第2步、基本思路:
利用選擇法進行排序。
第3步、編寫程序:
#include<stdio.h>
void main()
{
int a,b,c,d,t;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a<b)
{t=a;
a=b;
b=t;}
if(a<c)
{t=a;
a=c;
c=t;}
if(a<d)
{t=a;
a=d;
d=t;}
if(b<c)
{t=b;
b=c;
c=t;}
if(b<d)
{t=b;
b=d;
d=t;}
if(c<d)
{t=c;
c=d;
d=t;}
printf("%d,%d,%d,%d",a,b,c,d);
}
第4步、運行結果:_
輸入:5,7,9,4
輸出:9,7,5,4
實訓結果分析及其心得體會:
通過C++實訓,讓我加深了對C語言的了解,而不只是單單的在課本中學到的那些理論,平時乏味的課程,通過自己動手親自編寫,變的生動有趣,而在自己動手的過程中,出現的問題很多,比理論要難的多,當一個程序寫完以後,經常會有很多錯誤而沒法解決。不過,通過幾天的實訓,逐漸積攢了一些經驗,有些錯誤可以很快就看出來。
這次實訓有很大的收獲,讓我對C語言有了更深的認識,平時在課堂上學到的東西可以自己動手編寫,將其轉化成一些實用的技能。如果是一個程序寫完一處錯誤也沒用,會有種成就感,於是興趣就來了,興趣來了,自然學的東西也就多了,能把理論變成實際的技能,讓我對C語言有了濃厚的興趣和更深層的認識。
C語言是一個有序的學習,學了最基本的替換,然後擴展到循環,嵌套,條理很清楚,不是 一個零散的知識,實際上所有的課程都如此,不過通過實訓我也知道了自己的不足,存在的很多問題。
比如自己寫的寫的小程序出了問題,不會解決了就叫老師幫忙,雖然說一定意義上增加了師生之間的感情,但是會養成一種依賴的心理,碰到問題了第一個想到的是求助而不是自己獨立解決,所以以後要多多鍛煉自己的信心和增加自己的能力,爭取做到不在身邊的時候也可以完成一些簡單的程序編寫與錯誤排除。
還有自己的基礎知識不扎實,遇到的問題,沒有很好的邏輯思維,親自編寫一個陌生的程序的時候會有種無法下手的感覺,找不到突破口。通過實訓,逐漸理清了順序,對於簡單的程序和一些相對比較繁瑣的嵌套,循環,不在是看著一頭霧水。其實只要理清了思路,把基礎知識掌握了,然後有條不紊的分析,一步一步理解,C語言還是很有意思的課程。
自己親自動手編寫程序讓我增加了對C語言程序開發環境的了解,不管以後從事什麼行業,學習C語言都對自己的職業很有幫助,如果是從事編程工程工作的話,就更有幫助了,即使以後的編程工作可能不用C語言,但是擁有扎實的C語言基礎是對工作很有用的。
當初在初步接觸C語言的時候,看著一堆「奇形怪狀」的符號,覺得甚是無聊,通過這次實訓,擺脫了那種似懂非懂的狀態!
感謝學校安排這次實訓和老師的耐心講解,讓我學到了很多知識,在實訓過程中,同學之間的互相探討,老師的循循善誘,最終讓我們達到了舉一反三的效果,在學知識的同,也增加了同學老師之間的感情。希望以後還會有更多類似的實訓課程,在有限的大學時間內學到更多的實用技能,為以後的工作打下一個良好的基礎。
『肆』 C語言的實訓項目發幾個,謝謝
這個是沒有代碼的,只有文件,要你去真代碼,不過電路圖及。hex文件都有,你可以直接運行看結果,但自已要試程序的話,必須自已打上去!~
建議買一本吧!學pic單片機,這本書不錯。也就七十來塊,如果這點錢都捨不得,還是別要了!知識是無價的,只你你學到了東西,這本書就值了,
『伍』 C語言實訓報告!急!!!!!
1.#include<stdio.h>
void main()
{
float sum=0;//總分
float max=0;//最高分
float min=100;//最低分
int i=0;//統計輸入個數
float score;
while(1)
{
printf("請輸入第%d個評委的分數:",i+1);
scanf("%f",&score);
if(score==-1) break;//輸入-1退出循環
else
{
if(score>max) max=score;
if(score<min) min=score;
sum+=score;
i++;
}
}
2.#include <stdio.h>
int main( )
{ int i,n=10,a[10],av=0;//英文下分號,av 初始化
for(i=0;i<n;i++) //英文下分號,n要有值
scanf("%d",&a[i]); //少了&
for(i=0;i<n;i++)
{ printf("%d",a[i]);
if((i+1)%3==0)
printf("\n");
}
for(i=0;i!=n;i++)
av+=a[i];
printf("av=%f\n",(float)av/n);
}
3.
#include <stdio.h>
#define N 5
int main(int argc, char *argv[])
{
int num[N]={0},i=0,k=0;
float score[N]={0.0};
for(i=0; i<N; i++)
scanf("%d%f",&num[i],&score[i]);
for(i=1; i<N; i++)
if(score[k]<score[i]) k=i;
for(i=0; i<N; i++)
printf("%8d",num[i]);
printf("\n");
for(i=0; i<N; i++)
printf("%8.2f",score[i]);
printf("\n");
printf("number=%d,score=%.2f\n",num[k],score[k]);
return 0;
}
4.
(1)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[8]= {34,56,45,57,69,48,79,61},i=0,j=0,k=0,t=0;
for(i=0; i<7; i++) {
k=i;
for(j=i+1; j<8; j++)
if(a[k]<a[j]) k=j;
t=a[i]; a[i]=a[k]; a[k]=t;
}
for(i=0; i<8; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
(2)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[8]= {34,56,45,57,69,48,79,61},i=0,j=0,t=0;
for(i=0; i<7; i++)
for(j=i+1; j<8; j++)
if(a[i]<a[j]) {
t=a[i]; a[i]=a[j]; a[j]=t;
}
for(i=0; i<8; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
5.#include <stdio.h>
void main()
{ int n[11],i,j,m,f;
for(i=0;i<10;i++)
scanf("%d",&n[i]);
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
{
f=n[i];
n[i]=n[i]>n[j]?n[i]:n[j];
if(n[j]>f)n[j]=f;
}
for(i=0;i<10;i++)
printf("%7d",n[i]);
printf("\nplease enter the 11th number:\n");
scanf("%d",&m);
for(i=0;i<10;i++)
if(m>n[i])
{
for(j=10;j>i;j--)
n[j]=n[j-1];
n[i]=m;
break;
}
else
if(i==9 && m<=n[9])
n[10]=m;
for(i=0;i<11;i++)
printf("%7d",n[i]);
getch();
}
6.#include <stdio.h>
int main(int argc, char *argv[])
{ int i,j,a[4][4],sum=0,p=1,max,maxi;
for (i=0;i<4;i++)
for (j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
for (i=0;i<4;i++)
{ sum+=a[i][i];
if (i%2==0)
p*=a[i][i];
if(a[i][i]>max)
{ max=a[i][i];
maxi=i;
}
}
printf("對角線上各元素的和:%d\n",sum);
printf("對角線上行、列下標均為偶數的各元素的積:%d\n",p);
printf("對角線上其值最大的元素:%d,它在數組中的位置:第%d行第%d列\n",max,maxi,maxi);
return 0;
}
『陸』 c語言實訓
《C語言實訓教程》共分為兩篇。實驗篇為上機實驗指導,涉及順序結構程序設計、分支結構程序設計、循環結構程序設計、函數、數組、結構體與共用體、指針、位運算、文件等部分內容的相關實驗項目,每一部分的實驗項目按照由淺入深、循序漸進的原則設置了三個層次。習題篇為每章的習題及參考答案。配套光碟的教學資源中提供了每個實驗項目的問題解析、參考程序、在線測試等,以便於學生自學。
《C語言實訓教程》通俗易懂,實驗項目設置合理,符合學生對程序設計類課程知識掌握的規律,適合各類高等院校C語言程序設計課程的實驗教學,同時也可以作為獨立的實訓教材。
『柒』 C語言實訓總結
在初學C語言的一個學期後,我們進行了C語言實訓階段,嘗試自己編寫一個比較復雜的程序系統。在為期兩周的時間中,我們同組的同學共同的感受是:C語言實訓和平時上課所接觸的程序是有很大不同的,所經受的考驗和克服的困難是平時所無法比擬的。好在同組的搭檔們精誠合作,分工明確,有問題共同解決,攻克了C語言實訓的復雜程序。在這里,我作為其中的參與者,自然感觸良多。
剛開始接觸到C的時候,我已經學過一些有關VB的內容,這個在演算法和思維上稍微有點幫助。回想本學期的學習,首先,最基本的,是C的數據格式,讓我們知道整數,浮點數以及字元常量在C中的運用。然後,在學會了數據轉化,以及熟練的可以對各種數據處理之後,我開始進行有關數據結構,像數組,結構體等的學習,因為有的東西從現有的知識來看都是非常簡單的,還沒有聯繫到指針等等一些復雜的概念。可是,僅僅學會這些是遠遠不夠的,C語言中,還有很多更加經典、重要、實用的知識。
說說函數。雖說很多程序語言都有函數這一內容,但我覺得C語言的函數是最有魅力的了。學習函數的方法是比較簡單的,只有兩個字「牢記」,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。函數從本質上講是一段通用程序,用它可以幫助我們節約很多編程的時間,學習C語言的「高人」都說,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。比如,大家可以作一個比較字元串的實驗,用C語言中的strcmp()函數只要一句話,而自己編寫的話,30句都很難實現,可想而知函數的實用和快捷。在我們C語言實訓的代碼中,函數更是得到了充分的應用,可以說,實訓題目的復雜代碼,就是用無數個函數的調用和嵌套積累出來的。
要注意的是,有的同學剛剛開始的時候,都是被一些大的程序激勵的,所以當開始的時候看到繁瑣的數據轉化和簡單的演算法,都覺得很無聊,都想自己做幾個自己滿意的程序來看看,雖然這種想法很好,但是,我們說,沒有基礎,純粹是搬照一些現成設計方法,是不足取的。要知道,程序設計講究的是個人的思維的,假如剛開始就被一些現成的思想束縛住,以後就會覺得很無趣。
我們知道,指針其實是C語言的靈魂,許多的數據結構在我們學到這里之前都可以說是精通了。所以我們的任務就是,讓數據結構在指針中運行。當然,剛剛開始接觸到這些新的東西,是一件非常痛苦的事情,所以我們一定要用非常形象的思維去看待指針,不能太固化。所以,新的東西,比如結構體在指針中的表現方法,數組及多維數組在結構體中的運用,都一點一點的加了進來,同時豐滿了我們對原來C的數據機構,數據表示的理解。當我們完成了這三步的學習,我們已經可以自豪的說,我們的基礎都扎實了,可以進一步的學習有關演算法,設計概念等等深層次的東西了。
但是,指針,結構體,這些太抽象的東西,在學習C語言的時候我們就有點「似懂非懂」,可是在眼下的C語言實訓中,像這么重要的C語言知識,一定要達到能熟練掌握,實際運用的程度。在實訓的大程序中,結構體在指針中的表現方法,數組及在結構體中的運用等具體的技術環節,都得到了體現,不會指針,我們的工作是沒法展開的。所以,在實訓期間,大家在鞏固基本知識的基礎上,逐塊攻克實訓課題,克服了困難,自信心得到了提高。
最後,談談我們組的程序軟體。商店商品管理系統,是一個比較利於應用,解決實際問題,方便實際管理的程序。設計代碼比較復雜,結構比較嚴謹。在程序編寫的1周左右的時間里,組員們遇到了上述的困難,包括程序設計構思,甚至是指針等某些知識點的欠缺,導致的工作中出現的困難。但是,當大家一起團結協作,解決了這些困難之後,發現自己也可以編寫復雜的、應用性的程序了,更發現自己對C語言這門學科的興趣也提高了。
當然,我們編寫的商店商品管理系統,還存在很多疏漏和不合理之處。比如,程序復雜冗長,如果時間充裕,我們將在不改變程序運行結果的基礎上,簡化程序,使每一句更加精闢,總體上更加簡化。另外,在程序的外觀上,我們由於時間問題,沒有做更多的修飾,運行起來顯得比較死板、枯燥乏味。如果增添一些色彩和其他效果,我們的程序也許會更加完美。
以上就是我的C語言實訓個人總結
『捌』 c語言實訓
/*8、學生成績管理系統
學生屬性:學號,姓名,入學年月,有成績的學期數,四門課的成績等9個成員,
在編程中要求當執行狀態輸入i為輸入學生記錄,輸入D為刪除,輸入s為查詢(以學號為查詢條件,輸入p為將整個學生記錄輸出,使用結構數組或結構指針編程)
*/
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
#include "windows.h"
int stu_num=0; //全局變數,已輸入成績的學生人數
struct student //結構體數組,用於儲存學生的數據
{
char num[11]; //儲存學號
char name[11]; //儲存名字
char sex[3]; //儲存性別
char date[11]; //儲存入學年月
int term; //儲存學期數
float score1; //儲存成績1
float score2; //儲存成績2
float score3; //儲存成績3
float score4; //儲存成績4
}student[100];
void warning() //警告函數
{
char a;
printf("您所查找的學生暫無數據,按任意鍵返回重新輸入");
a=getch(); //儲存任意鍵
}
void input() //輸入函數
{
char a;
do
{
system("cls");
printf("(i)輸入學生數據\n(e)返回主菜單\n請輸入您要執行的選項:");
a=getch(); //獲取輸入選項
if(a=='i'||a=='I') //輸入學生數據
{
system("cls"); //清屏函數
printf("下面輸入第%d個學生的數據\n學號:",stu_num+1); //以下操作儲存學生數據於結構體中
scanf("%s",&student[stu_num].num);
printf("姓名:");
scanf("%s",&student[stu_num].name);
printf("性別:");
scanf("%s",&student[stu_num].sex);
printf("入學年月:");
scanf("%s",&student[stu_num].date);
printf("學期:");
scanf("%d",&student[stu_num].term);
printf("成績1:");
scanf("%f",&student[stu_num].score1);
printf("成績2:");
scanf("%f",&student[stu_num].score2);
printf("成績3:");
scanf("%f",&student[stu_num].score3);
printf("成績4:");
scanf("%f",&student[stu_num].score4);
stu_num++;
}
if(a=='e'||a=='E') //退出輸入函數
{
break; //強制結束循環以退出輸入函數
}
}while(1);
}
void output() //輸出函數
{
system("cls"); //清屏函數
int i,j;
printf("學號\t 姓名 性別 入學年月 學期 成績1 成績2 成績3 成績4\n");
for(i=0;i<stu_num;i++) //通過for語句逐個輸出學生數據
{
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
}
printf("按任意鍵返回主菜單");
j=getch(); //儲存任意鍵
}
void revise() //修改函數
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函數
printf("(x)按學號查找修改\n(m)按名字查找修改\n(e)返回主菜單\n請輸入您要執行的選項:");
a=getch(); //獲取輸入選項
if(a=='x'||a=='X') //按學號查找
{
printf("請輸入該學生學號:");
scanf("%s",&num); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("請輸入該學生姓名:");
scanf("%s",&name); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='e'||a=='E') //退出修改函數
{
return;
}
else //為了防止選錯選項
{
goto st;
}
if(i==stu_num) //未找到學生數據時提示警告並重新查找
{
warning();
goto st;
}
system("cls");
printf("您要更改的學生的信息為:\n"); //輸出欲修改的學生信息
printf("學號\t 姓名 性別 入學年月 學期 成績1 成績2 成績3 成績4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("請更新該學生的數據\n學號:"); //找到後進行數據更新
scanf("%s",&student[i].num);
printf("姓名:");
scanf("%s",&student[i].name);
printf("性別:");
scanf("%s",&student[i].sex);
printf("入學年月:");
scanf("%s",&student[i].date);
printf("學期:");
scanf("%d",&student[i].term);
printf("成績1:");
scanf("%f",&student[i].score1);
printf("成績2:");
scanf("%f",&student[i].score2);
printf("成績3:");
scanf("%f",&student[i].score3);
printf("成績4:");
scanf("%f",&student[i].score4);
printf("該學生數據已修改,按任意鍵返回");
a=getch(); //儲存任意鍵
}
void search() //查詢函數
{
int i=0;
char a,num[11],name[11];
st: system("cls"); //清屏函數
printf("(x)按學號查找\n(m)按名字查找\n(e)返回主菜單\n請輸入您要執行的選項:");
a=getch(); //獲取輸入選項
if(a=='x'||a=='X') //按學號查找
{
printf("請輸入該學生學號:");
scanf("%s",&num); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("請輸入該學生姓名:");
scanf("%s",&name); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='e'||a=='E') //退出查詢函數
{
return;
}
else //為了防止選錯選項
{
goto st;
}
if(i==stu_num) //未找到學生數據時提示警告並重新查找
{
warning();
goto st;
}
printf("學號\t 姓名 性別 入學年月 學期 成績1 成績2 成績3 成績4\n");
printf("%-12s%-8s%-8s%-10s%-6d%-8.2f%-8.2f%-8.2f%-5.2f\n",student[i].num,student[i].name,student[i].sex,student[i].date,student[i].term,student[i].score1,student[i].score2,student[i].score3,student[i].score4);
printf("按任意鍵返回主菜單");
a=getch();
}
void del() //刪除函數
{
int i=0,j;
char a,num[11],name[11];
st: system("cls"); //清屏函數
printf("(x)按學號查找刪除\n(m)按名字查找刪除\n(e)返回主菜單\n請輸入您要執行的選項:");
a=getch(); //獲取輸入選項
if(a=='x'||a=='X') //按學號查找
{
printf("請輸入該學生學號:");
scanf("%s",&num); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(num,student[i].num)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='m'||a=='M') //按姓名查找
{
printf("請輸入該學生姓名:");
scanf("%s",&name); //輸入查找數據並用for語句進行逐個對比
for(i=0;i<stu_num;i++)
{
if(strcmp(name,student[i].name)==0)
{
break; //找到後結束循環
}
}
}
else if(a=='e'||a=='E') //退出刪除函數
{
return;
}
else
{
goto st; //為了防止選錯選項
}
if(i==stu_num) //未找到學生數據時提示警告並重新查找
{
warning();
goto st;
}
for(j=i;j<stu_num;j++) //通過for語句進行數據覆蓋實現刪除學生數據
{
student[j]=student[j+1];
}
stu_num-=1;
printf("該學生數據已刪除,按任意鍵返回主菜單");
a=getch();
}
void menu() //目錄函數
{
do
{
char a;
st: system("cls"); //清屏函數
printf("\t\t 歡迎使用學生成績管理系統 1.22版\n\n\n\t\t\t(i)輸入學生數據\n\n\t\t\t(d)刪除學生數據\n\n\t\t\t(o)查看學生數據\n\n\t\t\t(s)查詢學生數據\n\n\t\t\t(r)修改學生數據\n\n\t\t\t(e)退出系統\n\n\n請輸入您要執行的選項:"); //主菜單
a=getch(); //獲取輸入選項
switch(a)
{
case 'i': //進入輸入函數
case 'I':
input();
break;
case 'o': //進入輸出函數
case 'O':
output();
break;
case 'r': //進入修改函數
case 'R':
revise();
break;
case 'd': //進入刪除函數
case 'D':
del();
break;
case 's': //進入查找函數
case 'S':
search();
break;
case 'e': //退出程序
case 'E':
return;
default: //為了防止選錯選項
goto st;
}
}while(1);
}
void main()
{
printf("組員:\n李東海 陳志銳\n凌華富 林繼其\n杜德偉 鍾鵬琿\n\n\n\n\t\t請稍後……"); //鳴謝欄
Sleep(7000);
menu();
}
這個是我們幾個人做的期末作業,你可以拿去參考;如果windows函數不能用,就把他刪除掉還有sleep這個也一起刪除掉。
『玖』 C語言實訓心得
源程序:
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
#include "dos.h"
#define N 4 /*定義常數*/
typedef struct z1 /*定義數據結構*/
{
char no[12];
char name[20];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); /*初始化函數*/
STUDENT *create(); /*創建鏈表*/
STUDENT *delete(STUDENT *h); /*刪除記錄*/
void print(STUDENT *h); /* 顯示所有記錄*/
void lookup(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *Modify(STUDENT *h); /*修改記錄*/
void append(); /*追加記錄*/
STUDENT *sort(STUDENT *h); /*按總分排序*/
STUDENT *index(STUDENT *h); /*按學號排序*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
printf("\n\n\n\n\n\n\n\n\n");
printf(" * * ******* * ***** ***** * * ******* \n");
printf(" * * * * * * * ** * * * \n");
printf(" * * * * ******* * * * * * *** * ******* \n" );
printf(" * * * * * * * * * * * * * \n");
printf(" * * ******* ******* ***** * *** * * * ******* \n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break; /*執行初始化*/
case 1:head=create();break; /*創建鏈表*/
case 2:print(head);break; /*顯示全部記錄*/
case 3:head=delete(head);break; /*刪除記錄*/
case 4:lookup(head);break; /*按名字查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=Modify(head); break; /*修改記錄,一般會插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加記錄*/
case 11:head=index(head);break; /*按學號排序*/
case 12: exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 00. init list", /*初始化*/
" 01. Enter list", /*輸入記錄*/
" 02. print list ", /*顯示單鏈表中所有記錄*/
" 03. Delete a record from list", /*從表中刪除記錄*/
" 04. Search record on name", /*按照姓名查找記錄*/
" 05. Save the file", /*將單鏈表中記錄保存到文件中*/
" 06. Load the file", /*從文件中讀入記錄*/
" 07. compute the score", /*計算所有學生的總分和均分*/
" 08. Modify an information ", /*修改某學號的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加記錄到文件中*/
" 11. index on nomber", /*按學號排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{printf("\n make by wenwei");<br><br> printf("\n Enter you choice(0~13):"); /*在菜單窗口外顯示提示信息*/<br><br> scanf("%s",s); /*輸入選擇項*/<br><br> c=atoi(s); /*將輸入的字元串轉化為整形數*/<br><br> }while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{ clrscr();
return NULL;
}
/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
clrscr();
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') { clrscr();break; } /*如果學號首字元為@則結束輸入,清屏後返回*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/
printf("bad data,repeat input\n"); /*出錯提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各門課程成績*/
}
info->sum=s; /*將總分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值為0*/
info->next=h; /*將頭結點做為新輸入結點的後繼結點*/
h=info; /*新輸入結點為新的頭結點*/
clrscr();
}
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*顯示提示信息*/
scanf("%s",p); /*輸入字元串*/
if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/
}while(strlen(p)>count);
strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/
}
/*輸出鏈表中結點信息*/
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n*********************************STUDENT************************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");
while(p!=NULL) /*只要p不是尾結點,就輸出記錄*/
{
i++;
printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************************end**************************************\n");
getch(); /*輸入任一鍵返回主菜單*/
clrscr(); /*清屏*/
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[12]; /*存放學號*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i<20)&&(b!='\r'))
{ b=getch(); /*無回顯輸入*/
if(b==8)
{ if(i>0)
{a[--i]=NULL;<br><br> putchar(8); /*退格鍵*/<br><br> putchar(' '); /*以空格代替*/<br><br> putchar(8);<br><br> }
else putchar(7); /*沒有任何字元的退格,響鈴警告*/
}
else if(b!='\r')
{ a[i++]=b; /*只要不是退格和回車就接受*/
putchar('*');
}
else
{a[i]=NULL; break; /*密碼輸入完了,記得加個NULL到後面*/<br><br> }
}
if(strcmp(a,pass)!=0)
{clrscr();<br><br> printf("Password is mistake Tow seconds to return!");<br><br> sleep(2);clrscr();return h;<br><br>}
else {printf("Password is OK! Welcome to come!"); sleep(3);<br><br>}
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}
else /*p不為空,顯示找到的記錄信息*/
{
printf("*********************************have found********************************\n");
printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");
printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[ q=p; /*保存當前結點的指針,作為下一結點的前驅*/
p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意鍵返回主菜單*/
clrscr();
return h; /*返回頭指針*/
}
/*成績統計*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定義移動指針*/
float saverage[N]={0}; /*均分初值為0*/
int i;
clrscr();
for (i=0;i<N;i++)
{ int n=0,j=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->score[i]; /*累加總分*/
j++; /*統計記錄條數*/
p=p->next; /*指針後移*/
h; /*返回頭指針 就知道這么多了,我不太懂咯~~~~心得就不來寫了,自己寫哈!~!~!