两种方法我写在一起,可以独立拆开。
#include <stdio.h>
void finda1(char a[3][10]);
void finda2(char a[3][10]);
void show(char (*p)[10]);
int main()
{
char a[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原数组内容:\n");
show(a);
printf("\n1、用数组指针的方法(函数finda1):\n");
finda1(a);
printf("执行后:\n");
show(a);
printf("\n---------------------\n");
char b[3][10]={{"gehajl"},{"788a987a7"},{"ccabbbabbb"}};
printf("原数组内容:\n");
show(a);
printf("\n2、用指针数组的方法(函数finda2):\n");
finda2(b);
printf("执行后:\n");
show(b);
return 0;
}
void finda1(char a[3][10])
{
int i,j;
char (*p)[10]=a;
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("发现:第%d行第%d个元素是‘a’,已替换\n",i+1,j+1),p[i][j]='1';
}
void finda2(char a[3][10])
{
int i,j;
char *p[3]={&a[0][0],&a[1][0],&a[2][0]};
for(i=0;i<3;i++)
for(j=0;j<10;j++)
if(p[i][j]=='a')
printf("发现:第%d行第%d个元素是‘a’,已替换\n",i+1,j+1),p[i][j]='1';
}
void show(char (*p)[10])
{
int i,j;
for(i=0;i<3;i++,printf("\n"))
for(j=0;j<10;j++)
printf("%c ",p[i][j]);
}
代码:
#include
int main()
{
printf("Hello World.\n");
return 0;
}
扩展资料:
代码解析:
1.其中第一行的#include ,这行代码是编译预处理指令,用来提供输入输出函数的声明和宏的定义,全局量的定义这些信息。stdio.h是系统提供的一个文件名,stdio是为standard input & output的缩写,意为标准输入输出,文件后缀.h的意思是头文件(header file),因为这些文件都是放在程序各文件模块的开头的。总的来说,输入输出函数的相关信息已事先放在stdio.h文件中,然后,要用#include指令把这些信息调入供使用。
2.void main(){},main是主函数的函数名,表示这是一个主函数,每一个C源程序都必须有且只能有一个主函数。
3.函数调用语句,即调用printf("Hello World \n");语句 ,printf函数的功能是把要输出的内容送到显示器去显示,即打印输出Hello World到windows 控制台下,其中\n为转义字符,具有转行的功能。
4.printf函数是一个由系统定义的标准函数,可在程序中直接调用。
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:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
defaultrintf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum); }
#include<stdio.h>
#include<stdlib.h> //使用 system("pause"); 时需要。
//MS 否决了 scanf 等函数,加上下句,任然可用。其他系统删除。
#pragma warning(disable:4996)
// VS 标准主函数声明,其他系统请根据系统更改。
int _tmain(int argc, _TCHAR* argv[])
{
char ch[32];
int i, k, t;
printf("请输入手机号:");
while (1)
{
scanf("%s", ch);
i = 0; k = 0;
while (ch[i] != 0)
{
if (ch[i] < '0' || ch[i] > '9')
{
printf("手机号码不能含有非数字字符,请重新输入:");
k = 1;
break;
}
i++;
}
if (k)
continue;
if (i < 11)
{
printf("手机号码小于 11 位,请重新输入:");
continue;
}
k = 1;
t = (ch[0] - '0') * 100 + (ch[1] - '0') * 10 + (ch[2] - '0');
switch (t)
{
case 134: case 135: case 136: case 137: case 138: case 139: case 147: case 150: case 151: case 152: case 157: case 158: case 159: case 182: case 187: case 188:
printf("你用的是移动手机");
break;
case 130: case 131: case 132: case 155: case 156: case 185: case 186:
printf("你用的是联通手机");
break;
case 133: case 153: case 180: case 189:
printf("你用的是电信手机");
break;
default:
printf("没有这样的号码,请重新输入:");
k = 0;
break;
}
if (k)
break;
else
continue;
}
printf("\n\n");
system("pause"); //防止窗口一闪而过
return 0;
}
-------------思路------------------------
若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni=1,则数列结束。
这个用个函数判断,比如定义个contrast(...),再在函数内用if(){}else{}做判断。
考虑到你要用void hailstones(int x[],int n0,int *maxp,int *minp)
那么就可以在void hailstones(int x[],int n0,int *maxp,int *minp)内部搞一个函数嵌套,
把contrast(...)内嵌到void hailstones(int x[],int n0,int *maxp,int *minp)中,
而x[]数组,则为了方便,你可以在contrast()的形参表中放一个int [],
即contrast(int x[],...).
又由于要键盘输入数据值n0,则可以用contrast(int a[],int n0)
于是函数建立完毕,为:contrast(int x[],int n0);【需要注意的是函数接受中要接收的是数组名】
----------------------代码如下:----------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int contrast(int a[],int n0);
void hailstones(int x[],int n0,int *maxp,int *minp);
#define Max 100
int main()
{
int n0;
int a[Max],*Maxp,*Minp;
printf("请输入n0的值:");
scanf("%d",&n0);
printf("\n--------\n结果为:\n--------\n");
hailstones(a,n0,Maxp,Minp);
return 0;
}
int contrast(int x[],int n0)//计算产生序列
{
int i;//i是因为i专门做数组的下标
x[0]=n0;
for(i=0;x[i]!=1;i++)
{
if(x[i]%2==0)
x[i+1]=x[i]/2;
if(x[i]%2==1)
x[i+1]=3*x[i]+1;
}
x[i]=1;
return (i+1);//之所以要加1(i+1),是因为n0也是一个数
}
void hailstones(int x[],int n0,int *maxp,int *minp)
{
int i; //i用来计算x[]的下标,也就是知道产生序列数量
int Maxcount=0,Mincount=0,j=0;/*用作循环,和i进行比较,直到j=i为止,把所有产生序列输出*/
maxp=&Maxcount,minp=&Mincount;
i=contrast(x,n0);//计算产生序列的数量
while(j!=i)
{
if(n0>x[j])
Mincount++;
if(n0<x[j])
Maxcount++;
j++;
}
printf("产生序列为:\n");
j=0;
for(j=0;j<=i-1;j++) /*之所以要减1(i-1),是因为虽然有i个数,但下标从0开始[0 ~ i-1]之和为i*/
printf(" x[%d]=%d ",j,x[j]);
printf("\n");
printf("Max=%lu,Min=%lu\n",*maxp,*minp);
}
值得注意的是,我这个代码有一个问题,就是在main()函数里定义指针时没有给指针赋值,于是编译器出现警告:
warning C4700: local variable 'Minp' used without having been initialized
warning C4700: local variable 'Maxp' used without having been initialized
但实际上这个问题并没有对代码本身产生任何影响,只不过作为编译器,在编译时机械的把一切没有使用的变量、一切没有赋值的指针都看成有风险的,所以会警告,【但运行以及结果照常】,所以大可不必担心这个代码有误,你完全可以忽略这个警告,因为它真的没有任何问题。