一、阅读程序
1.
#include<stdio.h> int z=1; void p(int *x,int y){ ++(*x); y=y-1; z=*x+y+z printf("%d,%d,%d",*x,y,z); } void main(){ int x=1,y=5,z=9; p(&x,y); printf("%d,%d,%d",x,y,z); }
答案:2,4,7 2,5,9
解析:先运行main函数,x=1,y=5,z=1;
x=1+1=2,y=5-1=4,z=2+4+1=7;所以输出2,4,7
x=1,x=5,x=9,p(&x,y),p()是一个函数,该函数的第一个参数是一个指针,第二个参数是一个数值。y的值和它调用函数p()之前的值还是一个样。
x=2,y=5,z=9
2.
#include<stdio.h> void main{ int i,j,row=0,column=0,max; int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,5,2}}; max=a[0][0]; for(i=1;i<3;i++) for(j=0;j<2;j++){ if a[i][j]>max{ max=a[i][j]; row=i;column=j; } } printf("max=%d,row=%d,column=%d\n",max,row,column); }
答案:max=10,row=2,column=1
解析:二维数组a[3][4]表示有3行和4列,在该数组中最大的数值是10。
i<3,j<2,row=i,column=j,所以row=2,column=1。
3.
#include<stdio.h> int main(){ int i,m=0,n=0,k=0; for(i=9;i<=11;i++) switch(i/10){ case 0:m++;n++; case 10;n++;break; default:k++;n++; } printf("%d,%d,%d\n",m,n,k); return 0 }
答案:1 4 2
解析:9/10=0,m=0+1=1,k=0+1=1,n=0+1=1;
10/10=1
4.
#include<stdio.h> int f(int m){ static int k=2;k++; return k+m; } void main(){ int s,x=2;s=f(2); printf("%d,%d\n",s,f(s)); }
答案:5.9
解析:s=2时,m=2,k=2+1=3,so s=f(2)=5,f(s)=3+1+5=9
5.
#include<stdio.h> int main(){ int a=1,b=0; if(a=b){ b++; } else if(a=0){ b+=2; }else{ b+=3; } printf("%d\n",b); return 0; }
答案:3
二、空白处填写正确语句
用选择法对10个浮点数按从小到大排序。
#include<stdio.h> int main(){ int i,j,min; float temp,a[10]; printf("enter data:\n"); for(i=0;i<10,i++){ scanf("%f",&a[i]); } for(i=0;i<0;i++){ min=i; } for (j=j+1;j<10;j++){ if (a[min]>a[j]){ min=j; } } temp=a[min]; a[min]=a[j]; a[i]=temp; printf("\n the sorted numbers:in"); for(i=0;i<10;i++) printf("%6.2f",a[i]); printf("\n"); return 0;}
三、编程题
1.对输入的两个整数按大小顺序输出。用函数处理,而且用指针类型的数据作函数参数。
#include<stdio.h> void swap(int *x,int *y){ int t; if(*x<*y){ t=*x; *x=*y; *y=t; } } void main(){ int a,b,*p1,*p2; scanf("%d&d\n",&a,&b); p1=&a; p2=&b; swap("%d%d\n",a,b); }
2.在主函数中用gets()输入一个字符串,调用自定义函数replace()将其中所有的her替换成she,最后在主函数中输出结果,若输入的字符串中不包含her,应输出相应的提示。
#include<stdio.h> #include<string.h> void replace(char a[]){ int i; for(i=0;i<strlen(a);i++) if a[i]='h'&&a[i+1]='e'&&a[i+2]='r';{ a[i]='s'; a[i+1]='h'; a[i+2]='e'; } else return 1 } void main(){ char a[100];b=[100]={0}; get(a);strcpy(b,a); replace(a); if(strcpy(a,b)==) print("null"); else{ printf("%d\n",a); return 0; } }
3.请编写程序完成两个矩阵相乘。要求A是x行y列的矩阵,B是y行z列的矩阵,结果A*B。
#include<stdio.h> #define row 4 #define col 3 void mat_mub(const int a[4][3],const int b[3][4],int c[3][3]){ int i,j,k; for(i=0;i<3;i++){ c[i][j]=0; for(k=0;k<4;k++){ c[i][j]=b[i][k]*a[k][j]; } } }} int main(void) { int i,j; int a[clo][cow]; int b[cow][clo]; int c[cow][cow]; mat_mub(a,b,c); printf("显示数组C中的元素:\n"); for(i=0;i<clo;i++) { for(j=0;j<clo;j++) { printf("C[%d][%d]=%d\n",i,j,c[i][j]); } } return 0; }
4.节点结构体定义如下:
Struct NODE{
NODE *link;
int value;}Node;
请编写两个函数Node*create()和int count_nodes(Node *root)。其函数功能分别为创建一个单向链表、统计单向链表的节点个数。
#include<stdio.h> #include<stdio.h> #define len sizeof(struct NODE) struct NODE{ NODE*link; int value; }Node; int n; int main(){ int num; struct NODE Node* Create(); int Count_nodes(Node *root); struct NODE *head; struct NODE *p1,*p2; n=0; p1=p2(struct NODE*)malloc(LEN); scanf("%d",&p1->value); head=null; while(p1->Value!=0){ n=n+1; if(n==1)head=p1; else p2->link=p1; p2=p1; p1=(struct NODE*)malloc(LEN); scanf("%d",&p1->Value); } p2->link=null; return(head);} int count_nodes(Node*root){ int num; struct NODE *p; p=head; num=0; if(p!=null) do{ ++num; p=p->link; } while(p!=null return(num); }
5.请编写一个程序实现图书信息管理的功能
要求:(1)能够插入每个图书的书号、书名、出版日期、出版社和简介;
(2)能够显示每本书的相关信息。
#include<stdio.h> struct book{ char num[10]; char name[10]; long Date[10]; char ed[10]; char in[20]; }book[s]; int main(){ int i,Char ch[10]; for(i=0,Char ch[10]){ print("书名"); scanf("%s"&book[i].num); printf("图书列表"); printf("书名简介"); for(i=0;i<5,i++) printf("%s%5s%5d%5s%5s\n",book[i].num,"书","名","简","介"); return 0; } }