① c語言程序設計第四版答案 第八章指針 課後3 。14 。15答案
//課後3
#include <stdio.h>
int main()
{ void input(int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number);
max_min_value(number);
output(number);
return 0;
}
void input(int *number)
{int i;
printf("input 10 numbers:");
for (i=0;i<10;i++)
scanf("%d",&number[i]);
}
void max_min_value(int *number)
{ int *max,*min,*p,temp;
max=min=number;
for (p=number+1;p<number+10;p++)
if (*p>*max) max=p;
else if (*p<*min) min=p;
temp=number[0];number[0]=*min;*min=temp;
if(max==number) max=min;
temp=number[9];number[9]=*max;*max=temp;
}
void output(int *number)
{int *p;
printf("Now,they are: ");
for (p=number;p<number+10;p++)
printf("%d ",*p);
printf("\n");
}
//課後14
#include <stdio.h>
int main()
{void sort (char *p,int m);
int i,n;
char *p,num[20];
printf("input n:");
scanf("%d",&n);
printf("please input these numbers:\n");
for (i=0;i<n;i++)
scanf("%d",&num[i]);
p=&num[0];
sort(p,n);
printf("Now,the sequence is:\n");
for (i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
return 0;
}
void sort (char *p,int m) // 將n個數逆序排列函數
{int i;
char temp, *p1,*p2;
for (i=0;i<m/2;i++)
{p1=p+i;
p2=p+(m-1-i);
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
//課後15
#include <stdio.h>
int main()
{void avsco(float *,float *);
void avcour1(char (*)[10],float *);
void fali2(char course[5][10],int num[],float *pscore,float aver[4]);
void good(char course[5][10],int num[4],float *pscore,float aver[4]);
int i,j,*pnum,num[4];
float score[4][5],aver[4],*pscore,*paver;
char course[5][10],(*pcourse)[10];
printf("input course:\n");
pcourse=course;
for (i=0;i<5;i++)
scanf("%s",course[i]);
printf("input NO. and scores:\n");
printf("NO.");
for (i=0;i<5;i++)
printf(",%s",course[i]);
printf("\n");
pscore=&score[0][0];
pnum=&num[0];
for (i=0;i<4;i++)
{scanf("%d",pnum+i);
for (j=0;j<5;j++)
scanf("%f",pscore+5*i+j);
}
paver=&aver[0];
printf("\n\n");
avsco(pscore,paver); // 求出每個學生的平均成績
avcour1(pcourse,pscore); // 求出第一門課的平均成績
printf("\n\n");
fali2(pcourse,pnum,pscore,paver); // 找出2門課不及格的學生
printf("\n\n");
good(pcourse,pnum,pscore,paver); // 找出成績好的學生
return 0;
}
void avsco(float *pscore,float *paver) // 求每個學生的平均成績的函數
{int i,j;
float sum,average;
for (i=0;i<4;i++)
{sum=0.0;
for (j=0;j<5;j++)
sum=sum+(*(pscore+5*i+j)); //累計每個學生的各科成績
average=sum/5; //計算平均成績
*(paver+i)=average;
}
}
void avcour1(char (*pcourse)[10],float *pscore) // 求第一課程的平均成績的函數
{int i;
float sum,average1;
sum=0.0;
for (i=0;i<4;i++)
sum=sum+(*(pscore+5*i)); //累計每個學生的得分
average1=sum/4; //計算平均成績
printf("course 1:%s average score:%7.2f\n",*pcourse,average1);
}
void fali2(char course[5][10],int num[],float *pscore,float aver[4])
// 找兩門以上課程不及格的學生的函數
{int i,j,k,labe1;
printf(" ==========Student who is fail in two courses======= \n");
printf("NO. ");
for (i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{labe1=0;
for (j=0;j<5;j++)
if (*(pscore+5*i+j)<60.0) labe1++;
if (labe1>=2)
{printf("%d",num[i]);
for (k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
void good(char course[5][10],int num[4],float *pscore,float aver[4])
// 找成績優秀學生(各門85以上或平均90分以上)的函數
{int i,j,k,n;
printf(" ======Students whose score is good======\n");
printf("NO. ");
for (i=0;i<5;i++)
printf("%11s",course[i]);
printf(" average\n");
for (i=0;i<4;i++)
{n=0;
for (j=0;j<5;j++)
if (*(pscore+5*i+j)>85.0) n++;
if ((n==5)||(aver[i]>=90))
{printf("%d",num[i]);
for (k=0;k<5;k++)
printf("%11.2f",*(pscore+5*i+k));
printf("%11.2f\n",aver[i]);
}
}
}
② 這個譚浩強C語言程序設計(第四版)文件那張例10.4的例子
#include<stdio.h>
#define SIZE 10
struct student_type
{
char name[10];
int num;
int age;
char addr[15];
}stud[SIZE]; //定義全局結構體數組,包含10個學生信息
void save()
{
FILE *fp;
int i;
if((fp=fopen("stu.dat","wb"))==NULL)
{
printf("無法打開文件\n");
return ;
}
for(i=0;i<SIZE;i++)
// { 你多加括弧了這里,for語句不能包含fclose(fp)函數。
if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1) //fwrite,fread 執行成功,則返回值為形參count的值
printf("文件寫入錯誤\n");
fclose(fp);
// } 這個也去掉。
}
int main()
{
int i;
printf("請輸入學生的數據:\n");
for(i=0;i<SIZE;i++)
scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
save();
return 0;
}
你for循環多加大括弧了,循環體包含多了,已幫你改正!
③ 一道C語言的題,C程序設計(第四版)第三章課後第八題。請高手回答~題如下:
#include <stdio.h>
int main()
{
char c1,c2;
while((c1=getchar())!=EOF)
{
while((c2=getchar())!='\鎮枝n'納頌)
{
continue;
}
putchar(c1);
putchar(c2);
}
return 0;
}
臨時洞旅鄭寫的 沒編譯 你自己試下
④ C語言:試述3種基本結構的特點,你能否自己另外設計兩種基本結構(要符合基本結構的特點)。
在c程序設計(第四版)的28頁,
多分支選擇結構,當型直到型結合循環結構
⑤ 譚永強 c語言程序設計(第四版) 第三章習題3 關於答案的問題
你用的是哪個版本的編譯器?
VS2005編譯毀唯會有衡山一個告警
warning C4305: 「咐余中初始化」: 從「double」到「float」截斷
⑥ 求《C語言程序設計》第四版,譚浩強編,清華大學出版社 課後習題答案
#include<stdio.h>
int main(){
fload a[3];
scanf("%f,%f,%f",&a[0],&a[1],&a[2]);
float temp;
if(a[0]>a[1]){
temp = a[0];
a[0] = a[1];
a[1] = temp;
}
if(a[1]>a[2]){
temp = a[1];
a[1] = a[2];
a[2] = temp;
}
if(a[0]>a[1]){
temp = a[0];
a[0] = a[1];
a[1] = temp;
}
print("%f %f %f \n", a[0],a[1],a[2]);
}
⑦ c語言程序設計 譚浩強第四版第三章課後題答案
第三章 部分答案
3.6寫出以下程序運行的結果。
main()
{char c1=』a』,c2=』b』,c3=』c』,c4=』\101』,c5=』\116』;
printf(「a%cb%c\tc%c\tabc\n」,c1,c2,c3);
printf(「\t\b%c %c」,c4,c5);
}
解:
aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc
AㄩN
3.7要將"China"譯成密碼,解碼規律是:用原來字母後面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E"."E"代替"A"。因此,"China"應譯為"Glmre"。請編一程序,用賦初值的方法使cl、c2、c3、c4、c5五個變數的值分別為,』C』、』h』、』i』、』n』、』a』,經過運算,使c1、c2、c3、c4、c5分別變為』G』、』l』、』m』、』r』、』e』,並輸出。
解:
#include <stdio.h>
main()
{ char c1=』C』,c2=』h』,c3=』i』,c4=』n』,c5=』a』;
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf("密碼是%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}
運行結果:
密碼是Glmre
3.9求下面算術表達式的值。
(1)x+a%3*(int)(x+y)%2/4
設x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
設a=2,b=3,x=3.5,y=2.5
(1)2.5
(2)3.5
3.10寫出程序運行的結果。
main()
{int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(「%d,%d,%d,%d」,i,j,m,n);
}
解:
9,11,9,10
3.12 寫出下面表達式運算後a的值,設原來a=12。設a和n都已定義為整型變數。
(1)a+=a (2) a-=2 (3) a*=2+3 (4)a/=a+a
(5) a%=(n%=2),n的值等於5
(6)a+=a-=a*=a
解:
(1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0
⑧ c程序設計第四版譚浩強程序案例里案例2 學生試卷統計的TXT發過來
(1)十進制數1385轉換成十六進制數為
A)568 B)569 C)D85 D)D55
(2)下列敘述中正確的是
A)計算機病毒只能傳染給可執行文件
B)計算機軟體是指存儲在軟盤中的程序
C)計算機每次啟動的過程之所以相同,是因為RAM中的所有信息在關機後不會丟失
D)硬碟雖然裝在主機箱內,但它屬於外存
(3)一個字長的二進制位數是
A)8 B)16
C)32 D)隨計算機系統而不同的
(4)CPU主要由運算器與控制器組成,下列說法中正確的是
A)運算器主要負責分析指令,並根據指令要求作相應的運算
B)控制器主要完成對數據的運算,包括算術運算和邏輯運算
C)控制器主要負責分析指令,並根據指令要求作相應的運算
D)控制器直接控制計算機系統的輸入與輸出操作
(5)下列敘述中正確的是
A)將數字信號變換成便於在模擬通信線路中傳輸的信號稱為調制
B)以原封不動的形式將來自終端的信息送入通信線路稱為調制解調
C)在計算機網路中,一種傳輸介質不能傳送多路信號
D)在計算機區域網中,只能共享軟體資源,而不能共享硬體資源
(6)各種網路傳輸介質
A)具有相同的傳輸速率和相同的傳輸距離
B)具有不同的傳輸速率和不同的傳輸距離
C)具有相同的傳輸速率和不同的傳輸距離
D)具有不同的傳輸速率和相同的傳輸距離
(7)多媒體計算機系統的兩大組成部分是
A)多媒體功能卡和多媒體主機
B)多媒體通信軟體和多媒體開發工具
C)多媒體輸入設備和多媒體輸出設備
D)多媒體計算機硬體系統和多媒體計算機軟體系統
(8)按通信距離劃分,計算機網路可以分為區域網和廣域網。下列網路中屬於區域網的是
A)Internet B)CERNET C)Novell D)CHINANET
(9)在Windows中,啟動應用程序的正確方法是
A)用滑鼠雙擊該應用程序圖標B)將該應用程序窗口最小化成圖標
C)將該應用程序窗口還原D)將滑鼠指向該應用程序圖標
(10)在Windows中,終止應用程序執行的正確方法是
A)用滑鼠雙擊應用程序窗口左上角的控制菜單框
B)將應用程序窗口最小化成圖標
C)用滑鼠雙擊應用程序窗口右上角的還原按鈕
D)用滑鼠雙擊應用程序窗口中的標題欄
(11)DOS控制鍵CtrlAltDel的功能為
A)刪除一個字元並退格B)暫停標准輸出設備的輸出
C)熱啟動D)終止當前操作
(12)設當前盤為C盤,為了將A盤當前目錄中所有擴展名為。PAS 的文件改成擴展名為。P,應使用的DOS命令為
A)REN A:*。PAS A:*。P B)REN A:*。PAS *。P
B)REN A:。PAS A:。P D)REN A:。PAS 。P
(13)設當前盤為C盤,其根目錄下有兩個子目錄D1與D2,且當前目錄為D1,若要進入子目錄D2,正確的DOS命令為
A)CD D2 B)CD D2、C)CD 、D2 D)CD D1、D2
(14)設當前盤為A盤,要將B盤當前目錄下的兩個文件A.TXT與X.TXT 連接後以文件名Y.TXT存放到A盤的當前目錄中,正確的DOS命令為
A)COPY A.TXTX.TXT A:Y.TXT B)COPY B:A.TXTX.TXT A:Y.TXT
B)COPY B:A.TXTB:X.TXT》Y.TXT D)COPY B:A.TXTB:X.TXT Y.TXT
(15)下列DOS命令中正確的是
A)REN 、USER、A.TXT 、B.TXT B)CD 、
C)TYPE *。TXT D)MD 、
(16)以下選項中屬於C語言的數據類型是
A)復數型B)邏輯型C)雙精度型D)集合型
(17)在C語言中,不正確的int類型的常數是
A)32768 B)0 C)037 D)0xAF
(18)語句:printf(「%d」,(a=2)&&(b=——2);的輸出結果是
A)無輸出B)結果不確定C)——1 D)1
(19)下列描述中不正確的是
A)字元型數組中可以存放字元串
B)可以對字元型數組進行整體輸入、輸出
C)可以對整型數組進行整體輸入、輸出
D)不能在賦值語句中通過賦值運算符「=」對字元型數組進行整體賦值
(20)設有如下定義:int x=l,y=——1;,則語句:printf(「%d、n」,(x——&y));的輸出結果是
A)1 B)0 C)——1 D)2
(21)當c的值不為0時,在下列選項中能正確將c的值賦給變數a、b的是
A)c=b=a;B)(a=c)‖(b=c);
C)(a=c)&&(b=c);C)a=c=b;
(22)以下程序的輸出結果是
A)10 1 9 2 B)9 8 7 6 C)10 9 9 0 D)10 10 9 1
main()
{int x=10,y=10,I;
for(i=0;x》8;y=i)
printf(「%d,%d 」,x——,y);
}
(23)以下程序的輸出結果是
A)5 2 B)5 1 C)5 3 D)9 7
main()
,*p=&x[1][1];
for(i=0;i《4;i=2)printf(「%d 」,p[i]);
}
(24)以下程序的輸出結果是
A)6 B)6789 C)'6'D)789
main()
,*p;
int i;
i=8;
p=aI;
printf(「%s、n」,p——3);
}
(25)以下程序的運行結果是
A)運行後報錯B)6 6 C)6 12 D)5 5
#include 「stdio.h」
main()
{
int a[]=;
int *p=a5,*q=NULL;
*q=*(p5);
printf(「%d %d 、n」,*p,*q);
}
(26)以下說法中正確的是
A)#define和printf都是C語句B)#define是C語句,而printf不是
C)printf是C語句,但#define不是D)#define和printf都不是C語句
(27)語句:printf(「%d 、n」,12 &012);的輸出結果是
A)12 B)8 C)6 D)012
(28)能正確表示a和b同時為正或同時為負的邏輯表達式是
A)(a》=0‖b》=0)&&(a《0‖b《0)
B)(a》=0&&b》=0)&&(a《0&&b《0)
C)(ab》0)&&(ab《=0)
D)a*b》0
(29)以下程序的輸出結果是
A)2 0 B)3 1 C)3 2 1 D)2 1 0
main()
{int n=4;
while(n——)printf(「%d 」,——n);
}
(30)若已定義:int a[9],*p=a;並在以後的語句中未改變p的值,不能表示a[1]地址的表達式是
A)p1 B)a1 C)aD)p
(31)以下程序的輸出結果是
A)17,021,0x11 B)17,17,17
B)17,0x11,021 D)17,21,11
main()
{int k=17;
printf(「%d,%o,%x 、n」,k,k,k);
}
(32)以下程序的輸出結果是
A)——1 1 B)0 1 C)1 0 D)0 0
main()
{int a=——1,b=1,k;
if((a《0)&&!(b——《=0))
printf(「%d %d、n」,a,b);
else
printf(「%d %d、n」,b,a);
}
(33)若有說明:long *p,a;則不能通過scanf語句正確給輸入項讀入數據的程序段是
A)*p=&a;scanf(「%ld」,p);
B)p=(long *)malloc(8);scanf(「%ld」,p);
C)scanf(「%ld」,p=&a);
D)scanf(「%ld」,&a);
(34)以下選項中,能定義s為合法的結構體變數的是
A)typedef struct abc B)struct
{double a;{double a;
char b[10];char b[10];
}s;}s;
C)struct ABC D)typedef ABC
{double a;{double a;
char b[10];char b[10];
}}
ABC s;ABC s;
(35)若有以下的說明和語句,則在執行for語句後,*(*(ptl)2)表示的數組元素是
A)t[2][0]B)t[2][2]C)t[l][2]D)t[2][l]
int t[3][3],*pt([3],k;
for (k=0;k《3;k)pt[k]=&t[k][0];
(36)下面程序把數組元素中的最大值放入a[0]中。則在if 語句中的條件表達式應該是
A)p》a B)*p》a[0]C)*p》*a[0]D)*p[0]》*a[0]
main()
,*p=a,I;
for(i=o;i《10;i,p)
if(________)*a=*p;
printf(「%d」,*a);
}
(37)以下程序的輸出結果是
A)ihgfedcba B)abcdefghi C)abcdedeba D)ihgfefghi
#include
main()
{char *a=「abcdefghi」;int k;
fun(a);puts(a);
}
fun(char *s)
{int x,y;char c;
for(x=0,y=strlen(s)——1;x0)fun(k——1);
printf(「%d」,k);
}
(42)以下程序的輸出結果是
A)6 9 9 B)6 6 9 C)6 15 15 D)6 6 15
int d=1;
fun(int p)
{static int d=5;
d=p;
printf(「%d 」,d);
return(d);
}
main()
(43)以下程序的輸出結果是
A)123456780 B)123 456 780 C)12345678 D)147
main()
,*p[3];int i;
for(i=0;i《3;i)p[i]=ch[i];
for(i=0;i《3;i)printf(「%s」,p[i]);
}
(44)以下程序的輸出結果是
A)1 B)4 C)7 D)5
#include
int a[3][3]=,*p;
main()
{p=(int*)malloc(sizeof(int));
f(p,a);
printf(「%d 、n」,*p);
}
f(int *s,int p[][3])
(45)以下程序的輸出結果是
A)9 B)6 C)36 D)18
#define f(x)x*x
main()
{int a=6,b=2,c;
c=f(a)/f(b);
printf(「%d 、n」,c);
}
(46)以下程序的輸出結果是
A)4 2 1 1 B)0 0 0 8 C)4 6 7 8 D)8 8 8 8
main()
,k,i;
for(k=0;s[k];k)
{switch(s[k])
{case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;
}
v[i];
}
for(k=0;k《4;k)printf(「%d 」,v[k]);
}
(47)以下程序的輸出結果是
A)AfghdEFG B)Abfhd C)Afghd D)Afgd
#include
main()
{char *p1,*p2,str[50]=「ABCDEFG」;
p1=「abcd」;p2=「efgh」;
strcpy(str1,p21);strcpy(str3,p13);
printf(「%s」,str);
}
(48)以下程序的輸出結果是
A)#*#*#B)#####C)*****D)*#*#*
main()
{int i;
for(i=1;i《6;i)
printf(「*」);
}
printf(「、n」);
}
(49)若有以下定義和語句:
double r=99,*p=&r;
*p=r;
則以下正確的敘述是
A)以下兩處的*p含義相同,都說明給指針變數p賦值
B)在「double r=99,*p=&r;」中,把r的地址賦值給了p所指的存儲單元
C)語句「*p=r;」把變數r的值賦給指針變數p
D)語句「*p=r;」取變數r的值放回r中
(50)以下程序的輸出結果是
A)編譯不通過,無輸出B)aceg
C)acegi D)abcdefghi
main()
{int i;
for(i='A';i《'I';i,i)printf(「%c」,i32);
printf(「、n」);
}
二、填空題(每空2分,共40分)
請將每空的正確答案寫在答題卡____1_____至___20_____序號的橫線上,答在試卷上不得分。
(1)DOS命令分為內部命令與外部命令,PATH命令是____1____命令。
(2)設當前盤為A盤,當前目錄為、X、Y,A盤上的一個文件QR.C 在當前目錄下的子目錄W中。現已將A盤的當前目錄改為、D、XY,當前盤改為C盤,如果需指定A盤上的該文件應寫成____2____。
(3)為了得到XCOPY命令的在線幫助,可使用的DOS命令文件一為____3____。
(4)在DOS系統下,代表鍵盤與顯示器的設備文件名為____4____。
(5)在DOS系統下,可以直接執行的文件的擴展名除。FXE外,還有兩個是____5____。
(6)若想通過以下輸入語句使a=5.0,b=4,c=3,則輸入數據的形式應該是____6____。
。
。
。
int b,c;float a;
scanf(「%f,%d,c=%d」,&a,&b,&c);
。
。
。
(7)下列程序的輸出結果是_____7____。
#include
main()
{char b[30],*chp;
strcpy(&b[0],「CH」);
strcpy(&b[1],「DEF」);
strcpy(&b[2],「ABC」);
printf(「%s 、n」,b);
}
(8)下列程序的輸出結果是____8____。
int t(int x,int y,int cp,int dp)
{cp=x*xy*y;
dp=x*x——y*y;
}
main()
{int a=4,b=3,c=5,d=6;
t(a,b,c,d);
printf(「%d %d 、n」,c,d);
}
(9)下列程序中字元串中各單詞之間有一個空格,則程序的輸出結果是____9____。
#include
main()
{char strl[]=「How do you do」,*p1=strl;
strcpy(strlstrlen(strl)/2,「es she」);
printf(「%s 、n」,pl);
}
(10)以下程序的功能是:從鍵盤上輸入若干個學生的成績,統計計算出平均成績,並輸出低於平均分的學生成績,用輸入負數結束輸入。請填空。
main()
{float x[1000],sum=0.0,ave,a;
int n=0,i;
printf(「Enter mark:、n」);scanf(「%f」,&a);
while(a》=0.0&&n《1000)
{sum____10____;x[n]=_____11____;
n;scanf(「%f」,&a);
}
ave=____12____;
printf(「Output:、n」);
printf(「ave=%f、n」,ave);
for(i=0;i
main()
{FILE *fp;
char ch,fname[32];int count=0;
printf(「Input the filename :」);scanf(「%s」,fname);
if((fp=fopen(____16____,「w」))==NULL)
printf(「Enter data:、n」);
while((ch=getchar())!=「#」)
fprintf(____17____,「、n%d、n」,count);
fclose(fp);
}
(13)以下函數creatlist用來建立一個帶頭節點的單鏈表,鏈表的結構如下圖所示,新的結點總是插入在鏈表的末尾。鏈表的頭指針作為函數值返回,鏈表最後一個節點的next域放入NULL,作為鏈表結束標志。data為字元型數據域,next為指針域。讀入時字元以#表示輸入結束(#不存入鏈表)。請填空。
struct node
{char data;
struct node *next;
};
。
。
。
_____18_____ creatlist()
{struct node *h,*s,*r;char ch;
h=(struct node *)malloc(sizeof(struct node));
r=h;
ch=getchar();
{s=(struct node *)malloc(sizeof(struct node));
s——》data=____19____;
r——》next=s;r=s;
ch=getchar();}
r——》next=____20_____;
return h;
}
希望對你有幫助!
另外,團IDC網上有許多產品團購,便宜有口碑