讀程序
第一章? 概述
?[1]
分析下列程序段的運行結果。
?? main( )
?? { char ch1='\101',ch2='\x
5c
';
???? printf("%c,%c\n",ch1,ch2);
?? }
第二章? 基本數據類型和運算
?[1]
分析下列程序,寫出運行結果。
??? main()
??? {printf("C語言各數據類型的長度為:\n");
???? printf("short %d bytes\n",sizeof(short));
???? printf("int %d bytes\n",sizeof(int));
???? printf("long %d bytes\n",sizeof(long);
???? printf("char %d bytes\n",sizeof(char));
???? printf("float %d bytes\n",sizeof(float));
???? printf("double %d bytes\n",sizeof(double));
??? }
第三章? 順序、選擇和循環結構的程序設計
?[1]
閱讀程序,寫出運行結果。
?
????main()
????? { int a=10,b=4,c=3;
??????? if (a<b) a=b;
??????? if (a<c) a=c;
??????? printf("%d,%d,%d",a,b,c);
????? }
?[2]
閱讀下列程序,寫出程序的輸出結果。
????? main()
????? { int x=100,a=10,b=20,ok1=5,ok2=0;
??????? if (a<b)??
?????????? if (b!=15)??
??????????
???if (!ok1)
?????????????????? x=1;
??????????????? else if(ok2)
??????????????????????? x=10;
???????????????????? else? x=-1;
??????? printf("%d\n",x);
????? }
[3]
閱讀下列程序,寫出程序運行的輸出結果。
????? main()
????? { int y=9;
??????? for (;y>0;y--)
??????????? if(y%3==0)
????????????? {
?????????????? printf("%d",--y);
?????????????? continue;
????????????? }
????? }
?[4]
閱讀下列程序:
??? main()
??? {int a;
???? char b;
???? float c;
???? printf("input a b c:");
???? scanf("%d%c%f",&a,&b,&c);
???? printf("a=%d,b=%c,c=%f\n",a,b,c);
??? }
??? 程序運行后若輸入“1234r1234.567(回車)”,寫出程序的輸出結果。
[5]
閱讀下列程序:
??? main()
??? {int a;
???? float b,c;
???? printf("input a b c:");
???? scanf("%2d%
3f
%
4f
",&a,&b,&c);
???? printf("a=%d,b=%f,c=%f",a,b,c);
??? }
??? 程序運行后若輸入“12345678987654321(回車)”,寫出程序的輸出結果。
?
[6]
閱讀下列程序:
??? main()
??? {int a;
???? float b,c;
???? scanf("%d%f%f",&a,&b,&c);
???? printf("a=%d,b=%f,c=%f",a,b,c);
??? }
??? 程序運行后若輸入“12 345 6789 87654321(回車)”,寫出程序的輸出結果。
?
?[7]
閱讀下列程序:
??? main()
??? { int a;
????? float b,c;
????? printf("input a b c:");
????? scanf("%d,%f,%f",&a,&b,&c);,
????? printf("a=%d,b=%f,c=%f\n",a,b,c);
??? }
??? 程序運行后若輸入“12345,678,976.388(回車)”,寫出程序的輸出結果。
[8]
閱讀程序,寫出運行結果。假設輸入:123-45-6789(回車)
??? main()
??? {int a,b,c;
???? printf("input a b c:");
???? printf("ABC=%d\n",scanf("%3d-%2d-%4d",&a,&b,&c));
???? printf("a=%d,b=%d,c=%d\n",a,b,c);
?? }
第四章? 數組
?[1]
閱讀程序,寫出運行結果:
????? main()
????? { static int a[][3]={9,7,5,3,1,2,4,6,8};
??????? int i,j,s1=0,s2=0;
??????? for(i=0;i<3;i++)
???????????? for(j=0;j<3;j++)
????????
????????{ if(i==j)s1=s1+a[i][j];
?????????????????? if(i+j==2) s2=s2+a[i][j];
???????????????? }
??????? printf("%d\n%d\n",s1,s2);
????? }
[2]
說明下列程序的功能。
????? main()
????? { int i,j;
??????? float a[3][3],b[3][3],x;
??????? for(i=0;i<3;i++)
??????????? for(j=0;j<3;j++)
??????????????? { scanf("%f",&x);a[i][j]=x;}
??????? for(i=0;i<3;i++)
??????????? for(j=0;j<3;j++)b[j][i]=a[i][j];
??????? for (i=0;i<3;i++)
??????????? { printf("\n");
????????????? for(j=0;j<3;j++) printf("%f ",b[i][j]);
??????????? }
???
???}
?
?[3]
寫出下列程序的運行結果。
?????? main()
?????? { static char a[]={'*','*','*','*','*'};
???????? int i,j,k;
???????? for(i=0;i<5;i++)
???????????? { printf("\n");
?????????????? for(j=0;j<i;j++)? printf("%c",' ');
?????????????? for (k=0;k<5;k++) printf("%c",a[k]);
??
??????????}
?????? }
[4]
說明下列程序的功能。
?????? main()
?????? { int i,j;
???????? float a[3][3],b[3][3],c[3][3],x;
???????? for(i=0;i<3;i++)
???????????? for(j=0;j<3;j++)
???????????????? {scanf("%f",&x);a[i][j]=x;}
???????? for(i=0;i<3;i++)
???????????? for(j=0;j<3;j++)
???????????????? {scanf("%f",&x);b[i][j]=x;}
???????? for(i=0;i<3;i++)
???????????? for(j=0;j<3;j++) c[i][j]=a[i][j]+b[i][j];
???????? for(i=0;i<3;i++)
???????????? { printf("\n");
?????????????? for(j=0;j<3;j++) printf("%f ",c[i][j]);
????????
????}
???????? }
編程
前三章
?[1]
請編寫輸出以下圖案的程序,圖案的行數由輸入的值確定。
????????? A
???????? BBB
??????? CCCCC
?????? DDDDDDD
????? EEEEEEEEE
[2]
請編寫程序,輸入一行數組字符(用EOF結束),每個數字字符的前后都有空格。請編程,把這一行中的數字轉換成一個整數。例如:若輸入2?? 4?? 8?? 3〈CR>? (<CR>表示回車)
則輸出整數:2483.
?[3]
編寫程序打印出以下形式的乘法九九表。
**? 乘法口訣? **
?
????? (1)??? (2)?? (3)?? (4)?? (5)?? (6)?? (7)?? (8)?? (9)?
??????????????????????????????????????????????????????????
(1)???? 1????? 2???? 3???? 4???? 5???? 6???? 7???? 8???? 9
(2)???? 2????? 4???? 6???? 8??? 10??? 12??? 14??? 16??? 18
(3)???? 3????? 6???? 9??? 12??? 15??? 18??? 21??? 24??? 27
(4)???? 4????? 8??? 12??? 16??? 20??? 24??? 28??? 32??? 36
(5)???? 5???? 10??? 15??? 20??? 25??? 30??? 35??? 40??? 45
(6)???? 6???? 12??? 18??? 24??? 30??? 36??? 42??? 48??? 54
(7)???? 7???? 14??? 21??? 28??? 35? ??42??? 49??? 56??? 63
(8)???? 8???? 16??? 24??? 32??? 40??? 48??? 56??? 64??? 72
(9)???? 9???? 18??? 27??? 36??? 45??? 54??? 63??? 72??? 81
??????????????????????????????????????????????????????????
第四章? 數組
?[1]
編程序,輸入單精度型一維數組a[10],計算并輸出a數組中所有元素的平均值。
[2]
編程序,輸入10個整數存入一維數組,再按逆序重新存放后再輸出。
[3]
編程序,輸入兩個字符串(<40個字符),連接后輸出(不準用系統函數)。
[4]
編程序,按下列公式計算s的值(其中x1、x2、…、xn由鍵盤輸入):
??
s=(x1-x0)2+(x2-x0)2+.....+(xn-x0)2? (其中x0是x1、x2、…、xn的平均值)???????
[5]
輸入一個3×5的整數矩陣(假設所有的數據互不相同),輸出其中最大值、最小值和它們的下標。
[6]
輸入一個字符串,將其中的所有大寫字母改為小寫字母,而所有小寫字母全部改為大寫字母,然后輸出。
[7]
設某班50名學生的三科成績表如下:
??????? 課程一??????? 課程二??????? 課程三
???????? …????????????? …??????????? …
??? 試編一個程序,輸入這50個學生的三科成績,計算并輸出每科成績的平均分。
[8]
編一個程序,輸入一個短整型數據,輸出每位數字,其間用逗號分隔。例如輸入整數為2345,則輸出應為:2,3,4,5。
[9]
編一個程序,輸入一個字符串,將其中所有的大寫英文字母+3,小寫英文字母-3。然后再輸出加密后的字符串。
[10]
編一個程序,將按第9題中加密的字符串(從鍵盤輸入)解密后輸出。
?
[11]
輸入一行數字字符,請用數組元素坐位計數器來統計每個數字字符的個數。用下標為0的元素統計字符“1”的個數,下標為1的元素統計字符“2”的個數,....。
[12]
輸入若干有序數放在數組中,然后輸入一個數,插入到此有序數列中,插入后,數組中的數仍然有序。請對以下三種情況運行你的程序,以便驗證你的程序是否正確。
(1)插在最前???? (2)插在最后?????? (3)插在中間
參考答案
第一章? 概述
[1]
運行后在屏幕上顯示:A,\(換行)
第二章? 基本數據類型和運算
[1]
用sizeof運算符測定所用的C系統中各種類型數據的長度。運行后,得到以下結果:
????????? C語言各數據類型的長度為:
????????? short 2 bytes
????????? int 2 bytes
????????? char 1 bytes
????????? long 4 bytes
????????? float 4 bytes
????????? double 8 bytes
第三章? 順序、選擇和循環結構的程序設計
[1]
10,4,3
[2]
-1
[3]
852
[4]
a=1234,b=r,c=1234.567017
[5]
a=12,b=345.000000,c=6789.000000
[6]
a=12,b=345.000000,c=6789.000000
[7]
a=12345,b=678.000000,c=976.388000
[8]
input a b c:
?????? ABC=3
?????? a=123,b=45,c=6789
第四章? 數組
[1]
? 18
? 10
[2]
從鍵盤上輸入一個3×3矩陣,將其轉置后形成3×3矩陣輸出。
[3]
????? *****
?????? *****
???
??? *****
???
???? *****
???
????? *****
[4]?
將鍵盤上輸入的兩個3×3矩陣的對應元素相加后輸出。
?
?
編程
前三章
[1]
請編寫輸出以下圖案的程序,圖案的行數由輸入的值確定。
????????? A
???????? BBB
??????? CCCCC
?????? DDDDDDD
????? EEEEEEEEE
?
#include<stdio.h>
main()
{char ch;
?int i,j,p,t=1;
?scanf("%d",&p);
?for(i=1;i<=p;i++)
???? { for(j=(p-i);j>0;j--)putchar(' ');
?????? for(j=1;j<=t;j++)putchar('A'+i-1);
?????? printf("\n");
?????
?t=t+2;
???? }
}
[2]
請編寫程序,輸入一行數組字符(用EOF結束),每個數字字符的前后都有空格。請編程,把這一行中的數字轉換成一個整數。例如:若輸入2?? 4?? 8?? 3〈CR>? (<CR>表示回車)
則輸出整數:2483.
?
#include<stdio.h>
main()
{ char ch;
? while((ch=getchar())!=EOF)
???? if(ch!=' ')putchar(ch);
}
?
?[3]
編寫程序打印出以下形式的乘法九九表。
**? 乘法口訣? **
?????? (1)??? (2)?? (3)?? (4)?? (5)?? (6)?? (7)?? (8)?? (9)?
??????????????????????????????????????????????????????????
(1)???? 1????? 2???? 3???? 4???? 5???? 6???? 7???? 8???? 9
(2)???? 2????? 4???? 6???? 8??? 10??? 12??? 14??? 16??? 18
(3)???? 3????? 6???? 9??? 12?? ?15??? 18??? 21??? 24??? 27
(4)???? 4????? 8??? 12??? 16??? 20??? 24??? 28??? 32??? 36
(5)???? 5???? 10??? 15??? 20??? 25??? 30??? 35??? 40??? 45
(6)???? 6???? 12??? 18??? 24??? 30??? 36??? 42??? 48??? 54
(7)???? 7???? 14??? 21??? 28??? 35??? 42??? 49??? 56??? 63
(8)???? 8???? 16??? 24??? 32??? 40??? 48??? 56??? 64??? 72
(9)???? 9???? 18??? 27??? 36??? 45??? 54??? 63??? 72??? 81
??????????????????????????????????????????????????????????
[3]
#include <stdio.h>
main()
{ int i,j;
? printf("????????????? **乘法口訣**?????????? \n");
? for(i=1;i<=9;i++)printf("????? (%d) ",i);
? printf("\n");
? for(i=1;i<=9;i++)
? { printf("(%d)",i);
?????? for(j=1;j<=9;j++)
?????????? printf("%5d",i*j);
?????? printf("\n");
? }
}
?
第四章? 數組
?[1]
編程序,輸入單精度型一維數組a[10],計算并輸出a數組中所有元素的平均值。
?
#include <stdio.h>
main()
{int i;
?float a[10],f=0;
?for(i=0;i<=9;i++)
??? {scanf("%f",&a[i]);f=f+a[i];}
?printf("f=%f",f/10);
}
[2]
編程序,輸入10個整數存入一維數組,再按逆序重新存放后再輸出。
#include <stdio.h>
main()
?{int i,j,a[10],k;
? for(i=0;i<=9;i++) scanf("%d",&a[i]);
? for(i=0,j=9;i<=4;i++,j--)
??????? {k=a[i];a[i]=a[j];a[j]=k;}
? for(i=0;i<=9;i++) printf("%d",a[i]);
?}
[3]
編程序,輸入兩個字符串(<40個字符),連接后輸出(不準用系統函數)。
?
#include "string.h"
#include <stdio.h>
main()
?{int i,j,k;
? char str1[80],str2[40];
? scanf("%s",str1);
? scanf("%s",str2);
? k=strlen(str1);
? j=strlen(str2);
? for(i=0;i<=j;i++) str1[k+i]=str2[i];
? printf("%s",str1);
?}
[4]
編程序,按下列公式計算s的值(其中x1、x2、…、xn由鍵盤輸入):
??
s=(x1-x0)2+(x2-x0)2+.....+(xn-x0)2? (其中x0是x1、x2、…、xn的平均值)???????
#include <stdio.h>
#define? N 10
main()
?{int i;
? float s=0,x[N+1];
? x[0]=0;
? for(i=1;i<=N;i++)
??? {scanf("%f",&x[i]);x[0]=x[0]+x[i];}
? x[0]=x[0]/N;
? for(i=1;i<=N;i++) s=s+(x[i]-x[0])*(x[i]-x[0]);
? printf("%f",s);
?}
[5]
輸入一個3×5的整數矩陣(假設所有的數據互不相同),輸出其中最大值、最小值和它們的下標。
?
#include <stdio.h>
main()
?{int i,j,a[3][5],d,d1,d2,x,x1,x2;
? for(i=0;i<3;i++)
??? for(j=0;j<5;j++)scanf("%d",&a[i][j]);
? x=d=a[0][0];x1=x2=d1=d2=0;
? for(i=0;i<3;i++)
??? for(j=0;j<5;j++)
????? if(d<a[i][j]) {d=a[i][j];d1=i;d2=j;}
????? else if(x>a[i][j]) {x=a[i][j];x1=i;x2=j;}
? printf("max=%d,h=%d,l=%d\n",d,d1,d2);
? printf("min=%d,h=%d,l=%d\n",x,x1,x2);
?}
[6]
輸入一個字符串,將其中的所有大寫字母改為小寫字母,而所有小寫字母全部改為大寫字母,然后輸出。
#include <ctype.h>
#include <stdio.h>
main()
?{ char i,a[80];
?? scanf("%s",a);
?? for(i=0;i<strlen(a);i++)
??? if islower(a[i]) a[i]=a[i]-32;
??? else if isupper(a[i]) a[i]=a[i]+32;
?? printf("%s",a);
?}
[7]
設某班50名學生的三科成績表如下:
??????? 課程一??????? 課程二??????? 課程三
???????? …????????????? …??????????? …
??? 試編一個程序,輸入這50個學生的三科成績,計算并輸出每科成績的平均分。
#include <stdio.h>
#define? N 50
main()
?{int i,s[N][3];
? float s0=0,s1=0,s2=0;
? for(i=0;i<N;i++)
?? {?? scanf("%d,%d,%d",&s[i][0],&s[i][1],&s[i][2]);
?????? s0=s0+s[i][0]; s1=s1+s[i][1];s2=s2+s[i][2];
??? }
? s0=s0/N;s1=s1/N;s2=s2/N;
? printf("%f,%f,%f",s0,s1,s2);
?}
[8]
編一個程序,輸入一個短整型數據,輸出每位數字,其間用逗號分隔。例如輸入整數為2345,則輸出應為:2,3,4,5。
?
#include <stdio.h>
main()
?{short i=0,j,c[6];
?
?scanf("%d",&j);
? do{ c[i]=j%10;
????? i++;
????? j=j/10; }while(j!=0);
? for(--i;i>=0;i--)
???? { printf("%d",c[i]); if(i>0) printf(",");}
?}
[9]
編一個程序,輸入一個字符串,將其中所有的大寫英文字母+3,小寫英文字母-3。然后再輸出加密后的字符串。
#include <ctype.h>
#include<stdio.h>
main()
?{char i,a[80];
? scanf("%s",a);
? for(i=0;i<strlen(a);i++)
????? if (islower(a[i])) a[i]=a[i]-3;
?????????? else if (isupper(a[i])) a[i]=a[i]+3;
? printf("%s",a);
?}
[10]
編一個程序,將按第9題中加密的字符串(從鍵盤輸入)解密后輸出。
?
#include <stdio.h>
main()
?{char i,a[80];
? scanf("%s",a);
? for(i=0;i<strlen(a);i++)
????? if (a[i]>=94 && a[i]<=119) a[i]=a[i]+3;
?????????? else if (a[i]>=68 && a[i]<=93) a[i]=a[i]-3;
? printf("%s",a);
?}
[11]
輸入一行數字字符,請用數組元素坐位計數器來統計每個數字字符的個數。用下標為0的元素統計字符“1”的個數,下標為1的元素統計字符“2”的個數,....。
#include<stdio.h>
main()
{ int a[10]={0},i;
? char c;
? while((c=getchar())!='\n')
? if(c<='0'&&c<='9')
??? if(c=='0')a[9]++;
??? else? a[c-'1']++;
? for(i=0;i<=9;i++)printf("%d,",a[i]);
}
?
[12]
輸入若干有序數放在數組中,然后輸入一個數,插入到此有序數列中,插入后,數組中的數仍然有序。請對以下三種情況運行你的程序,以便驗證你的程序是否正確。
(1)插在最前???? (2)插在最后?????? (3)插在中間
[12]
#include<stdio.h>
main()
{ int a[10]={ -1,3,5,9,12,15,17,19,21 },x,p,i;
? scanf("%d",&x);
? for(i=0;i<10;i++)???????
??? if(a[i]>=x){p=i;break;}
??? else if(a[i]==-1) {p=i;break;}
??? else {p=9;break;}
? for(i=9;i>p;i--)?
???? a[i]=a[i-1];
???? a[p]=x;
? for(i=0;i<=9;i++)printf("%d,",a[i]);
}
?