一、一維數組的應用數組
二、二維數組的應用函數
三、字符數組應用spa
定義一個一維整型數組,其大小爲10,即它能存放10個數據;設計
使用循環語句,利用隨機函數產生10個整數存放在數組中;3d
編寫排序函數sort1();code
使用循環語句,將排好序的10個數依次輸出。blog
怎樣定義和使用二維數組;排序
怎樣用循環進行二維數組中值的計算;字符串
使用循環依次輸出二維數組中的元素;input
用if語句根據條件判斷某個字符是不是大寫字母。
用scanf()函數,從鍵盤輸入一個字符串存入字符數組中;
求出該字符串的長度;
用for循環依次比較,循環的終值爲長度的一半;
設置一個標誌符ch,初值爲'Y',若某字符對不相等,將其設置爲‘N';
根據ch是’Y'仍是'N',輸出該字符串是不是迴文數。
寫一個函數,對用隨機函數產生的10個整數按從小到大的順序排序(升序,冒泡排序實現)。程序流程圖以下所示:
#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]); } }
問題:該開始我並不知道怎樣給出隨機種子以及調用排序函數,致使程序報錯。
解決辦法:經過百度,將srand()改成srand(time(NULL)),將sort1改成sort1(a,10)。srand(time(NULL))是以當前時間爲種子,產生隨意數。其中,time(NULL)用來獲取當前時間,本質上獲得的是一個大整數,而後用這個數來出隨機數。
問題:第一次輸出的隨機數很大。
解決辦法:a[i]=rand()%100。
寫一個函數,對用隨機函數產生的10個整數按從小到大的順序排序(升序,選擇排序實現)。程序流程圖以下所示:
#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]); } }
問題:和上一個實驗差很少,並無什麼問題。
編寫程序,從鍵盤輸入行數,輸出指定行數的楊輝三角形。程序流程圖以下所示:
#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; }
問題:首先獲得的是這樣的結果:
解決問題:楊輝三角剛開始的兩行是特殊的,必須分開討論。
編寫程序,從鍵盤分別輸入年、月、日,計算出該天是這年中的第幾天。程序流程圖以下所示:
#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)); }
問題:剛開始我獲得的結果以下:
解決辦法:經過分析,我發現我在代碼上的寫法爲scanf("%d,%d,%d",&y,&m,&d);因此我輸入數字應該加符號。
問題:改正後,我發現仍是不對,結果以下:
解決辦法:在for關於j的循環後加入s=s+day;return s。
編寫程序,從鍵盤輸入·一個字符,判斷其是否是「迴文數」,程序流程圖以下所示:
#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("該字符串不是迴文數。") ; }
根據流程圖並無什麼問題。
一、將數字按大小排序,有冒泡法,二分法,選擇法。
a、冒泡法:將相鄰數字兩兩相比,交換位置,直到排好序。
b、二分法:將數字與中間的數相比,交換位置。
c、選擇法:將數字與任意一個數字相比交換位置。
二、rand()能夠用%來控制生成的隨機數範圍,如rand()%100就是在100之內。
三、C語言和數學有着很像的思考方式,有時要分狀況討論。
四、閏年的判斷方法爲 if (year % 400 == 0 || (year % 4 ==0 && year % 100 != 0))。
五、要注意scanf中的格式與輸入格式對應。
六、字符是以%s輸出。
一、思惟不夠嚴密,如楊輝三角一題,我並無考慮到前面兩行的特殊性。
二、將年月日轉換,我並無第一時間想到分爲閏年和平年。
三、隨機數生成過大,沒有考慮限制範圍。