C語言程序設計實驗報告
實驗項目:
1、一維數組的應用
2、二維數組的應用
3、字符數組應用
姓名:曾福波 實驗地點: 家 實驗時間:2020年5月19日
一、實驗目的與要求
1、一維數組的應用
定義一個一維整型數組,其大小為10,即它能存放10個數據;
使用循環語句,利用隨機函數產生10個整數存放在數組中;
編寫排序函數sort1();
使用循環語句,將排好序的10個數依次輸出。
2、二維數組的應用
怎樣定義和使用二維數組;
怎樣用循環進行二維數組中值的計算;
使用循環依次輸出二維數組中的元素;
用if語句根據條件判斷某個字符是否是大寫字母。
3、字符數組應用
用scanf()函數,從鍵盤輸入一個字符串存入字符數組中;
求出該字符串的長度;
用for循環依次比較,循環的終值為長度的一半;
設置一個標志符ch,初值為'Y',若某字符對不相等,將其設置為‘N';
根據ch是’Y'還是'N',輸出該字符串是否是回文數。
二、實驗內容
7.3.1 一維數組的應用
實驗練習 1
1、簡單問題描述
寫一個函數,對用隨機函數產生的10個整數按從小到大的順序排序(升序,冒泡排序實現)。程序流程圖如下所示:
2、實驗代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort1(int s[],int n)
{
int i,j;
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(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("排序后的結果:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
3、問題分析
問題分析:開始我並不知道怎樣給出隨機種子以及調用排序函數,導致程序報錯。
實驗練習 2
1、簡單問題描述
寫一個函數,對用隨機函數產生的10個整數按從小到大的順序排序(升序,選擇排序實現)。程序流程圖如下所示:
2、實驗代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort2(int s[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
}
main()
{
int i,a[10];
srand(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("排序后的結果:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
3、問題分析
問題:和上一個實驗差不多,並沒有什么問題。
7.3.2 二維數組的應用
實驗練習 1
1、簡單問題描述
編寫程序,從鍵盤輸入行數,輸出指定行數的楊輝三角形。程序流程圖如下所示:
2、實驗代碼
#include<stdio.h>
main()
{
int i,j,n,a[50][50];
printf("請輸入需要打印的行數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i][i]=1;
a[i][0]=1;
}
for(i=2;i<n;i++)
{
for(j=1;j<=i-1;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
3、問題分析
問題分析:楊輝三角剛開始的兩行是特殊的,必須分開討論。
實驗練習 2
1、簡單問題描述
編寫程序,從鍵盤分別輸入年、月、日,計算出該天是這年中的第幾天。程序流程圖如下所示:
2、實驗代碼
#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 day1(int year,int month,int day)
{
int i,j,s=0;
if (year % 400 == 0 || (year % 4 ==0 && year % 100 != 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("input year_month_day:\n");
scanf("%d,%d,%d",&y,&m,&d);
day1(y,m,d);
printf("是這一年的第%d天\n",day1(y,m,d));
}
3、問題分析
問題分析:我發現我在代碼上的寫法為scanf("%d,%d,%d",&y,&m,&d);所以我輸入數字應該加符號。
7.3.3 字符數組應用
實驗練習 1
1、簡單問題描述
編寫程序,從鍵盤輸入·一個字符,判斷其是不是“回文數”,程序流程圖如下所示:
2、實驗代碼
#include<stdio.h>
#include<string.h>
#define N 40
main()
{
char str[N],ch='Y';
int i;
int Len;
printf("input a string:");
scanf("%s",&str);
Len=strlen(str);
printf("\n");
printf("字符串長度為%d",Len);
printf("\n");
printf("\n");
for(i=0;i<=Len/2;i++)
{
if(str[i]!=str[Len-1-i])
{
ch='N';
break;
}
}
if(ch=='Y')
printf("%s是一個回文數",str);
else
printf("該字符串不是回文數。") ;
}
3、問題分析:無
三、實驗小結
1、思維不夠嚴密,如楊輝三角一題,我並沒有考慮到前面兩行的特殊性。
2、將年月日轉換,我並沒有第一時間想到分為閏年和平年。
3、隨機數生成過大,沒有考慮限制范圍