第七章數組實驗實驗報告(第一部分)

實驗項目:第七章數組實驗數組

姓名:謝麗萍  時間:2019年5月29號   地點:514教室數據結構

1、實驗目的與實驗要求函數

①7.3.1-1本實驗旨在鞏固學生對數組這種數據結構的理解,加強程序設計能力。在這個實驗中,學生將練習:定義一個一維整形數組,其大小爲10,即它能存放10個數據;使用循環語句,利用隨機函數生產10個整數放在數組中;編寫排序函數sort1()使用循環語句,將排好序的10個數依次存放在數組中。在強化練習中,學生將練習:將數組定義爲全局數組或局部數組;在主函數中,用隨機函數生成10個元素放入數組中;將sort1()函數部分放入主函數中。spa

②7.3.2本實驗旨在鞏固學生對二維數組這種數據結構的理解,加強程序設計能力。在這個實驗中,學生將練習:怎樣定義和使用二維數組;怎樣用循環進行二維數組中的計算;使用循環依次輸出二維數組中的元素;用if語句根據條件判斷某個字符是不是大寫字母。設計

③7.3.3本實驗旨在鞏固學生對字符串這種數據結構的理解,加強程序設計能力。在這個實驗中,學生將練習:用scanf()函數,從鍵盤輸入一個字符串,存入字符數組中;求出該字符串的長度;用for循環依次比較,循環的終值爲長度的一半;設置一個標識符ch,初值爲「y」,若某字符對不相等,將其設置爲「N」;根據ch是「Y」仍是「N」輸出該字符串是不是迴文數;在強化練習中學生將練習:不用strlen()函數求出字符串的長度;將求迴文數的部分獨立出來,編成一個函數。code

2、實驗內容blog

一、實驗練習排序

問題描述:編寫程序,利用隨機函數產生的10個整數按從小到大的順序排序(升序,冒泡排序法)字符串

流程圖:input

 

實驗代碼:

#include<stdio.h> #include<stdlib.h> #include<time.h>
void sort1(int s[],int n) { int i,j,k; int temp; for(i=0;i<n-1;i++) for(j=9;j>=i+1;j--) if(s[j]<s[j-1]) { temp=s[j]; s[j]=s[j-1]; s[j-1]=temp; } } main() { int i,a[10]; srand((unsigned int)time(NULL)); printf("隨機產生10個整數:\n"); for(i=0;i<10;i++) a[i] =rand()%100; for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); sort1(a,10); printf("輸出排序後的10個整數\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }

 

運行結果:

問題分析:這道題中我遇到了幾個問題,分別是:①給出隨機種子和隨機產生10個整數這兩個語句的函數我已開始拿到題目不會,後面上網百度了一下,就解決了。老師說這個咱們還沒學過,但以前碰到過,此次又碰到了,算是又鞏固一遍吧。②對於我一開始的代碼運行出來的結果是這些數字連在一塊兒的,沒有分開。後面我問了一下同桌才發現問題出在沒有給輸出函數空格,後面改過來後更美觀了。

二、實驗練習

問題描述:寫一個函數,對隨機產生的10個整數按從小到大的順序排序(升序,用選擇排序法)

流程圖:

 

實驗代碼:

#include<stdio.h> #include<stdlib.h> #include<time.h>
void sort2(int s[],int n) { int i,j,k; int temp; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<=n-1;j++) { if(s[k]>s[j]) k=j; } if(k!=i) { temp=s[k]; s[k]=s[i]; s[i]=temp; } } } main() { int i,a[10]; srand((unsigned int)time(NULL)); printf("隨機產生10個整數:\n"); for(i=0;i<10;i++) a[i] =rand()%100; for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); sort2(a,10); printf("輸出排序後的10個整數\n"); for(i=0;i<10;i++) printf("%d ",a[i]); }

 

運行結果:

問題分析:這道題和上一道題同樣只是使用的方法不同而已,因此在作出第一道題後再來作這道題,再加上流程圖的幫助就更簡單了許多。但仍是遇到了問題,就是在sort2中的最後一個if語句後面的內容沒有包含到for循環中最後致使運行出來的結果只有部分數據調換了爲置。

三、實驗練習

問題描述:編寫一程序,從鍵盤輸入行數,輸出指定行數的楊輝三角形。

流程圖:

 

實驗代碼:

#include<stdio.h> main() { int a[50][50],i,j,n; printf("輸入楊輝三角形行數:\n"); scanf("%d",&n); for(i=1;i<=n;i++) { a[i][i]=1; a[i][1]=1; } for(i=3;i<=n;i++) { for(j=2; j<=i-1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=1;i<=n;i++) { for(j=1;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } }

 

運行結果:

問題分析:對於這道題我一開始沒有怎麼搞懂其原理,致使我在通過很長時間思考後仍是運行不出來後去看同窗的代碼時都沒看懂。後面通過同窗的解釋後最後恍然大悟,解出了這道題。我開始沒有分清最後兩個for循環的含義,致使沒搞懂。原來第二個for循環是算出中間的那些數,最後一個for循環是控制輸出的。

四、實驗練習

問題描述:編寫程序,從鍵盤分別輸入年、月、日,計算出改天是這年中的第幾天。

流程圖:

 

實驗代碼:

#include<stdio.h>
int day_tab[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; int day_year(int year,int month,int day) { int i,j,s=0; if(year%4==0&&year%100!=0||year%400==0) i=1; else i=0; for(j=1;j<month;j++) { s=s+day_tab[i][j]; } s=s+day; return s; } main() { int y,m,d; printf("輸入年,月,日:"); scanf("%d%d%d",&y,&m,&d); printf("是這年的第%d天\n",day_year(y,m,d)); }

 

運行結果:

問題分析:這道題中犯了一個錯誤就是if(year%4==0&&year%100!=0||year%400==0)中的year剛開始用i來代替了,致使運行不出來。後面在曉鵬老師的幫助下,發現了問題,並改過來了。之後要謹記定義的變量是什麼就用什麼,否則白定義了程序識別不了。

五、實驗練習

問題描述:編寫程序,從鍵盤輸入一個字符串,判斷其是不是迴文數。

流程圖:

 

實驗代碼:

#include<string.h>
#define N 40 main() { char str[N],ch='Y'; int i; int len; printf("please input a string\n"); scanf("%s",str); len=strlen(str); for(i=0;i<(len/2);i++)//迴文數從左至右和從右至左一致,因此只需判斷前一半與後一半對應數是否一致 ,因此i<len/2 
 { if(str[i]!=str[len-1-i]) { ch='N'; break; } } if(ch=='Y') printf("%s是一個迴文數\n",str); else printf("%s不是一個迴文數\n",str); }

 

運行結果:

問題分析:對於這道題還好,沒遇到啥問題,進行的挺順利的。

3、實驗小結

此次實驗中咱們又再次接觸到了隨機函數,學會了隨機數的表達。還有在使用變量時要注意,必須用以前定義的,不能隨便改變,否則會識別不了,致使程序運行不出來。

相關文章
相關標籤/搜索