导航:首页 > 源码编译 > 算法对换字符使第一行包含第二行

算法对换字符使第一行包含第二行

发布时间:2022-04-27 13:58:00

① 2010计算机二级c语言上机题库 要原题的 急急急 在线等

一、改错题
【分析】:改错题的错误一般可分为两类,一类是语法错误,这类错误可通过调试程序改正,较容易;另一类是逻辑错误,这类错误程序能运行,但结果不正确,这类错误相对较难,修改前必须要看懂和理解程序。
#include"stdio.h"
#define n 4 #define m 3 /*语法错,#define m 3需另起一行*/
int a[n][m],s[m];
p(int j)/*此函数的功能为:找出a数组中第j列的最小元素的值及行号,函数成功运行后,i中即为j列的最小元素的行号,s[j]中即为j列的最小元素的值*/
{int k,i,x;
x=a[0][j];i=0; /*逻辑错,从函数的功能可知,a[0][j]也应赋值给s[j],所以x=a[0][j]应改为s[j]=x=a[0][j]*/
for(k=1;k<N;K++)< p>
if(a[k][j]<X)< p>
{i=k;s[j]=x=a[k][j];}
return i;
}
main()
{int index[m],i,j,k;
for(i=0;i<N;I++)< p>
for(j=0;j<M;J++)< p>
scanf("%d",a[i][j]);/*语法错,但编译时不会报错,scanf语句的一般形式为scanf(格式控制,地址表列),所以a[i][j]应改为&a[i][j])*/
for(j=0,j<M;J++)< p>
{index[j]=p[j];
printf("a[%d,%d]=%d\n",index[j],j,s[j]);
}
i=s[1];k=0; /*逻辑错,数组s中存放的是a数组中每一列的最小值,比较时应从数组的第0个元素开始,而下面的for循环是从第1个元素开始的,所以i=s[1]应改为i=s[0]*/
for(j=1;j<>
if(s[j]<I)< p>
{i=s[j];k=j;}
printf("min=a[%d,%d]=%d",index[k],k,i); }
二、编程
【分析】:本题的主要功能是建立一个3行8列的二维数组,并给其元素赋值,其中第1、2行的值可通过递推公式xi+1=(25*xi+357)%1024得到,第三行的值取前两行同列元素的最大公约数,所以编程时可用一个函数来实现求公约数的算法
#include
#include
#define n 8
/*函数gcd实现求最大公约数的算法*/
gcd(int a,int b)
{int c;
while(b!=0)
{c=a%b;a=b;b=c;}
return a;
}
main()
{int i,j,x,a[3][n];
FILE *f;
if((f=fopen("d:\\temp\\1\\myf2.out","w"))= =NULL)
{printf("Create File myf2.out Failed!\n");exit(0);}
x=26;
/*下面二重for循环实现给第1、2行数组元素赋值的功能*/
for(i=0;i<2;i++)
for(j=0;j<N;J++)< p>
{a[i][j]=x;x=(25*x+357)%1024;}
/*下面for循环通过调用gcd函数实现给第3行数组元素赋值的功能*/
for(j=0;j<N;J++)< p>
a[2][j]=gcd(a[0][j],a[1][j]);
/*下面for循环实现按题目所给格式输出二维数组的功能*/
for(i=0;i<3;i++)
{for(j=0;j<>
fprintf(f,"\n");
}
fclose(f); }
2010年计算机等级考试二级C语言上机习题(2)
一、改错题
【知识点】整数数位处理、数字字符与相应数字的转换、程序调式
【解析】程序中的错误一般可以分为两类,一类是语法错误,即程序中有拼写错误,书写不符合C语言的规定等,此类错误可通过调试(按F9键),根据提示进行改正。另一类是逻辑错误,程序调试已通过(报success),但运行结果不正确,此类错误的修改必须要理解程序后方能改正。
使用putchar函数必须在程序开头加上文件包含#include "stdio.h";scanf语句中必须是地址序列,故scanf("num=%d",num);应改为scanf("num=%d",&num);,且调式时注意将“num=”原样输入;某数字若转换为相应数字字符,应加上字符'0'或48(字符'0'的ASCII码值),故digit[n++]=m%10;应改为digit[n++]=m%10+'0';;最后输出时,n已在前面多加了一次,故而输出时应先减1,故for(;n>=0;n--)中第一个表达式应加上n--或--n或n=n-1。
【答案】①在程序开头加上#include "stdio.h"
②将原第五行的scanf("num=%d",num);改为scanf("num=%d",&num);
③将原第十一行的digit[n++]=m%10;改为digit[n++]=m%10+'0';
④将原第十六行的for(;n>=0;n--)改为for(n--;n>=0;n--)
二、编程题
【知识点】字符串应用、数据文件的使用
【解析】注意,按要求必须调用函数,且使用数据文件完成输出。使用数据文件有5大步骤:①#include ,②用FILE *定义指针,③用fopen("A:\\myf2.out","w")打开文件并赋值给指针,④用fprintf输出结果,⑤用fclose关闭文件。
【注意】fopen("A:\\myf2.out","w")中盘符A:后要加双斜杠表示根目录,因为C语言用转义字符'\\'才能表达字符\;另外,文件的命名一定要严格按照规定处理,千万不要随便命名。
【参考答案】
#include "stdio.h"
int compress(char s[])
{int n,k=0,count=0;
if(s[0]!=NULL) n=k+1;
while(s[n]!=NULL)
{if(s[k]= =s[n]){n++;count++;}
else {s[++k]=s[n];n++;}
}
s[++k]='\0';
return count;
}
main()
{char num[100];
int count=0;
FILE *fp;
fp=fopen("A:\\myf2.out","w");
gets(num);
count=compress(num);
fprintf(fp,"%s",num);
printf("%d",count);
fclose(fp); }
运行结果如下:
@ I wil sucesful & and you to ! #
2010年计算机等级考试二级C语言上机习题(3)
一、改错题
【知识点】选择法排序、指针与字符串、程序的调试
【解析】程序中的错误一般可以分为两类,一类是语法错误,即程序中有拼写错误,书写不符合C语言的规定等,此类错误可通过调试(按F9键),根据提示进行改正。另一类是逻辑错误,程序调试已通过(报success),但运行结果不正确,此类错误的修改必须要理解程序后方能改正。
本题要求“从键盘上接受一个含有空格的字符串”,scanf是做不到的,它遇到第一个空格即认为读入完毕,故应替换成gets函数;程序中使用了strcpy函数,就必须在程序开头加上文件包含#include "string.h";根据选择法升序排序要领,每次找到一个“更小的字符”由r指着,直到指向最小的为止,而不是修改r所指字符的值,故if(*r>*q)*r=*q;应改为if(*r>*q) r=q;;当r与p所指不同时,交换二者所指字符的值,即使得p所指字符为每次的最小,故应将if(r/=p)改为if(r!=p)。
【答案】①在程序开头加上文件包含#include "string.h"
②将原第五行的scanf("%s",str);改为gets(str);
③将原第八行的*r=*q; 改为r=q;
④将原第九行的if(r/=p)改为if(r!=p)
二、编程题
【知识点】二维数组的应用、数据文件的使用
【解析】 关于“二维数组应用”的题目,一般都要仔细观察,找出规律后再编程。本题中原数组的任意一个元素a[i][j]旋转后,位置处于b中第3-j行i列。注意,按要求必须调用函数,且使用数据文件完成输出。使用数据文件有5大步骤:①#include ,②用FILE *定义指针,③用fopen("A:\\myf2.out","w")打开文件并赋值给指针,④用fprintf输出结果,⑤用fclose关闭文件。
【注意】fopen("A:\\myf2.out","w")中盘符A:后要加双斜杠表示根目录,因为C语言用转义字符'\\'才能表达字符\;另外,文件的命名一定要严格按照规定处理,千万不要随便命名。
【参考答案】
#include "stdio.h"
int rotate(int a[4][4],int b[4][4]);
main()
{FILE *fp;
int i,j,x[4][4],y[4][4],s;
fp=fopen("A:\\myf2.out","w");
if(fp= =NULL){printf("Can't create file myf2.out!");
exit(1);}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&x[i][j]);
s=rotate(x,y);
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
fprintf(fp,"%d ",y[i][j]);
fprintf(fp,"\n");
}
fprintf(fp,"sum=%d\n",s);
fclose(fp);
}
int rotate(int a[4][4],int b[4][4])
{int i,j,s=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
b[3-j][i]=a[i][j];
for(i=0;i<4;i++) s+=b[i][i];
return s; }
2010年计算机等级考试二级C语言上机习题(4)
一、改错题
含有错误的源程序如下:
void match(char *pat,char str) ①
{char *p=pat,*q=str;
int i=0; ②
while((*p!=NULL)&&(*q!=NULL))
if(*p= =*q||*p= ='?')p++,q++;
else if(*p= ='*')
{p++;
while(*q!=*p&&*q!=NULL)q++;
}
else i=0;break; ③
if(*p!=NULL||*q!=NULL)i=0;
return i;
}
}
【知识点】字符串处理、程序的调试
【解析】程序中的错误一般可以分为两类,一类是语法错误,即程序中有拼写错误,书写不符合C语言的规定等,此类错误可通过调试(按F9键),根据提示进行改正。另一类是逻辑错误,程序调试已通过(报Success),但运行结果不正确,此类错误的修改必须要理解程序后方能改正。
程序中用到系统预设的符号常量NULL,又未加“文件包含”处理,按F9后即编译时系统会报错,故应在最前面加上include 或将以下全部NULL改为0。函数match分明有返回值,故系统也会报错,应将void改为int;变量i的作用是:当匹配时取值1,否则取值0,根据③处,易于发现i初值应取1,故②处应改为i=1,当发现不匹配时,立即置为0,并跳出循环,此两句应是一个整体,应构成复合语句。②③均为逻辑错误。
【答案】(1)在最前面加上include 或将以下全部NULL改为0
(2)加下划线的部分改为:
①int match(char *pat, char *str)
②i=1
③{ i=0;break;}
二、编程题
【知识点】穷举法、数据文件的使用
【解析】将30~50之间的每一个数都进行判断,就不会有遗漏。注意,按要求必须调用函数,且使用数据文件完成输出。使用数据文件有5大步骤:①#include ,②用FILE *定义指针,③用fopen("A:\\myf2.out","w")打开文件并赋值给指针,④用fprintf输出结果,⑤用fclose关闭文件。
【注意】fopen("A:\\myf2.out","w")中盘符A:后要加双斜杠表示根目录,因为C语言用转义字符'\\'才能表达字符\;另外,文件的命名一定要严格按照规定处理,千万不要随便命名。
【参考答案】
#include
int inv(int x)
{int y;
y=x/10+x%10*10; /*此句可将某两位正整数的十位与个位数字换位*/
return y;
}
main()
{FILE *out;
int i,j;
if((out=fopen("A:\\myf2.out","w"))= =NULL)
{printf("Open file myf2.out failed!\n");exit(1);}
for(i=30;i<50;i++)
for(j=30;j<50;j++)
if((i/10!=i%10)&&(i*j= =inv(i)*inv(j))) /* i/10!=i%10确保十位与个位数字不同*/
fprintf(out,"%d*%d=%d*%d\n",i,j,inv(i),inv(j));
fclose(out); }
2010年计算机等级考试二级C语言上机习题(5)
一、改错题
【分析】:对于改错题的程序中的错误一般可分为两类,一类是语法错误,程序中的语句不符合C语言的语法,拼写错误,这类的错误可通过调试程序改正。另一类是逻辑错误,程序调试已通过,但运行结果不正确,这类错误的修改必须要看懂和理解程序。
#include
#define N 50
void sum(int n,int *pa)
/*属第一类错误。若声明为void类型,则该函数没有返回值,但程序要求返回前n的和,所以类型声明不正确,应改为: int 或去掉*/
{ int count, total,temp;
*pa=3;*++pa=2;
total=5; count=2;
while(count++<N)< p>
{ temp=*(pa-1)**pa;
if(temp<10)
{ total+=temp; *(++pa)=temp;
}
else
{*++pa=temp/10;
total+=*pa;
if(count
/*属第二类错误。若乘积为两位数,已把其十位数字作为数列的后续项,但若数列的个数没有超过n时,将该乘积个位数字作为数列的后续项。*++pa 与*pa++不同,此处应为: *++pa */
}
}
return total;
}
main()
{ int tol,n,i,num[n];
/*属第一类错误。数组的声明不正确,数组的下标必须为常量或常量标识符。应改为:num[N] 或 num[50] */
do
{ printf("Input n=?(2<N<50)");< p>
scanf("%d",&n);
}while(n<=2||n>=50);
tol=sum(N,num);
/*属第二类错误。本题要求生成数列的前n(n<50)项,而N是常量。应改为:sum(n,num) */
for(i=0;i<N;I++)< p>
printf((i+1)%5?"%5d":"%5d\n",num[i]);
printf("\n");
printf("%d",tol);
}
2010年计算机等级考试二级C语言上机习题(6)
一、改错题
含有错误的源程序:
#include
#include
#define N 5
struct student
{ char name[10];
int score;
} ―――――――――――①
void sort(struct student stud[],int n)
{ int i,j;
struct student p;
for(i=1;i<>
{ p=stud[i];
for(j=i-1;j>0 && p>stud[j];j--) ―――――――――――③
stud[j+1]=stud[j];
stud[j+1]=p;
}
}
void main()
{ struct student stud[N]={"aaa",60,"bbb",90,"ccc",85,"ddd",65,"yyy",77};
int i;
sort(stud,N);
printf("sorted data:\n");
for(i=0;i< printf(?%s\t%d\n?,stud[i]);>
}
【知识点】结构体、排序
【难点】 插入法排序
【解析】本题是将未排序的数组元素采用插入排序方法进行排序,其思想是:从第2个元素开始,最初与第一个元素进行比较,由大到小排列在适当位置,成为排好序的数组元素一员。再依次将待排序的元素与前面已排好序的元素从后向前进行比较,如果大于该元素,则该元素向后移一位,直到待排序的元素小于已排好序的某一元素,则直接插入到该元素之后。直到待排序的元素全部完成为止。本程序的sort函数中i表示待排序的元素下标,j表示已排好序的元素下标。
【答案】(1)标号①:} 改为 }; (2)标号②:for(i=1;i
(3)标号③:for(j=i-1;j>0 && p>stud[j];j--) 改为 j>=0 && p.score>stud[j].score;j--)
(4) 标号④:printf("%s\t%d\n",stud[i]); 改为printf("%s\t%d\n",stud[i].name,stud[i].score );
二、编程题
【知识点】字符串操作、函数、文件
【解析】仔细阅读并分析【编程要求】。【编程要求1】已对函数Replace_string指定了函数名、函数类型、形参类型和个数,并详细说明了其功能。在line指向的字符串中查找str1指向的字符子串的关键语句是当“str1[j]= =line[loc]&&str1[j]!='\0'”时继续循环查找,当 因“str1[j]!='\0'”退出循环时,则找到str1指向的字符子串,此时用str2指向的字符串替换在line中的str1字符子串,返回。【编程要求2】编写主函数主要功能要求是保存结果到数据文件、调用Replace_string函数、输入测试数据。这部分是最常规和基本的要求,必须掌握。
【参考答案】
#include
#include
int Replace_string (char line[],char str1[],char str2[])
{ int i=0,j,loc;
char temp[80];
while(i<=strlen(line)-strlen(str2))
{ j=0;loc=i;
while(str1[j]= =line[loc]&&str1[j]!='\0')
{ loc++;j++;}
if(str1[j]= ='\0')
{strcpy(temp,&line[loc]);strcpy(&line[i],str2);
i+=strlen(str2);strcpy(&line[loc],temp);
return 1;
}
else i++;
}
return 0;
}
main()
{ FILE *fp;
char string[100]="My EXAM_number is 0112404321.";
char number[11]="0112404321",num[11];
fp=fopen("myf2.out","w");
fprintf(fp,"%s\n",string);
gets(num);
Replace_string (string,number,num);
fprintf(fp,"%s\n",string);
fprintf(fp,"\n my exam number is: %s\n","0112404321");
fclose(fp); }
2010年计算机等级考试二级C语言上机习题(7)
一、改错题
含有错误的源程序如下:
#include
#include
struct T
{char name [20],num[20];
};
void sort(struct T items[],int low,int high)
{struct T temp;
int k,j;
for(k=low;k<HIGH;K++)< p>
for(j=low;j<>
if(items[j].name>items[j+1].name) ②
{temp=items[j];items[j]=items[j+1];items[j+1]=temp;}
}
void main(void)
{struct T stu[4]={"Wang","6723","Cai","2106","Zhang", ③
"5129","Chang","4512","An","6868"};
int k;
sort(stu,0,4);
printf("The Sorted Array:\n");
for(k=0;k<5;k++)
printf("name:%s,num:%s\n",stu[k]->name,stu[k]->num); ④
}
【知识点】冒泡排序、结构体数组、程序的调试
【解析】程序中的错误一般可以分为两类,一类是语法错误,即程序中有拼写错误,书写不符合C语言的规定等,此类错误可通过调试(按F9键),根据提示进行改正。另一类是逻辑错误,程序调试已通过(报success),但运行结果不正确,此类错误的修改必须要理解程序后方能改正。
本题使用起泡法完成排序,①处j<HIGH-K-1等价与J<=HIGH-K-2,J最大取HIGH-K-2时,J+1才取到HIGH-K-1,例如,刚开始当K为0时,最后一个比较的元素下标为HIGH-1,而实际上根据实参(值已为4)传递而来的最后一个元素的下标应为HIGH,故①处应改为J<HIGH-K或J<=HIGH-K-1,此为逻辑错误。②③④处均属于语法错误:字符串的比较不能使用关系运算符,要借助STRCMP函数;所赋值有5个,数组维数就必须大于等于5;STU[K]不是指针,不能用指向成员符描述成员。< p>
【答案】加下划线的部分改为:
①j<HIGH-K或J<=HIGH-K-1< p>
②if(strcmp(items[j].name, items[j+1].name)>0)
③stu[5]
④stu[k].name, stu[k].num
2010年计算机等级考试二级C语言上机习题(7)
二、编程题
【知识点】字符串处理、函数调用、数据文件的使用
【解析】编程题的结果一般都是客观的,这样便于老师主观阅卷评分,虽然考生个人的准考证号是各异的,对评阅老师却是可以通过所交磁盘标签直接观察到,故必须如实输入,不能直接套用题中例子。注意,按要求必须调用函数,且使用数据文件完成输出。使用数据文件有5大步骤:①#include ,②用FILE *定义指针,③用fopen("A:\\myf2.out","w")打开文件并赋值给指针,④用fprintf输出结果,⑤用fclose关闭文件。
【注意】fopen("A:\\myf2.out","w")中盘符A:后要加双斜杠表示根目录,因为C语言用转义字符'\\'才能表达字符\;另外,文件的命名一定要严格按照规定处理,千万不要随便命名。
【参考答案】
#include
#include
#include
void count(char a[],char w[][10],int n,int b[])
{int i=0,j,k=0;char s[10];
for(i=0;a[i]!=0;i++)
{if(isalpha(a[i]))s[k++]=a[i]; /* isalpha函数用于判断字符是否为字母*/
/*此句将连续字母组成的一个单词存放于s中,便于与二维数组中的某一行进行比较*/
else
{s[k]= '\0'; /*加上'\0'才能使s中存放的是字符串,才能使用strcmp函数进行比较*/
for(j=0;j<N;J++)< p>
if(strcmp(s,w[j])= =0){b[j]++;break;}
k=0; /*让s重新存放另一个单词*/
}
}
}
main()
{FILE *fp;
char line[80]="this is a book,that is an apple",word[6][10]={"this","that","is","a","an","book"};
/*按要求初始化,用二维字符数组的一行存放一个单词便于后面比较处理*/
int c[6]={0},m;
count(line,word,6,c);fp=fopen("A:\\myf2.out","w");
if(fp= =NULL){printf("Can't open file");exit(1);}
for(m=0;m<6;m++)fprintf(fp,"%s:%d",word[m],c[m]);
fprintf(fp,"\nmy exam number is:%s","0112400123"); /*注意输入实际准考证号*/
fclose(fp);
}

② 密码转化问题,第一行输入START,第二行输入密码,均为大写字母,最后一行输入END,测试数据为n组

这个很简单的啦
#include<stdio.h>
#include<string.h>
int main()
{
char s[201];
int i;
// freopen("filename","r",stdin);
while(gets(s))
{
if(strcmp(s,"START")==0)
{
gets(s);
for(i=0;s[i];i++)
{
if(s[i]>='A' && s[i]<='Z')
printf("%c",(s[i]-'A'+21)%26+'A');
else printf("%c",s[i]);
}
}
else
{
printf("error");
return 0;
}
gets(s);//用来装载 END
if(strcmp(s,"END")!=0)
{
printf("error");
return 0;
}
}
return 0;
}

核心算法:(s[i]-'A'+21)%26+'A',这个实现了字母右移5位

③ 求C语言题目

c语言经典100题:
【程序1】
题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少
1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去
掉不满足条件的排列.
2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i1;i<5;i++) /*以下为三重循环*/
for(j1;j<5;j++)
for (k1;k<5;k++)
{
if (i!k&&i!j&&j!k) /*确保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}

【程序2】
题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数
1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型.
2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else if(i<200000)
bonusbonus1+(i-100000)*0.075;
else if(i<400000)
bonusbonus2+(i-200000)*0.05;
else if(i<600000)
bonusbonus4+(i-400000)*0.03;
else if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}

【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果.请看具体分析:
2.程序源代码:
#include "math.h"
main()
{
long int i,x,y,z;
for (i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("it is the %dth day.",sum);}

【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
case 1:sum0;break;
case 2:sum31;break;
case 3:sum59;break;
case 4:sum90;break;
case 5:sum120;break;
case 6:sum151;break;
case 7:sum181;break;
case 8:sum212;break;
case 9:sum243;break;
case 10:sum273;break;
case 11:sum304;break;
case 12:sum334;break;
default:printf("data error");break;
}
sumsum+day; /*再加上某天的天数*/
if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/
leap1;
else
leap0;
if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);}
【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出.
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小.
2.程序源代码:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{tx;xy;yt;} /*交换x,y的值*/
if(x>z)
{tz;zx;xt;}/*交换x,z的值*/
if(y>z)
{ty;yz;zt;}/*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}

【程序6】
题目:用*号输出字母c的图案.
1.程序分析:可先用'*'号在纸上写出字母c,再分行输出.
2.程序源代码:
#include "stdio.h"
main()
{
printf("hello c-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}

【程序7】
题目:输出特殊图案,请在c环境中运行,看一看,very beautiful!
1.程序分析:字符共有256个.不同字符,图形不一样.
2.程序源代码:
#include "stdio.h"
main()
{
char a176,b219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}

【程序8】
题目:输出9*9口诀.
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i1;i<10;i++)
{ for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}

【程序9】
题目:要求输出国际象棋棋盘.
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
}

【程序10】
题目:打印楼梯,同时在楼梯上方打印两个笑脸.
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.
2.程序源代码:
#include "stdio.h"
main()
{
int i,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}

【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
main()
{
long f1,f2;
int i;
f1f21;
for(i1;i<20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%20) printf("\n");/*控制输出,每行四个*/
f1f1+f2; /*前两个月加起来赋值给第三个月*/
f2f1+f2; /*前两个月加起来赋值给第三个月*/
}
}

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数.
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数.
2.程序源代码:
#include "math.h"
main()
{
int m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{ ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe total is %d",h);
}

【程序13】
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数
本身.例如:153是一个"水仙花数",因为1531的三次方+5的三次方+3的三次方.
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位.
2.程序源代码:
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n100;n<1000;n++)
{
in/100;/*分解出百位*/
jn/10%10;/*分解出十位*/
kn%10;/*分解出个位*/
if(i*100+j*10+ki*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}

【程序14】
题目:将一个正整数分解质因数.例如:输入90,打印出902*3*3*5.
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可.
(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步.
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步.
2.程序源代码:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d",n);
for(i2;i90分的同学用a表示,60-89分之间的用b表示,
60分以下的用c表示.
1.程序分析:(a>b) a:b这是条件运算符的基本例子.
2.程序源代码:
main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
gradescore>90 'a':(score>60 'b':'c');
printf("%d belongs to %c",score,grade);
}

【程序15】
题目:利用条件运算符的嵌套来完成此题:学习成绩>90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
2.程序源代码:
main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
gradescore>90?'A':(score>60?'B':'C');
printf("%d belongs to %c",score,grade);
}

【程序16】
题目:输入两个正整数m和n,求其最大公约数和最小公倍数.
1.程序分析:利用辗除法.
2.程序源代码:
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1 { tempnum1;
num1num2;
num2temp;
}
anum1;bnum2;
while(b!0)/*利用辗除法,直到b为0为止*/
{
tempa%b;
ab;
btemp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}

【程序17】
题目:输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
2.程序源代码:
#include "stdio.h"
main()
{char c;
int letters0,space0,digit0,others0;
printf("please input some characters\n");
while((cgetchar())!'\n')
{
if(c>'a'&&c'a'&&c'0'&&c<'9')
digit++;
else
others++;
}
printf("all in all:char%d space%d digit%d others%d\n",letters,
space,digit,others);
}

【程序18】
题目:求sa+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制.
1.程序分析:关键是计算出每一项的值.
2.程序源代码:
main()
{
int a,n,count1;
long int sn0,tn0;
printf("please input a and n\n");
scanf("%d,%d",&a,&n);
printf("a%d,n%d\n",a,n);
while(count<n)
{
tntn+a;
snsn+tn;
aa*10;
++count;
}
printf("a+aa+...%ld\n",sn);
}

【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如61+2+3.编程
找出1000以内的所有完数.
1. 程序分析:请参照程序<--上页程序14.
2.程序源代码:
main()
{
static int k[10];
int i,j,n,s;
for(j2;j<1000;j++)
{
n-1;
sj;
for(i1;i {
if((j%i)0)
{ n++;
ss-i;
k[n]i;
}
}
if(s0)
{
printf("%d is a wanshu",j);
for(i0;i printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}

【程序20】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米 第10次反弹多高
1.程序分析:见下面注释
2.程序源代码:
main()
{
float sn100.0,hnsn/2;
int n;
for(n2;n0)
{x1(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2x1;
day--;
}
printf("the total is %d\n",x1);
}

【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
2.程序源代码:
main()
{
int day,x1,x2;
day9;
x21;
while(day>0)
{x1(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2x1;
day--;
}
printf("the total is %d\n",x1);
}

【程序22】
题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定
比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出
三队赛手的名单.
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数.
2.程序源代码:
main()
{
char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
for(i'x';i<'z';i++)
for(j'x';j<'z';j++)
{
if(i!j)
for(k'x';k<'z';k++)
{ if(i!k&&j!k)
{ if(i!'x'&&k!'x'&&k!'z')
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}

【程序23】
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
for循环,第一层控制行,第二层控制列.
2.程序源代码:
main()
{
int i,j,k;
for(i0;i<3;i++)
{
for(j0;j<2-i;j++)
printf(" ");
for(k0;k<2*i;k++)
printf("*");
printf("\n");
}
for(i0;i<2;i++)
{
for(j0;j<i;j++)
printf(" ");
for(k0;k<4-2*i;k++)
printf("*");
printf("\n");
}
}

【程序24】
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.
1.程序分析:请抓住分子与分母的变化规律.
2.程序源代码:
main()
{
int n,t,number20;
float a2,b1,s0;
for(n1;n<number;n++)
{
ss+a/b;
ta;aa+b;bt;/*这部分是程序的关键,请读者猜猜t的作用*/
}
printf("sum is %9.6f\n",s);
}

【程序25】
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘.
2.程序源代码:
main()
{
float n,s0,t1;
for(n1;n<20;n++)
{
t*n;
s+t;
}
printf("1+2!+3!...+20!%e\n",s);
}

【程序26】
题目:利用递归方法求5!.
1.程序分析:递归公式:fnfn_1*4!
2.程序源代码:
#include "stdio.h"
main()
{
int i;
int fact();
for(i0;i<5;i++)
printf("\40:%d!%d\n",i,fact(i));
}
int fact(j)
int j;
{
int sum;
if(j0)
sum1;
else
sumj*fact(j-1);
return sum;
}

【程序27】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来.
程序源代码:
#include "stdio.h"
main()
{
int i5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<1)
{
nextgetchar();
printf("\n\0:");
putchar(next);
}
else
{
nextgetchar();
palin(n-1);
putchar(next);
}
}

【程序28】
题目:有5个人坐在一起,问第五个人多少岁 他说比第4个人大2岁.问第4个人岁数,他说比第
3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后
问第一个人,他说是10岁.请问第五个人多大
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段.要想知道第五个人岁数,需知道
第四人的岁数,依次类推,推到第一人(10岁),再往回推.
2.程序源代码:
age(n)
int n;
{
int c;
if(n1) c10;
else cage(n-1)+2;
return(c);
}
main()
{ printf("%d",age(5));
}

【程序29】
题目:给一个不多于5位的正整数,要求:一,求它是几位数,二,逆序打印出各位数字.
1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)
2.程序源代码:
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
ax/10000;/*分解出万位*/
bx%10000/1000;/*分解出千位*/
cx%1000/100;/*分解出百位*/
dx%100/10;/*分解出十位*/
ex%10;/*分解出个位*/
if (a!0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!0) printf("there are 2, %ld %ld\n",e,d);
else if (e!0) printf(" there are 1,%ld\n",e);
}

【程序30】
题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.
1.程序分析:同29例
2.程序源代码:
main( )
{
long ge,shi,qian,wan,x;
scanf("%ld",&x);
wanx/10000;
qianx%10000/1000;
shix%100/10;
gex%10;
if (gewan&&shiqian)/*个位等于万位并且十位等于千位*/
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
}

【程序31】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
判断第二个字母.
1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母.
2.程序源代码:
#include
void main()
{
char letter;
printf("please input the first letter of someday\n");
while ((lettergetch())!'y')/*当所按字母为y时才结束*/
{ switch (letter)
{case 's':printf("please input second letter\n");
if((lettergetch())'a')
printf("saturday\n");
else if ((lettergetch())'u')
printf("sunday\n");
else printf("data error\n");
break;
case 'f':printf("friday\n");break;
case 'm':printf("monday\n");break;
case 't':printf("please input second letter\n");
if((lettergetch())'u')
printf("tuesday\n");
else if ((lettergetch())'h')
printf("thursday\n");
else printf("data error\n");
break;
case 'w':printf("wednesday\n");break;
default: printf("data error\n");
}
}
}

【程序32】
题目:press any key to change color, do you want to try it. please hurry up!
程序源代码:
#include
void main(void)
{
int color;
for (color 0; color < 8; color++)
{
textbackground(color);/*设置文本的背景颜色*/
cprintf("this is color %d\r\n", color);
cprintf("press any key to continue\r\n");
getch();/*输入字符看不见*/
}
}

【程序33】
题目:学习gotoxy()与clrscr()函数
程序源代码:
#include
void main(void)
{
clrscr();/*清屏函数*/
textbackground(2);
gotoxy(1, 5);/*定位函数*/
cprintf("output at row 5 column 1\n");
textbackground(3);
gotoxy(20, 10);
cprintf("output at row 10 column 20\n");
}

【程序34】
题目:练习函数调用
1. 程序分析:
2.程序源代码:
#include
void hello_world(void)
{
printf("hello, world!\n");
}
void three_hellos(void)
{
int counter;
for (counter 1; counter < 3; counter++)
hello_world();/*调用此函数*/
}
void main(void)
{
three_hellos();/*调用此函数*/
}

【程序35】
题目:文本颜色设置
程序源代码:
#include
void main(void)
{
int color;
for (color 1; color a[j]) minj;
tema[i];
a[i]a[min];
a[min]tem;
}
/*output data*/
printf("after sorted \n");
for(i0;iprintf("%5d",a[i]);
}

【程序36】
题目:求100之内的素数
程序源代码:
#include
#include "math.h"
#define N 101
main()
{
int i,j,line,a[N];
for(i2;ifor(i2;i for(ji+1;j {
if(a[i]!0&&a[j]!0)
if(a[j]%a[i]0)
a[j]0;}
printf("\n");
for(i2,line0;i{
if(a[i]!0)
{printf("%5d",a[i]);
line++;}
if(line10)
{printf("\n");
line0;}
}
}

【程序37】
题目:对10个数进行排序
1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
2.程序源代码:
#define N 10
main()
{int i,j,min,tem,a[N];
/*input data*/
printf("please input ten num:\n");
for(i0;i{
printf("a[%d]",i);
scanf("%d",&a[i]);}
printf("\n");
for(i0;iprintf("%5d",a[i]);
printf("\n");
/*sort ten num*/
for(i0;i{mini;
for(ji+1;jif(a[min]>a[j]) minj;
tema[i];
a[i]a[min];
a[min]tem;
}
/*output data*/
printf("After sorted \n");
for(i0;iprintf("%5d",a[i]);
}

【程序38】
题目:求一个3*3矩阵对角线元素之和
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出.
2.程序源代码:
main()
{
float a[3][3],sum0;
int i,j;
printf("please input rectangle element:\n");
for(i0;i<3;i++)
for(j0;j<3;j++)
scanf("%f",&a[i][j]);
for(i0;i<3;i++)
sumsum+a[i][i];
printf("ijiaoxian he is %6.2f",sum);
}

【程序39】
题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中.
1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后
此元素之后的数,依次后移一个位置.
2.程序源代码:
main()
{
int a[11]{1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("original array is:\n");
for(i0;iend)
a[10]number;
else
{for(i0;inumber)
{temp1a[i];
a[i]number;
for(ji+1;j<11;j++)
{temp2a[j];
a[j]temp1;
temp1temp2;
}
break;
}
}
}
for(i0;i<11;i++)
printf("%6d",a[i]);
}

【程序40】
题目:将一个数组逆序输出.
1.程序分析:用第一个与最后一个交换.
2.程序源代码:
#define n 5
main()
{ int a[n]{9,6,5,4,1},i,temp;
printf("\n original array:\n");
for(i0;i printf("%4d",a[i]);
for(i0;i {tempa[i];
a[i]a[n-i-1];
a[n-i-1]temp;
}
printf("\n sorted array:\n");
for(i0;i printf("%4d",a[i]);
}

【程序41】
题目:学习static定义静态变量的用法
程序源代码:
#include "stdio.h"
varfunc()
{
int var0;
static int static_var0;
printf("\40:var equal %d \n",var);
printf("\40:static var equal %d \n",static_var);
printf("\n");
var++;
static_var++;
}
void main()
{int i;
for(i0;i<3;i++)
varfunc();
}

【程序42】
题目:学习使用auto定义变量的用法
程序源代码:
#include "stdio.h"
main()
{int i,num;
num2;
for (i0;i<3;i++)
{ printf("\40: the num equal %d \n",num);
num++;
{
auto int num1;
printf("\40: the internal block num equal %d \n",num);
num++;
}
}
}

【程序43】
题目:学习使用static的另一用法.
程序源代码:
#include "stdio.h"
main()
{
int i,num;
num2;
for(i0;i<3;i++)
{
printf("\40: the num equal %d \n",num);
num++;
{
static int num1;
printf("\40:the internal block num equal %d\n",num);
num++;
}
}
}

【程序44】
题目:学习使用external的用法.
程序源代码:
#include "stdio.h"
int a,b,c;
void add()
{ int a;
a3;
ca+b;
}
void main()
{ ab4;
add();
printf("the value of c is equal to %d\n",c);
}

【程序45】
题目:学习使用register定义变量的方法.
程序源代码:
void main()
{
register int i;
int tmp0;
for(i1;i");
scanf("%d",&num);
printf("\40:the square for this number is %d \n",sq(num));
if(num>50)
againtrue;
else
againfalse;
}
}

【程序46】
题目:宏#define命令练习(1)
程序源代码:
#include "stdio.h"
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
void main()
{
int num;
int again1;
printf("\40: Program will stop if input value less than 50.\n");
while(again)
{
printf("\40:Please input number>");
scanf("%d",&num);
printf("\40:The square for this number is %d \n",SQ(num));
if(num>50)
againTRUE;
else
againFALSE;
}
}

【程序47】
题目:宏#define命令练习(2)
程序源代码:
#include "stdio.h"
#define exchange(a,b) { \ /*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/
int t;\
ta;\
ab;\
bt;\
}
void main(void)
{
int x10;
int y20;
printf("x%d; y%d\n",x,y);
exchange(x,y);
printf("x%d; y%d\n",x,y);
}

【程序48】
题目:宏#define命令练习(3)
程序源代码:
#define lag >
#define sma y) x:y
#define minimum(x,y) (x>y) y:x
void main()
{ int a10,b20;
#ifdef max
printf("\40: the larger one is %d\n",maximum(a,b));
#else
printf("\40: the lower one is %d\n",minimum(a,b)

java题目

J2EE Java2平台企业版
string是引用数据类型
如何取得年月日,小时分秒
public static void main(String[] args)
{
ActionListener time = new ActionListener() { // 监听事件,不然实现不了动态改变时间
public void actionPerformed(ActionEvent e) {
//date对象代表当前的系统时间(毫秒)
Date date = new Date();
//format对象是用来以指定的时间格式格式化时间的
SimpleDateFormat from = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //这里的格式可以自己设置
//format()方法是用来格式化时间的方法
String times = from.format(date);
System.out.println(times); }
};
Timer tim = new Timer(1000, time); //这里表示1000毫秒更新一下时间
tim.start(); //启动
}

我这个答案肯定正确啊
下面帮你解释你的答案吧
Date //是在java.util.Date;里面
SimpleDateForma //这个是java.text.SimpleDateFormat;用来输出问本格式的
DateFormat //应该是在java.util.*;里面吧..应该是的

你那个错误是编译就没通过啊
public class Test
那你那个编译写的因该是
javac Test.java 编译的应该是类啊而不是javac time.java 请问你的time什么意思呢,所以你报的异常是找不到time类啊
呵呵...你是初学java吧该答的我都答完了拉!还特地帮你每句都写

如何读写文件
StringBuffer sb = new StringBuffer();
//File file = new FileWindow().load();
File file;
file = new File("F:/jtest/from.txt");
TextReader tr = new TextReader(file);
sb.append(tr.readAll());
Out.println(sb.toString());
String [] tags = {"\"", " ", "'"};
String str;
str = sb.toString();
for(String reg: tags) {
Out.println(reg);

str = str.replaceAll(reg, "");
}
Out.println(str);
抽象类和接口的区别
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
主键是确定数据库中的表的记录的唯一标识字段,可以是表中的一个字段,也可以是表中的多个字段组成的。一旦确定为主键,则该字段不可为空也不可以重复。比如学生表中的学号就可以定义成该表的字段
外键的定义是相对于主键而言的,比如另有一张成绩表,表中也出现了学生表中的对应学号字段,则相对于学生表,学号就是成绩表的外键
String和StringBuffer的区别
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
try{}catch(){}finally{}结构,try{}内出现异常,try{}内剩下尚未执行的代码还执行吗,finally{}内的代码呢?finally{}后面的代码呢
执行 finally{}内的代码最后执行
排序算法

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

分类

在计算机科学所使用的排序算法通常被分类为:

计算的复杂度(最差、平均、和最好表现),依据串行(list)的大小(n)。一般而言,好的表现是O。(n log n),且坏的行为是Ω(n2)。对于一个排序理想的表现是O(n)。仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要Ω(n log n)。

记忆体使用量(以及其他电脑资源的使用)

稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录R和S,且在原本的串行中R出现在S之前,在排序过的串行中R也将会是在S之前。

一般的方法:插入、交换、选择、合并等等。交换排序包含冒泡排序(bubble sort)和快速排序(quicksort)。选择排序包含shaker排序和堆排序(heapsort)。

当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。

(4, 1) (3, 1) (3, 7) (5, 6)

在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序,而另外一个则没有:

(3, 1) (3, 7) (4, 1) (5, 6) (维持次序)

(3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)

不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地时作为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,就会被决定使用在原先资料次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。

排列算法列表

在这个表格中,n是要被排序的纪录数量以及k是不同键值的数量。

稳定的

冒泡排序(bubble sort) — O(n2)

鸡尾酒排序 (Cocktail sort, 双向的冒泡排序) — O(n2)

插入排序 (insertion sort)— O(n2)

桶排序 (bucket sort)— O(n); 需要 O(k) 额外 记忆体

计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外 记忆体

归并排序 (merge sort)— O(n log n); 需要 O(n) 额外记忆体

原地归并排序 — O(n2)

二叉树排序 (Binary tree sort) — O(n log n); 需要 O(n) 额外记忆体

鸽巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 额外记忆体

基数排序 (radix sort)— O(n·k); 需要 O(n) 额外记忆体

Gnome sort — O(n2)

Library sort — O(n log n) with high probability, 需要 (1+ε)n 额外记忆体

不稳定

选择排序 (selection sort)— O(n2)

希尔排序 (shell sort)— O(n log n) 如果使用最佳的现在版本

Comb sort — O(n log n)

堆排序 (heapsort)— O(n log n)

Smoothsort — O(n log n)

快速排序 (quicksort)— O(n log n) 期望时间, O(n2) 最坏情况; 对于大的、乱数串行一般相信是最快的已知排序

Introsort — O(n log n)

Patience sorting — O(n log n + k) 最外情况时间, 需要 额外的 O(n + k) 空间, 也需要找到最长的递增子序列(longest increasing subsequence)

不实用的排序算法

Bogo排序 — O(n × n!) 期望时间, 无穷的最坏情况。

Stupid sort — O(n3); 递回版本需要 O(n2) 额外记忆体

Bead sort — O(n) or O(√n), 但需要特别的硬体

Pancake sorting — O(n), 但需要特别的硬体

排序的算法

排序的算法有很多,对空间的要求及其时间效率也不尽相同。下面列出了一些常见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求稍高一点,但时间效率却能稳定在很高的水平。基数排序是针对关键字在一个较小范围内的排序算法。

插入排序

冒泡排序

选择排序

快速排序

堆排序

归并排序

基数排序

希尔排序

插入排序

插入排序是这样实现的:

首先新建一个空列表,用于保存已排序的有序数列(我们称之为"有序列表")。

从原数列中取出一个数,将其插入"有序列表"中,使其仍旧保持有序状态。

重复2号步骤,直至原数列为空。

插入排序的平均时间复杂度为平方级的,效率不高,但是容易实现。它借助了"逐步扩大成果"的思想,使有序列表的长度逐渐增加,直至其长度等于原列表的长度。

冒泡排序

冒泡排序是这样实现的:

首先将所有待排序的数字放入工作列表中。

从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。

重复2号步骤,直至再也不能交换。

冒泡排序的平均时间复杂度与插入排序相同,也是平方级的,但也是非常容易实现的算法。

选择排序

选择排序是这样实现的:

设数组内存放了n个待排数字,数组下标从1开始,到n结束。

i=1

从数组的第i个元素开始到第n个元素,寻找最小的元素。

将上一步找到的最小元素和第i位元素交换。

如果i=n-1算法结束,否则回到第3步

选择排序的平均时间复杂度也是O(n²)的。

快速排序

现在开始,我们要接触高效排序算法了。实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而"保证列表的前半部分都小于后半部分"就使得前半部分的任何一个数从此以后都不再跟后半部分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。

堆排序

堆排序与前面的算法都不同,它是这样的:

首先新建一个空列表,作用与插入排序中的"有序列表"相同。

找到数列中最大的数字,将其加在"有序列表"的末尾,并将其从原数列中删除。

重复2号步骤,直至原数列为空。

堆排序的平均时间复杂度为nlogn,效率高(因为有堆这种数据结构以及它奇妙的特征,使得"找到数列中最大的数字"这样的操作只需要O(1)的时间复杂度,维护需要logn的时间复杂度),但是实现相对复杂(可以说是这里7种算法中比较难实现的)。

看起来似乎堆排序与插入排序有些相像,但他们其实是本质不同的算法。至少,他们的时间复杂度差了一个数量级,一个是平方级的,一个是对数级的。

平均时间复杂度

插入排序 O(n2)

冒泡排序 O(n2)

选择排序 O(n2)

快速排序 O(n log n)

堆排序 O(n log n)

归并排序 O(n log n)

基数排序 O(n)

希尔排序 O(n1.25)
一、术语session
在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。

session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差别只能靠上下文来推断②。

然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者“一个POP3 session”③。

而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session⑥。

鉴于这种混乱已不可改变,本文中session一词的运用也会根据上下文有不同的含义,请大家注意分辨。
在本文中,使用中文“浏览器会话期间”来表达含义①,使用“session机制”来表达含义④,使用“session”表达含义⑤,使用具体的“HttpSession”来表达含义⑥

二、HTTP协议与状态保持
HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。

然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。

让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

三、理解cookie机制
cookie机制的基本原理就如上面的例子一样简单,但是还有几个问题需要解决:“会员卡”如何分发;“会员卡”的内容;以及客户如何使用“会员卡”。

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。

而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示,如果某家分店还发行了自己的会员卡,那么进这家店的时候除了要出示麦当劳的会员卡,还要出示这家店的会员卡。

cookie的内容主要包括:名字,值,过期时间,路径和域。
其中域可以指定某一个域比如.google.com,相当于总店招牌,比如宝洁公司,也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com,可以用飘柔来做比。
路径就是跟在域名后面的URL路径,比如/或者/foo等等,可以用某飘柔专柜做比。
路径与域合在一起就构成了cookie的作用范围。
如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。

下面就是一个goolge设置cookie的响应头的例子
HTTP/1.1 302 Found
Location: http://www.google.com/intl/zh-CN/
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html

这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分

浏览器在再次访问goolge的资源时自动向外发送cookie

使用Firefox可以很容易的观察现有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。

IE也可以设置在接受cookie前询问

这是一个询问接受cookie的对话框。

四、理解session机制
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID=!-145788764,它的名字就是JSESSIONID。

由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid=!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单
<form name="testform" action="/xxx">
<input type="text">
</form>
在被传递给客户端之前将被改写成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="!-145788764">
<input type="text">
</form>
这种技术现在已较少应用,笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。
实际上这种技术可以简单的用对action应用URL重写来代替。

在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。

五、理解javax.servlet.http.HttpSession
HttpSession是Java平台对session机制的实现规范,因为它仅仅是个接口,具体到每个web应用服务器的提供商,除了对规范支持之外,仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作为例子来演示。

首先,Weblogic Server提供了一系列的参数来控制它的HttpSession的实现,包括使用cookie的开关选项,使用URL重写的开关选项,session持久化的设置,session失效时间的设置,以及针对cookie的各种设置,比如设置cookie的名字、路径、域,cookie的生存时间等。

一般情况下,session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空,如果设置了session的持久化特性,服务器就会把session保存到硬盘上,当服务器进程重新启动或这些信息将能够被再次使用,Weblogic Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制。

复制严格说来不算持久化保存,因为session实际上还是保存在内存里,不过同样的信息被复制到各个cluster内的服务器进程中,这样即使某个服务器进程停止工作也仍然可以从其他进程中取得session。

cookie生存时间的设置则会影响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解。

cookie的路径对于web应用程序来说是一个非常重要的选项,Weblogic Server对这个选项的默认处理方式使得它与其他服务器有明显的区别。后面我们会专题讨论。

关于session的设置参考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869

~~我要200分~~

⑤ EXCEL2007如何查找第1行是否包含A,如果有就取第2行的值

公式如下,在第一行中查找包含字母A的单元格,并返回其对应的第二行的值。

=HLOOKUP("*A*",1:2,2,)

⑥ C语言中第一第二行是什么意思还有那个i++是什么意思,解释一下

如果这些读不懂你还是要从基础看起。第一第二行为宏指令,表示包含文件,i++表示自增,i=i+1,但是是先使用再自增,而在循环升级语句中其实不需要注意这个

⑦ JAVA 算法 有一点想不通; 谢谢

用string类的split函数,可以将第二行这个字符串根据空格分解成一个个的小字符串
string[]a=s.split("");
然后,取出第三行的字符串,转化成int整数,比如是num
取出第一行的字符串,转化为int整数,比如是n
之后要做从0到n-1的循环
循环中,将a[i]转化为int整数,判断a[i]是否等于num;
如果等于,终止循环,输出行号

⑧ java读取excel:第一列的第一行包含了第二列的多行,第二列的每一行都会包含第三列的多行

可以用阿帕奇的poi
也可以用韩国开发的jxl

⑨ c语言 题目

c语言经典100题: 【程序1】 题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: main() { int i,j,k; printf("\n"); for(i1;i<5;i++) /*以下为三重循环*/ for(j1;j<5;j++) for (k1;k<5;k++) { if (i!k&&i!j&&j!k) /*确保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } 【程序2】 题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数 1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1100000*0.1;bonus2bonus1+100000*0.75; bonus4bonus2+200000*0.5; bonus6bonus4+200000*0.3; bonus10bonus6+400000*0.15; if(i<100000) bonusi*0.1; else if(i<200000) bonusbonus1+(i-100000)*0.075; else if(i<400000) bonusbonus2+(i-200000)*0.05; else if(i<600000) bonusbonus4+(i-400000)*0.03; else if(i<1000000) bonusbonus6+(i-600000)*0.015; else bonusbonus10+(i-1000000)*0.01; printf("bonus%d",bonus); } 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果.请看具体分析: 2.程序源代码: #include "math.h" main() { long int i,x,y,z; for (i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf("it is the %dth day.",sum);} 【程序4】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。 2.程序源代码: main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum0;break; case 2:sum31;break; case 3:sum59;break; case 4:sum90;break; case 5:sum120;break; case 6:sum151;break; case 7:sum181;break; case 8:sum212;break; case 9:sum243;break; case 10:sum273;break; case 11:sum304;break; case 12:sum334;break; default:printf("data error");break; } sumsum+day; /*再加上某天的天数*/ if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/ leap1; else leap0; if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf("It is the %dth day.",sum);} 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出. 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, 然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小. 2.程序源代码: main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) {tx;xy;yt;} /*交换x,y的值*/ if(x>z) {tz;zx;xt;}/*交换x,z的值*/ if(y>z) {ty;yz;zt;}/*交换z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); } 【程序6】 题目:用*号输出字母c的图案. 1.程序分析:可先用'*'号在纸上写出字母c,再分行输出. 2.程序源代码: #include "stdio.h" main() { printf("hello c-world!\n"); printf(" ****\n"); printf(" *\n"); printf(" * \n"); printf(" ****\n"); } 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,very beautiful! 1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码: #include "stdio.h" main() { char a176,b219; printf("%c%c%c%c%c\n",b,a,a,a,b); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",a,a,b,a,a); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",b,a,a,a,b);} 【程序8】 题目:输出9*9口诀. 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 2.程序源代码: #include "stdio.h" main() { int i,j,result; printf("\n"); for (i1;i<10;i++) { for(j1;j<10;j++) { resulti*j; printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐,占3位*/ } printf("\n");/*每一行后换行*/ } } 【程序9】 题目:要求输出国际象棋棋盘. 1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格. 2.程序源代码: #include "stdio.h" main() { int i,j; for(i0;i<8;i++) { for(j0;j<8;j++) if((i+j)%20) printf("%c%c",219,219); else printf(" "); printf("\n"); } } 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸. 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数. 2.程序源代码: #include "stdio.h" main() { int i,j; printf("\1\1\n");/*输出两个笑脸*/ for(i1;i<11;i++) { for(j1;j<i;j++) printf("%c%c",219,219); printf("\n"); } } 【程序11】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() { long f1,f2; int i; f1f21; for(i1;i<20;i++) { printf("%12ld %12ld",f1,f2); if(i%20) printf("\n");/*控制输出,每行四个*/ f1f1+f2; /*前两个月加起来赋值给第三个月*/ f2f1+f2; /*前两个月加起来赋值给第三个月*/ } } 【程序12】 题目:判断101-200之间有多少个素数,并输出所有素数. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. 2.程序源代码: #include "math.h" main() { int m,i,k,h0,leap1; printf("\n"); for(m101;m<200;m++) { ksqrt(m+1); for(i2;i<k;i++) if(m%i0) {leap0;break;} if(leap) {printf("%-4d",m);h++; if(h%100) printf("\n"); } leap1; } printf("\nthe total is %d",h); } 【程序13】 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身.例如:153是一个"水仙花数",因为1531的三次方+5的三次方+3的三次方. 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位. 2.程序源代码: main() { int i,j,k,n; printf("'water flower'number is:"); for(n100;n<1000;n++) { in/100;/*分解出百位*/ jn/10%10;/*分解出十位*/ kn%10;/*分解出个位*/ if(i*100+j*10+ki*i*i+j*j*j+k*k*k) { printf("%-5d",n); } } printf("\n"); } 【程序14】 题目:将一个正整数分解质因数.例如:输入90,打印出902*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步. 2.程序源代码: /* zheng int is divided yinshu*/ main() { int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d",n); for(i2;i90分的同学用a表示,60-89分之间的用b表示, 60分以下的用c表示. 1.程序分析:(a>b) a:b这是条件运算符的基本例子. 2.程序源代码: main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); gradescore>90 'a':(score>60 'b':'c'); printf("%d belongs to %c",score,grade); } 【程序15】 题目:利用条件运算符的嵌套来完成此题:学习成绩>90分的同学用A表示,60-89分之间的用B表示, 60分以下的用C表示。 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 2.程序源代码: main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); gradescore>90?'A':(score>60?'B':'C'); printf("%d belongs to %c",score,grade); } 【程序16】 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 1.程序分析:利用辗除法. 2.程序源代码: main() { int a,b,num1,num2,temp; printf("please input two numbers:\n"); scanf("%d,%d",&num1,&num2); if(num1 { tempnum1; num1num2; num2temp; } anum1;bnum2; while(b!0)/*利用辗除法,直到b为0为止*/ { tempa%b; ab; btemp; } printf("gongyueshu:%d\n",a); printf("gongbeishu:%d\n",num1*num2/a); } 【程序17】 题目:输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数. 1.程序分析:利用while语句,条件为输入的字符不为'\n'. 2.程序源代码: #include "stdio.h" main() {char c; int letters0,space0,digit0,others0; printf("please input some characters\n"); while((cgetchar())!'\n') { if(c>'a'&&c'a'&&c'0'&&c<'9') digit++; else others++; } printf("all in all:char%d space%d digit%d others%d\n",letters, space,digit,others); } 【程序18】 题目:求sa+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时 共有5个数相加),几个数相加有键盘控制. 1.程序分析:关键是计算出每一项的值. 2.程序源代码: main() { int a,n,count1; long int sn0,tn0; printf("please input a and n\n"); scanf("%d,%d",&a,&n); printf("a%d,n%d\n",a,n); while(count<n) { tntn+a; snsn+tn; aa*10; ++count; } printf("a+aa+...%ld\n",sn); } 【程序19】 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如61+2+3.编程 找出1000以内的所有完数. 1. 程序分析:请参照程序<--上页程序14. 2.程序源代码: main() { static int k[10]; int i,j,n,s; for(j2;j<1000;j++) { n-1; sj; for(i1;i { if((j%i)0) { n++; ss-i; k[n]i; } } if(s0) { printf("%d is a wanshu",j); for(i0;i printf("%d,",k[i]); printf("%d\n",k[n]); } } } 【程序20】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米 第10次反弹多高 1.程序分析:见下面注释 2.程序源代码: main() { float sn100.0,hnsn/2; int n; for(n2;n0) {x1(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/ x2x1; day--; } printf("the total is %d\n",x1); } 【程序21】 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 1.程序分析:采取逆向思维的方法,从后往前推断。 2.程序源代码: main() { int day,x1,x2; day9; x21; while(day>0) {x1(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/ x2x1; day--; } printf("the total is %d\n",x1); } 【程序22】 题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定 比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出 三队赛手的名单. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. 2.程序源代码: main() { char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/ for(i'x';i<'z';i++) for(j'x';j<'z';j++) { if(i!j) for(k'x';k<'z';k++) { if(i!k&&j!k) { if(i!'x'&&k!'x'&&k!'z') printf("order is a--%c\tb--%c\tc--%c\n",i,j,k); } } } } 【程序23】 题目:打印出如下图案(菱形) * *** ****** ******** ****** *** * 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列. 2.程序源代码: main() { int i,j,k; for(i0;i<3;i++) { for(j0;j<2-i;j++) printf(" "); for(k0;k<2*i;k++) printf("*"); printf("\n"); } for(i0;i<2;i++) { for(j0;j<i;j++) printf(" "); for(k0;k<4-2*i;k++) printf("*"); printf("\n"); } } 【程序24】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和. 1.程序分析:请抓住分子与分母的变化规律. 2.程序源代码: main() { int n,t,number20; float a2,b1,s0; for(n1;n<number;n++) { ss+a/b; ta;aa+b;bt;/*这部分是程序的关键,请读者猜猜t的作用*/ } printf("sum is %9.6f\n",s); } 【程序25】 题目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘. 2.程序源代码: main() { float n,s0,t1; for(n1;n<20;n++) { t*n; s+t; } printf("1+2!+3!...+20!%e\n",s); } 【程序26】 题目:利用递归方法求5!. 1.程序分析:递归公式:fnfn_1*4! 2.程序源代码: #include "stdio.h" main() { int i; int fact(); for(i0;i<5;i++) printf("\40:%d!%d\n",i,fact(i)); } int fact(j) int j; { int sum; if(j0) sum1; else sumj*fact(j-1); return sum; } 【程序27】 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. 程序源代码: #include "stdio.h" main() { int i5; void palin(int n); printf("\40:"); palin(i); printf("\n"); } void palin(n) int n; { char next; if(n<1) { nextgetchar(); printf("\n\0:"); putchar(next); } else { nextgetchar(); palin(n-1); putchar(next); } } 【程序28】 题目:有5个人坐在一起,问第五个人多少岁 他说比第4个人大2岁.问第4个人岁数,他说比第 3个人大2岁.问第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后 问第一个人,他说是10岁.请问第五个人多大 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段.要想知道第五个人岁数,需知道 第四人的岁数,依次类推,推到第一人(10岁),再往回推. 2.程序源代码: age(n) int n; { int c; if(n1) c10; else cage(n-1)+2; return(c); } main() { printf("%d",age(5)); } 【程序29】 题目:给一个不多于5位的正整数,要求:一,求它是几位数,二,逆序打印出各位数字. 1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供) 2.程序源代码: main( ) { long a,b,c,d,e,x; scanf("%ld",&x); ax/10000;/*分解出万位*/ bx%10000/1000;/*分解出千位*/ cx%1000/100;/*分解出百位*/ dx%100/10;/*分解出十位*/ ex%10;/*分解出个位*/ if (a!0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!0) printf("there are 2, %ld %ld\n",e,d); else if (e!0) printf(" there are 1,%ld\n",e); } 【程序30】 题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 1.程序分析:同29例 2.程序源代码: main( ) { long ge,shi,qian,wan,x; scanf("%ld",&x); wanx/10000; qianx%10000/1000; shix%100/10; gex%10; if (gewan&&shiqian)/*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n"); else printf("this number is not a huiwen\n"); } 【程序31】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. 2.程序源代码: #include void main() { char letter; printf("please input the first letter of someday\n"); while ((lettergetch())!'y')/*当所按字母为y时才结束*/ { switch (letter) {case 's':printf("please input second letter\n"); if((lettergetch())'a') printf("saturday\n"); else if ((lettergetch())'u') printf("sunday\n"); else printf("data error\n"); break; case 'f':printf("friday\n");break; case 'm':printf("monday\n");break; case 't':printf("please input second letter\n"); if((lettergetch())'u') printf("tuesday\n"); else if ((lettergetch())'h') printf("thursday\n"); else printf("data error\n"); break; case 'w':printf("wednesday\n");break; default: printf("data error\n"); } } } 【程序32】 题目:press any key to change color, do you want to try it. please hurry up! 程序源代码: #include void main(void) { int color; for (color 0; color < 8; color++) { textbackground(color);/*设置文本的背景颜色*/ cprintf("this is color %d\r\n", color); cprintf("press any key to continue\r\n"); getch();/*输入字符看不见*/ } } 【程序33】 题目:学习gotoxy()与clrscr()函数 程序源代码: #include void main(void) { clrscr();/*清屏函数*/ textbackground(2); gotoxy(1, 5);/*定位函数*/ cprintf("output at row 5 column 1\n"); textbackground(3); gotoxy(20, 10); cprintf("output at row 10 column 20\n"); } 【程序34】 题目:练习函数调用 1. 程序分析: 2.程序源代码: #include void hello_world(void) { printf("hello, world!\n"); } void three_hellos(void) { int counter; for (counter 1; counter < 3; counter++) hello_world();/*调用此函数*/ } void main(void) { three_hellos();/*调用此函数*/ } 【程序35】 题目:文本颜色设置 程序源代码: #include void main(void) { int color; for (color 1; color a[j]) minj; tema[i]; a[i]a[min]; a[min]tem; } /*output data*/ printf("after sorted \n"); for(i0;iprintf("%5d",a[i]); } 【程序36】 题目:求100之内的素数 程序源代码: #include #include "math.h" #define N 101 main() { int i,j,line,a[N]; for(i2;ifor(i2;i for(ji+1;j { if(a[i]!0&&a[j]!0) if(a[j]%a[i]0) a[j]0;} printf("\n"); for(i2,line0;i{ if(a[i]!0) {printf("%5d",a[i]); line++;} if(line10) {printf("\n"); line0;} } } 【程序37】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。 2.程序源代码: #define N 10 main() {int i,j,min,tem,a[N]; /*input data*/ printf("please input ten num:\n"); for(i0;i{ printf("a[%d]",i); scanf("%d",&a[i]);} printf("\n"); for(i0;iprintf("%5d",a[i]); printf("\n"); /*sort ten num*/ for(i0;i{mini; for(ji+1;jif(a[min]>a[j]) minj; tema[i]; a[i]a[min]; a[min]tem; } /*output data*/ printf("After sorted \n"); for(i0;iprintf("%5d",a[i]); } 【程序38】 题目:求一个3*3矩阵对角线元素之和 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出. 2.程序源代码: main() { float a[3][3],sum0; int i,j; printf("please input rectangle element:\n"); for(i0;i<3;i++) for(j0;j<3;j++) scanf("%f",&a[i][j]); for(i0;i<3;i++) sumsum+a[i][i]; printf("ijiaoxian he is %6.2f",sum); } 【程序39】 题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后 此元素之后的数,依次后移一个位置. 2.程序源代码: main() { int a[11]{1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("original array is:\n"); for(i0;iend) a[10]number; else {for(i0;inumber) {temp1a[i]; a[i]number; for(ji+1;j<11;j++) {temp2a[j]; a[j]temp1; temp1temp2; } break; } } } for(i0;i<11;i++) printf("%6d",a[i]); } 【程序40】 题目:将一个数组逆序输出. 1.程序分析:用第一个与最后一个交换. 2.程序源代码: #define n 5 main() { int a[n]{9,6,5,4,1},i,temp; printf("\n original array:\n"); for(i0;i printf("%4d",a[i]); for(i0;i {tempa[i]; a[i]a[n-i-1]; a[n-i-1]temp; } printf("\n sorted array:\n"); for(i0;i printf("%4d",a[i]); } 【程序41】 题目:学习static定义静态变量的用法 程序源代码: #include "stdio.h" varfunc() { int var0; static int static_var0; printf("\40:var equal %d \n",var); printf("\40:static var equal %d \n",static_var); printf("\n"); var++; static_var++; } void main() {int i; for(i0;i<3;i++) varfunc(); } 【程序42】 题目:学习使用auto定义变量的用法 程序源代码: #include "stdio.h" main() {int i,num; num2; for (i0;i<3;i++) { printf("\40: the num equal %d \n",num); num++; { auto int num1; printf("\40: the internal block num equal %d \n",num); num++; } } } 【程序43】 题目:学习使用static的另一用法. 程序源代码: #include "stdio.h" main() { int i,num; num2; for(i0;i<3;i++) { printf("\40: the num equal %d \n",num); num++; { static int num1; printf("\40:the internal block num equal %d\n",num); num++; } } } 【程序44】 题目:学习使用external的用法. 程序源代码: #include "stdio.h" int a,b,c; void add() { int a; a3; ca+b; } void main() { ab4; add(); printf("the value of c is equal to %d\n",c); } 【程序45】 题目:学习使用register定义变量的方法. 程序源代码: void main() { register int i; int tmp0; for(i1;i"); scanf("%d",&num); printf("\40:the square for this number is %d \n",sq(num)); if(num>50) againtrue; else againfalse; } } 【程序46】 题目:宏#define命令练习(1) 程序源代码: #include "stdio.h" #define TRUE 1 #define FALSE 0 #define SQ(x) (x)*(x) void main() { int num; int again1; printf("\40: Program will stop if input value less than 50.\n"); while(again) { printf("\40:Please input number>"); scanf("%d",&num); printf("\40:The square for this number is %d \n",SQ(num)); if(num>50) againTRUE; else againFALSE; } } 【程序47】 题目:宏#define命令练习(2) 程序源代码: #include "stdio.h" #define exchange(a,b) { \ /*宏定义中允许包含两道衣裳命令的情形,此时必须在最右边加上"\"*/ int t;\ ta;\ ab;\ bt;\ } void main(void) { int x10; int y20; printf("x%d; y%d\n",x,y); exchange(x,y); printf("x%d; y%d\n",x,y); } 【程序48】 题目:宏#define命令练习(3) 程序源代码: #define lag > #define sma y) x:y #define minimum(x,y) (x>y) y:x void main() { int a10,b20; #ifdef max printf("\40: the larger one is %d\n",maximum(a,b)); #else printf("\40: the lower one is %d\n",minimum(a,b)

阅读全文

与算法对换字符使第一行包含第二行相关的资料

热点内容
怎么下我的世界服务器地址 浏览:477
价格便宜的云服务器 浏览:551
宝马n52电脑怎么编程 浏览:350
安卓平板android如何降级 浏览:124
苹果怎么下载整理文字软件app 浏览:130
怎么删除一个app下载任务 浏览:713
python执行bat命令 浏览:471
什么吉他调音器app最好 浏览:33
php程序员招聘试题 浏览:14
程序员升职记第九关最优解 浏览:317
三星安卓11怎么访问data文件夹 浏览:817
华三服务器怎么设置开机自启 浏览:711
钉邮登录服务器地址 浏览:644
起源编译器适配第二款应用 浏览:433
cad弄断线条命令 浏览:463
怎么恢复手机app的安装包 浏览:300
idea重启项目不编译 浏览:495
程序员那么可爱演员表陆漓妈妈 浏览:127
linuxgadget驱动 浏览:596
华三调用acl的命令 浏览:11