目录
5.写一个程序,求解满足条件 1+2+3+……+n>=500的最小的 n 值及总和值。
1.strcpy解析
#include <stdio.h>
#include <stdlib.h>
void copy_array(char a[],char b[]){//数组复制
int i=0;
for(i;i<strlen(a);i++){
b[i]=a[i];
}
b[i]='\0';
}
void copy_array_point1(char a[],char b[]){//指针复制模式1:
char *p,*q;
p=a;q=b;
while(*p!='\0'){
*q++=*p++;//*q=*p; *q++;*p++;原理解释:见verify();
}
}
void copy_array_point2(char a[],char b[]){//指针复制模式1:
char *p,*q;
p=a;q=b;
while(*p!='\0'){
//*q++;*p++;不能放在前面,字符串是连续的区间,不可【0】为null,从第二个复值,机器报错
*q=*p; //原理解释:见verify();
*q++;*p++;
}
//最终还是需要将'\0'单独复制
*q='\0';
}
//verify
void verify(void){
int a[5]={2,3,4};
int b[5]={5,6,7};
int *p=(int *)malloc(sizeof(int));
*p++= *b+1;//算术运算符的优先级大于*
printf("%d %d",*--p,*b);//6,5
}
//c语言源码strcpy
char * strcpy(char * strDest,const char * strSrc)
{
if ((strDest==NULL)||(strSrc==NULL))
throw "Invalid argument(s)";
char * strDestCopy=strDest;
while ((*strDest++=*strSrc++)!='\0');
return strDestCopy;
}
int main()
{
char s2[10];
char s1[10];
scanf("%s",s2);
copy_array_point2(s2,s1);
printf("%s",s1);
return 0;
}
2.connect字符串连接
#include <stdio.h>
#include <stdlib.h>
char * connect(char a[],char b[]){
char *s,*p,*q;
int len1=0;int len2=0;
p=a;q=b;
while(*p!='\0'){
len1++;
*p++;
}
while(*q!='\0'){
len1++;
*q++;
}
s=(char *)malloc(sizeof(len1+len2));
p=s;
q=a;
while((*p++=*q++)!='\0');
p--;
q=b;
while((*p++=*q++)!='\0');
return s;
}
int main()
{
char s1[10];
char s2[10];
scanf("%s",s1);
scanf("%s",s2);
char *s;
s=connect(s1,s2);
printf("%s",s);
return 0;
}
3.整型补码
#include <stdio.h>
#include <stdlib.h>
unsigned int getccode(unsigned int a){
unsigned int z;
z=n&0100000;//相当于八进制常量;例如char字符表示的范围-128~127:10000000《00000000《0111111
if(z==0100000)
z=~a+1;
else
z=a;
return z;
}
int main()
{
short unsigned int a;
scanf("%o",&a);
printf("%o",getccode(a));
return 0;
}
4.求数组的最大值
#include <stdio.h>
#include <stdlib.h>
#define N 10 //定义数组长度
int Max(int a[]){
int max;
max=a[0];
for(int i=1;i<N;i++){
if(max<a[i])
max=a[i];
}
return max;
}
int main(void){
int a[N];
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
}
printf("%d",Max(a));
return 0;
}
5.写一个程序,求解满足条件 1+2+3+……+n>=500的最小的 n 值及总和值。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i=1;
int sum=0;
do{
sum=sum+i++;
}while(sum<500);
printf("sum:%d,n:%d",sum,i-1);
return 0;
}
6.求圆柱体面积及体积
#include <stdio.h>
#include <stdlib.h>
// 编写程序,从键盘输入一个圆柱体的底面半径 r 和高 h,计算并输出该圆柱体的体积和表面积(要求结果精确到小数点后 3 位)。
#define PAI 3.141592
float getVolume(float r,float h){
return PAI*r*r*h;
}
float getArea(float r,float h){
return PAI*2*r*h;
}
int main(void){
float r,h;
scanf("%f%f",&r,&h);
printf("体积:%.3f 面积:%.3f",getVolume(r,h),getArea(r,h));
return 0;
}
7.采用穷举法求解9位数密码,每位都不能重复
x 的可能取值范围为(因为 987654321 是满足题意 的最大 9 位数)。用一个数组 来判定是否出现重复的数字位,首先所有元素置初值 1,若数字 t 在 x2 中某位上出现,则置 如果 x2 中不重复出现的数字有 9 个,则输出 x。对应的程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void){
int p[9],remainder,num,k;
long x,i,x2;
num=0;
for(i=10000 ;i<sqrt(987654321);i++)
{
//9位数
x2=x=i*i;
//p数组全置1,表示该数没有出现
for(int a=0;a<9;a++){
p[a]=1;
}
k=0;
for(int a=0;a<9;a++){
remainder=x%10;
x=x/10;
//若第一次出现则令他为0;若第二次出现则跳出
if(p[remainder]==1){
p[remainder]=0;
k++;
}
else{
break;
}
//当比较9次第一次出现,则该数为符合的9位数密码
if(k==9){
printf("序号%2d:%d^2=:%d\t",num++,i, x2);
if(num%3==0){
printf("\n");
}
}
}
}
return 0;
}
8.字符串转整数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 50
//字符串整型转换一个数组
long transformNum(char str[]){
int i=0;
long n;
for(i; str[i]=='\0' ||str[i]==' ' || str[i]=='\n'; i++);
int sign=1;
if(str[i]=='+'||str[i]=='-')
{
sign= (str[i++]=='+') ? 1:-1;
}
for(n=0; str[i]>='0'&&str[i]<='9'; i++)
{
n=n*10+str[i]-'0';
}
return n*sign;
}
int main(void){
char s[N];
scanf("%s",s);
printf("%d",transformNum(s));
return 0;
}
9.打印杨辉三角
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
//杨辉三角
int n=7;//打印7行
int a[8][8]={0,1};
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
//输出
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
10.求100以内的素数
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int isprime(int m){
int n=(int)sqrt(m);
for(int i=2;i<=n;i++){
if(m%i==0)
return 0;
}
return 1;
}
//打印100以内的素数
int main(){
int j=0;
for(int i=1;i<=100;i++){
if(isprime(i)==1){
printf("%2d ",i);
j++;
if(j%5==0)
printf("\n");
}
}
return 0;
}
序号2链接文件读写:http://t.csdn.cn/R3JnG