目录
3.输入一个字符,判断其是字母、数字、空格、字符,并输出答案。
4.输入两个数构成一个闭区间判断这两个数的区间内有多少素数并输出。
7. 输入一个数n,再输入n个数,给这n个数从小排到大并输出。(需要数组)(运用了冒泡法)
9.本题要求实现一个函数,查找数组中最大元素的下标。例如数组为{1,3,5,7,9},则该函数应该返回4。题目输入保证数组元素各不相同。
10.本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
12. 求一个3×4数组中大于等于平均值的所有数组元素的和,并统计满足条件的元素个数。本题中的平均值为小数,用到的其他所有变量均为整型。(二维数组的应用)
①在if里判断字母和空格等单个字符是否相等须把空格字符加上单引号,并且判断是否相等要用两个等号
②用for循环时括号内要是每次执行完之后需要加2,则需要把最后变成n+=2;
③ 用double或者float类型的数时,要注意(double)s=1.0/2*n,为1.0不是1,不然数不对(最后一行代码,该题题目可见函数题第7题)。以下的代码用了指针。
① control reaches end of non-void function
一、c语言固定的最简格式
以下是最基础的c语言代码,一个c语言程序中这些是必不可少的东西,其中
① //: 两个“/”代表这个符号之后这一行都被注释掉,即程序运行时该行“//”之后的语句并不运行,一般这样做的目的是为程序做注释;
②#include
:是一种预处理指令,用于将指定的文件内容插入到当前文件中。通常用于包含头文件(Header File),以便使用头文件中声明的函数、宏、数据类型等内容。
③ stdio.h:一种头文件,通俗点来说该头文件里面提供了输入和输出功能的函数和宏,而引用它我们就可以使用输入输出函数,例如printf输出函数。
#include <stdio.h> // 包含标准输入输出头文件
int main()// 主函数,程序从这里开始执行
{
return 0; // 返回 0,表示程序正常结束
}
二、基础知识
1.头文件
1.1、详解
头文件的作用简单来说就是简化代码,可以直接调用相关函数。
头文件通俗来说,是由编程语言的标准库提供或由程序员根据需求编写的文件。这些文件包含了函数、类型、宏等的声明。当我们使用#include <stdio.h>这样的预处理指令时,我们实际上是在告诉编译器包含这个标准输入输出库的头文件,从而可以在代码中使用其中定义的函数,如printf。
重要的是要理解,头文件中的这些函数只是被声明,即提供了函数的名称、返回类型以及参数类型等信息。而函数的实际定义(即函数的实现)则通常位于其他源文件中。这些源文件会被编译成库文件,如.lib(在Windows中)或.so(在Linux中)等,然后在程序的链接阶段与我们的主程序链接在一起,形成最终的可执行文件。
如果我们没有包含stdio.h头文件,但是尝试使用printf函数,编译器会因为不知道printf函数的原型而报错。这是因为编译器需要函数的原型来确定如何生成调用该函数的机器代码。如果缺少这个原型,编译器就无法正确地处理函数调用。
因此,包含正确的头文件是使用库函数和避免编译错误的关键步骤。通过包含头文件,我们可以利用标准库或自定义库中的丰富功能,而无需自己从头开始实现这些功能。
1.2、相关头文件
①使用输入输出需加上#include <stdio.h>
②使用数学符号前须加上#include <math.h>
③使用数组的相关符号需加上#include<string.h>
④使用atoi()函数(把字符串转换成整数)需要加上#include "stdlib.h"
2.变量
2.1、详解
变量可以用于存储数据、进行计算、传递数据给函数,在使用前必须先声明。声明变量时,可以指定变量的类型和名称,还可以选择对变量进行初始化,即为其赋一个初始值。
例:
int age = 25; // 声明一个int类型的变量age,并初始化为25
float height; // 声明一个float类型的变量height,但未初始化(其值是不确定的)
char name[50]; // 声明一个char类型的数组name,大小为50个字符(未初始化)
2.2、命名规则:
①名称只能包含字母、数字和下划线(_)。
②名称不能以数字开头。
③名称是区分大小写的。
④不能使用C语言的关键字(如int
、float
、if
等)作为变量名
2.3 、部分变量类型
①int
类型用于存储整数。
②float
类型用于存储单精度浮点数。通常占用4个字节(32位)的内存空间,用于实数。
③double
类型用于存储双精度浮点数。通常占用8个字节(64位)的内存空间,比float位数更多。
④char
类型用于存储单个字符。
⑤char[]类型用于存储字符数组。例char name[50]; 即声明一个char类型的数组name,大小为50个字符。
2.4、变量存储底层逻辑
因为c语言底层为二进制代码,所以变量存储会转换为二进制,而整数可以完全转换为二进制,但小数转换为二进制会有误差,不能完全转换。
3.函数
3.1、详解
函数是指将一组能完成一个功能或多个功能的语句放在一起的代码结构,通过调用函数,可以实现对部分代码的反复使用,作用类似于头文件,可以简化代码。
3.2、输入输出函数
C语言函数库中有一批标准输入输出函数,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)、gets(输入字符串)。
①用于字符的输入:ch=getchar(); 字符串的输入:gets(a);
②用于字符的输出:putchar(ch); 字符串的输出:puts(a);
③ 输入时
int类型要用%d,
double类型的数据要用%lf,
float类型的数据要用%f;
字符要用%c;
字符串要用%s;
④输出时
double类型和float类型的数据都可以用%lf输出;
⑤%-3d
d表示输出整数,3表示输出的数字占3个字符的位置。-号表示对齐方式。是左对齐,如果位数不够右边补所差位数的空格。如果是+号或者不写,表示右对齐,如果位数不够数的左边会补所差位数的空格。
例:
#include <stdio.h>
int main() {
int intVar = 42; // 整数变量
double doubleVar = 3.14159; // 双精度浮点数变量
float floatVar = 2.71f; // 单精度浮点数变量
char charVar = 'A'; // 字符变量
char strVar[] = "Hello, World!"; // 字符串变量(字符数组)
printf("整数: %d\n", intVar);// 输出整数
printf("双精度浮点数: %lf\n", doubleVar);// 输出双精度浮点数
printf("单精度浮点数: %f\n", floatVar);// 输出单精度浮点数(%f可以用于double,但%lf更好)
printf("字符: %c\n", charVar);// 输出字符
printf("字符串: %s\n", strVar);// 输出字符串
return 0;
}
输出结果:
整数: 42
双精度浮点数: 3.141590
单精度浮点数: 2.710000
字符: A
字符串: Hello, World!
3.3、基本函数
①if
语句
例:程序执行一次,最后num=9
#include <stdio.h>
int main() {
int num = 10;
//当num>0的时候执行{}中的语句,当num=0或m>0就不再进入{}中
if (num > 0)
{
printf("Number is positive.\n");
num--;//num自减1
}
return 0;
}
② while
循环
例:while
循环执行5次,最后i为5
#include <stdio.h>
int main() {
int i = 0;
//当i<5时不断执行{}中的内容,当执行5次后i变成5,不再进入{}中,程序结束
while (i < 5)
{
printf("i = %d\n", i);
i++;//i自增
}
return 0;
}
③for
循环
例:()中先是给一个初始变量,可以在括号外定义和赋值,再是结束的条件,再是运行一次后for循环对变量的增减
#include <stdio.h>
int main()
{
//for循环运行5次,最后i为5
for (int i = 0; i < 5; i++)
{
printf("i = %d\n", i);
}
return 0;
}
输出结果 ,最后i的值为5,但不会被打印出5
0
1
2
3
4
④if-else
语句
在这个例子中,if
语句检查变量 number
是否大于0。如果条件为真(即 number
的值大于0),则执行 if
语句块中的代码,打印出 "The number is positive."。如果条件为假(即 number
的值不大于0),则执行 else
语句块中的代码,打印出 "The number is not positive."。
#include <stdio.h>
int main() {
int number = 10;
if (number > 0) {
printf("The number is positive.\n");
} else {
printf("The number is not positive.\n");
}
return 0;
}
包含多个条件的例子,如果 number
大于0,则打印 "The number is positive.";如果 number
小于0,则打印 "The number is negative.";如果 number
等于0,则打印 "The number is zero."。
#include <stdio.h>
int main() {
int number = 0;
//如果要判断number是否等于0需要用==,即if (number == 0)
if (number > 0)
{
printf("The number is positive.\n");
}
else if (number < 0)
{
printf("The number is negative.\n");
}
else
{
printf("The number is zero.\n");
}
return 0;
}
⑤switch 语句
例,程序输出Tuesday
#include <stdio.h>
int main() {
int day = 2;
//因为day=2,所以执行case 2:语句,因为case 2:带break(跳出循环),所以不会执行case 3:以及default:,
//如果day=4,那么会执行 default:
switch (day) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
// ... 其他case语句 ...
default:
printf("Unknown day\n");
break;
}
return 0;
}
⑥do-while 循环
do-while 循环至少会执行一次代码块,因为它会在代码块执行后才检查条件。
#include <stdio.h>
int main() {
int i = 0;
//程序先执行一次,再判断i是否小于5
//因此该程序执行5次,最后i=5
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
return 0;
}
3.4、数学函数
①平方根函数sqrt(x):(即为根号x)如sqrt(9.0)的值为3.0。
②绝对值函数fabs(x):(即为x的绝对值)如fabs(-4.29)的值为4.29。
③幂函数pow(x, y):(即为x的y次方)如pow(1.1, 2)的值为1.21
④指数函数exp(x):(即为e的x次方)如exp(2.3)的值为9.974182。
⑤以e为底的对数函数log(x):如log(123.45)的值为4.815836。
上面的5个函数其返回类型都是double类型。
⑥atoi(x): 把字符串x转换成整数。例:
#include "stdio.h"
#include "stdlib.h"
int main()
{
int a;
char Angle[30];
Angle[0]='1';
Angle[1]='2';
Angle[2]='3';
Angle[3]='\0';
a=atoi(Angle);
printf("%d",a);
return(0)
}
4.三角函数
①正弦函数sin(x): (即为sinx) 如sin(Π/2)的值为1。
②正切函数tan(x): (即为tanx) 如tan (Π/4)的值为1。
5.电脑打出一些数学符号
5.1、(-1)的n次方:
(-1)^n,即为按住Shift同时按顶部的数字六(注意此时的输入法要为英文,不然会是六个点,如此……);
5.2、除号:/;
5.3、乘号:*
即为按住Shift同时按顶部的数字8,或者在小键盘顶部也有;
5.4、叹号:!
即为按住Shift同时按顶部的数字1,或者在小键盘顶部也有;
5.5、取余:%
即为按住Shift同时按顶部的数字5;
5.6、取地址符:&
即为按住Shift同时按顶部的数字7;
6.数组相关的函数
6.1、strcat(字符数组1,字符数组2):
strcat(s1,s2)或者strcat(s1,"ab");
把字符数组2放到字符数组1的后面,连接时把字符串末尾的’/0‘去掉,只在新的字符串末尾加一个’/0‘;
6.2、strlen(字符串):
c=strlen(s1)或者c=strlen("abcd");可得c=4(不计算最后的‘/0’)
测试字符串中实际字符的个数(不计算最后的‘/0’);
三、函数例题
1.输入一个实数,判断其小数部分有几位。
#include <stdio.h>
#include <string.h>
int main()
{
char num[100];
scanf("%s", num);
int count = 0;
char *dot = strchr(num, '.');
if (dot)
{
count = strlen(dot + 1); // 直接计算小数点后的字符数
}
printf("%d", count);
return 0;
}
思路:因为直接储存小数会有误差,所以要计算有几位小数需要避免直接对实数进行处理,但是字符串计算位数不会有误差问题,所以强制转换成字符串后直接用strlen()函数求出位数。
注:字符串存储小数的底层逻辑是通过字符编码逐位记录数字符号,包括小数点、正负号和指数符号,而非直接存储二进制数值。
方法二:会有存储问题,计算不精确
#include <stdio.h>
int main()
{
double n;
// scanf("%lf", &n);
n=4.22855525;
int k = n;
int count = 0;
while (k != n)
{
n *= 10;
k = n;
count++;
}
printf("%d", count);
return 0;
}
2.先输入一个数n,再输入n个数,判断其中有几个偶数。
#include <stdio.h>
int main()
{
int n,a=0,b;
scanf("%d",&n);
for(n;n>0;n--)
{
scanf("%d",&b);
if(b%2==0)
a++;
}
printf("%d",a);
}
3.输入一个字符,判断其是字母、数字、空格、字符,并输出答案。
#include <stdio.h>
int main()
{
char N;
scanf("%c",&N);
if(N>='A'&&N<='Z'||N>='a'&&N<='z')
printf("%cis字母",N);
if(N>=0&&N<=9)
printf("%cis数字",N);
if(N==' ')
printf("%cis空格",N);
}
4.输入两个数构成一个闭区间判断这两个数的区间内有多少素数并输出。
注意:
①0和1都不是素数要分开讨论;
②素数是除了1和本身没有能整除的数,所以判断一个数是否是素数应该从二开始取余;
③程序中运用了p的值来判断一个数是否是素数,所以要在开始判断这个数是否是素数(即for(n=2;n<=a;n++){p=0;)之前把p给置零;
④为了节约运行时间,判断一个数是否是素数时只需要对从m=2到这个m<=n/m的取余即可(m是从2开始的除数,n是所要判断是否是素数的数),即代码1(运行速度最快的);亦可以是算术平方根(即根号n)见代码2;亦可以为一半(即n/2)见代码3;
#include <stdio.h>
int main()
{
int a,n,m,p=0;
scanf("%d",&a);
if(a==0||a==1)
printf("%dis not 素数",a);
for(n=2;n<=a;n++)
{
p=0;
for(m=2;m<=n/m;m++)
{
if(n%m==0)
{
p=1;
break;
}
}
if(p==0)
printf("%dis素数",n);
}
}
#include <stdio.h>
#include <math.h>
int main()
{
int a,n,m,p=0,k;
scanf("%d",&a);
if(a==0||a==1)
printf("%dis not 素数",a);
for(n=2;n<=a;n++)
{
p=0;
k=sqrt(n);
for(m=2;m<=k;m++)
{
if(n%m==0)
{
p=1;
break;
}
}
if(p==0)
printf("%dis素数",n);
}
}
#include <stdio.h>
int main()
{
int a,n,m,p=0;
scanf("%d",&a);
if(a==0||a==1)
printf("%dis not 素数",a);
for(n=2;n<=a;n++)
{
p=0;
for(m=2;m<=n/2;m++)
{
if(n%m==0)
{
p=1;
break;
}
}
if(p==0)
printf("%dis素数",n);
}
}
5. 输入两个数求这两个数的最大公约数。
注意:
①最大公约数:也称最大公因数,这两个数的最大的能够共同整除的数;比如12和30的公约数有:1、2、3、6,其中6就是12和30的最大公约数。
②最小公倍数:比如求45和30的最小公倍数。45=3*3*5;30=2*3*5;最小公倍数等于2*3*3*5=90
③数学中除和除以的区别: 3除6,写作6/3=2;3除以6,写作3/6=0.5;
本题运用辗转相除法,先把数的大小比较出来,n是较大的数,m是较小的数,b为余数,用较小的除数除以第一余数,再用第一余数除以第二余数,最后输出最后一个不是零的余数(即最后一个n,m最后会和b一样都为零);
#include <stdio.h>
int main()
{
int A,B,b,n,m;
scanf("%d%d",&A,&B);
if(A>B)
{
n=A;
m=B;
}
else
{
n=B;
m=A;
}
while(1)
{
b=n%m;
n=m;
m=b;
if(b==0)
break;
}
printf("%d",n);
}
6.输入一个数n,再输入n个数,找出这些数中最大的一个数。
#include <stdio.h>
int main()
{
int n,m,a,b,c;
scanf("%d",&n);
scanf("%d",&a);
for(m=2;m<=n;m++)
{
scanf("%d",&b);
if(a<=b)
{
c=a;
a=b;
b=c;
}
}
printf("%d",a);
}
7. 输入一个数n,再输入n个数,给这n个数从小排到大并输出。(需要数组)(运用了冒泡法)
冒泡排序方法: 依次比较相邻的两个数,将小数放前面, 大数放后面。n个数排序需要进行n-1轮比较, 从第1轮到 第n-1轮, 各轮的比较次数依次为:n-1次、n-2次 … 1次
#include <stdio.h>
int main( )
{
int a[6] , i , j , t;
for ( i=0 ; i<6 ; i++)
scanf("%d", &a[i] );//输入6个数
for ( i=0 ; i<6-1 ; i++)//此处两个循环便是冒泡排序法的精髓,第一个循环为全部的数组进行是为了确定所有数的排序
for ( j=0 ; j<6-1-i ; j++) //第二个循环每次要减少一个循环次数,因为每进行一个大循环,就确定了一个最大或者最小项。
if ( a[j]>a[j+1] )
{
t=a[j] ;
a[j]=a[j+1] ;
a[j+1]=t ;
}
for ( i=0 ; i<6 ; i++)
printf("%3d", a[i] );
return 0;
}
#include <stdio.h>
int main()
{
int n,k,i,index,temp;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);//输入
for(k=0;k<n-1;k++)
{
index=0;
for(i=0;i<n-k;i++)//该循环是为了找出该数组中最大的数,把其下标存到index中;
{
if(a[i]>=a[index])
index=i;
}//以下三行是为了把最大的那一项和该数组每次的最后一项交换,即排序
temp=a[n-k-1];//注意是n-k-1,为了排序,因为每次都减小一个往前进一项
a[n-k-1]=a[index];
a[index]=temp;
}
for(i=0;i<n;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf(" %d",a[i]);
}
return 0;
}
8. 运用指针编写函数计算以下函数
该代码用了比较基础和麻烦的方式计算(-1)^n(即-1的n次方)
#include <stdio.h>
void fun(float *s, int n);
int main()
{
int n;
float s=0;
scanf("%d",&n);
fun(&s,n);
printf("%f",s);
return 0;
}
/* 请在这里填写答案 */
void fun(float *s,int n)
{
int t;
for(t=0;t<=n;t++)
{
if(t%2==0)
*s+=1.0/(2*t+1);
else
*s-=1.0/(2*t+1);
}
}
以下代码运用了一个函数来实现(-1)^n(即-1的n次方),比较简单清楚。
#include <stdio.h>
void fun(float *s, int n);
int main()
{
int n;
float s=0;
scanf("%d",&n);
fun(&s,n);
printf("%f",s);
return 0;
}
/* 请在这里填写答案 */
void fun(float *s, int n)
{
float flag = -1.0;
int i;
for( i=0; i<=n; i++)
{
flag = -flag;
*s += flag/(2*i+1);
}
}
9.本题要求实现一个函数,查找数组中最大元素的下标。例如数组为{1,3,5,7,9},则该函数应该返回4。题目输入保证数组元素各不相同。
采用定义函数的方法:(其中 array
和 size
是用户传入的参数。 array
是数组首地址; size
是数组元素的个数。函数须返回数组中最大元素的下标(从0开始)。)
注意:此处k需要给一个初值0,因为如果if不成立(即第一个最大的话)那么k是没有值的。
注意此处的自定义函数所定义的自变量所采用的指针的方法,
char *p="China";
把num[]这个数组转换成自定义函数中的*array,这样array[i]就相当于num[i];
而在主函数里输入时只需要输入数组名即可(可见代码第10行);
/* 此测试程序仅为示例,实际的测试程序可能不同 */
#include <stdio.h>
#define MAXSIZE 100
int indexOfMax(int *array, int size);
int main(){
int num[MAXSIZE];
int total;
scanf("%d",&total);
for(int i=0; i<total; i++) scanf("%d",&num[i]);
printf("%d\n",num[indexOfMax(num,total)]);
return 0;
}
/* 你所编写的函数代码将被嵌在这里 */
int indexOfMax(int *array, int size)
{
int i,j,k=0;//此处k需要给一个初值0,因为如果if不成立(即第一个最大的话)那么k是没有值的。
j=array[0];
for(i=1;i<size;i++)
{
if(array[i]>=j)
{
j=array[i];
k=i;
}
}
return k;
}
10.本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:输入给出一行字符。
输出格式:在一行中输出单词个数。
输入样例:Let's go to room 209.
输出样例:5
判断单词的方法:
#include<stdio.h>
#include<string.h>
int main()
{
char s[10000];
gets(s);
int len = strlen(s);
int gs = 0;
for (int i = 0; i < len; i++)//len可以控制检测的数量则i=len-1即s[len]时刚好是'\0',
{
if((s[i] != ' ' && s[i + 1] == ' ') || (s[i] != ' ' && s[i + 1] == 0))
/*注意此处判断一个单词的方法,前面是判断除了最后一个单词以外的其他单词的个数,而或者后面判断最后一个单词,注意gets()输入的字符串只有结尾有一个'\0',其他单词后面只有空格*/
gs++;
}
printf("%d\n",gs);
return 0;
}
11.连接两个字符串,不允许使用strcat函数。
输入格式:在两行分别输入两个长度小于20的字符串。
输出格式:在一行中直接输出连接后的字符串。
输入样例:
abc
123
输出样例:abc123
错误的:该代码的错误是因为 如果输入样例,则e等于4,而应该是e等于3,因为数组a的最后一项/0是a[3],我们应该把它用b[0]取代,注意最后输出字符串,应在结尾加上/0。字符串是以/0结尾。
#include<stdio.h>
#include<string.h>
int main()
{
char a[40],b[20];
int c,d,e;
gets(a);
gets(b);
c=strlen(a);
d=strlen(b);
for(e=c+1;e<d+c+1;e++)
a[e]=b[e-c-1];
a[d+c+1]='\0';
puts(a);}
正确的:
第一种:
#include<stdio.h>
#include<string.h>
int main()
{
char a[40],b[20];
int c,d,e,f;
gets(a);
gets(b);
c=strlen(a);
d=strlen(b);
for(e=c;e<d+c;e++)
a[e]=b[e-c];
a[d+c]='\0';
puts(a);
f=strlen(a);
printf("%d,%d",c,f);
}
第二种:
#include<stdio.h>
int main()
{
int i=0,j=0;
char str1[40];
char str2[20];
gets(str1);
gets(str2);
while(str1[i]!=0)//检测str1中字符的个数
{
i++;
}
while(str2[j]!=0)//当str2[j]不是结尾时把str2中的元素放到str1后面,
{
str1[i]=str2[j];
i++;
j++;
}
printf("%s",str1);
return 0;
}
12. 求一个3×4数组中大于等于平均值的所有数组元素的和,并统计满足条件的元素个数。本题中的平均值为小数,用到的其他所有变量均为整型。(二维数组的应用)
输入格式:输入3行4列的矩阵,每行第一个数前没有空格,每行的每个数之间各有一个空格。
输出格式:在一行中按照“s=和,n=个数”的顺序输出,结果均原样输出,没有列宽控制。
输入样例:
1 4 7 8
2 1 4 2
1 2 3 4
输出样例:s=27,n=5
#include <stdio.h>
#include <string.h>
int main()
{
int a,d;
int s[3][4];
for(a=0;a<3;a++)
for(d=0;d<4;d++)
scanf("%d",&s[a][d]);
double sum=0,c;//sum要为double不然运算会出错
int i,j,n=0,b=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
sum+=s[i][j];
c=sum/12.0;//个数要为12.0,不然运算会出错
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
if(s[i][j]>=c)
{
b+=s[i][j];
n++;
}
}
printf("s=%d,n=%d",b,n);
}
四、不熟悉的代码
1.数组
①.一维数组
输入:
//方法一:(针对于输入一串数字)
int a[10],i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
//方法二:(针对于输入字符串,注意字符串以'\0'结尾)
char a[10];
gets(a);
//方法三:(针对于输入字符串,注意字符串以'\0'结尾)
char a[10];
scanf("%s",a);//注意此处的a不用加&(%s为输入字符串,%c为输入字符)
②.二维数组
输入:
int a[500][500];//定义一个较大的二维数组进行数值储存;
for(int t=0; t<j; t++) //循环输入列
{
for(int i=0; i<k; i++) //循环输出行
{
scanf("%d",&a[t][i]);
}
}
2.不熟的知识点(编译后会报错)
①在if里判断字母和空格等单个字符是否相等须把空格字符加上单引号,并且判断是否相等要用两个等号
if(N>='A'&&N<='Z'||N>='a'&&N<='z')
printf("%cis字母",N);
if(N>=0&&N<=9)
printf("%cis数字",N);
if(N==' ')
printf("%cis空格",N);
if(n==1)
{
}
②用for循环时括号内为分号;
for(n=1;n<=a;n++)
{
}
3.不熟的知识点(编译后不会报错,但是结果会错)
①ASCII码
A:65 a:97
Z:90 z:122
②用for循环时括号内要是每次执行完之后需要加2,则需要把最后变成n+=2;
for(n=2;n<=a;n+=2)
{
}
③ 用double或者float类型的数时,要注意(double)s=1.0/2*n,为1.0不是1,不然数不对(最后一行代码,该题题目可见函数题第7题)。以下的代码用了指针。
#include <stdio.h>
void fun(float *s, int n);
int main()
{
int n;
float s=0;
scanf("%d",&n);
fun(&s,n);
printf("%f",s);
return 0;
}
/* 请在这里填写答案 */
void fun(float *s,int n)
{
int t;
for(t=0;t<=n;t++)
{
if(t%2==0)
*s+=1.0/(2*t+1);
else
*s-=1.0/(2*t+1);
}
}
④字符串是以'/0'为标志的结尾。
4.编译后出现相关警告的原因
① control reaches end of non-void function
(控制到达非void函数的结尾。就是说你的一些本应带有返回值的函数到达结尾后可能并没有返回任何值。即需要有返回值的函数在运行时没有返回值,导致报错。此时需要检查代码的返回值是否编写错误,是否缺少返回值。)
分支函数程序中设有返回值,但是没有考虑到所有情况,只有部分情况才有返回值。
本次错误是因为n为double类型的数据,double中有一些情况没有返回值,比如负数,小于2的小数,编译后便会会出现图片中的警告。
以下代码便是会报警告的
#include<stdio.h>
double sn(double n);
int main()
{
double n;
scanf("%lf",&n);
printf("%.0lf",sn(n));
}
double sn(double n)
{
double a,b=1,c=1;
int i;
if(n==1||n==2)
return 1;
if(n>2)
{
for(i=3;i<=n;i++)
{
a=b+c;
b=c;
c=a;
}
return a;
}
}
以下代码为不报警告的
#include<stdio.h>
double sn(double n);
int main()
{
double n;
scanf("%lf",&n);
printf("%.0lf",sn(n));
}
double sn(double n)
{
double a,b=1,c=1;
int i;
if(n==1||n==2)
return 1;
else
{
for(i=3;i<=n;i++)
{
a=b+c;
b=c;
c=a;
}
return a;
}
}
②