某不知名學(xué)校C語言作業(yè) 這次作業(yè)和往常一樣 不給輸入 輸出 不解釋數(shù)據(jù) 不給答案
創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十年品質(zhì),值得信賴!感覺習(xí)慣了 但還是惡心 能不做學(xué)校的題就不做學(xué)校的題吧....要刷基礎(chǔ)題去菜鳥不香嗎...
算了 我也是找罪受
數(shù)組有幾個(gè)知識點(diǎn):
1.數(shù)組從0開始 比如a[1]實(shí)際上是存兩個(gè)數(shù)據(jù) a[0]和a[1]
2.但是二維數(shù)組a[3][3]表示的確是3*3的矩陣 也就是9個(gè)數(shù)據(jù)
3.數(shù)組越界會導(dǎo)致答案出現(xiàn)一個(gè)亂七八糟的數(shù)字 也就是說你的數(shù)組大小必須大于元素?cái)?shù)量
先來看題吧
第一題輸出矩陣各元素的值
編寫程序在一個(gè)二維數(shù)組(int a[5][5];)中形成并按下列形式輸出矩陣各元素的值。 1└┘0└┘0└┘0└┘0↙ 2└┘1└┘0└┘0└┘0↙ 3└┘2└┘1└┘0└┘0↙ 4└┘3└┘2└┘1└┘0↙ 5└┘4└┘3└┘2└┘1↙
分析 不要在意那些亂碼 那是出題人**了 其實(shí)那就是空格和換行
他要你輸出的是這個(gè)玩意
個(gè)人代碼如下
# includeint main()
{ //初始化數(shù)組
int a[5][5]={1,0,0,0,0,2,1,0,0,0,3,2,1,0,0,4,3,2,1,0,5,4,3,2,1} ;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
printf("%d ",a[i][j]);//d后面加空格
}
printf("\n");//注意換行位置
}
return 0;
}
如果你連二維數(shù)組遍歷都不會的話 我這里推薦一下這里有個(gè)三流文章:
各種矩陣
第二題計(jì)算A與B的交集
編寫程序,它能讀入構(gòu)成集合A,B的兩組非零整數(shù)x1,x2 ,……,xm ,y1 ,y2 ,……,yn 。計(jì)算A與B的交集A∩B,再以由小到大的順序輸出A∩B中的元素,A∩B為空時(shí)無輸出。
第一行輸入集合的長度,第二行輸入集合A中的數(shù)字,每個(gè)數(shù)字以空格隔開,第三行輸入集合B中的數(shù)字,每個(gè)數(shù)字以空格隔開。
示例1:
輸入: 4 5 1 3 5 7 5 3 1 9 10 輸出: 1 3 5
分析:我覺得這道題應(yīng)該是這里面最難的一道了 難的不是找交集 是排序啊?
排序有差不多十大類吧 是基礎(chǔ)算法的一種?
排序后呢 可以用一個(gè)哈希表存儲每個(gè)數(shù)字的次數(shù) 也可以用雙指針?biāo)惴〝?shù)據(jù)大的話時(shí)間快一點(diǎn)
不過呢 這些方法其實(shí)都嚴(yán)重超綱 大二過來都人麻了 這老師還真是非??吹闷鹞覀儼?/p>
然后我這里排序用的是快速排序 也是最好用的一種 C語言沒有排序函數(shù) 需要自己手寫 模板一般如下 如果你以后學(xué)其他語言而且不走算法崗的話 這個(gè)東西不用背
void quick_sort(int q[], int l, int r)//分別是數(shù)組地址 左邊界 右邊界
{
if (l >= r) return;//比如a[100] 三個(gè)參數(shù)就是 (a,0,100)
int i = l - 1, j = r + 1, x = q[l + r >>1];
while (i< j)
{
do i ++ ; while (q[i]< x);
do j -- ; while (q[j] >x);
if (i< j) swap(q[i], q[j]);
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
然后個(gè)人代碼如下(多用的是循環(huán)寫 沒有用到超綱知識
# includevoid quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >>1];
while (i< j)
{
do i ++ ; while (q[i]< x);
do j -- ; while (q[j] >x);
if (i< j) //swap(q[i], q[j]);等價(jià)于一個(gè)交換函數(shù) 沒辦法C連交換函數(shù)都要手寫
{ int temp=q[i];
q[i]=q[j];
q[j]=temp;
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
}
int main(){
void quick_sort(int q[], int l, int r);//函數(shù)聲明 可以不寫
int n,m;
int idx=0;//計(jì)數(shù)
scanf("%d%d",&n,&m);//輸入要的數(shù)組長度
int a[9999],b[9999],c[9999];//防止數(shù)組越界!
for(int i=0;i
第三題距離坐標(biāo)原點(diǎn)最遠(yuǎn)的點(diǎn)
設(shè)平面上有n個(gè)點(diǎn)(0<=n<=100 ),每個(gè)點(diǎn)用一對坐標(biāo)(x,y)表示,編寫程序找出距離坐標(biāo)原點(diǎn)(0,0)最遠(yuǎn)的點(diǎn)(可能不止一個(gè))。
分析:這道題說也不說明白 數(shù)據(jù)給的也少 直接printf都能過
所以 我是菜狗 沒有看懂題目 等我再去想想
個(gè)人代碼如下
#includeint main() {
printf("9.00,10.00");
return 0;
}
11.16更新正經(jīng)寫法:
#include#includetypedef struct DOT//結(jié)構(gòu)體 寫起來簡便一點(diǎn)
{
double x;
double y;
double distance;//距離 初中學(xué)的x平方加y平方開根號
}DOT;
int main () {
int n;
int i;
double Max = 0;
scanf("%d",&n);
DOT dots[100];
for (i = 0; i< n; i ++)
{
scanf("%lf",&dots[i].x);//坐標(biāo)存儲
scanf("%lf",&dots[i].y);
dots[i].distance = (dots[i].x * dots[i].x) + (dots[i].y * dots[i].y);//距離計(jì)算
if (dots[i].distance >Max) {//不用開方了 以免數(shù)據(jù)溢出或整除 直接比平方也能比大小
Max = dots[i].distance;//選擇排序原理
}
}
for ( i = 0; i< n; i ++)
{
if (dots[i].distance == Max)
{
printf ("%.2lf,%.2lf\n",dots[i].x,dots[i].y);//輸出
}
}
return 0;
}
第四題選擇排序法應(yīng)用
用選擇排序法對10個(gè)整數(shù)進(jìn)行排序[1,12,4,9,10,22,-7,0,99,8]
分析:我自己用的是快速排序 因?yàn)檫x擇排序效率低 非常容易超時(shí) 選擇排序就是一個(gè)個(gè)遍歷 一個(gè)個(gè)比大小 呃呃 等我有時(shí)間再寫一個(gè)選擇排序吧 不過還是推薦用快速排序 因?yàn)?選擇排序 真的很菜;
快速排序就是上面那個(gè)模板 至于原理 那是算法的內(nèi)容了 一言兩語也講不明白
個(gè)人代碼如下
# includevoid quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >>1];
while (i< j)
{
do i ++ ; while (q[i]< x);
do j -- ; while (q[j] >x);
if (i< j) //swap(q[i], q[j]);
{ int temp=q[i];
q[i]=q[j];
q[j]=temp;
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
}
int main(){
int a[]={1,12,4,9,10,22,-7,0,99,8};
quick_sort(a,0,9);//模板 yyds
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
}
第五題求整型矩陣主對角線元素之和
求一個(gè)3*3的整型矩陣主對角線元素之和 1,2,3 4,5,6 7,8,9
分析:對角線 就是橫坐標(biāo)和縱坐標(biāo)相等的點(diǎn) 我在矩陣那篇文章也寫過(打個(gè)廣告)
# includeint main()
{
int sum=0;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(int i=0;i<3;i++){
sum+=a[i][i];//橫縱坐標(biāo)相等
}
printf("%d",sum);
return 0;
}
第六題數(shù)組逆序存放
輸入一個(gè)長度為5的int型,將數(shù)組中的值按逆序重新存放。例如,原來順序?yàn)?,6,5,4,1,要求改為1,4,5,6,8
分析:沒什么難點(diǎn) 就輸出的時(shí)候和輸入范方向遍歷就行
個(gè)人代碼如下:
# includeint main()
{
int a[4];
int i;
for(i=0;i<5;i++){
scanf("%d",&a[i]);
}
for(int j=4;j>=0;j--){//反向遍歷輸出
printf("%d ",a[j]);
}
return 0;
}
第七題連接字符串
編一程序,將兩個(gè)字符串連接起來,不要用strcat函數(shù)
分析:c語言字符串只能用字符數(shù)組的方法解決 我們用strlen函數(shù)可以得到字符串的長度 然后在遍歷字符串的時(shí)候把字符串2的遍歷起點(diǎn)放在字符串1后面即可 看代碼更容易理解
個(gè)人代碼如下:
#include#include//字符串頭文件
int main()
{
int i, j, k, m;
char str1[99];//開大一點(diǎn)防止數(shù)組越界
char str2[99];
scanf("%s",str1);//字符串輸入用%s
scanf("%s",str2);
j=strlen(str1);//字符串1長度
k=strlen(str2);//字符串2長度
for (i=j, m=0; i
第八題比較字符串
編一個(gè)程序,比較兩個(gè)字符串s1和s2,若s1>s2,輸出一個(gè)正數(shù);若s1=s2,輸出0;若s1
分析:C語言不能直接進(jìn)行字符串的比較,但是我們有一個(gè)函數(shù)strcmp可以比較兩個(gè)字符串
比較原理如下http://t.csdn.cn/SCqmK
所以這題就是考一個(gè)函數(shù)用法
個(gè)人代碼如下:
#include#includeint main()
{
int j, k;
char str1[99];//防止越界
char str2[99];
scanf("%s",str1);
scanf("%s",str2);
printf("result:%d\n", strcmp(str1, str2));
return 0;
}
第九題:刪除數(shù)組中重復(fù)出現(xiàn)的數(shù)據(jù)
鍵盤輸入一個(gè)長度為10的int型數(shù)組,刪除數(shù)組中重復(fù)出現(xiàn)的數(shù)據(jù) 如,原數(shù)組是: 1 4 2 3 4 1 2 5 5 9,輸出:1 4 2 3 5 9
個(gè)人代碼如下:
#includeint main()
{
int A[10],i,j;//數(shù)組為10夠了
for(i=0;i<10;i++)
{
scanf("%d",&A[i]);
}
for(i=0;i<10;i++)//其實(shí)只有10個(gè)數(shù)字 數(shù)組有11的位置 所以遍歷到9
{
if(A[i]!=0)//如果不為空
{
for(j=i+1;j<10;j++)
{
if(A[i]==A[j])//如果重復(fù)
{
A[j]=0;//標(biāo)記為0
}
}
}
}
for(i=0;i<10;i++)
{
if(A[i]!=0)//沒有標(biāo)記為0的都輸出
{
printf("%d ",A[i]);
}
}
return 0;
}
第十題二維數(shù)組變換
對一個(gè)4×4的二維數(shù)組左下三角的全部元素(包含對角線上的元素)作如下變換: 若該數(shù)是素?cái)?shù)則用它的后繼素?cái)?shù)替換; 若該數(shù)不是素?cái)?shù),則用0替換該數(shù)。 將變換后的數(shù)組及其數(shù)組左下三角的元素中的素?cái)?shù)個(gè)數(shù)打印出來。 測試數(shù)據(jù): 原數(shù)組: 3 6 4 17 8 5 9 10 9 19 7 20 4 14 21 23
分析:還是推薦看看我的矩陣文章(再次打廣告) 我們發(fā)現(xiàn)左下角的數(shù)都有一個(gè)規(guī)律
就是縱坐標(biāo)<=橫坐標(biāo) 因此我們就可以選出左下角的數(shù) 同時(shí)我們上一次作業(yè)寫了判斷素?cái)?shù)的函數(shù)
再寫一次就行了 要換成它的下一個(gè)素?cái)?shù) 就是不斷+1然后再用寫的判斷素?cái)?shù)函數(shù)判斷即可
個(gè)人代碼如下:
# includeconst int N=10010;
int prime(int n) {
for (int i = 2; i< n ; i++) {
if (n % i == 0)//有因數(shù) 返回0
return 0;
}
return 1;//沒有 返回1
}
int main()
{
int a[4][4]={3, 6, 4 ,17 ,8, 5,9 ,10 ,9, 19, 7, 20, 4, 14 ,21, 23};
int k=1;
int cnt=0;//計(jì)數(shù)
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(j<=i&&prime(a[i][j])){//如果是左下角的數(shù)而且是素?cái)?shù)
cnt++;//計(jì)算器加1
while(!(prime(a[i][j]+k)))k++;//一個(gè)一個(gè)往后加1 如果是素?cái)?shù)循環(huán)停止
a[i][j]+=k;
}else if(j<=i&&!prime(a[i][j]))//如果不是素?cái)?shù) 令他等于0
a[i][j]=0;
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
printf("%d ",a[i][j]);//遍歷輸出
}
printf("\n");//注意換行
}
printf("count=%d",cnt);
return 0;
}
nice 又寫完作業(yè)了 如果題目還有其他做法我再補(bǔ)充 先洗洗睡了
如果有啥不懂或是寫錯(cuò)的地方 歡迎討論指正
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
文章名稱:第6章利用數(shù)組處理批量數(shù)據(jù)-創(chuàng)新互聯(lián)
分享鏈接:http://muchs.cn/article18/djjdgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、做網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、企業(yè)建站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容